hs-test: move nginx tests into one file 81/41181/1
authorMatus Fabian <[email protected]>
Mon, 24 Jun 2024 17:05:38 +0000 (19:05 +0200)
committerMatus Fabian <[email protected]>
Mon, 24 Jun 2024 17:05:38 +0000 (19:05 +0200)
Type: test

Change-Id: Ie525636c6299a8306cba45e72f8ee6c9da6d6e4f
Signed-off-by: Matus Fabian <[email protected]>
extras/hs-test/http_test.go
extras/hs-test/mirroring_test.go [deleted file]
extras/hs-test/nginx_test.go [new file with mode: 0644]

index 68e2e65..a5694bf 100644 (file)
@@ -6,8 +6,6 @@ import (
        "github.com/onsi/gomega/gmeasure"
        "io"
        "net/http"
-       "os"
-       "strings"
        "time"
 
        . "fd.io/hs-test/infra"
@@ -16,9 +14,7 @@ import (
 
 func init() {
        RegisterVethTests(HttpCliTest, HttpCliConnectErrorTest)
-       RegisterNoTopoTests(NginxHttp3Test, NginxAsServerTest,
-               NginxPerfCpsTest, NginxPerfRpsTest, NginxPerfWrkTest, NginxPerfCpsInterruptModeTest,
-               NginxPerfRpsInterruptModeTest, NginxPerfWrkInterruptModeTest, HeaderServerTest,
+       RegisterNoTopoTests(HeaderServerTest,
                HttpStaticMovedTest, HttpStaticNotFoundTest, HttpCliMethodNotAllowedTest,
                HttpCliBadRequestTest, HttpStaticBuildInUrlGetIfStatsTest, HttpStaticBuildInUrlPostIfStatsTest,
                HttpInvalidRequestLineTest, HttpMethodNotImplementedTest, HttpInvalidHeadersTest,
@@ -92,27 +88,6 @@ func HttpCliConnectErrorTest(s *VethsSuite) {
        s.AssertContains(o, "failed to connect")
 }
 
-func NginxHttp3Test(s *NoTopoSuite) {
-       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.GetInterfaceByName(TapInterfaceName).Peer.Ip4AddressString()
-
-       defer func() { os.Remove(query) }()
-       curlCont := s.GetContainerByName("curl")
-       args := fmt.Sprintf("curl --noproxy '*' --local-port 55444 --http3-only -k https://%s:8443/%s", serverAddress, query)
-       curlCont.ExtraRunningArgs = args
-       o, err := curlCont.CombinedOutput()
-       s.Log(o)
-       s.AssertNil(err, fmt.Sprint(err))
-       s.AssertContains(o, "<http>", "<http> not found in the result!")
-}
-
 func HttpStaticPromTest(s *NoTopoSuite) {
        finished := make(chan error, 1)
        query := "stats.prom"
@@ -566,102 +541,3 @@ func HeaderServerTest(s *NoTopoSuite) {
        defer resp.Body.Close()
        s.AssertEqual("http_cli_server", resp.Header.Get("Server"))
 }
-
-func NginxAsServerTest(s *NoTopoSuite) {
-       query := "return_ok"
-       finished := make(chan error, 1)
-
-       nginxCont := s.GetContainerByName("nginx")
-       s.AssertNil(nginxCont.Run())
-
-       vpp := s.GetContainerByName("vpp").VppInstance
-       vpp.WaitForApp("nginx-", 5)
-
-       serverAddress := s.GetInterfaceByName(TapInterfaceName).Peer.Ip4AddressString()
-
-       defer func() { os.Remove(query) }()
-       go func() {
-               defer GinkgoRecover()
-               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 := 1000
-
-       serverAddress := s.GetInterfaceByName(TapInterfaceName).Peer.Ip4AddressString()
-
-       vpp := s.GetContainerByName("vpp").VppInstance
-
-       nginxCont := s.GetContainerByName(SingleTopoContainerNginx)
-       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)
-               s.Log(err)
-               s.AssertNil(err, "err: '%s', output: '%s'", err, o)
-       } 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)
-               s.Log(err)
-               s.AssertNil(err, "err: '%s', output: '%s'", err, o)
-       }
-       return nil
-}
-
-func NginxPerfCpsInterruptModeTest(s *NoTopoSuite) {
-       NginxPerfCpsTest(s)
-}
-
-// unstable with multiple workers
-func NginxPerfCpsTest(s *NoTopoSuite) {
-       s.SkipIfMultiWorker()
-       s.AssertNil(runNginxPerf(s, "cps", "ab"))
-}
-
-func NginxPerfRpsInterruptModeTest(s *NoTopoSuite) {
-       NginxPerfRpsTest(s)
-}
-
-func NginxPerfRpsTest(s *NoTopoSuite) {
-       s.AssertNil(runNginxPerf(s, "rps", "ab"))
-}
-
-func NginxPerfWrkInterruptModeTest(s *NoTopoSuite) {
-       NginxPerfWrkTest(s)
-}
-
-func NginxPerfWrkTest(s *NoTopoSuite) {
-       s.AssertNil(runNginxPerf(s, "", "wrk"))
-}
diff --git a/extras/hs-test/mirroring_test.go b/extras/hs-test/mirroring_test.go
deleted file mode 100644 (file)
index 57099b7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-package main
-
-import (
-       . "fd.io/hs-test/infra"
-       "github.com/edwarnicke/exechelper"
-)
-
-func init() {
-       RegisterNginxTests(MirroringTest)
-}
-
-// broken when CPUS > 1
-func MirroringTest(s *NginxSuite) {
-       s.SkipIfMultiWorker()
-       proxyAddress := s.GetInterfaceByName(MirroringClientInterfaceName).Peer.Ip4AddressString()
-
-       path := "/64B.json"
-
-       testCommand := "wrk -c 20 -t 10 -d 10 http://" + proxyAddress + ":80" + path
-       s.Log(testCommand)
-       o, _ := exechelper.Output(testCommand)
-       s.Log(string(o))
-       s.AssertNotEmpty(o)
-
-       vppProxyContainer := s.GetContainerByName(VppProxyContainerName)
-       s.AssertEqual(0, vppProxyContainer.VppInstance.GetSessionStat("no lcl port"))
-}
diff --git a/extras/hs-test/nginx_test.go b/extras/hs-test/nginx_test.go
new file mode 100644 (file)
index 0000000..00869b0
--- /dev/null
@@ -0,0 +1,152 @@
+package main
+
+import (
+       . "fd.io/hs-test/infra"
+       "fmt"
+       "github.com/edwarnicke/exechelper"
+       . "github.com/onsi/ginkgo/v2"
+       "os"
+       "strings"
+)
+
+func init() {
+       RegisterNginxTests(MirroringTest)
+       RegisterNoTopoTests(NginxHttp3Test, NginxAsServerTest, NginxPerfCpsTest, NginxPerfRpsTest, NginxPerfWrkTest,
+               NginxPerfCpsInterruptModeTest, NginxPerfRpsInterruptModeTest, NginxPerfWrkInterruptModeTest)
+}
+
+// broken when CPUS > 1
+func MirroringTest(s *NginxSuite) {
+       s.SkipIfMultiWorker()
+       proxyAddress := s.GetInterfaceByName(MirroringClientInterfaceName).Peer.Ip4AddressString()
+
+       path := "/64B.json"
+
+       testCommand := "wrk -c 20 -t 10 -d 10 http://" + proxyAddress + ":80" + path
+       s.Log(testCommand)
+       o, _ := exechelper.Output(testCommand)
+       s.Log(string(o))
+       s.AssertNotEmpty(o)
+
+       vppProxyContainer := s.GetContainerByName(VppProxyContainerName)
+       s.AssertEqual(0, vppProxyContainer.VppInstance.GetSessionStat("no lcl port"))
+}
+
+func NginxHttp3Test(s *NoTopoSuite) {
+       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.GetInterfaceByName(TapInterfaceName).Peer.Ip4AddressString()
+
+       defer func() { os.Remove(query) }()
+       curlCont := s.GetContainerByName("curl")
+       args := fmt.Sprintf("curl --noproxy '*' --local-port 55444 --http3-only -k https://%s:8443/%s", serverAddress, query)
+       curlCont.ExtraRunningArgs = args
+       o, err := curlCont.CombinedOutput()
+       s.Log(o)
+       s.AssertNil(err, fmt.Sprint(err))
+       s.AssertContains(o, "<http>", "<http> not found in the result!")
+}
+func NginxAsServerTest(s *NoTopoSuite) {
+       query := "return_ok"
+       finished := make(chan error, 1)
+
+       nginxCont := s.GetContainerByName("nginx")
+       s.AssertNil(nginxCont.Run())
+
+       vpp := s.GetContainerByName("vpp").VppInstance
+       vpp.WaitForApp("nginx-", 5)
+
+       serverAddress := s.GetInterfaceByName(TapInterfaceName).Peer.Ip4AddressString()
+
+       defer func() { os.Remove(query) }()
+       go func() {
+               defer GinkgoRecover()
+               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 := 1000
+
+       serverAddress := s.GetInterfaceByName(TapInterfaceName).Peer.Ip4AddressString()
+
+       vpp := s.GetContainerByName("vpp").VppInstance
+
+       nginxCont := s.GetContainerByName(SingleTopoContainerNginx)
+       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)
+               s.Log(err)
+               s.AssertNil(err, "err: '%s', output: '%s'", err, o)
+       } 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)
+               s.Log(err)
+               s.AssertNil(err, "err: '%s', output: '%s'", err, o)
+       }
+       return nil
+}
+
+func NginxPerfCpsInterruptModeTest(s *NoTopoSuite) {
+       NginxPerfCpsTest(s)
+}
+
+// unstable with multiple workers
+func NginxPerfCpsTest(s *NoTopoSuite) {
+       s.SkipIfMultiWorker()
+       s.AssertNil(runNginxPerf(s, "cps", "ab"))
+}
+
+func NginxPerfRpsInterruptModeTest(s *NoTopoSuite) {
+       NginxPerfRpsTest(s)
+}
+
+func NginxPerfRpsTest(s *NoTopoSuite) {
+       s.AssertNil(runNginxPerf(s, "rps", "ab"))
+}
+
+func NginxPerfWrkInterruptModeTest(s *NoTopoSuite) {
+       NginxPerfWrkTest(s)
+}
+
+func NginxPerfWrkTest(s *NoTopoSuite) {
+       s.AssertNil(runNginxPerf(s, "", "wrk"))
+}