+ 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)