X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fhs-test%2Fhttp_test.go;h=e576e4a832d9fd365db68bec5df2f721a4bf9406;hb=refs%2Fchanges%2F62%2F38862%2F3;hp=1cbddec9e767377edefd6d634416517d6f7b53c9;hpb=db823ed6e9543741f6969ff160314093002e037e;p=vpp.git diff --git a/extras/hs-test/http_test.go b/extras/hs-test/http_test.go old mode 100755 new mode 100644 index 1cbddec9e76..e576e4a832d --- a/extras/hs-test/http_test.go +++ b/extras/hs-test/http_test.go @@ -1,46 +1,121 @@ package main +import ( + "fmt" + "os" + "strings" +) + func (s *NsSuite) TestHttpTps() { - t := s.T() - 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") - t.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, "client") + go startWget(finished, client_ip, port, "test_file_10M", "client") // wait for client - err = <-finished + err := <-finished s.assertNil(err) } func (s *VethsSuite) TestHttpCli() { - t := s.T() - serverContainer := s.getContainerByName("server-vpp") clientContainer := s.getContainerByName("client-vpp") - _, err := serverContainer.execAction("Configure2Veths srv") - s.assertNil(err) + serverVeth := s.netInterfaces[serverInterfaceName] - _, err = clientContainer.execAction("Configure2Veths cln") - s.assertNil(err) + serverContainer.vppInstance.vppctl("http cli server") - t.Log("configured IPs...") + uri := "http://" + serverVeth.ip4AddressString() + "/80" - _, err = serverContainer.execAction("RunHttpCliSrv") - s.assertNil(err) + o := clientContainer.vppInstance.vppctl("http cli client" + + " uri " + uri + " query /show/version") - t.Log("configured http server") + s.log(o) + s.assertContains(o, "", " not found in the result!") +} - o, err := clientContainer.execAction("RunHttpCliCln /show/version") - s.assertNil(err) +func (s *NoTopoSuite) TestNginxAsServer() { + query := "return_ok" + finished := make(chan error, 1) - s.assertContains(o, "", " not found in the result!") + nginxCont := s.getContainerByName("nginx") + s.assertNil(nginxCont.run()) + + vpp := s.getContainerByName("vpp").vppInstance + vpp.waitForApp("nginx-", 5) + + serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString() + + defer func() { os.Remove(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 := 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" { + abCont := s.getContainerByName("ab") + args := fmt.Sprintf("-n %d -c %d", nRequests, nClients) + if mode == "rps" { + args += " -k" + } else if mode != "cps" { + return fmt.Errorf("invalid mode %s; expected cps/rps", mode) + } + // 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 { + 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) + } + 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")) }