hs-test: refactor test cases from ns suite
[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         clientVeth := s.netInterfaces[clientInterface]
34         c := fmt.Sprintf("ip netns exec client wget --no-proxy --retry-connrefused"+
35                 " --retry-on-http-error=503 --tries=10"+
36                 " -O %s %s:555/%s",
37                 outputFile,
38                 clientVeth.Ip4AddressString(),
39                 srcFile,
40         )
41         s.log(c)
42         _, err = exechelper.CombinedOutput(c)
43         s.assertNil(err, "failed to run wget")
44         stopServer <- struct{}{}
45
46         defer func() { os.Remove(outputFile) }()
47
48         s.assertNil(assertFileSize(outputFile, srcFile))
49         return nil
50 }
51
52 func configureVppProxy(s *NsSuite) error {
53         serverVeth := s.netInterfaces[serverInterface].(*NetworkInterfaceVeth)
54         clientVeth := s.netInterfaces[clientInterface]
55
56         testVppProxy := s.getContainerByName("vpp").vppInstance
57         output := testVppProxy.vppctl(
58                 "test proxy server server-uri tcp://%s/555 client-uri tcp://%s/666",
59                 clientVeth.Ip4AddressString(),
60                 serverVeth.PeerIp4AddressString(),
61         )
62         s.log("proxy configured...", output)
63         return nil
64 }
65
66 func (s *NsSuite) TestVppProxyHttpTcp() {
67         err := configureVppProxy(s)
68         s.assertNil(err)
69         err = testProxyHttpTcp(s)
70         s.assertNil(err)
71 }
72
73 func configureEnvoyProxy(s *NsSuite) error {
74         envoyContainer := s.getContainerByName("envoy")
75         return envoyContainer.run()
76 }
77
78 func (s *NsSuite) TestEnvoyProxyHttpTcp() {
79         err := configureEnvoyProxy(s)
80         s.assertNil(err)
81         err = testProxyHttpTcp(s)
82         s.assertNil(err)
83 }