blob: 367818925d235ea6e833b41078c0b7008c31c7da [file] [log] [blame]
package main
import (
"fmt"
. "fd.io/hs-test/infra"
)
func init() {
RegisterVppProxyTests(VppProxyHttpGetTcpTest, VppProxyHttpGetTlsTest, VppProxyHttpPutTcpTest, VppProxyHttpPutTlsTest,
VppConnectProxyGetTest, VppConnectProxyPutTest)
RegisterVppProxySoloTests(VppProxyHttpGetTcpMTTest, VppProxyHttpPutTcpMTTest)
RegisterVppUdpProxyTests(VppProxyUdpTest)
RegisterEnvoyProxyTests(EnvoyProxyHttpGetTcpTest, EnvoyProxyHttpPutTcpTest)
RegisterNginxProxyTests(NginxMirroringTest)
RegisterNginxProxySoloTests(MirrorMultiThreadTest)
}
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" {
cmd += fmt.Sprintf(" client-uri tcp://%s/%d", s.NginxAddr(), s.NginxPort())
}
output := vppProxy.Vppctl(cmd)
s.Log("proxy configured: " + output)
}
func VppProxyHttpGetTcpMTTest(s *VppProxySuite) {
VppProxyHttpGetTcpTest(s)
}
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)
}
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 VppProxyHttpPutTcpMTTest(s *VppProxySuite) {
VppProxyHttpPutTcpTest(s)
}
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 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 EnvoyProxyHttpGetTcpTest(s *EnvoyProxySuite) {
uri := fmt.Sprintf("http://%s:%d/httpTestFile", s.ProxyAddr(), s.ProxyPort())
s.CurlDownloadResource(uri)
}
func EnvoyProxyHttpPutTcpTest(s *EnvoyProxySuite) {
uri := fmt.Sprintf("http://%s:%d/upload/testFile", s.ProxyAddr(), s.ProxyPort())
s.CurlUploadResource(uri, CurlContainerTestFile)
}
func MirrorMultiThreadTest(s *NginxProxySuite) {
nginxMirroring(s, true)
}
func NginxMirroringTest(s *NginxProxySuite) {
nginxMirroring(s, false)
}
func nginxMirroring(s *NginxProxySuite, multiThreadWorkers bool) {
nginxProxyContainer := s.GetContainerByName(NginxProxyContainerName)
vpp := s.GetContainerByName(VppContainerName).VppInstance
s.AddVclConfig(nginxProxyContainer, multiThreadWorkers)
s.CreateNginxProxyConfig(nginxProxyContainer, multiThreadWorkers)
nginxProxyContainer.Start()
vpp.WaitForApp("nginx-", 5)
uri := fmt.Sprintf("http://%s:%d/httpTestFile", s.ProxyAddr(), s.ProxyPort())
s.CurlDownloadResource(uri)
}
func VppConnectProxyGetTest(s *VppProxySuite) {
var proxyPort uint16 = 8080
configureVppProxy(s, "http", proxyPort)
targetUri := fmt.Sprintf("http://%s:%d/httpTestFile", s.NginxAddr(), s.NginxPort())
proxyUri := fmt.Sprintf("http://%s:%d", s.VppProxyAddr(), proxyPort)
s.CurlDownloadResourceViaTunnel(targetUri, proxyUri)
}
func VppConnectProxyPutTest(s *VppProxySuite) {
var proxyPort uint16 = 8080
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())
s.CurlUploadResourceViaTunnel(targetUri, proxyUri, CurlContainerTestFile)
}
func VppProxyUdpTest(s *VppUdpProxySuite) {
remoteServerConn := s.StartEchoServer()
defer remoteServerConn.Close()
vppProxy := s.GetContainerByName(VppUdpProxyContainerName).VppInstance
cmd := fmt.Sprintf("test proxy server fifo-size 512k server-uri udp://%s/%d", s.VppProxyAddr(), s.ProxyPort())
cmd += fmt.Sprintf(" client-uri udp://%s/%d", s.ServerAddr(), s.ServerPort())
s.Log(vppProxy.Vppctl(cmd))
b := make([]byte, 1500)
n, err := s.ClientSendReceive([]byte("hello"), b)
s.AssertNil(err, fmt.Sprint(err))
s.AssertEqual([]byte("hello"), b[:n])
}