hs-test: log external apps
[vpp.git] / extras / hs-test / http_test.go
index 22f82c1..4aab553 100644 (file)
@@ -3,6 +3,7 @@ package main
 import (
        "fmt"
        "os"
+       "strings"
 )
 
 func (s *NsSuite) TestHttpTps() {
@@ -16,7 +17,7 @@ func (s *NsSuite) TestHttpTps() {
        // configure vpp in the container
        container.vppInstance.vppctl("http tps uri tcp://0.0.0.0/8080")
 
-       go startWget(finished, client_ip, port, "test_file_10M", "client")
+       go s.startWget(finished, client_ip, port, "test_file_10M", "client")
        // wait for client
        err := <-finished
        s.assertNil(err)
@@ -39,6 +40,26 @@ func (s *VethsSuite) TestHttpCli() {
        s.assertContains(o, "<html>", "<html> not found in the result!")
 }
 
+func (s *NoTopoSuite) TestNginxHttp3() {
+       s.SkipUnlessExtendedTestsBuilt()
+
+       query := "index.html"
+       nginxCont := s.getContainerByName("nginx-http3")
+       s.assertNil(nginxCont.run())
+
+       vpp := s.getContainerByName("vpp").vppInstance
+       vpp.waitForApp("nginx-", 5)
+       serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
+
+       defer func() { os.Remove(query) }()
+       curlCont := s.getContainerByName("curl")
+       args := fmt.Sprintf("curl --noproxy '*' --http3-only -k https://%s:8443/%s", serverAddress, query)
+       curlCont.extraRunningArgs = args
+       o, err := curlCont.combinedOutput()
+       s.assertNil(err)
+       s.assertContains(o, "<http>", "<http> not found in the result!")
+}
+
 func (s *NoTopoSuite) TestNginxAsServer() {
        query := "return_ok"
        finished := make(chan error, 1)
@@ -52,13 +73,23 @@ func (s *NoTopoSuite) TestNginxAsServer() {
        serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
 
        defer func() { os.Remove(query) }()
-       go startWget(finished, serverAddress, "80", query, "")
+       go s.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
+       nClients := 1000
 
        serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
 
@@ -76,10 +107,13 @@ func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error {
                } 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()
-               s.log(o, err)
+               rps := parseString(o, "Requests per second:")
+               s.log(rps, err)
                s.assertNil(err)
        } else {
                wrkCont := s.getContainerByName("wrk")
@@ -87,7 +121,8 @@ func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error {
                        serverAddress)
                wrkCont.extraRunningArgs = args
                o, err := wrkCont.combinedOutput()
-               s.log(o)
+               rps := parseString(o, "requests")
+               s.log(rps, err)
                s.assertNil(err)
        }
        return nil