summaryrefslogtreecommitdiffstats
path: root/extras/hs-test/proxy_test.go
diff options
context:
space:
mode:
authorFilip Tehlar <ftehlar@cisco.com>2022-08-09 14:44:47 +0000
committerFlorin Coras <florin.coras@gmail.com>2022-09-19 21:00:18 +0000
commit229f5fcf188cf710f4a8fb269d92f1a1d04a99da (patch)
treebc2c85a49bac6aea4e5ef3304c356acb75ad9493 /extras/hs-test/proxy_test.go
parent6cacc94de3984d9f0cf6d562a27d89a4ab0a89f9 (diff)
misc: add test framework for host stack
Type: feature Signed-off-by: Filip Tehlar <ftehlar@cisco.com> Change-Id: I5a64a2c095cae3a4d5f8fdc73e624b010339ec8e
Diffstat (limited to 'extras/hs-test/proxy_test.go')
-rwxr-xr-xextras/hs-test/proxy_test.go98
1 files changed, 98 insertions, 0 deletions
diff --git a/extras/hs-test/proxy_test.go b/extras/hs-test/proxy_test.go
new file mode 100755
index 00000000000..797de5255fa
--- /dev/null
+++ b/extras/hs-test/proxy_test.go
@@ -0,0 +1,98 @@
+package main
+
+import (
+ "context"
+ "fmt"
+ "os"
+ "testing"
+
+ "github.com/edwarnicke/exechelper"
+)
+
+func testProxyHttpTcp(t *testing.T, dockerInstance string, proxySetup func() error) error {
+ const outputFile = "test.data"
+ const srcFile = "10M"
+ stopServer := make(chan struct{}, 1)
+ serverRunning := make(chan struct{}, 1)
+
+ volumeArgs := fmt.Sprintf("-v shared-vol:/tmp/%s", dockerInstance)
+ err := dockerRun(dockerInstance, volumeArgs)
+ if err != nil {
+ return fmt.Errorf("failed to start container: %v", err)
+ }
+ defer func() { exechelper.Run("docker stop " + dockerInstance) }()
+
+ // start & configure vpp in the container
+ _, err = hstExec(dockerInstance, dockerInstance)
+ if err != nil {
+ return fmt.Errorf("error starting vpp in container: %v", err)
+ }
+
+ fmt.Println("VPP running and configured...")
+
+ if err := proxySetup(); err != nil {
+ return fmt.Errorf("failed to setup proxy: %v", err)
+ }
+ fmt.Println("Proxy configured...")
+
+ // create test file
+ err = exechelper.Run(fmt.Sprintf("ip netns exec server truncate -s %s %s", srcFile, srcFile))
+ if err != nil {
+ return fmt.Errorf("failed to run truncate command")
+ }
+ defer func() { os.Remove(srcFile) }()
+
+ fmt.Println("Test file created...")
+
+ go startHttpServer(serverRunning, stopServer, ":666", "server")
+ // TODO better error handling and recovery
+ <-serverRunning
+
+ defer func(chan struct{}) {
+ stopServer <- struct{}{}
+ }(stopServer)
+
+ fmt.Println("http server started...")
+
+ c := fmt.Sprintf("ip netns exec client wget --retry-connrefused --retry-on-http-error=503 --tries=10 -O %s 10.0.0.2:555/%s", outputFile, srcFile)
+ _, err = exechelper.CombinedOutput(c)
+ if err != nil {
+ return fmt.Errorf("failed to run wget: %v", err)
+ }
+ stopServer <- struct{}{}
+
+ defer func() { os.Remove(outputFile) }()
+
+ if err = assertFileSize(outputFile, srcFile); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (s *NsSuite) TestVppProxyHttpTcp() {
+ t := s.T()
+ dockerInstance := "vpp-proxy"
+ err := testProxyHttpTcp(t, dockerInstance, configureVppProxy)
+ if err != nil {
+ t.Errorf("%v", err)
+ }
+}
+
+func (s *NsSuite) TestEnvoyProxyHttpTcp() {
+ t := s.T()
+ exechelper.Run("docker volume create --name=shared-vol")
+ defer func() {
+ exechelper.Run("docker stop envoy")
+ }()
+
+ ctx, cancel := context.WithCancel(context.Background())
+
+ dockerInstance := "vpp-envoy"
+ err := testProxyHttpTcp(t, dockerInstance, func() error {
+ return setupEnvoy(t, ctx, dockerInstance)
+ })
+ if err != nil {
+ t.Errorf("%v", err)
+ }
+ cancel()
+}