X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fhs-test%2Fhttp_test.go;h=28d27bbcb1662dbf5ad45eced209e8e3d19bed14;hb=8df3de48824efe07c7f4b86d9ee87539a63ec58a;hp=665a3e4fa8629526ee8d7d789a0040081eb030b2;hpb=085757bb4930511928daa97f972cdca021e7a813;p=vpp.git 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, "", " 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")) +}