func runTest()

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
}