| package main |
| |
| import ( |
| . "fd.io/hs-test/infra" |
| ) |
| |
| func init() { |
| RegisterVethTests(EchoBuiltinTest) |
| RegisterSoloVethTests(TcpWithLossTest) |
| } |
| |
| func EchoBuiltinTest(s *VethsSuite) { |
| serverVpp := s.GetContainerByName("server-vpp").VppInstance |
| serverVeth := s.GetInterfaceByName(ServerInterfaceName) |
| |
| serverVpp.Vppctl("test echo server " + |
| " uri tcp://" + serverVeth.Ip4AddressString() + "/1234") |
| |
| clientVpp := s.GetContainerByName("client-vpp").VppInstance |
| |
| o := clientVpp.Vppctl("test echo client nclients 100 bytes 1 verbose" + |
| " syn-timeout 100 test-timeout 100" + |
| " uri tcp://" + serverVeth.Ip4AddressString() + "/1234") |
| s.Log(o) |
| s.AssertNotContains(o, "failed:") |
| } |
| |
| // unstable with multiple workers |
| func TcpWithLossTest(s *VethsSuite) { |
| s.SkipIfMultiWorker() |
| serverVpp := s.GetContainerByName("server-vpp").VppInstance |
| |
| serverVeth := s.GetInterfaceByName(ServerInterfaceName) |
| serverVpp.Vppctl("test echo server uri tcp://%s/20022", |
| serverVeth.Ip4AddressString()) |
| |
| clientVpp := s.GetContainerByName("client-vpp").VppInstance |
| |
| // Ensure that VPP doesn't abort itself with NSIM enabled |
| // Warning: Removing this ping will make VPP crash! |
| clientVpp.Vppctl("ping %s", serverVeth.Ip4AddressString()) |
| |
| // Add loss of packets with Network Delay Simulator |
| clientVpp.Vppctl("set nsim poll-main-thread delay 0.01 ms bandwidth 40 gbit" + |
| " packet-size 1400 packets-per-drop 1000") |
| |
| name := s.GetInterfaceByName(ClientInterfaceName).Name() |
| clientVpp.Vppctl("nsim output-feature enable-disable host-" + name) |
| |
| // Do echo test from client-vpp container |
| output := clientVpp.Vppctl("test echo client uri tcp://%s/20022 verbose echo-bytes mbytes 50", |
| serverVeth.Ip4AddressString()) |
| s.Log(output) |
| s.AssertNotEqual(len(output), 0) |
| s.AssertNotContains(output, "failed", output) |
| } |