9 registerVethTests(XEchoVclClientUdpTest, XEchoVclClientTcpTest, XEchoVclServerUdpTest,
10 XEchoVclServerTcpTest, VclEchoTcpTest, VclEchoUdpTest, VclRetryAttachTest)
13 func getVclConfig(c *Container, ns_id_optional ...string) string {
16 if len(ns_id_optional) > 0 {
17 ns_id = ns_id_optional[0]
20 append(fmt.Sprintf("app-socket-api %[1]s/var/run/app_ns_sockets/%[2]s", c.getContainerWorkDir(), ns_id)).
21 append("app-scope-global").
22 append("app-scope-local").
23 append("use-mq-eventfd")
24 if len(ns_id_optional) > 0 {
25 s.append(fmt.Sprintf("namespace-id %[1]s", ns_id)).
26 append(fmt.Sprintf("namespace-secret %[1]s", ns_id))
28 return s.close().toString()
31 func XEchoVclClientUdpTest(s *VethsSuite) {
32 s.testXEchoVclClient("udp")
35 func XEchoVclClientTcpTest(s *VethsSuite) {
36 s.testXEchoVclClient("tcp")
39 func (s *VethsSuite) testXEchoVclClient(proto string) {
41 serverVpp := s.getContainerByName("server-vpp").vppInstance
43 serverVeth := s.getInterfaceByName(serverInterfaceName)
44 serverVpp.vppctl("test echo server uri %s://%s/%s fifo-size 64k", proto, serverVeth.ip4AddressString(), port)
46 echoClnContainer := s.getTransientContainerByName("client-app")
47 echoClnContainer.createFile("/vcl.conf", getVclConfig(echoClnContainer))
49 testClientCommand := "vcl_test_client -N 100 -p " + proto + " " + serverVeth.ip4AddressString() + " " + port
50 s.log(testClientCommand)
51 echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
52 o := echoClnContainer.exec(testClientCommand)
54 s.assertContains(o, "CLIENT RESULTS")
57 func XEchoVclServerUdpTest(s *VethsSuite) {
58 s.testXEchoVclServer("udp")
61 func XEchoVclServerTcpTest(s *VethsSuite) {
62 s.testXEchoVclServer("tcp")
65 func (s *VethsSuite) testXEchoVclServer(proto string) {
67 srvVppCont := s.getContainerByName("server-vpp")
68 srvAppCont := s.getContainerByName("server-app")
70 srvAppCont.createFile("/vcl.conf", getVclConfig(srvVppCont))
71 srvAppCont.addEnvVar("VCL_CONFIG", "/vcl.conf")
72 vclSrvCmd := fmt.Sprintf("vcl_test_server -p %s %s", proto, port)
73 srvAppCont.execServer(vclSrvCmd)
75 serverVeth := s.getInterfaceByName(serverInterfaceName)
76 serverVethAddress := serverVeth.ip4AddressString()
78 clientVpp := s.getContainerByName("client-vpp").vppInstance
79 o := clientVpp.vppctl("test echo client uri %s://%s/%s fifo-size 64k verbose mbytes 2", proto, serverVethAddress, port)
81 s.assertContains(o, "Test finished at")
84 func (s *VethsSuite) testVclEcho(proto string) {
86 srvVppCont := s.getContainerByName("server-vpp")
87 srvAppCont := s.getContainerByName("server-app")
89 srvAppCont.createFile("/vcl.conf", getVclConfig(srvVppCont))
90 srvAppCont.addEnvVar("VCL_CONFIG", "/vcl.conf")
91 srvAppCont.execServer("vcl_test_server " + port)
93 serverVeth := s.getInterfaceByName(serverInterfaceName)
94 serverVethAddress := serverVeth.ip4AddressString()
96 echoClnContainer := s.getTransientContainerByName("client-app")
97 echoClnContainer.createFile("/vcl.conf", getVclConfig(echoClnContainer))
99 testClientCommand := "vcl_test_client -p " + proto + " " + serverVethAddress + " " + port
100 echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
101 o := echoClnContainer.exec(testClientCommand)
105 func VclEchoTcpTest(s *VethsSuite) {
109 func VclEchoUdpTest(s *VethsSuite) {
113 func VclRetryAttachTest(s *VethsSuite) {
114 s.testRetryAttach("tcp")
117 func (s *VethsSuite) testRetryAttach(proto string) {
118 srvVppContainer := s.getTransientContainerByName("server-vpp")
120 echoSrvContainer := s.getContainerByName("server-app")
122 echoSrvContainer.createFile("/vcl.conf", getVclConfig(echoSrvContainer))
124 echoSrvContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
125 echoSrvContainer.execServer("vcl_test_server -p " + proto + " 12346")
127 s.log("This whole test case can take around 3 minutes to run. Please be patient.")
128 s.log("... Running first echo client test, before disconnect.")
130 serverVeth := s.getInterfaceByName(serverInterfaceName)
131 serverVethAddress := serverVeth.ip4AddressString()
133 echoClnContainer := s.getTransientContainerByName("client-app")
134 echoClnContainer.createFile("/vcl.conf", getVclConfig(echoClnContainer))
136 testClientCommand := "vcl_test_client -U -p " + proto + " " + serverVethAddress + " 12346"
137 echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
138 o := echoClnContainer.exec(testClientCommand)
140 s.log("... First test ended. Stopping VPP server now.")
142 // Stop server-vpp-instance, start it again and then run vcl-test-client once more
143 srvVppContainer.vppInstance.disconnect()
144 stopVppCommand := "/bin/bash -c 'ps -C vpp_main -o pid= | xargs kill -9'"
145 srvVppContainer.exec(stopVppCommand)
149 s.log("... VPP server is starting again, so waiting for a bit.")
150 time.Sleep(30 * time.Second) // Wait a moment for the re-attachment to happen
152 s.log("... Running second echo client test, after disconnect and re-attachment.")
153 o = echoClnContainer.exec(testClientCommand)