package main import ( "fmt" "os" "github.com/edwarnicke/exechelper" ) func testProxyHttpTcp(s *NsSuite, proxySetup func() error) error { const outputFile = "test.data" const srcFile = "10M" stopServer := make(chan struct{}, 1) serverRunning := make(chan struct{}, 1) s.assertNil(proxySetup(), "failed to setup proxy") // create test file err := exechelper.Run(fmt.Sprintf("ip netns exec server truncate -s %s %s", srcFile, srcFile)) s.assertNil(err, "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) s.assertNil(err, "failed to run wget") stopServer <- struct{}{} defer func() { os.Remove(outputFile) }() s.assertNil(assertFileSize(outputFile, srcFile)) return nil } func configureVppProxy(s *NsSuite) error { container := s.getContainerByName("vpp") testVppProxy := NewVppInstance(container) testVppProxy.setVppProxy() err := testVppProxy.start() s.assertNil(err, "failed to start and configure VPP") fmt.Println("VPP running and configured...") output, err := testVppProxy.vppctl("test proxy server server-uri tcp://10.0.0.2/555 client-uri tcp://10.0.1.1/666") fmt.Println("Proxy configured...", string(output)) return nil } func (s *NsSuite) TestVppProxyHttpTcp() { err := testProxyHttpTcp(s, func() error { return configureVppProxy(s) }) s.assertNil(err) } func configureEnvoyProxy(s *NsSuite) error { vppContainer := s.getContainerByName("vpp") testVppForEnvoyProxy := NewVppInstance(vppContainer) testVppForEnvoyProxy.setEnvoyProxy() err := testVppForEnvoyProxy.start() s.assertNil(err, "failed to start and configure VPP") envoyContainer := s.getContainerByName("envoy") envoyContainer.run() fmt.Println("VPP running and configured...") return nil } func (s *NsSuite) TestEnvoyProxyHttpTcp() { err := testProxyHttpTcp(s, func() error { return configureEnvoyProxy(s) }) s.assertNil(err) }