in client.go [167:224]
func runTest(test *ethrTest) {
toStop := make(chan int, 16)
startStatsTimer()
gap := test.clientParam.Gap
duration := test.clientParam.Duration
runDurationTimer(duration, toStop)
test.isActive = true
if test.testID.Protocol == TCP {
if test.testID.Type == Bandwidth {
tcpRunBandwidthTest(test, toStop)
} else if test.testID.Type == Latency {
go runTCPLatencyTest(test, gap, toStop)
} else if test.testID.Type == Cps {
go tcpRunCpsTest(test)
} else if test.testID.Type == Ping {
go clientRunPingTest(test, gap, test.clientParam.WarmupCount)
} else if test.testID.Type == TraceRoute {
VerifyPermissionForTest(test.testID)
go tcpRunTraceRoute(test, gap, toStop)
} else if test.testID.Type == MyTraceRoute {
VerifyPermissionForTest(test.testID)
go tcpRunMyTraceRoute(test, gap, toStop)
}
} else if test.testID.Protocol == UDP {
if test.testID.Type == Bandwidth ||
test.testID.Type == Pps {
runUDPBandwidthAndPpsTest(test)
}
} else if test.testID.Protocol == ICMP {
VerifyPermissionForTest(test.testID)
if test.testID.Type == Ping {
go clientRunPingTest(test, gap, test.clientParam.WarmupCount)
} else if test.testID.Type == TraceRoute {
go icmpRunTraceRoute(test, gap, toStop)
} else if test.testID.Type == MyTraceRoute {
go icmpRunMyTraceRoute(test, gap, toStop)
}
}
handleInterrupt(toStop)
reason := <-toStop
stopStatsTimer()
close(test.done)
if test.testID.Type == Ping {
time.Sleep(2 * time.Second)
}
switch reason {
case done:
ui.printMsg("Ethr done, measurement complete.")
case timeout:
ui.printMsg("Ethr done, duration: " + duration.String() + ".")
ui.printMsg("Hint: Use -d parameter to change duration of the test.")
case interrupt:
ui.printMsg("Ethr done, received interrupt signal.")
case disconnect:
ui.printMsg("Ethr done, connection terminated.")
}
return
}