aboutsummaryrefslogtreecommitdiffstats
path: root/extras/hs-test/proxy_test.go
blob: 745f042a4b6c1503a594ebf6cfcf8b71fcc8ebc7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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) }()

	s.log("Test file created...")

	go startHttpServer(serverRunning, stopServer, ":666", "server")
	// TODO better error handling and recovery
	<-serverRunning

	defer func(chan struct{}) {
		stopServer <- struct{}{}
	}(stopServer)

	s.log("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")
	s.log("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")
	s.log("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()

	s.log("VPP running and configured...")
	return nil
}

func (s *NsSuite) TestEnvoyProxyHttpTcp() {
	err := testProxyHttpTcp(s, func() error {
		return configureEnvoyProxy(s)
	})
	s.assertNil(err)
}