aboutsummaryrefslogtreecommitdiffstats
path: root/extras/hs-test/proxy_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'extras/hs-test/proxy_test.go')
-rw-r--r--extras/hs-test/proxy_test.go88
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)
}