diff options
Diffstat (limited to 'extras/hs-test/proxy_test.go')
-rw-r--r-- | extras/hs-test/proxy_test.go | 140 |
1 files changed, 48 insertions, 92 deletions
diff --git a/extras/hs-test/proxy_test.go b/extras/hs-test/proxy_test.go index ac5f94c8535..758064424a8 100644 --- a/extras/hs-test/proxy_test.go +++ b/extras/hs-test/proxy_test.go @@ -2,114 +2,70 @@ package main import ( "fmt" - "os" - "github.com/edwarnicke/exechelper" - . "github.com/onsi/ginkgo/v2" + . "fd.io/hs-test/infra" ) func init() { - registerNsTests(VppProxyHttpTcpTest, VppProxyHttpTlsTest, EnvoyProxyHttpTcpTest) + RegisterVppProxyTests(VppProxyHttpGetTcpTest, VppProxyHttpGetTlsTest, VppProxyHttpPutTcpTest, VppProxyHttpPutTlsTest) + RegisterEnvoyProxyTests(EnvoyProxyHttpGetTcpTest, EnvoyProxyHttpPutTcpTest) + RegisterNginxProxyTests(NginxMirroringTest) } -func testProxyHttpTcp(s *NsSuite, proto string) error { - var outputFile string = "test" + s.pid + ".data" - var srcFilePid string = "httpTestFile" + s.pid - const srcFileNoPid = "httpTestFile" - const fileSize string = "10M" - stopServer := make(chan struct{}, 1) - serverRunning := make(chan struct{}, 1) - serverNetns := s.getNetNamespaceByName("srv") - clientNetns := s.getNetNamespaceByName("cln") - - // create test file - err := exechelper.Run(fmt.Sprintf("ip netns exec %s truncate -s %s %s", serverNetns, fileSize, srcFilePid)) - s.assertNil(err, "failed to run truncate command: "+fmt.Sprint(err)) - defer func() { os.Remove(srcFilePid) }() - - s.log("test file created...") - - go func() { - defer GinkgoRecover() - s.startHttpServer(serverRunning, stopServer, ":666", serverNetns) - }() - // TODO better error handling and recovery - <-serverRunning - - defer func(chan struct{}) { - stopServer <- struct{}{} - }(stopServer) - - s.log("http server started...") - - clientVeth := s.getInterfaceByName(clientInterface) - c := fmt.Sprintf("ip netns exec %s wget --no-proxy --retry-connrefused"+ - " --retry-on-http-error=503 --tries=10 -O %s ", clientNetns, outputFile) - if proto == "tls" { - c += " --secure-protocol=TLSv1_3 --no-check-certificate https://" - } - c += fmt.Sprintf("%s:555/%s", clientVeth.ip4AddressString(), srcFileNoPid) - s.log(c) - _, err = exechelper.CombinedOutput(c) - - defer func() { os.Remove(outputFile) }() - - s.assertNil(err, "failed to run wget: '%s', cmd: %s", err, c) - stopServer <- struct{}{} - - s.assertNil(assertFileSize(outputFile, srcFilePid)) - return nil +func configureVppProxy(s *VppProxySuite, proto string, proxyPort uint16) { + vppProxy := s.GetContainerByName(VppProxyContainerName).VppInstance + output := vppProxy.Vppctl( + "test proxy server server-uri %s://%s/%d client-uri tcp://%s/%d", + proto, + s.VppProxyAddr(), + proxyPort, + s.NginxAddr(), + s.NginxPort(), + ) + s.Log("proxy configured: " + output) } -func configureVppProxy(s *NsSuite, proto string) { - serverVeth := s.getInterfaceByName(serverInterface) - clientVeth := s.getInterfaceByName(clientInterface) +func VppProxyHttpGetTcpTest(s *VppProxySuite) { + var proxyPort uint16 = 8080 + configureVppProxy(s, "tcp", proxyPort) + uri := fmt.Sprintf("http://%s:%d/httpTestFile", s.VppProxyAddr(), proxyPort) + s.CurlDownloadResource(uri) +} - testVppProxy := s.getContainerByName("vpp").vppInstance - output := testVppProxy.vppctl( - "test proxy server server-uri %s://%s/555 client-uri tcp://%s/666", - proto, - clientVeth.ip4AddressString(), - serverVeth.peer.ip4AddressString(), - ) - s.log("proxy configured: " + output) +func VppProxyHttpGetTlsTest(s *VppProxySuite) { + var proxyPort uint16 = 8080 + configureVppProxy(s, "tls", proxyPort) + uri := fmt.Sprintf("https://%s:%d/httpTestFile", s.VppProxyAddr(), proxyPort) + s.CurlDownloadResource(uri) } -func VppProxyHttpTcpTest(s *NsSuite) { - proto := "tcp" - configureVppProxy(s, proto) - err := testProxyHttpTcp(s, proto) - s.assertNil(err, fmt.Sprint(err)) +func VppProxyHttpPutTcpTest(s *VppProxySuite) { + var proxyPort uint16 = 8080 + configureVppProxy(s, "tcp", proxyPort) + uri := fmt.Sprintf("http://%s:%d/upload/testFile", s.VppProxyAddr(), proxyPort) + s.CurlUploadResource(uri, CurlContainerTestFile) } -func VppProxyHttpTlsTest(s *NsSuite) { - proto := "tls" - configureVppProxy(s, proto) - err := testProxyHttpTcp(s, proto) - s.assertNil(err, fmt.Sprint(err)) +func VppProxyHttpPutTlsTest(s *VppProxySuite) { + var proxyPort uint16 = 8080 + configureVppProxy(s, "tls", proxyPort) + uri := fmt.Sprintf("https://%s:%d/upload/testFile", s.VppProxyAddr(), proxyPort) + s.CurlUploadResource(uri, CurlContainerTestFile) } -func configureEnvoyProxy(s *NsSuite) { - envoyContainer := s.getContainerByName("envoy") - err := envoyContainer.create() - s.assertNil(err, "Error creating envoy container: %s", err) +func EnvoyProxyHttpGetTcpTest(s *EnvoyProxySuite) { + uri := fmt.Sprintf("http://%s:%d/httpTestFile", s.ProxyAddr(), s.ProxyPort()) + s.CurlDownloadResource(uri) +} - serverVeth := s.getInterfaceByName(serverInterface) - address := struct { - Server string - }{ - Server: serverVeth.peer.ip4AddressString(), - } - envoyContainer.createConfig( - "/etc/envoy/envoy.yaml", - "resources/envoy/proxy.yaml", - address, - ) - s.assertNil(envoyContainer.start()) +func EnvoyProxyHttpPutTcpTest(s *EnvoyProxySuite) { + uri := fmt.Sprintf("http://%s:%d/upload/testFile", s.ProxyAddr(), s.ProxyPort()) + s.CurlUploadResource(uri, CurlContainerTestFile) } -func EnvoyProxyHttpTcpTest(s *NsSuite) { - configureEnvoyProxy(s) - err := testProxyHttpTcp(s, "tcp") - s.assertNil(err, fmt.Sprint(err)) +// broken when CPUS > 1 +func NginxMirroringTest(s *NginxProxySuite) { + s.SkipIfMultiWorker() + uri := fmt.Sprintf("http://%s:%d/httpTestFile", s.ProxyAddr(), s.ProxyPort()) + s.CurlDownloadResource(uri) } |