X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fhs-test%2Fvcl_test.go;h=a949565f299296843ef7439422379fe3293c9d9f;hb=5ebdd51c605fd64875e682ce7eab69ebda1518eb;hp=8077554271226621883ef62edaaefe59a49f7825;hpb=db823ed6e9543741f6969ff160314093002e037e;p=vpp.git diff --git a/extras/hs-test/vcl_test.go b/extras/hs-test/vcl_test.go old mode 100755 new mode 100644 index 80775542712..a949565f299 --- a/extras/hs-test/vcl_test.go +++ b/extras/hs-test/vcl_test.go @@ -5,127 +5,148 @@ import ( "time" ) -func (s *VethsSuite) TestVclEchoQuic() { - s.T().Skip("quic test skipping..") - s.testVclEcho("quic") +func getVclConfig(c *Container, ns_id_optional ...string) string { + var s Stanza + ns_id := "default" + if len(ns_id_optional) > 0 { + ns_id = ns_id_optional[0] + } + s.newStanza("vcl"). + append(fmt.Sprintf("app-socket-api %[1]s/var/run/app_ns_sockets/%[2]s", c.getContainerWorkDir(), ns_id)). + append("app-scope-global"). + append("app-scope-local"). + append("use-mq-eventfd") + if len(ns_id_optional) > 0 { + s.append(fmt.Sprintf("namespace-id %[1]s", ns_id)). + append(fmt.Sprintf("namespace-secret %[1]s", ns_id)) + } + return s.close().toString() } -func (s *VethsSuite) TestVclEchoUdp() { - s.T().Skip("udp echo currently broken in vpp, skipping..") - s.testVclEcho("udp") +func (s *VethsSuite) TestXEchoVclClientUdp() { + s.testXEchoVclClient("udp") } -func (s *VethsSuite) TestVclEchoTcp() { - s.testVclEcho("tcp") +func (s *VethsSuite) TestXEchoVclClientTcp() { + s.testXEchoVclClient("tcp") } -func (s *VethsSuite) testVclEcho(proto string) { - srvVppContainer := s.getContainerByName("server-vpp") +func (s *VethsSuite) testXEchoVclClient(proto string) { + port := "12345" + serverVpp := s.getContainerByName("server-vpp").vppInstance + + serverVeth := s.netInterfaces[serverInterfaceName] + serverVpp.vppctl("test echo server uri %s://%s/%s fifo-size 64k", proto, serverVeth.ip4AddressString(), port) + + echoClnContainer := s.getTransientContainerByName("client-app") + echoClnContainer.createFile("/vcl.conf", getVclConfig(echoClnContainer)) + + testClientCommand := "vcl_test_client -N 100 -p " + proto + " " + serverVeth.ip4AddressString() + " " + port + s.log(testClientCommand) + echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf") + o := echoClnContainer.exec(testClientCommand) + s.log(o) + s.assertContains(o, "CLIENT RESULTS") +} + +func (s *VethsSuite) TestXEchoVclServerUdp() { + s.testXEchoVclServer("udp") +} + +func (s *VethsSuite) TestXEchoVclServerTcp() { + s.testXEchoVclServer("tcp") +} + +func (s *VethsSuite) testXEchoVclServer(proto string) { + port := "12345" + srvVppCont := s.getContainerByName("server-vpp") + srvAppCont := s.getContainerByName("server-app") + + srvAppCont.createFile("/vcl.conf", getVclConfig(srvVppCont)) + srvAppCont.addEnvVar("VCL_CONFIG", "/vcl.conf") + vclSrvCmd := fmt.Sprintf("vcl_test_server -p %s %s", proto, port) + srvAppCont.execServer(vclSrvCmd) - _, err := srvVppContainer.execAction("Configure2Veths srv") - s.assertNil(err) + serverVeth := s.netInterfaces[serverInterfaceName] + serverVethAddress := serverVeth.ip4AddressString() - clnVppContainer := s.getContainerByName("client-vpp") + clientVpp := s.getContainerByName("client-vpp").vppInstance + o := clientVpp.vppctl("test echo client uri %s://%s/%s fifo-size 64k verbose mbytes 2", proto, serverVethAddress, port) + s.log(o) + s.assertContains(o, "Test finished at") +} - _, err = clnVppContainer.execAction("Configure2Veths cln") - s.assertNil(err) +func (s *VethsSuite) testVclEcho(proto string) { + port := "12345" + srvVppCont := s.getContainerByName("server-vpp") + srvAppCont := s.getContainerByName("server-app") - echoSrvContainer := s.getContainerByName("server-application") + srvAppCont.createFile("/vcl.conf", getVclConfig(srvVppCont)) + srvAppCont.addEnvVar("VCL_CONFIG", "/vcl.conf") + srvAppCont.execServer("vcl_test_server " + port) - // run server app - _, err = echoSrvContainer.execAction("RunEchoServer "+proto) - s.assertNil(err) + serverVeth := s.netInterfaces[serverInterfaceName] + serverVethAddress := serverVeth.ip4AddressString() - echoClnContainer := s.getContainerByName("client-application") + echoClnContainer := s.getTransientContainerByName("client-app") + echoClnContainer.createFile("/vcl.conf", getVclConfig(echoClnContainer)) - o, err := echoClnContainer.execAction("RunEchoClient "+proto) - s.assertNil(err) + testClientCommand := "vcl_test_client -p " + proto + " " + serverVethAddress + " " + port + echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf") + o := echoClnContainer.exec(testClientCommand) + s.log(o) +} - fmt.Println(o) +func (s *VethsSuite) TestVclEchoTcp() { + s.testVclEcho("tcp") +} + +func (s *VethsSuite) TestVclEchoUdp() { + s.testVclEcho("udp") } func (s *VethsSuite) TestVclRetryAttach() { - s.T().Skip() + s.skip("this test takes too long, for now it's being skipped") s.testRetryAttach("tcp") } func (s *VethsSuite) testRetryAttach(proto string) { - srvVppContainer := s.getContainerByName("server-vpp") + srvVppContainer := s.getTransientContainerByName("server-vpp") + + echoSrvContainer := s.getContainerByName("server-app") - _, err := srvVppContainer.execAction("Configure2Veths srv-with-preset-hw-addr") - s.assertNil(err) + echoSrvContainer.createFile("/vcl.conf", getVclConfig(echoSrvContainer)) - clnVppContainer := s.getContainerByName("client-vpp") + echoSrvContainer.addEnvVar("VCL_CONFIG", "/vcl.conf") + echoSrvContainer.execServer("vcl_test_server -p " + proto + " 12346") - _, err = clnVppContainer.execAction("Configure2Veths cln") - s.assertNil(err) + s.log("This whole test case can take around 3 minutes to run. Please be patient.") + s.log("... Running first echo client test, before disconnect.") - echoSrvContainer := s.getContainerByName("server-application") - _, err = echoSrvContainer.execAction("RunVclEchoServer "+proto) - s.assertNil(err) + serverVeth := s.netInterfaces[serverInterfaceName] + serverVethAddress := serverVeth.ip4AddressString() - fmt.Println("This whole test case can take around 3 minutes to run. Please be patient.") - fmt.Println("... Running first echo client test, before disconnect.") - echoClnContainer := s.getContainerByName("client-application") - _, err = echoClnContainer.execAction("RunVclEchoClient "+proto) - s.assertNil(err) - fmt.Println("... First test ended. Stopping VPP server now.") + echoClnContainer := s.getTransientContainerByName("client-app") + echoClnContainer.createFile("/vcl.conf", getVclConfig(echoClnContainer)) + + testClientCommand := "vcl_test_client -U -p " + proto + " " + serverVethAddress + " 12346" + echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf") + o := echoClnContainer.exec(testClientCommand) + s.log(o) + s.log("... First test ended. Stopping VPP server now.") // Stop server-vpp-instance, start it again and then run vcl-test-client once more + srvVppContainer.vppInstance.disconnect() stopVppCommand := "/bin/bash -c 'ps -C vpp_main -o pid= | xargs kill -9'" - _, err = srvVppContainer.exec(stopVppCommand) - s.assertNil(err) - time.Sleep(5 * time.Second) // Give parent process time to reap the killed child process - stopVppCommand = "/bin/bash -c 'ps -C hs-test -o pid= | xargs kill -9'" - _, err = srvVppContainer.exec(stopVppCommand) - s.assertNil(err) - _, err = srvVppContainer.execAction("Configure2Veths srv-with-preset-hw-addr") - s.assertNil(err) - - fmt.Println("... VPP server is starting again, so waiting for a bit.") - time.Sleep(30 * time.Second) // Wait a moment for the re-attachment to happen + srvVppContainer.exec(stopVppCommand) - fmt.Println("... Running second echo client test, after disconnect and re-attachment.") - _, err = echoClnContainer.execAction("RunVclEchoClient "+proto) - s.assertNil(err) - fmt.Println("Done.") -} + s.setupServerVpp() + + s.log("... VPP server is starting again, so waiting for a bit.") + time.Sleep(30 * time.Second) // Wait a moment for the re-attachment to happen -func (s *VethsSuite) TestTcpWithLoss() { - serverContainer := s.getContainerByName("server-vpp") - - serverVpp := NewVppInstance(serverContainer) - s.assertNotNil(serverVpp) - serverVpp.set2VethsServer() - err := serverVpp.start() - s.assertNil(err, "starting VPP failed") - - _, err = serverVpp.vppctl("test echo server uri tcp://10.10.10.1/20022") - s.assertNil(err, "starting echo server failed") - - clientContainer := s.getContainerByName("client-vpp") - - clientVpp := NewVppInstance(clientContainer) - s.assertNotNil(clientVpp) - clientVpp.set2VethsClient() - err = clientVpp.start() - s.assertNil(err, "starting VPP failed") - - // Ensure that VPP doesn't abort itself with NSIM enabled - // Warning: Removing this ping will make the test fail! - _, err = serverVpp.vppctl("ping 10.10.10.2") - s.assertNil(err, "ping failed") - - // Add loss of packets with Network Delay Simulator - _, err = clientVpp.vppctl("set nsim poll-main-thread delay 0.01 ms bandwidth 40 gbit packet-size 1400 packets-per-drop 1000") - s.assertNil(err, "configuring NSIM failed") - _, err = clientVpp.vppctl("nsim output-feature enable-disable host-vppcln") - s.assertNil(err, "enabling NSIM failed") - - // Do echo test from client-vpp container - output, err := clientVpp.vppctl("test echo client uri tcp://10.10.10.1/20022 mbytes 50") - s.assertNil(err) - s.assertEqual(true, len(output) != 0) - s.assertNotContains(output, "failed: timeout") - fmt.Println(output) + s.log("... Running second echo client test, after disconnect and re-attachment.") + o = echoClnContainer.exec(testClientCommand) + s.log(o) + s.log("Done.") }