diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2023-01-27 13:14:34 +0100 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2023-02-06 22:29:28 +0000 |
commit | 8df3de48824efe07c7f4b86d9ee87539a63ec58a (patch) | |
tree | 86067506225e5a69faa2812a172ab77074bdcaf6 | |
parent | 085757bb4930511928daa97f972cdca021e7a813 (diff) |
hs-test: add nginx perf tests
Type: test
Signed-off-by: Filip Tehlar <ftehlar@cisco.com>
Change-Id: Ic609cf70c1d381afa78f393700359434c8bd0452
-rw-r--r-- | extras/hs-test/http_test.go | 71 | ||||
-rw-r--r-- | extras/hs-test/resources/nginx/nginx.conf | 4 |
2 files changed, 74 insertions, 1 deletions
diff --git a/extras/hs-test/http_test.go b/extras/hs-test/http_test.go index 665a3e4fa86..28d27bbcb16 100644 --- a/extras/hs-test/http_test.go +++ b/extras/hs-test/http_test.go @@ -1,7 +1,10 @@ package main import ( + "fmt" "os" + "os/exec" + "strings" "time" ) @@ -47,6 +50,20 @@ func (s *VethsSuite) TestHttpCli() { s.assertContains(o, "<html>", "<html> not found in the result!") } +func waitForApp(vppInst *VppInstance, appName string, timeout int) error { + for i := 0; i < timeout; i++ { + o, err := vppInst.vppctl("show app") + if err != nil { + return fmt.Errorf("Error ocurred during 'show app'") + } + if strings.Contains(o, appName) { + return nil + } + time.Sleep(1 * time.Second) + } + return fmt.Errorf("Timeout while waiting for app '%s'", appName) +} + func (s *NoTopoSuite) TestNginx() { query := "return_ok" finished := make(chan error, 1) @@ -58,9 +75,61 @@ func (s *NoTopoSuite) TestNginx() { nginxCont := s.getContainerByName("nginx") s.assertNil(nginxCont.run()) - time.Sleep(3 * time.Second) + err := waitForApp(vppInst, "-app", 5) + s.assertNil(err) defer func() { os.Remove(query) }() go startWget(finished, "10.10.10.1", "80", query, "") s.assertNil(<-finished) } + +func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error { + nRequests := 1000000 + nClients := 2000 + var args []string + var exeName string + + if ab_or_wrk == "ab" { + args = []string{"-n", fmt.Sprintf("%d", nRequests), "-c", + fmt.Sprintf("%d", nClients)} + if mode == "rps" { + args = append(args, "-k") + } else if mode != "cps" { + return fmt.Errorf("invalid mode %s; expected cps/rps", mode) + } + args = append(args, "http://10.10.10.1:80/64B.json") + exeName = "ab" + } else { + args = []string{"-c", fmt.Sprintf("%d", nClients), "-t", "2", "-d", "30", + "http://10.10.10.1:80"} + exeName = "wrk" + } + + vppCont := s.getContainerByName("vpp") + vppInst := NewVppInstance(vppCont) + vppInst.actionFuncName = "ConfigureTap" + s.assertNil(vppInst.start(), "failed to start vpp") + + nginxCont := s.getContainerByName("nginx") + s.assertNil(nginxCont.run()) + err := waitForApp(vppInst, "-app", 5) + s.assertNil(err) + + cmd := exec.Command(exeName, args...) + fmt.Println(cmd) + o, _ := cmd.CombinedOutput() + fmt.Print(string(o)) + return nil +} + +func (s *NoTopoSuite) TestNginxPerfCps() { + s.assertNil(runNginxPerf(s, "cps", "ab")) +} + +func (s *NoTopoSuite) TestNginxPerfRps() { + s.assertNil(runNginxPerf(s, "rps", "ab")) +} + +func (s *NoTopoSuite) TestNginxPerfWrk() { + s.assertNil(runNginxPerf(s, "", "wrk")) +} diff --git a/extras/hs-test/resources/nginx/nginx.conf b/extras/hs-test/resources/nginx/nginx.conf index ec83aa9fbc8..99073aab1ab 100644 --- a/extras/hs-test/resources/nginx/nginx.conf +++ b/extras/hs-test/resources/nginx/nginx.conf @@ -22,5 +22,9 @@ http { { return 200 ''; } + location /64B.json + { + return 200 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; + } } } |