hs-test: small improvements
[vpp.git] / extras / hs-test / proxy_test.go
1 package main
2
3 import (
4         "fmt"
5         "os"
6
7         "github.com/edwarnicke/exechelper"
8 )
9
10 func testProxyHttpTcp(s *NsSuite) error {
11         const outputFile = "test.data"
12         const srcFile = "10M"
13         stopServer := make(chan struct{}, 1)
14         serverRunning := make(chan struct{}, 1)
15
16         // create test file
17         err := exechelper.Run(fmt.Sprintf("ip netns exec server truncate -s %s %s", srcFile, srcFile))
18         s.assertNil(err, "failed to run truncate command")
19         defer func() { os.Remove(srcFile) }()
20
21         s.log("Test file created...")
22
23         go startHttpServer(serverRunning, stopServer, ":666", "server")
24         // TODO better error handling and recovery
25         <-serverRunning
26
27         defer func(chan struct{}) {
28                 stopServer <- struct{}{}
29         }(stopServer)
30
31         s.log("http server started...")
32
33         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)
34         _, err = exechelper.CombinedOutput(c)
35         s.assertNil(err, "failed to run wget")
36         stopServer <- struct{}{}
37
38         defer func() { os.Remove(outputFile) }()
39
40         s.assertNil(assertFileSize(outputFile, srcFile))
41         return nil
42 }
43
44 func configureVppProxy(s *NsSuite) error {
45         container := s.getContainerByName("vpp")
46         testVppProxy := NewVppInstance(container)
47         testVppProxy.setVppProxy()
48         err := testVppProxy.start()
49         s.assertNil(err, "failed to start and configure VPP")
50         s.log("VPP running and configured...")
51
52         output, err := testVppProxy.vppctl("test proxy server server-uri tcp://10.0.0.2/555 client-uri tcp://10.0.1.1/666")
53         s.log("Proxy configured...", string(output))
54         return err
55 }
56
57 func (s *NsSuite) TestVppProxyHttpTcp() {
58         err := configureVppProxy(s)
59         s.assertNil(err)
60         err = testProxyHttpTcp(s)
61         s.assertNil(err)
62 }
63
64 func configureEnvoyProxy(s *NsSuite) error {
65         vppContainer := s.getContainerByName("vpp")
66         testVppForEnvoyProxy := NewVppInstance(vppContainer)
67         testVppForEnvoyProxy.setEnvoyProxy()
68         err := testVppForEnvoyProxy.start()
69         s.assertNil(err, "failed to start and configure VPP")
70
71         envoyContainer := s.getContainerByName("envoy")
72         return envoyContainer.run()
73 }
74
75 func (s *NsSuite) TestEnvoyProxyHttpTcp() {
76         err := configureEnvoyProxy(s)
77         s.assertNil(err)
78         err = testProxyHttpTcp(s)
79         s.assertNil(err)
80 }