diff options
author | Adrian Villin <avillin@cisco.com> | 2024-08-15 12:53:53 +0200 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2024-08-27 19:05:36 +0000 |
commit | d01a63abd41dfd2359e18ca559a0309cfe8c0018 (patch) | |
tree | ef20ad4da2b6645a1f82bc8cf092c59dc63d3527 /extras/hs-test/infra/utils.go | |
parent | a647a83496f81a83c02fe9317955a781b7f95d8c (diff) |
hs-test: added a redis-benchmark test
- basically a copy of LdpIperf test
- small update of LdpIperf test
- new LDP suite
Type: test
Change-Id: I3f8653288c6fc6dfd6a061315e983c000974d3ff
Signed-off-by: Adrian Villin <avillin@cisco.com>
Diffstat (limited to 'extras/hs-test/infra/utils.go')
-rw-r--r-- | extras/hs-test/infra/utils.go | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/extras/hs-test/infra/utils.go b/extras/hs-test/infra/utils.go index 9dd2dbd73c8..25d8519cb8a 100644 --- a/extras/hs-test/infra/utils.go +++ b/extras/hs-test/infra/utils.go @@ -1,6 +1,7 @@ package hst import ( + "errors" "fmt" "io" "net" @@ -183,3 +184,133 @@ func (s *HstSuite) CollectEnvoyLogs(containerName string) { s.Log(fmt.Sprint(err)) } } + +func (s *HstSuite) StartIperfServerApp(running chan error, done chan struct{}, env []string) { + cmd := exec.Command("iperf3", "-4", "-s", "-p", s.GetPortFromPpid()) + if env != nil { + cmd.Env = env + } + s.Log(cmd) + err := cmd.Start() + if err != nil { + msg := fmt.Errorf("failed to start iperf server: %v", err) + running <- msg + return + } + running <- nil + <-done + cmd.Process.Kill() +} + +func (s *HstSuite) StartIperfClientApp(ipAddress string, env []string, clnCh chan error, clnRes chan string) { + defer func() { + clnCh <- nil + }() + + nTries := 0 + + for { + cmd := exec.Command("iperf3", "-c", ipAddress, "-u", "-l", "1460", "-b", "10g", "-p", s.GetPortFromPpid()) + if env != nil { + cmd.Env = env + } + s.Log(cmd) + o, err := cmd.CombinedOutput() + if err != nil { + if nTries > 5 { + clnRes <- "" + clnCh <- fmt.Errorf("failed to start client app '%s'.\n%s", err, o) + return + } + time.Sleep(1 * time.Second) + nTries++ + continue + } else { + clnRes <- fmt.Sprintf("Client output: %s", o) + } + break + } +} + +func (s *HstSuite) StartHttpServer(running chan struct{}, done chan struct{}, addressPort, netNs string) { + cmd := newCommand([]string{"./http_server", addressPort, s.Ppid, s.ProcessIndex}, netNs) + err := cmd.Start() + s.Log(cmd) + if err != nil { + s.Log("Failed to start http server: " + fmt.Sprint(err)) + return + } + running <- struct{}{} + <-done + cmd.Process.Kill() +} + +func (s *HstSuite) StartWget(finished chan error, server_ip, port, query, netNs string) { + defer func() { + finished <- errors.New("wget error") + }() + + cmd := newCommand([]string{"wget", "--timeout=10", "--no-proxy", "--tries=5", "-O", "/dev/null", server_ip + ":" + port + "/" + query}, + netNs) + s.Log(cmd) + o, err := cmd.CombinedOutput() + if err != nil { + finished <- fmt.Errorf("wget error: '%v\n\n%s'", err, o) + return + } else if !strings.Contains(string(o), "200 OK") { + finished <- fmt.Errorf("wget error: response not 200 OK") + return + } + finished <- nil +} + +// Start a server app. 'processName' is used to check whether the app started correctly. +func (s *HstSuite) StartServerApp(c *Container, processName string, cmd string, + running chan error, done chan struct{}) { + + s.Log("starting server") + c.ExecServer(cmd) + cmd2 := exec.Command("docker", "exec", c.Name, "pidof", processName) + err := cmd2.Run() + if err != nil { + msg := fmt.Errorf("failed to start server app: %v", err) + running <- msg + <-done + return + } + running <- nil + <-done +} + +func (s *HstSuite) StartClientApp(c *Container, cmd string, + clnCh chan error, clnRes chan string) { + defer func() { + close(clnCh) + close(clnRes) + }() + + s.Log("starting client app, please wait") + + nTries := 0 + for { + // exec.Cmd can only be used once, which is why it's in the loop + cmd2 := exec.Command("/bin/sh", "-c", "docker exec "+c.getEnvVarsAsCliOption()+" "+ + c.Name+" "+cmd) + s.Log(cmd2) + o, err := cmd2.CombinedOutput() + if err != nil { + s.Log(err) + if nTries > 5 { + clnRes <- "" + clnCh <- fmt.Errorf("failed to start client app '%s'", err) + s.AssertNil(err, fmt.Sprint(err)) + break + } + time.Sleep(1 * time.Second) + nTries++ + } else { + clnRes <- fmt.Sprintf("Client output: %s", o) + break + } + } +} |