X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fhs-test%2Fhttp_test.go;h=e576e4a832d9fd365db68bec5df2f721a4bf9406;hb=dda1f6871e3962a4db77e919025ab512a5b3a9fa;hp=52b7c39fa77a1155e4cdb168f0eb8f1862ba918f;hpb=ffa3f60290499bdacc37a97c49f2e794b5e1f18c;p=vpp.git diff --git a/extras/hs-test/http_test.go b/extras/hs-test/http_test.go index 52b7c39fa77..e576e4a832d 100644 --- a/extras/hs-test/http_test.go +++ b/extras/hs-test/http_test.go @@ -3,27 +3,23 @@ package main import ( "fmt" "os" - "os/exec" "strings" - "time" ) func (s *NsSuite) TestHttpTps() { - finished := make(chan error, 1) - server_ip := "10.0.0.2" + iface := s.netInterfaces[clientInterface] + client_ip := iface.ip4AddressString() port := "8080" + finished := make(chan error, 1) container := s.getContainerByName("vpp") - s.log("starting vpp..") - - // start & configure vpp in the container - _, err := container.execAction("ConfigureHttpTps") - s.assertNil(err) + // configure vpp in the container + container.vppInstance.vppctl("http tps uri tcp://0.0.0.0/8080") - go startWget(finished, server_ip, port, "test_file_10M", "client") + go startWget(finished, client_ip, port, "test_file_10M", "client") // wait for client - err = <-finished + err := <-finished s.assertNil(err) } @@ -31,90 +27,84 @@ func (s *VethsSuite) TestHttpCli() { serverContainer := s.getContainerByName("server-vpp") clientContainer := s.getContainerByName("client-vpp") - serverVeth := s.veths["vppsrv"] + serverVeth := s.netInterfaces[serverInterfaceName] - _, err := serverContainer.vppInstance.vppctl("http cli server") - s.assertNil(err) + serverContainer.vppInstance.vppctl("http cli server") - uri := "http://" + serverVeth.Address() + "/80" + uri := "http://" + serverVeth.ip4AddressString() + "/80" - o, err := clientContainer.vppInstance.vppctl("http cli client" + + o := clientContainer.vppInstance.vppctl("http cli client" + " uri " + uri + " query /show/version") - s.assertNil(err) s.log(o) 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() { +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 }