X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=extras%2Fhs-test%2Fvcl_test.go;h=f4273c87b14f2a51f0b6471ddab1ab36dd9180a9;hb=f34f32f31925cba0ed8ef034184e0de1c7398487;hp=8c4afe8fe300079dc53a786004ba92a8f3a9996b;hpb=229f5fcf188cf710f4a8fb269d92f1a1d04a99da;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 8c4afe8fe30..f4273c87b14 --- a/extras/hs-test/vcl_test.go +++ b/extras/hs-test/vcl_test.go @@ -1,86 +1,130 @@ package main import ( - "fmt" - - "github.com/edwarnicke/exechelper" + "time" ) -func (s *Veths2Suite) TestVclEchoQuic() { - s.T().Skip("quic test skipping..") +func (s *VethsSuite) TestVclEchoQuic() { + s.skip("quic test skipping..") s.testVclEcho("quic") } -func (s *Veths2Suite) TestVclEchoUdp() { - s.T().Skip("udp echo currently broken in vpp, skipping..") +func (s *VethsSuite) TestVclEchoUdp() { + s.skip("udp echo currently broken in vpp, skipping..") s.testVclEcho("udp") } -func (s *Veths2Suite) TestVclEchoTcp() { +func (s *VethsSuite) TestVclEchoTcp() { s.testVclEcho("tcp") } -func (s *Veths2Suite) testVclEcho(proto string) { - t := s.T() - - exechelper.Run("docker volume create --name=echo-srv-vol") - exechelper.Run("docker volume create --name=echo-cln-vol") - - srvInstance := "vpp-echo-srv" - clnInstance := "vpp-echo-cln" - echoSrv := "echo-srv" - echoCln := "echo-cln" - - err := dockerRun(srvInstance, "-v echo-srv-vol:/tmp/2veths") - if err != nil { - t.Errorf("%v", err) - return - } - defer func() { exechelper.Run("docker stop " + srvInstance) }() - - err = dockerRun(clnInstance, "-v echo-cln-vol:/tmp/2veths") - if err != nil { - t.Errorf("%v", err) - return - } - defer func() { exechelper.Run("docker stop " + clnInstance) }() - - err = dockerRun(echoSrv, fmt.Sprintf("-v echo-srv-vol:/tmp/%s", echoSrv)) - if err != nil { - t.Errorf("%v", err) - return - } - defer func() { exechelper.Run("docker stop " + echoSrv) }() - - err = dockerRun(echoCln, fmt.Sprintf("-v echo-cln-vol:/tmp/%s", echoCln)) - if err != nil { - t.Errorf("%v", err) - return - } - defer func() { exechelper.Run("docker stop " + echoCln) }() - - _, err = hstExec("2veths srv", srvInstance) - if err != nil { - t.Errorf("%v", err) - return - } - - _, err = hstExec("2veths cln", clnInstance) - if err != nil { - t.Errorf("%v", err) - return - } +func (s *VethsSuite) testVclEcho(proto string) { + srvVppContainer := s.getContainerByName("server-vpp") + + _, err := srvVppContainer.execAction("Configure2Veths srv") + s.assertNil(err) + + clnVppContainer := s.getContainerByName("client-vpp") + + _, err = clnVppContainer.execAction("Configure2Veths cln") + s.assertNil(err) + + echoSrvContainer := s.getContainerByName("server-application") // run server app - _, err = hstExec("echo-server "+proto, echoSrv) - if err != nil { - t.Errorf("echo server: %v", err) - return - } - - o, err := hstExec("echo-client "+proto, echoCln) - if err != nil { - t.Errorf("echo client: %v", err) - } - fmt.Println(o) + _, err = echoSrvContainer.execAction("RunEchoServer " + proto) + s.assertNil(err) + + echoClnContainer := s.getContainerByName("client-application") + + o, err := echoClnContainer.execAction("RunEchoClient " + proto) + s.assertNil(err) + + s.log(o) +} + +func (s *VethsSuite) TestVclRetryAttach() { + s.skip() + s.testRetryAttach("tcp") +} + +func (s *VethsSuite) testRetryAttach(proto string) { + srvVppContainer := s.getContainerByName("server-vpp") + + _, err := srvVppContainer.execAction("Configure2Veths srv-with-preset-hw-addr") + s.assertNil(err) + + clnVppContainer := s.getContainerByName("client-vpp") + + _, err = clnVppContainer.execAction("Configure2Veths cln") + s.assertNil(err) + + echoSrvContainer := s.getContainerByName("server-application") + _, err = echoSrvContainer.execAction("RunVclEchoServer " + proto) + 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.") + echoClnContainer := s.getContainerByName("client-application") + _, err = echoClnContainer.execAction("RunVclEchoClient " + proto) + s.assertNil(err) + s.log("... First test ended. Stopping VPP server now.") + + // Stop server-vpp-instance, start it again and then run vcl-test-client once more + 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) + + 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 + + s.log("... Running second echo client test, after disconnect and re-attachment.") + _, err = echoClnContainer.execAction("RunVclEchoClient " + proto) + s.assertNil(err) + s.log("Done.") +} + +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") + s.log(output) }