diff options
author | Filip Tehlar <ftehlar@cisco.com> | 2022-08-09 14:44:47 +0000 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2022-09-19 21:00:18 +0000 |
commit | 229f5fcf188cf710f4a8fb269d92f1a1d04a99da (patch) | |
tree | bc2c85a49bac6aea4e5ef3304c356acb75ad9493 /extras/hs-test/proxy_test.go | |
parent | 6cacc94de3984d9f0cf6d562a27d89a4ab0a89f9 (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-x | extras/hs-test/proxy_test.go | 98 |
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() +} |