X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fhs-test%2Fhttp_test.go;h=e576e4a832d9fd365db68bec5df2f721a4bf9406;hb=d0df24dc47c4b2048de16e917c103e06a5f0c7aa;hp=912c98283b152b29aab7e1464a920c561616f556;hpb=2908f8cf07c21f385f80d83fdad826a0eea98977;p=vpp.git diff --git a/extras/hs-test/http_test.go b/extras/hs-test/http_test.go index 912c98283b1..e576e4a832d 100644 --- a/extras/hs-test/http_test.go +++ b/extras/hs-test/http_test.go @@ -3,14 +3,12 @@ package main import ( "fmt" "os" - "os/exec" "strings" - "time" ) func (s *NsSuite) TestHttpTps() { iface := s.netInterfaces[clientInterface] - client_ip := iface.Ip4AddressString() + client_ip := iface.ip4AddressString() port := "8080" finished := make(chan error, 1) @@ -33,7 +31,7 @@ func (s *VethsSuite) TestHttpCli() { serverContainer.vppInstance.vppctl("http cli server") - uri := "http://" + serverVeth.Ip4AddressString() + "/80" + uri := "http://" + serverVeth.ip4AddressString() + "/80" o := clientContainer.vppInstance.vppctl("http cli client" + " uri " + uri + " query /show/version") @@ -42,72 +40,71 @@ 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 := vppInst.vppctl("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() { +func (s *NoTopoSuite) TestNginxAsServer() { query := "return_ok" finished := make(chan error, 1) - 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) + vpp := s.getContainerByName("vpp").vppInstance + vpp.waitForApp("nginx-", 5) + + serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString() defer func() { os.Remove(query) }() - go startWget(finished, "10.10.10.1", "80", query, "") + go startWget(finished, serverAddress, "80", query, "") s.assertNil(<-finished) } +func parseString(s, pattern string) string { + temp := strings.Split(s, "\n") + for _, item := range temp { + if strings.Contains(item, pattern) { + return item + } + } + return "" +} + func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error { nRequests := 1000000 - nClients := 2000 - var args []string - var exeName string + nClients := 1000 + + serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString() + + vpp := s.getContainerByName("vpp").vppInstance + + nginxCont := s.getContainerByName("nginx") + s.assertNil(nginxCont.run()) + vpp.waitForApp("nginx-", 5) if ab_or_wrk == "ab" { - args = []string{"-n", fmt.Sprintf("%d", nRequests), "-c", - fmt.Sprintf("%d", nClients)} + abCont := s.getContainerByName("ab") + args := fmt.Sprintf("-n %d -c %d", nRequests, nClients) if mode == "rps" { - args = append(args, "-k") + 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" + // don't exit on socket receive errors + args += " -r" + args += " http://" + serverAddress + ":80/64B.json" + abCont.extraRunningArgs = args + o, err := abCont.combinedOutput() + rps := parseString(o, "Requests per second:") + s.log(rps, err) + s.assertNil(err) } else { - args = []string{"-c", fmt.Sprintf("%d", nClients), "-t", "2", "-d", "30", - "http://10.10.10.1:80"} - exeName = "wrk" + wrkCont := s.getContainerByName("wrk") + args := fmt.Sprintf("-c %d -t 2 -d 30 http://%s:80/64B.json", nClients, + serverAddress) + wrkCont.extraRunningArgs = args + o, err := wrkCont.combinedOutput() + rps := parseString(o, "requests") + s.log(rps, err) + s.assertNil(err) } - - 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 }