diff options
Diffstat (limited to 'extras/hs-test/proxy_test.go')
-rw-r--r-- | extras/hs-test/proxy_test.go | 88 |
1 files changed, 82 insertions, 6 deletions
diff --git a/extras/hs-test/proxy_test.go b/extras/hs-test/proxy_test.go index 367818925d2..a7f83ab7430 100644 --- a/extras/hs-test/proxy_test.go +++ b/extras/hs-test/proxy_test.go @@ -2,14 +2,17 @@ package main import ( "fmt" + "strconv" + "time" . "fd.io/hs-test/infra" + . "github.com/onsi/ginkgo/v2" ) func init() { RegisterVppProxyTests(VppProxyHttpGetTcpTest, VppProxyHttpGetTlsTest, VppProxyHttpPutTcpTest, VppProxyHttpPutTlsTest, VppConnectProxyGetTest, VppConnectProxyPutTest) - RegisterVppProxySoloTests(VppProxyHttpGetTcpMTTest, VppProxyHttpPutTcpMTTest) + RegisterVppProxySoloTests(VppProxyHttpGetTcpMTTest, VppProxyHttpPutTcpMTTest, VppProxyTcpIperfMTTest, VppProxyUdpIperfMTTest) RegisterVppUdpProxyTests(VppProxyUdpTest) RegisterEnvoyProxyTests(EnvoyProxyHttpGetTcpTest, EnvoyProxyHttpPutTcpTest) RegisterNginxProxyTests(NginxMirroringTest) @@ -19,9 +22,13 @@ func init() { func configureVppProxy(s *VppProxySuite, proto string, proxyPort uint16) { vppProxy := s.GetContainerByName(VppProxyContainerName).VppInstance cmd := fmt.Sprintf("test proxy server fifo-size 512k server-uri %s://%s/%d", proto, s.VppProxyAddr(), proxyPort) + if proto != "http" && proto != "udp" { + proto = "tcp" + } if proto != "http" { - cmd += fmt.Sprintf(" client-uri tcp://%s/%d", s.NginxAddr(), s.NginxPort()) + cmd += fmt.Sprintf(" client-uri %s://%s/%d", proto, s.ServerAddr(), s.ServerPort()) } + output := vppProxy.Vppctl(cmd) s.Log("proxy configured: " + output) } @@ -30,8 +37,74 @@ func VppProxyHttpGetTcpMTTest(s *VppProxySuite) { VppProxyHttpGetTcpTest(s) } +func VppProxyTcpIperfMTTest(s *VppProxySuite) { + vppProxyIperfMTTest(s, "tcp") +} + +func VppProxyUdpIperfMTTest(s *VppProxySuite) { + vppProxyIperfMTTest(s, "udp") +} + +func vppProxyIperfMTTest(s *VppProxySuite, proto string) { + iperfServer := s.GetContainerByName(IperfServerContainerName) + iperfClient := s.GetContainerByName(IperfClientContainerName) + iperfServer.Run() + iperfClient.Run() + serverInterface := s.GetInterfaceByName(ServerTapInterfaceName) + clientInterface := s.GetInterfaceByName(ClientTapInterfaceName) + vppProxy := s.GetContainerByName(VppProxyContainerName).VppInstance + proxyPort, err := strconv.Atoi(s.GetPortFromPpid()) + s.AssertNil(err) + + // tap interfaces are created on test setup with 1 rx-queue, + // need to recreate them with 2 + consistent-qp + s.AssertNil(vppProxy.DeleteTap(serverInterface)) + s.AssertNil(vppProxy.CreateTap(serverInterface, 2, uint32(serverInterface.Peer.Index), Consistent_qp)) + + s.AssertNil(vppProxy.DeleteTap(clientInterface)) + s.AssertNil(vppProxy.CreateTap(clientInterface, 2, uint32(clientInterface.Peer.Index), Consistent_qp)) + + configureVppProxy(s, "tcp", uint16(proxyPort)) + if proto == "udp" { + configureVppProxy(s, "udp", uint16(proxyPort)) + proto = "-u" + } else { + proto = "" + } + + stopServerCh := make(chan struct{}, 1) + srvCh := make(chan error, 1) + clnCh := make(chan error) + clnRes := make(chan []byte, 1) + + defer func() { + stopServerCh <- struct{}{} + }() + + go func() { + defer GinkgoRecover() + cmd := fmt.Sprintf("iperf3 -4 -s -B %s -p %s", s.ServerAddr(), fmt.Sprint(s.ServerPort())) + s.StartServerApp(iperfServer, "iperf3", cmd, srvCh, stopServerCh) + }() + + err = <-srvCh + s.AssertNil(err, fmt.Sprint(err)) + + go func() { + defer GinkgoRecover() + cmd := fmt.Sprintf("iperf3 -c %s -P 4 -l 1460 -b 10g -J -p %d -B %s %s", s.VppProxyAddr(), proxyPort, s.ClientAddr(), proto) + s.StartClientApp(iperfClient, cmd, clnCh, clnRes) + }() + + s.AssertChannelClosed(time.Minute*4, clnCh) + result := s.ParseJsonIperfOutput(<-clnRes) + s.LogJsonIperfOutput(result) + s.AssertIperfMinTransfer(result, 400) +} + func VppProxyHttpGetTcpTest(s *VppProxySuite) { var proxyPort uint16 = 8080 + s.SetupNginxServer() configureVppProxy(s, "tcp", proxyPort) uri := fmt.Sprintf("http://%s:%d/httpTestFile", s.VppProxyAddr(), proxyPort) s.CurlDownloadResource(uri) @@ -39,6 +112,7 @@ func VppProxyHttpGetTcpTest(s *VppProxySuite) { func VppProxyHttpGetTlsTest(s *VppProxySuite) { var proxyPort uint16 = 8080 + s.SetupNginxServer() configureVppProxy(s, "tls", proxyPort) uri := fmt.Sprintf("https://%s:%d/httpTestFile", s.VppProxyAddr(), proxyPort) s.CurlDownloadResource(uri) @@ -50,6 +124,7 @@ func VppProxyHttpPutTcpMTTest(s *VppProxySuite) { func VppProxyHttpPutTcpTest(s *VppProxySuite) { var proxyPort uint16 = 8080 + s.SetupNginxServer() configureVppProxy(s, "tcp", proxyPort) uri := fmt.Sprintf("http://%s:%d/upload/testFile", s.VppProxyAddr(), proxyPort) s.CurlUploadResource(uri, CurlContainerTestFile) @@ -57,6 +132,7 @@ func VppProxyHttpPutTcpTest(s *VppProxySuite) { func VppProxyHttpPutTlsTest(s *VppProxySuite) { var proxyPort uint16 = 8080 + s.SetupNginxServer() configureVppProxy(s, "tls", proxyPort) uri := fmt.Sprintf("https://%s:%d/upload/testFile", s.VppProxyAddr(), proxyPort) s.CurlUploadResource(uri, CurlContainerTestFile) @@ -94,21 +170,21 @@ func nginxMirroring(s *NginxProxySuite, multiThreadWorkers bool) { func VppConnectProxyGetTest(s *VppProxySuite) { var proxyPort uint16 = 8080 - + s.SetupNginxServer() configureVppProxy(s, "http", proxyPort) - targetUri := fmt.Sprintf("http://%s:%d/httpTestFile", s.NginxAddr(), s.NginxPort()) + targetUri := fmt.Sprintf("http://%s:%d/httpTestFile", s.ServerAddr(), s.ServerPort()) proxyUri := fmt.Sprintf("http://%s:%d", s.VppProxyAddr(), proxyPort) s.CurlDownloadResourceViaTunnel(targetUri, proxyUri) } func VppConnectProxyPutTest(s *VppProxySuite) { var proxyPort uint16 = 8080 - + s.SetupNginxServer() configureVppProxy(s, "http", proxyPort) proxyUri := fmt.Sprintf("http://%s:%d", s.VppProxyAddr(), proxyPort) - targetUri := fmt.Sprintf("http://%s:%d/upload/testFile", s.NginxAddr(), s.NginxPort()) + targetUri := fmt.Sprintf("http://%s:%d/upload/testFile", s.ServerAddr(), s.ServerPort()) s.CurlUploadResourceViaTunnel(targetUri, proxyUri, CurlContainerTestFile) } |