diff --git a/extras/hs-test/cpu_pinning_test.go b/extras/hs-test/cpu_pinning_test.go index b8dec65937e..f1f689cc373 100644 --- a/extras/hs-test/cpu_pinning_test.go +++ b/extras/hs-test/cpu_pinning_test.go @@ -11,7 +11,7 @@ func init() { // TODO: Add more CPU configuration tests func DefaultCpuConfigurationTest(s *CpuPinningSuite) { - vpp := s.GetContainerByName(SingleTopoContainerVpp).VppInstance + vpp := s.Containers.Vpp.VppInstance s.AssertNil(vpp.Start()) } @@ -23,7 +23,7 @@ func SkipCoresTest(s *CpuPinningSuite) { SkipCores: 1, } - vpp := s.GetContainerByName(SingleTopoContainerVpp).VppInstance + vpp := s.Containers.Vpp.VppInstance vpp.CpuConfig = skipCoresConfiguration s.AssertNil(vpp.Start()) diff --git a/extras/hs-test/echo_test.go b/extras/hs-test/echo_test.go index 6b4739a5457..f27ad077928 100644 --- a/extras/hs-test/echo_test.go +++ b/extras/hs-test/echo_test.go @@ -10,17 +10,16 @@ func init() { } func EchoBuiltinTest(s *VethsSuite) { - serverVpp := s.GetContainerByName("server-vpp").VppInstance - serverVeth := s.GetInterfaceByName(ServerInterfaceName) + serverVpp := s.Containers.ServerVpp.VppInstance serverVpp.Vppctl("test echo server " + - " uri tcp://" + serverVeth.Ip4AddressString() + "/1234") + " uri tcp://" + s.Interfaces.Server.Ip4AddressString() + "/1234") - clientVpp := s.GetContainerByName("client-vpp").VppInstance + clientVpp := s.Containers.ClientVpp.VppInstance o := clientVpp.Vppctl("test echo client nclients 100 bytes 1 verbose" + " syn-timeout 100 test-timeout 100" + - " uri tcp://" + serverVeth.Ip4AddressString() + "/1234") + " uri tcp://" + s.Interfaces.Server.Ip4AddressString() + "/1234") s.Log(o) s.AssertNotContains(o, "failed:") } @@ -28,28 +27,26 @@ func EchoBuiltinTest(s *VethsSuite) { // unstable with multiple workers func TcpWithLossTest(s *VethsSuite) { s.SkipIfMultiWorker() - serverVpp := s.GetContainerByName("server-vpp").VppInstance + serverVpp := s.Containers.ServerVpp.VppInstance - serverVeth := s.GetInterfaceByName(ServerInterfaceName) serverVpp.Vppctl("test echo server uri tcp://%s/20022", - serverVeth.Ip4AddressString()) + s.Interfaces.Server.Ip4AddressString()) - clientVpp := s.GetContainerByName("client-vpp").VppInstance + clientVpp := s.Containers.ClientVpp.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()) + clientVpp.Vppctl("ping %s", s.Interfaces.Server.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) + clientVpp.Vppctl("nsim output-feature enable-disable host-" + s.Interfaces.Server.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.Interfaces.Server.Ip4AddressString()) s.Log(output) s.AssertNotEqual(len(output), 0) s.AssertNotContains(output, "failed", output) diff --git a/extras/hs-test/http_test.go b/extras/hs-test/http_test.go index a65497054d3..90c3b77b156 100644 --- a/extras/hs-test/http_test.go +++ b/extras/hs-test/http_test.go @@ -67,7 +67,7 @@ func HttpGetTpsInterruptModeTest(s *NoTopoSuite) { } func HttpGetTpsTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() url := "http://" + serverAddress + ":8080/test_file_10M" @@ -100,7 +100,7 @@ func HttpPostTpsInterruptModeTest(s *NoTopoSuite) { } func HttpPostTpsTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() url := "http://" + serverAddress + ":8080/test_file_10M" @@ -112,7 +112,7 @@ func HttpPostTpsTest(s *NoTopoSuite) { func HttpPersistentConnectionTest(s *NoTopoSuite) { // testing url handler app do not support multi-thread s.SkipIfMultiWorker() - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers")) s.Log(vpp.Vppctl("test-url-handler enable")) @@ -177,7 +177,7 @@ func HttpPersistentConnectionTest(s *NoTopoSuite) { func HttpPipeliningTest(s *NoTopoSuite) { // testing url handler app do not support multi-thread s.SkipIfMultiWorker() - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) s.Log(vpp.Vppctl("test-url-handler enable")) @@ -210,16 +210,11 @@ func HttpPipeliningTest(s *NoTopoSuite) { } func HttpCliTest(s *VethsSuite) { - serverContainer := s.GetContainerByName("server-vpp") - clientContainer := s.GetContainerByName("client-vpp") + s.Containers.ServerVpp.VppInstance.Vppctl("http cli server") - serverVeth := s.GetInterfaceByName(ServerInterfaceName) + uri := "http://" + s.Interfaces.Server.Ip4AddressString() + "/80" - serverContainer.VppInstance.Vppctl("http cli server") - - uri := "http://" + serverVeth.Ip4AddressString() + "/80" - - o := clientContainer.VppInstance.Vppctl("http cli client" + + o := s.Containers.ClientVpp.VppInstance.Vppctl("http cli client" + " uri " + uri + " query /show/vlib/graph") s.Log(o) @@ -228,12 +223,9 @@ func HttpCliTest(s *VethsSuite) { } func HttpCliConnectErrorTest(s *VethsSuite) { - clientContainer := s.GetContainerByName("client-vpp") - serverVeth := s.GetInterfaceByName(ServerInterfaceName) + uri := "http://" + s.Interfaces.Server.Ip4AddressString() + "/80" - uri := "http://" + serverVeth.Ip4AddressString() + "/80" - - o := clientContainer.VppInstance.Vppctl("http cli client" + + o := s.Containers.ClientVpp.VppInstance.Vppctl("http cli client" + " uri " + uri + " query /show/vlib/graph") s.Log(o) @@ -257,7 +249,7 @@ func HttpClientTest(s *NoTopoSuite) { server.Start() defer server.Close() uri := "http://" + serverAddress + "/80" - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance o := vpp.Vppctl("http cli client uri " + uri + " query /test") s.Log(o) @@ -280,7 +272,7 @@ func HttpClientErrRespTest(s *NoTopoSuite) { server.Start() defer server.Close() uri := "http://" + serverAddress + "/80" - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance o := vpp.Vppctl("http cli client uri " + uri + " query /test") s.Log(o) @@ -308,7 +300,7 @@ func HttpClientPostFormTest(s *NoTopoSuite) { defer server.Close() uri := "http://" + serverAddress + "/80" - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance o := vpp.Vppctl("http client post verbose header Hello:World uri " + uri + " target /test data " + body) s.Log(o) @@ -334,7 +326,7 @@ func HttpClientGetNoResponseBodyTest(s *NoTopoSuite) { func httpClientGet(s *NoTopoSuite, response string, size int) { serverAddress := s.HostAddr() - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance server := ghttp.NewUnstartedServer() l, err := net.Listen("tcp", serverAddress+":80") @@ -394,7 +386,7 @@ func HttpClientPostRepeat(s *NoTopoSuite) { func httpClientRepeat(s *NoTopoSuite, requestMethod string) { replyCount := 0 - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.HostAddr() repeatAmount := 10000 server := startSimpleServer(s, &replyCount, serverAddress) @@ -446,7 +438,7 @@ func httpClientRepeat(s *NoTopoSuite, requestMethod string) { func HttpClientGetTimeout(s *NoTopoSuite) { serverAddress := s.HostAddr() - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance server := ghttp.NewUnstartedServer() l, err := net.Listen("tcp", serverAddress+":"+s.GetPortFromPpid()) @@ -473,7 +465,7 @@ func HttpClientGetTimeout(s *NoTopoSuite) { func httpClientPostFile(s *NoTopoSuite, usePtr bool, fileSize int) { serverAddress := s.HostAddr() - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance fileName := "/tmp/test_file.txt" s.Log(vpp.Container.Exec(false, "fallocate -l "+strconv.Itoa(fileSize)+" "+fileName)) s.Log(vpp.Container.Exec(false, "ls -la "+fileName)) @@ -513,7 +505,7 @@ func HttpClientPostFilePtrTest(s *NoTopoSuite) { } func HttpUnitTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance o := vpp.Vppctl("test http all") s.Log(o) s.AssertContains(o, "SUCCESS") @@ -521,7 +513,7 @@ func HttpUnitTest(s *NoTopoSuite) { func HttpStaticPromTest(s *NoTopoSuite) { query := "stats.prom" - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers")) s.Log(vpp.Vppctl("prom enable")) @@ -559,7 +551,7 @@ func promReqWg(s *NoTopoSuite, url string, wg *sync.WaitGroup) { } func PromConcurrentConnectionsTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() url := "http://" + serverAddress + ":80/stats.prom" @@ -577,7 +569,7 @@ func PromConcurrentConnectionsTest(s *NoTopoSuite) { } func PromConsecutiveConnectionsTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() url := "http://" + serverAddress + ":80/stats.prom" @@ -593,7 +585,7 @@ func PromConsecutiveConnectionsTest(s *NoTopoSuite) { func PromMemLeakTest(s *NoTopoSuite) { s.SkipUnlessLeakCheck() - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() url := "http://" + serverAddress + ":80/stats.prom" @@ -628,35 +620,34 @@ func PromMemLeakTest(s *NoTopoSuite) { func HttpClientGetMemLeakTest(s *VethsSuite) { s.SkipUnlessLeakCheck() - serverContainer := s.GetContainerByName("server-vpp").VppInstance - clientContainer := s.GetContainerByName("client-vpp").VppInstance - serverVeth := s.GetInterfaceByName(ServerInterfaceName) + serverVpp := s.Containers.ServerVpp.VppInstance + clientVpp := s.Containers.ClientVpp.VppInstance /* no goVPP less noise */ - clientContainer.Disconnect() + clientVpp.Disconnect() - serverContainer.Vppctl("http cli server") + serverVpp.Vppctl("http cli server") - uri := "http://" + serverVeth.Ip4AddressString() + "/80" + uri := "http://" + s.Interfaces.Server.Ip4AddressString() + "/80" /* warmup request (FIB) */ - clientContainer.Vppctl("http cli client uri " + uri + " query /show/version") + clientVpp.Vppctl("http cli client uri " + uri + " query /show/version") /* let's give it some time to clean up sessions, so local port can be reused and we have less noise */ time.Sleep(time.Second * 12) - clientContainer.EnableMemoryTrace() - traces1, err := clientContainer.GetMemoryTrace() + clientVpp.EnableMemoryTrace() + traces1, err := clientVpp.GetMemoryTrace() s.AssertNil(err, fmt.Sprint(err)) - clientContainer.Vppctl("http cli client uri " + uri + " query /show/vlib/graph") + clientVpp.Vppctl("http cli client uri " + uri + " query /show/vlib/graph") /* let's give it some time to clean up sessions */ time.Sleep(time.Second * 12) - traces2, err := clientContainer.GetMemoryTrace() + traces2, err := clientVpp.GetMemoryTrace() s.AssertNil(err, fmt.Sprint(err)) - clientContainer.MemLeakCheck(traces1, traces2) + clientVpp.MemLeakCheck(traces1, traces2) } func HttpClientPostMemLeakTest(s *NoTopoSuite) { @@ -666,7 +657,7 @@ func HttpClientPostMemLeakTest(s *NoTopoSuite) { body := "field1=value1&field2=value2" uri := "http://" + serverAddress + "/80" - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance /* no goVPP less noise */ vpp.Disconnect() @@ -711,7 +702,7 @@ func HttpClientPostMemLeakTest(s *NoTopoSuite) { func HttpInvalidClientRequestMemLeakTest(s *NoTopoSuite) { s.SkipUnlessLeakCheck() - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() /* no goVPP less noise */ @@ -746,18 +737,17 @@ func runWrkPerf(s *NoTopoSuite) { nConnections := 1000 serverAddress := s.VppAddr() - wrkCont := s.GetContainerByName("wrk") args := fmt.Sprintf("-c %d -t 2 -d 30s http://%s:80/64B", nConnections, serverAddress) - wrkCont.ExtraRunningArgs = args - wrkCont.Run() + s.Containers.Wrk.ExtraRunningArgs = args + s.Containers.Wrk.Run() s.Log("Please wait for 30s, test is running.") - o, err := wrkCont.GetOutput() + o, err := s.Containers.Wrk.GetOutput() s.Log(o) s.AssertEmpty(err, "err: '%s'", err) } func HttpStaticFileHandlerWrkTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Container.Exec(false, "mkdir -p "+wwwRootPath) content := "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" @@ -768,7 +758,7 @@ func HttpStaticFileHandlerWrkTest(s *NoTopoSuite) { } func HttpStaticUrlHandlerWrkTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers private-segment-size 256m")) s.Log(vpp.Vppctl("test-url-handler enable")) @@ -795,7 +785,7 @@ func HttpStaticFileHandlerTestFunction(s *NoTopoSuite, max_age string) { content := "
Hello
" content2 := "Page
" - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance vpp.Container.Exec(false, "mkdir -p "+wwwRootPath) err := vpp.Container.CreateFile(wwwRootPath+"/index.html", content) s.AssertNil(err, fmt.Sprint(err)) @@ -851,7 +841,7 @@ func HttpStaticFileHandlerTestFunction(s *NoTopoSuite, max_age string) { } func HttpStaticPathTraversalTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance vpp.Container.Exec(false, "mkdir -p "+wwwRootPath) vpp.Container.Exec(false, "mkdir -p "+"/tmp/secret_folder") err := vpp.Container.CreateFile("/tmp/secret_folder/secret_file.txt", "secret") @@ -873,7 +863,7 @@ func HttpStaticPathTraversalTest(s *NoTopoSuite) { } func HttpStaticMovedTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance vpp.Container.Exec(false, "mkdir -p "+wwwRootPath+"/tmp.aaa") err := vpp.Container.CreateFile(wwwRootPath+"/tmp.aaa/index.html", "Hello
") s.AssertNil(err, fmt.Sprint(err)) @@ -895,7 +885,7 @@ func HttpStaticMovedTest(s *NoTopoSuite) { } func HttpStaticNotFoundTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance vpp.Container.Exec(false, "mkdir -p "+wwwRootPath) serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server www-root " + wwwRootPath + " uri tcp://" + serverAddress + "/80 debug")) @@ -914,7 +904,7 @@ func HttpStaticNotFoundTest(s *NoTopoSuite) { } func HttpCliMethodNotAllowedTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -932,7 +922,7 @@ func HttpCliMethodNotAllowedTest(s *NoTopoSuite) { } func HttpCliBadRequestTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -949,7 +939,7 @@ func HttpCliBadRequestTest(s *NoTopoSuite) { } func HttpStaticBuildInUrlGetVersionTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tls://" + serverAddress + "/80 url-handlers debug")) @@ -973,7 +963,7 @@ func HttpStaticBuildInUrlGetVersionTest(s *NoTopoSuite) { } func HttpStaticBuildInUrlGetVersionVerboseTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) @@ -997,7 +987,7 @@ func HttpStaticBuildInUrlGetVersionVerboseTest(s *NoTopoSuite) { } func HttpStaticBuildInUrlGetIfListTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) @@ -1017,7 +1007,7 @@ func HttpStaticBuildInUrlGetIfListTest(s *NoTopoSuite) { } func HttpStaticBuildInUrlGetIfStatsTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) @@ -1045,7 +1035,7 @@ func validatePostInterfaceStats(s *NoTopoSuite, data string) { } func HttpStaticBuildInUrlPostIfStatsTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) body := []byte(s.VppIfName()) @@ -1066,7 +1056,7 @@ func HttpStaticBuildInUrlPostIfStatsTest(s *NoTopoSuite) { } func HttpStaticMacTimeTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) s.Log(vpp.Vppctl("mactime enable-disable " + s.VppIfName())) @@ -1083,7 +1073,7 @@ func HttpStaticMacTimeTest(s *NoTopoSuite) { s.AssertNil(err, fmt.Sprint(err)) s.AssertContains(string(data), "mactime") s.AssertContains(string(data), s.HostAddr()) - s.AssertContains(string(data), s.GetInterfaceByName(TapInterfaceName).HwAddress.String()) + s.AssertContains(string(data), s.Interfaces.Tap.HwAddress.String()) s.AssertHttpHeaderWithValue(resp, "Content-Type", "application/json") parsedTime, err := time.Parse(time.RFC1123, resp.Header.Get("Date")) s.AssertNil(err, fmt.Sprint(err)) @@ -1092,7 +1082,7 @@ func HttpStaticMacTimeTest(s *NoTopoSuite) { } func HttpInvalidRequestLineTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1138,7 +1128,7 @@ func HttpInvalidRequestLineTest(s *NoTopoSuite) { } func HttpRequestLineTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1149,7 +1139,7 @@ func HttpRequestLineTest(s *NoTopoSuite) { } func HttpInvalidTargetSyntaxTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) @@ -1197,7 +1187,7 @@ func HttpInvalidTargetSyntaxTest(s *NoTopoSuite) { } func HttpInvalidContentLengthTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1216,7 +1206,7 @@ func HttpInvalidContentLengthTest(s *NoTopoSuite) { } func HttpContentLengthTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug")) ifName := s.VppIfName() @@ -1238,7 +1228,7 @@ func HttpContentLengthTest(s *NoTopoSuite) { } func HttpMethodNotImplementedTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1255,7 +1245,7 @@ func HttpMethodNotImplementedTest(s *NoTopoSuite) { } func HttpVersionNotSupportedTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1265,7 +1255,7 @@ func HttpVersionNotSupportedTest(s *NoTopoSuite) { } func HttpUriDecodeTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1285,7 +1275,7 @@ func HttpUriDecodeTest(s *NoTopoSuite) { } func HttpHeadersTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1338,7 +1328,7 @@ func HttpHeadersTest(s *NoTopoSuite) { } func HttpInvalidHeadersTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1376,7 +1366,7 @@ func HttpInvalidHeadersTest(s *NoTopoSuite) { } func HeaderServerTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() vpp.Vppctl("http cli server") @@ -1393,7 +1383,7 @@ func HeaderServerTest(s *NoTopoSuite) { } func HttpConnTimeoutTest(s *NoTopoSuite) { - vpp := s.GetContainerByName("vpp").VppInstance + vpp := s.Containers.Vpp.VppInstance serverAddress := s.VppAddr() s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers debug keepalive-timeout 2")) diff --git a/extras/hs-test/infra/hst_suite.go b/extras/hs-test/infra/hst_suite.go index 0cedfc692b0..1e189b62b8f 100644 --- a/extras/hs-test/infra/hst_suite.go +++ b/extras/hs-test/infra/hst_suite.go @@ -47,7 +47,7 @@ var NumaAwareCpuAlloc bool var TestTimeout time.Duration type HstSuite struct { - Containers map[string]*Container + AllContainers map[string]*Container StartedContainers []*Container Volumes []string NetConfigs []NetConfig @@ -240,7 +240,7 @@ func (s *HstSuite) SetupTest() { } func (s *HstSuite) SetupContainers() { - for _, container := range s.Containers { + for _, container := range s.AllContainers { if !container.IsOptional { container.Run() } @@ -527,7 +527,7 @@ func (s *HstSuite) GetInterfaceByName(name string) *NetInterface { } func (s *HstSuite) GetContainerByName(name string) *Container { - return s.Containers[s.ProcessIndex+name+s.Ppid] + return s.AllContainers[s.ProcessIndex+name+s.Ppid] } /* @@ -535,7 +535,7 @@ func (s *HstSuite) GetContainerByName(name string) *Container { * are not able to modify the original container and affect other tests by doing that */ func (s *HstSuite) GetTransientContainerByName(name string) *Container { - containerCopy := *s.Containers[s.ProcessIndex+name+s.Ppid] + containerCopy := *s.AllContainers[s.ProcessIndex+name+s.Ppid] return &containerCopy } @@ -559,7 +559,7 @@ func (s *HstSuite) LoadContainerTopology(topologyName string) { s.Volumes = append(s.Volumes, hostDir) } - s.Containers = make(map[string]*Container) + s.AllContainers = make(map[string]*Container) for _, elem := range yamlTopo.Containers { newContainer, err := newContainer(s, elem) newContainer.Suite = s @@ -567,12 +567,12 @@ func (s *HstSuite) LoadContainerTopology(topologyName string) { if err != nil { Fail("container config error: " + fmt.Sprint(err)) } - s.Containers[newContainer.Name] = newContainer + s.AllContainers[newContainer.Name] = newContainer } if *DryRun { s.Log(Colors.pur + "* Containers used by this suite (some might already be running):" + Colors.rst) - for name := range s.Containers { + for name := range s.AllContainers { s.Log("%sdocker start %s && docker exec -it %s bash%s", Colors.pur, name, name, Colors.rst) } } diff --git a/extras/hs-test/infra/suite_cpu_pinning.go b/extras/hs-test/infra/suite_cpu_pinning.go index 57efbe7f4f0..63ebd8b6ef5 100644 --- a/extras/hs-test/infra/suite_cpu_pinning.go +++ b/extras/hs-test/infra/suite_cpu_pinning.go @@ -15,6 +15,12 @@ var cpuPinningSoloTests = map[string][]func(s *CpuPinningSuite){} type CpuPinningSuite struct { HstSuite previousMaxContainerCount int + Interfaces struct { + Tap *NetInterface + } + Containers struct { + Vpp *Container + } } func RegisterCpuPinningTests(tests ...func(s *CpuPinningSuite)) { @@ -29,6 +35,8 @@ func (s *CpuPinningSuite) SetupSuite() { s.HstSuite.SetupSuite() s.LoadNetworkTopology("tap") s.LoadContainerTopology("singleCpuPinning") + s.Interfaces.Tap = s.GetInterfaceByName("htaphost") + s.Containers.Vpp = s.GetContainerByName("vpp") } func (s *CpuPinningSuite) SetupTest() { @@ -39,8 +47,7 @@ func (s *CpuPinningSuite) SetupTest() { s.SkipIfNotEnoughAvailableCpus() s.HstSuite.SetupTest() - container := s.GetContainerByName(SingleTopoContainerVpp) - vpp, err := container.newVppInstance(container.AllocatedCpus) + vpp, err := s.Containers.Vpp.newVppInstance(s.Containers.Vpp.AllocatedCpus) s.AssertNotNil(vpp, fmt.Sprint(err)) if *DryRun { diff --git a/extras/hs-test/infra/suite_envoy_proxy.go b/extras/hs-test/infra/suite_envoy_proxy.go index 754705d24e0..c20cf291388 100644 --- a/extras/hs-test/infra/suite_envoy_proxy.go +++ b/extras/hs-test/infra/suite_envoy_proxy.go @@ -15,16 +15,21 @@ import ( . "github.com/onsi/ginkgo/v2" ) -const ( - VppContainerName = "vpp" - EnvoyProxyContainerName = "envoy-vcl" -) - type EnvoyProxySuite struct { HstSuite nginxPort uint16 proxyPort uint16 maxTimeout int + Interfaces struct { + Server *NetInterface + Client *NetInterface + } + Containers struct { + EnvoyProxy *Container + NginxServerTransient *Container + Vpp *Container + Curl *Container + } } var envoyProxyTests = map[string][]func(s *EnvoyProxySuite){} @@ -48,6 +53,12 @@ func (s *EnvoyProxySuite) SetupSuite() { } else { s.maxTimeout = 60 } + s.Interfaces.Client = s.GetInterfaceByName("hstcln") + s.Interfaces.Server = s.GetInterfaceByName("hstsrv") + s.Containers.NginxServerTransient = s.GetTransientContainerByName("nginx-server") + s.Containers.Vpp = s.GetContainerByName("vpp") + s.Containers.EnvoyProxy = s.GetContainerByName("envoy-vcl") + s.Containers.Curl = s.GetContainerByName("curl") } func (s *EnvoyProxySuite) SetupTest() { @@ -62,15 +73,11 @@ func (s *EnvoyProxySuite) SetupTest() { Append("evt_qs_memfd_seg"). Append("event-queue-length 100000") - vppContainer := s.GetContainerByName(VppContainerName) - vpp, err := vppContainer.newVppInstance(vppContainer.AllocatedCpus, sessionConfig) + vpp, err := s.Containers.Vpp.newVppInstance(s.Containers.Vpp.AllocatedCpus, sessionConfig) s.AssertNotNil(vpp, fmt.Sprint(err)) - clientInterface := s.GetInterfaceByName(ClientTapInterfaceName) - serverInterface := s.GetInterfaceByName(ServerTapInterfaceName) // nginx HTTP server - nginxContainer := s.GetTransientContainerByName(NginxServerContainerName) - s.AssertNil(nginxContainer.Create()) + s.AssertNil(s.Containers.NginxServerTransient.Create()) s.nginxPort = 80 nginxSettings := struct { LogPrefix string @@ -78,20 +85,19 @@ func (s *EnvoyProxySuite) SetupTest() { Port uint16 Timeout int }{ - LogPrefix: nginxContainer.Name, - Address: serverInterface.Ip4AddressString(), + LogPrefix: s.Containers.NginxServerTransient.Name, + Address: s.Interfaces.Server.Ip4AddressString(), Port: s.nginxPort, Timeout: s.maxTimeout, } - nginxContainer.CreateConfigFromTemplate( + s.Containers.NginxServerTransient.CreateConfigFromTemplate( "/nginx.conf", "./resources/nginx/nginx_server.conf", nginxSettings, ) // Envoy - envoyContainer := s.GetContainerByName(EnvoyProxyContainerName) - s.AssertNil(envoyContainer.Create()) + s.AssertNil(s.Containers.EnvoyProxy.Create()) s.proxyPort = 8080 envoySettings := struct { @@ -100,12 +106,12 @@ func (s *EnvoyProxySuite) SetupTest() { ServerPort uint16 ProxyPort uint16 }{ - LogPrefix: envoyContainer.Name, - ServerAddress: serverInterface.Ip4AddressString(), + LogPrefix: s.Containers.EnvoyProxy.Name, + ServerAddress: s.Interfaces.Server.Ip4AddressString(), ServerPort: s.nginxPort, ProxyPort: s.proxyPort, } - envoyContainer.CreateConfigFromTemplate( + s.Containers.EnvoyProxy.CreateConfigFromTemplate( "/etc/envoy/envoy.yaml", "resources/envoy/proxy.yaml", envoySettings, @@ -114,15 +120,15 @@ func (s *EnvoyProxySuite) SetupTest() { s.AssertNil(vpp.Start()) // wait for VPP to start time.Sleep(time.Second * 1) - s.AssertNil(vpp.CreateTap(clientInterface, 1, 1)) - s.AssertNil(vpp.CreateTap(serverInterface, 1, 2)) - vppContainer.Exec(false, "chmod 777 -R %s", vppContainer.GetContainerWorkDir()) + s.AssertNil(vpp.CreateTap(s.Interfaces.Client, 1, 1)) + s.AssertNil(vpp.CreateTap(s.Interfaces.Server, 1, 2)) + s.Containers.Vpp.Exec(false, "chmod 777 -R %s", s.Containers.Vpp.GetContainerWorkDir()) // Add Ipv4 ARP entry for nginx HTTP server, otherwise first request fail (HTTP error 503) arp := fmt.Sprintf("set ip neighbor %s %s %s", - serverInterface.Peer.Name(), - serverInterface.Ip4AddressString(), - serverInterface.HwAddress) + s.Interfaces.Server.Peer.Name(), + s.Interfaces.Server.Ip4AddressString(), + s.Interfaces.Server.HwAddress) if *DryRun { vpp.AppendToCliConfig(arp) @@ -131,15 +137,15 @@ func (s *EnvoyProxySuite) SetupTest() { s.Skip("Dry run mode = true") } - vppContainer.VppInstance.Vppctl(arp) - s.AssertNil(nginxContainer.Start()) - s.AssertNil(envoyContainer.Start()) + s.Containers.Vpp.VppInstance.Vppctl(arp) + s.AssertNil(s.Containers.NginxServerTransient.Start()) + s.AssertNil(s.Containers.EnvoyProxy.Start()) } func (s *EnvoyProxySuite) TearDownTest() { if CurrentSpecReport().Failed() { - s.CollectNginxLogs(NginxServerContainerName) - s.CollectEnvoyLogs(EnvoyProxyContainerName) + s.CollectNginxLogs(s.Containers.NginxServerTransient) + s.CollectEnvoyLogs(s.Containers.EnvoyProxy) } s.HstSuite.TearDownTest() } @@ -149,12 +155,12 @@ func (s *EnvoyProxySuite) ProxyPort() uint16 { } func (s *EnvoyProxySuite) ProxyAddr() string { - return s.GetInterfaceByName(ClientTapInterfaceName).Peer.Ip4AddressString() + return s.Interfaces.Client.Peer.Ip4AddressString() } func (s *EnvoyProxySuite) CurlDownloadResource(uri string) { args := fmt.Sprintf("-w @/tmp/write_out_download --max-time %d --insecure --noproxy '*' --remote-name --output-dir /tmp %s", s.maxTimeout, uri) - writeOut, log := s.RunCurlContainer(args) + writeOut, log := s.RunCurlContainer(s.Containers.Curl, args) s.AssertContains(writeOut, "GET response code: 200") s.AssertNotContains(log, "bytes remaining to read") s.AssertNotContains(log, "Operation timed out") @@ -162,7 +168,7 @@ func (s *EnvoyProxySuite) CurlDownloadResource(uri string) { func (s *EnvoyProxySuite) CurlUploadResource(uri, file string) { args := fmt.Sprintf("-w @/tmp/write_out_upload --max-time %d --insecure --noproxy '*' -T %s %s", s.maxTimeout, file, uri) - writeOut, log := s.RunCurlContainer(args) + writeOut, log := s.RunCurlContainer(s.Containers.Curl, args) s.AssertContains(writeOut, "PUT response code: 201") s.AssertNotContains(log, "Operation timed out") } diff --git a/extras/hs-test/infra/suite_iperf_linux.go b/extras/hs-test/infra/suite_iperf_linux.go index fb685f9ad96..c957978c7e6 100644 --- a/extras/hs-test/infra/suite_iperf_linux.go +++ b/extras/hs-test/infra/suite_iperf_linux.go @@ -11,15 +11,16 @@ import ( type IperfSuite struct { HstSuite + Interfaces struct { + Server *NetInterface + Client *NetInterface + } + Containers struct { + Server *Container + Client *Container + } } -const ( - ServerIperfContainerName string = "server" - ServerIperfInterfaceName string = "hstsrv" - ClientIperfContainerName string = "client" - ClientIperfInterfaceName string = "hstcln" -) - var iperfTests = map[string][]func(s *IperfSuite){} var iperfSoloTests = map[string][]func(s *IperfSuite){} @@ -35,6 +36,10 @@ func (s *IperfSuite) SetupSuite() { s.HstSuite.SetupSuite() s.ConfigureNetworkTopology("2taps") s.LoadContainerTopology("2containers") + s.Interfaces.Client = s.GetInterfaceByName("hstcln") + s.Interfaces.Server = s.GetInterfaceByName("hstsrv") + s.Containers.Server = s.GetContainerByName("server") + s.Containers.Client = s.GetContainerByName("client") } var _ = Describe("IperfSuite", Ordered, ContinueOnFailure, func() { diff --git a/extras/hs-test/infra/suite_ldp.go b/extras/hs-test/infra/suite_ldp.go index 6294fab0dd6..408fea31325 100644 --- a/extras/hs-test/infra/suite_ldp.go +++ b/extras/hs-test/infra/suite_ldp.go @@ -10,17 +10,21 @@ import ( . "github.com/onsi/ginkgo/v2" ) -// These correspond to names used in yaml config -const ( - ServerLdpInterfaceName = "srv" - ClientLdpInterfaceName = "cln" -) - var ldpTests = map[string][]func(s *LdpSuite){} var ldpSoloTests = map[string][]func(s *LdpSuite){} type LdpSuite struct { HstSuite + Interfaces struct { + Server *NetInterface + Client *NetInterface + } + Containers struct { + ServerVpp *Container + ClientVpp *Container + ServerApp *Container + ClientApp *Container + } } func RegisterLdpTests(tests ...func(s *LdpSuite)) { @@ -35,6 +39,12 @@ func (s *LdpSuite) SetupSuite() { s.HstSuite.SetupSuite() s.ConfigureNetworkTopology("2peerVeth") s.LoadContainerTopology("2peerVethLdp") + s.Interfaces.Client = s.GetInterfaceByName("cln") + s.Interfaces.Server = s.GetInterfaceByName("srv") + s.Containers.ServerVpp = s.GetContainerByName("server-vpp") + s.Containers.ClientVpp = s.GetContainerByName("client-vpp") + s.Containers.ServerApp = s.GetContainerByName("server-app") + s.Containers.ClientApp = s.GetContainerByName("client-app") } func (s *LdpSuite) SetupTest() { @@ -55,19 +65,15 @@ func (s *LdpSuite) SetupTest() { } // ... For server - serverContainer := s.GetContainerByName("server-vpp") - - serverVpp, err := serverContainer.newVppInstance(serverContainer.AllocatedCpus, sessionConfig) + serverVpp, err := s.Containers.ServerVpp.newVppInstance(s.Containers.ServerVpp.AllocatedCpus, sessionConfig) s.AssertNotNil(serverVpp, fmt.Sprint(err)) // ... For client - clientContainer := s.GetContainerByName("client-vpp") - - clientVpp, err := clientContainer.newVppInstance(clientContainer.AllocatedCpus, sessionConfig) + clientVpp, err := s.Containers.ClientVpp.newVppInstance(s.Containers.ClientVpp.AllocatedCpus, sessionConfig) s.AssertNotNil(clientVpp, fmt.Sprint(err)) - serverContainer.AddEnvVar("VCL_CONFIG", serverContainer.GetContainerWorkDir()+"/vcl.conf") - clientContainer.AddEnvVar("VCL_CONFIG", clientContainer.GetContainerWorkDir()+"/vcl.conf") + s.Containers.ServerVpp.AddEnvVar("VCL_CONFIG", s.Containers.ServerVpp.GetContainerWorkDir()+"/vcl.conf") + s.Containers.ClientVpp.AddEnvVar("VCL_CONFIG", s.Containers.ClientVpp.GetContainerWorkDir()+"/vcl.conf") for _, container := range s.StartedContainers { container.AddEnvVar("LD_PRELOAD", "/usr/lib/libvcl_ldpreload.so") @@ -75,17 +81,17 @@ func (s *LdpSuite) SetupTest() { container.AddEnvVar("VCL_DEBUG", "0") } - s.CreateVclConfig(serverContainer) - s.CreateVclConfig(clientContainer) - s.SetupServerVpp(serverContainer) - s.setupClientVpp(clientContainer) + s.CreateVclConfig(s.Containers.ServerVpp) + s.CreateVclConfig(s.Containers.ClientVpp) + s.SetupServerVpp(s.Containers.ServerVpp) + s.setupClientVpp(s.Containers.ClientVpp) if *DryRun { s.LogStartedContainers() s.Log("\n%s* LD_PRELOAD and VCL_CONFIG server/client paths:", Colors.grn) s.Log("LD_PRELOAD=/usr/lib/libvcl_ldpreload.so") - s.Log("VCL_CONFIG=%s/vcl.conf", serverContainer.GetContainerWorkDir()) - s.Log("VCL_CONFIG=%s/vcl.conf%s\n", clientContainer.GetContainerWorkDir(), Colors.rst) + s.Log("VCL_CONFIG=%s/vcl.conf", s.Containers.ServerVpp.GetContainerWorkDir()) + s.Log("VCL_CONFIG=%s/vcl.conf%s\n", s.Containers.ClientVpp.GetContainerWorkDir(), Colors.rst) s.Skip("Dry run mode = true") } } @@ -121,8 +127,7 @@ func (s *LdpSuite) SetupServerVpp(serverContainer *Container) { serverVpp := serverContainer.VppInstance s.AssertNil(serverVpp.Start()) - serverVeth := s.GetInterfaceByName(ServerInterfaceName) - idx, err := serverVpp.createAfPacket(serverVeth) + idx, err := serverVpp.createAfPacket(s.Interfaces.Server) s.AssertNil(err, fmt.Sprint(err)) s.AssertNotEqual(0, idx) } @@ -131,8 +136,7 @@ func (s *LdpSuite) setupClientVpp(clientContainer *Container) { clientVpp := clientContainer.VppInstance s.AssertNil(clientVpp.Start()) - clientVeth := s.GetInterfaceByName(ClientInterfaceName) - idx, err := clientVpp.createAfPacket(clientVeth) + idx, err := clientVpp.createAfPacket(s.Interfaces.Client) s.AssertNil(err, fmt.Sprint(err)) s.AssertNotEqual(0, idx) } diff --git a/extras/hs-test/infra/suite_nginx_proxy.go b/extras/hs-test/infra/suite_nginx_proxy.go index f0c178fc2f8..1b6d9f61aae 100644 --- a/extras/hs-test/infra/suite_nginx_proxy.go +++ b/extras/hs-test/infra/suite_nginx_proxy.go @@ -9,14 +9,6 @@ import ( . "github.com/onsi/ginkgo/v2" ) -// These correspond to names used in yaml config -const ( - NginxProxyContainerName = "nginx-proxy" - NginxServerContainerName = "nginx-server" - MirroringClientInterfaceName = "hstcln" - MirroringServerInterfaceName = "hstsrv" -) - var nginxProxyTests = map[string][]func(s *NginxProxySuite){} var nginxProxySoloTests = map[string][]func(s *NginxProxySuite){} @@ -24,6 +16,16 @@ type NginxProxySuite struct { HstSuite proxyPort uint16 maxTimeout int + Interfaces struct { + Server *NetInterface + Client *NetInterface + } + Containers struct { + NginxProxy *Container + NginxServerTransient *Container + Vpp *Container + Curl *Container + } } func RegisterNginxProxyTests(tests ...func(s *NginxProxySuite)) { @@ -43,6 +45,12 @@ func (s *NginxProxySuite) SetupSuite() { } else { s.maxTimeout = 60 } + s.Interfaces.Client = s.GetInterfaceByName("hstcln") + s.Interfaces.Server = s.GetInterfaceByName("hstsrv") + s.Containers.NginxProxy = s.GetContainerByName("nginx-proxy") + s.Containers.NginxServerTransient = s.GetTransientContainerByName("nginx-server") + s.Containers.Vpp = s.GetContainerByName("vpp") + s.Containers.Curl = s.GetContainerByName("curl") } func (s *NginxProxySuite) SetupTest() { @@ -55,38 +63,33 @@ func (s *NginxProxySuite) SetupTest() { Append("enable"). Append("use-app-socket-api") - vppContainer := s.GetContainerByName(VppContainerName) - vpp, err := vppContainer.newVppInstance(vppContainer.AllocatedCpus, sessionConfig) + vpp, err := s.Containers.Vpp.newVppInstance(s.Containers.Vpp.AllocatedCpus, sessionConfig) s.AssertNotNil(vpp, fmt.Sprint(err)) - clientInterface := s.GetInterfaceByName(MirroringClientInterfaceName) - serverInterface := s.GetInterfaceByName(MirroringServerInterfaceName) // nginx proxy - nginxProxyContainer := s.GetContainerByName(NginxProxyContainerName) - s.AssertNil(nginxProxyContainer.Create()) + s.AssertNil(s.Containers.NginxProxy.Create()) s.proxyPort = 80 // nginx HTTP server - nginxServerContainer := s.GetTransientContainerByName(NginxServerContainerName) - s.AssertNil(nginxServerContainer.Create()) + s.AssertNil(s.Containers.NginxServerTransient.Create()) nginxSettings := struct { LogPrefix string Address string Timeout int }{ - LogPrefix: nginxServerContainer.Name, - Address: serverInterface.Ip4AddressString(), + LogPrefix: s.Containers.NginxServerTransient.Name, + Address: s.Interfaces.Server.Ip4AddressString(), Timeout: s.maxTimeout, } - nginxServerContainer.CreateConfigFromTemplate( + s.Containers.NginxServerTransient.CreateConfigFromTemplate( "/nginx.conf", "./resources/nginx/nginx_server_mirroring.conf", nginxSettings, ) s.AssertNil(vpp.Start()) - s.AssertNil(vpp.CreateTap(clientInterface, 1, 1)) - s.AssertNil(vpp.CreateTap(serverInterface, 1, 2)) + s.AssertNil(vpp.CreateTap(s.Interfaces.Client, 1, 1)) + s.AssertNil(vpp.CreateTap(s.Interfaces.Server, 1, 2)) if *DryRun { s.LogStartedContainers() @@ -94,21 +97,19 @@ func (s *NginxProxySuite) SetupTest() { s.Skip("Dry run mode = true") } - s.AssertNil(nginxProxyContainer.Start()) - s.AssertNil(nginxServerContainer.Start()) + s.AssertNil(s.Containers.NginxProxy.Start()) + s.AssertNil(s.Containers.NginxServerTransient.Start()) } func (s *NginxProxySuite) TearDownTest() { if CurrentSpecReport().Failed() { - s.CollectNginxLogs(NginxServerContainerName) - s.CollectNginxLogs(NginxProxyContainerName) + s.CollectNginxLogs(s.Containers.NginxProxy) + s.CollectNginxLogs(s.Containers.NginxServerTransient) } s.HstSuite.TearDownTest() } func (s *NginxProxySuite) CreateNginxProxyConfig(container *Container, multiThreadWorkers bool) { - clientInterface := s.GetInterfaceByName(MirroringClientInterfaceName) - serverInterface := s.GetInterfaceByName(MirroringServerInterfaceName) var workers uint8 if multiThreadWorkers { workers = 2 @@ -124,8 +125,8 @@ func (s *NginxProxySuite) CreateNginxProxyConfig(container *Container, multiThre }{ Workers: workers, LogPrefix: container.Name, - Proxy: clientInterface.Peer.Ip4AddressString(), - Server: serverInterface.Ip4AddressString(), + Proxy: s.Interfaces.Client.Peer.Ip4AddressString(), + Server: s.Interfaces.Server.Ip4AddressString(), Port: s.proxyPort, } container.CreateConfigFromTemplate( @@ -140,12 +141,12 @@ func (s *NginxProxySuite) ProxyPort() uint16 { } func (s *NginxProxySuite) ProxyAddr() string { - return s.GetInterfaceByName(MirroringClientInterfaceName).Peer.Ip4AddressString() + return s.Interfaces.Client.Peer.Ip4AddressString() } func (s *NginxProxySuite) CurlDownloadResource(uri string) { args := fmt.Sprintf("-w @/tmp/write_out_download --max-time %d --insecure --noproxy '*' --remote-name --output-dir /tmp %s", s.maxTimeout, uri) - writeOut, log := s.RunCurlContainer(args) + writeOut, log := s.RunCurlContainer(s.Containers.Curl, args) s.AssertContains(writeOut, "GET response code: 200") s.AssertNotContains(log, "bytes remaining to read") s.AssertNotContains(log, "Operation timed out") diff --git a/extras/hs-test/infra/suite_no_topo.go b/extras/hs-test/infra/suite_no_topo.go index 727789b4deb..1c7b6fe91c3 100644 --- a/extras/hs-test/infra/suite_no_topo.go +++ b/extras/hs-test/infra/suite_no_topo.go @@ -9,18 +9,22 @@ import ( . "github.com/onsi/ginkgo/v2" ) -const ( - SingleTopoContainerVpp = "vpp" - SingleTopoContainerNginx = "nginx" - TapInterfaceName = "htaphost" - NginxHttp3ContainerName = "nginx-http3" -) - var noTopoTests = map[string][]func(s *NoTopoSuite){} var noTopoSoloTests = map[string][]func(s *NoTopoSuite){} type NoTopoSuite struct { HstSuite + Interfaces struct { + Tap *NetInterface + } + Containers struct { + Vpp *Container + Nginx *Container + NginxHttp3 *Container + Wrk *Container + Curl *Container + Ab *Container + } } func RegisterNoTopoTests(tests ...func(s *NoTopoSuite)) { @@ -34,6 +38,13 @@ func (s *NoTopoSuite) SetupSuite() { s.HstSuite.SetupSuite() s.LoadNetworkTopology("tap") s.LoadContainerTopology("single") + s.Interfaces.Tap = s.GetInterfaceByName("htaphost") + s.Containers.Vpp = s.GetContainerByName("vpp") + s.Containers.Nginx = s.GetContainerByName("nginx") + s.Containers.NginxHttp3 = s.GetContainerByName("nginx-http3") + s.Containers.Wrk = s.GetContainerByName("wrk") + s.Containers.Curl = s.GetContainerByName("curl") + s.Containers.Ab = s.GetContainerByName("ab") } func (s *NoTopoSuite) SetupTest() { @@ -53,12 +64,10 @@ func (s *NoTopoSuite) SetupTest() { sessionConfig.Close() } - container := s.GetContainerByName(SingleTopoContainerVpp) - vpp, _ := container.newVppInstance(container.AllocatedCpus, sessionConfig) + vpp, _ := s.Containers.Vpp.newVppInstance(s.Containers.Vpp.AllocatedCpus, sessionConfig) s.AssertNil(vpp.Start()) - tapInterface := s.GetInterfaceByName(TapInterfaceName) - s.AssertNil(vpp.CreateTap(tapInterface, 1, 1), "failed to create tap interface") + s.AssertNil(vpp.CreateTap(s.Interfaces.Tap, 1, 1), "failed to create tap interface") if *DryRun { s.LogStartedContainers() @@ -68,7 +77,7 @@ func (s *NoTopoSuite) SetupTest() { func (s *NoTopoSuite) TearDownTest() { if CurrentSpecReport().Failed() { - s.CollectNginxLogs(NginxHttp3ContainerName) + s.CollectNginxLogs(s.Containers.NginxHttp3) } s.HstSuite.TearDownTest() } @@ -93,10 +102,9 @@ func (s *NoTopoSuite) CreateNginxConfig(container *Container, multiThreadWorkers } func (s *NoTopoSuite) AddNginxVclConfig(multiThreadWorkers bool) { - nginxCont := s.GetContainerByName(SingleTopoContainerNginx) - vclFileName := nginxCont.GetHostWorkDir() + "/vcl.conf" + vclFileName := s.Containers.Nginx.GetHostWorkDir() + "/vcl.conf" appSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/default", - nginxCont.GetContainerWorkDir()) + s.Containers.Nginx.GetContainerWorkDir()) var vclConf Stanza vclConf. @@ -118,15 +126,15 @@ func (s *NoTopoSuite) AddNginxVclConfig(multiThreadWorkers bool) { } func (s *NoTopoSuite) VppAddr() string { - return s.GetInterfaceByName(TapInterfaceName).Peer.Ip4AddressString() + return s.Interfaces.Tap.Peer.Ip4AddressString() } func (s *NoTopoSuite) VppIfName() string { - return s.GetInterfaceByName(TapInterfaceName).Peer.Name() + return s.Interfaces.Tap.Peer.Name() } func (s *NoTopoSuite) HostAddr() string { - return s.GetInterfaceByName(TapInterfaceName).Ip4AddressString() + return s.Interfaces.Tap.Ip4AddressString() } func (s *NoTopoSuite) CreateNginxHttp3Config(container *Container) { diff --git a/extras/hs-test/infra/suite_veth.go b/extras/hs-test/infra/suite_veth.go index cbbd7ee2694..c13f3e4cdf8 100644 --- a/extras/hs-test/infra/suite_veth.go +++ b/extras/hs-test/infra/suite_veth.go @@ -10,17 +10,21 @@ import ( . "github.com/onsi/ginkgo/v2" ) -// These correspond to names used in yaml config -const ( - ServerInterfaceName = "srv" - ClientInterfaceName = "cln" -) - var vethTests = map[string][]func(s *VethsSuite){} var vethSoloTests = map[string][]func(s *VethsSuite){} type VethsSuite struct { HstSuite + Interfaces struct { + Server *NetInterface + Client *NetInterface + } + Containers struct { + ServerVpp *Container + ClientVpp *Container + ServerApp *Container + ClientApp *Container + } } func RegisterVethTests(tests ...func(s *VethsSuite)) { @@ -35,6 +39,12 @@ func (s *VethsSuite) SetupSuite() { s.HstSuite.SetupSuite() s.ConfigureNetworkTopology("2peerVeth") s.LoadContainerTopology("2peerVeth") + s.Interfaces.Client = s.GetInterfaceByName("cln") + s.Interfaces.Server = s.GetInterfaceByName("srv") + s.Containers.ServerVpp = s.GetContainerByName("server-vpp") + s.Containers.ClientVpp = s.GetContainerByName("client-vpp") + s.Containers.ServerApp = s.GetContainerByName("server-app") + s.Containers.ClientApp = s.GetContainerByName("client-app") } func (s *VethsSuite) SetupTest() { @@ -55,15 +65,11 @@ func (s *VethsSuite) SetupTest() { } // ... For server - serverContainer := s.GetContainerByName("server-vpp") - - serverVpp, err := serverContainer.newVppInstance(serverContainer.AllocatedCpus, sessionConfig) + serverVpp, err := s.Containers.ServerVpp.newVppInstance(s.Containers.ServerVpp.AllocatedCpus, sessionConfig) s.AssertNotNil(serverVpp, fmt.Sprint(err)) // ... For client - clientContainer := s.GetContainerByName("client-vpp") - - clientVpp, err := clientContainer.newVppInstance(clientContainer.AllocatedCpus, sessionConfig) + clientVpp, err := s.Containers.ClientVpp.newVppInstance(s.Containers.ClientVpp.AllocatedCpus, sessionConfig) s.AssertNotNil(clientVpp, fmt.Sprint(err)) s.SetupServerVpp() @@ -75,11 +81,10 @@ func (s *VethsSuite) SetupTest() { } func (s *VethsSuite) SetupServerVpp() { - serverVpp := s.GetContainerByName("server-vpp").VppInstance + serverVpp := s.Containers.ServerVpp.VppInstance s.AssertNil(serverVpp.Start()) - serverVeth := s.GetInterfaceByName(ServerInterfaceName) - idx, err := serverVpp.createAfPacket(serverVeth) + idx, err := serverVpp.createAfPacket(s.Interfaces.Server) s.AssertNil(err, fmt.Sprint(err)) s.AssertNotEqual(0, idx) } @@ -88,8 +93,7 @@ func (s *VethsSuite) setupClientVpp() { clientVpp := s.GetContainerByName("client-vpp").VppInstance s.AssertNil(clientVpp.Start()) - clientVeth := s.GetInterfaceByName(ClientInterfaceName) - idx, err := clientVpp.createAfPacket(clientVeth) + idx, err := clientVpp.createAfPacket(s.Interfaces.Client) s.AssertNil(err, fmt.Sprint(err)) s.AssertNotEqual(0, idx) } diff --git a/extras/hs-test/infra/suite_vpp_proxy.go b/extras/hs-test/infra/suite_vpp_proxy.go index 51beade2d9b..37d251a3a6d 100644 --- a/extras/hs-test/infra/suite_vpp_proxy.go +++ b/extras/hs-test/infra/suite_vpp_proxy.go @@ -14,20 +14,25 @@ import ( . "github.com/onsi/ginkgo/v2" ) -// These correspond to names used in yaml config const ( - VppProxyContainerName = "vpp-proxy" - ClientTapInterfaceName = "hstcln" - ServerTapInterfaceName = "hstsrv" - IperfServerContainerName = "iperfA" - IperfClientContainerName = "iperfB" - CurlContainerTestFile = "/tmp/testFile" + CurlContainerTestFile = "/tmp/testFile" ) type VppProxySuite struct { HstSuite serverPort uint16 maxTimeout int + Interfaces struct { + Client *NetInterface + Server *NetInterface + } + Containers struct { + VppProxy *Container + Curl *Container + NginxServerTransient *Container + IperfS *Container + IperfC *Container + } } var vppProxyTests = map[string][]func(s *VppProxySuite){} @@ -52,22 +57,25 @@ func (s *VppProxySuite) SetupSuite() { } else { s.maxTimeout = 60 } + s.Interfaces.Client = s.GetInterfaceByName("hstcln") + s.Interfaces.Server = s.GetInterfaceByName("hstsrv") + s.Containers.NginxServerTransient = s.GetTransientContainerByName("nginx-server") + s.Containers.VppProxy = s.GetContainerByName("vpp-proxy") + s.Containers.Curl = s.GetContainerByName("curl") + s.Containers.IperfC = s.GetContainerByName("iperfC") + s.Containers.IperfS = s.GetContainerByName("iperfS") } func (s *VppProxySuite) SetupTest() { s.HstSuite.SetupTest() // VPP HTTP connect-proxy - vppContainer := s.GetContainerByName(VppProxyContainerName) - vpp, err := vppContainer.newVppInstance(vppContainer.AllocatedCpus) + vpp, err := s.Containers.VppProxy.newVppInstance(s.Containers.VppProxy.AllocatedCpus) s.AssertNotNil(vpp, fmt.Sprint(err)) - clientInterface := s.GetInterfaceByName(ClientTapInterfaceName) - serverInterface := s.GetInterfaceByName(ServerTapInterfaceName) - s.AssertNil(vpp.Start()) - s.AssertNil(vpp.CreateTap(clientInterface, 1, 1)) - s.AssertNil(vpp.CreateTap(serverInterface, 1, 2)) + s.AssertNil(vpp.CreateTap(s.Interfaces.Client, 1, 1)) + s.AssertNil(vpp.CreateTap(s.Interfaces.Server, 1, 2)) if *DryRun { s.LogStartedContainers() @@ -76,36 +84,34 @@ func (s *VppProxySuite) SetupTest() { } func (s *VppProxySuite) TearDownTest() { - vpp := s.GetContainerByName(VppProxyContainerName).VppInstance + vpp := s.Containers.VppProxy.VppInstance if CurrentSpecReport().Failed() { s.Log(vpp.Vppctl("show session verbose 2")) s.Log(vpp.Vppctl("show error")) - s.CollectNginxLogs(NginxServerContainerName) + s.CollectNginxLogs(s.Containers.NginxServerTransient) } s.HstSuite.TearDownTest() } func (s *VppProxySuite) SetupNginxServer() { - nginxContainer := s.GetTransientContainerByName(NginxServerContainerName) - serverInterface := s.GetInterfaceByName(ServerTapInterfaceName) - s.AssertNil(nginxContainer.Create()) + s.AssertNil(s.Containers.NginxServerTransient.Create()) nginxSettings := struct { LogPrefix string Address string Port uint16 Timeout int }{ - LogPrefix: nginxContainer.Name, - Address: serverInterface.Ip4AddressString(), + LogPrefix: s.Containers.NginxServerTransient.Name, + Address: s.Interfaces.Server.Ip4AddressString(), Port: s.serverPort, Timeout: s.maxTimeout, } - nginxContainer.CreateConfigFromTemplate( + s.Containers.NginxServerTransient.CreateConfigFromTemplate( "/nginx.conf", "./resources/nginx/nginx_server.conf", nginxSettings, ) - s.AssertNil(nginxContainer.Start()) + s.AssertNil(s.Containers.NginxServerTransient.Start()) } func (s *VppProxySuite) ServerPort() uint16 { @@ -113,32 +119,32 @@ func (s *VppProxySuite) ServerPort() uint16 { } func (s *VppProxySuite) ServerAddr() string { - return s.GetInterfaceByName(ServerTapInterfaceName).Ip4AddressString() + return s.Interfaces.Server.Ip4AddressString() } func (s *VppProxySuite) VppProxyAddr() string { - return s.GetInterfaceByName(ClientTapInterfaceName).Peer.Ip4AddressString() + return s.Interfaces.Client.Peer.Ip4AddressString() } func (s *VppProxySuite) ClientAddr() string { - return s.GetInterfaceByName(ClientTapInterfaceName).Ip4AddressString() + return s.Interfaces.Client.Ip4AddressString() } func (s *VppProxySuite) CurlRequest(targetUri string) (string, string) { args := fmt.Sprintf("--insecure --noproxy '*' %s", targetUri) - body, log := s.RunCurlContainer(args) + body, log := s.RunCurlContainer(s.Containers.Curl, args) return body, log } func (s *VppProxySuite) CurlRequestViaTunnel(targetUri string, proxyUri string) (string, string) { args := fmt.Sprintf("--max-time %d --insecure -p -x %s %s", s.maxTimeout, proxyUri, targetUri) - body, log := s.RunCurlContainer(args) + body, log := s.RunCurlContainer(s.Containers.Curl, args) return body, log } func (s *VppProxySuite) CurlDownloadResource(uri string) { args := fmt.Sprintf("-w @/tmp/write_out_download --max-time %d --insecure --noproxy '*' --remote-name --output-dir /tmp %s", s.maxTimeout, uri) - writeOut, log := s.RunCurlContainer(args) + writeOut, log := s.RunCurlContainer(s.Containers.Curl, args) s.AssertContains(writeOut, "GET response code: 200") s.AssertNotContains(log, "bytes remaining to read") s.AssertNotContains(log, "Operation timed out") @@ -146,14 +152,14 @@ func (s *VppProxySuite) CurlDownloadResource(uri string) { func (s *VppProxySuite) CurlUploadResource(uri, file string) { args := fmt.Sprintf("-w @/tmp/write_out_upload --max-time %d --insecure --noproxy '*' -T %s %s", s.maxTimeout, file, uri) - writeOut, log := s.RunCurlContainer(args) + writeOut, log := s.RunCurlContainer(s.Containers.Curl, args) s.AssertContains(writeOut, "PUT response code: 201") s.AssertNotContains(log, "Operation timed out") } func (s *VppProxySuite) CurlDownloadResourceViaTunnel(uri string, proxyUri string) { args := fmt.Sprintf("-w @/tmp/write_out_download_connect --max-time %d --insecure -p -x %s --remote-name --output-dir /tmp %s", s.maxTimeout, proxyUri, uri) - writeOut, log := s.RunCurlContainer(args) + writeOut, log := s.RunCurlContainer(s.Containers.Curl, args) s.AssertContains(writeOut, "CONNECT response code: 200") s.AssertContains(writeOut, "GET response code: 200") s.AssertNotContains(log, "bytes remaining to read") @@ -163,7 +169,7 @@ func (s *VppProxySuite) CurlDownloadResourceViaTunnel(uri string, proxyUri strin func (s *VppProxySuite) CurlUploadResourceViaTunnel(uri, proxyUri, file string) { args := fmt.Sprintf("-w @/tmp/write_out_upload_connect --max-time %d --insecure -p -x %s -T %s %s", s.maxTimeout, proxyUri, file, uri) - writeOut, log := s.RunCurlContainer(args) + writeOut, log := s.RunCurlContainer(s.Containers.Curl, args) s.AssertContains(writeOut, "CONNECT response code: 200") s.AssertContains(writeOut, "PUT response code: 201") s.AssertNotContains(log, "Operation timed out") diff --git a/extras/hs-test/infra/suite_vpp_udp_proxy.go b/extras/hs-test/infra/suite_vpp_udp_proxy.go index 84e76d6643a..6a65a0be5ff 100644 --- a/extras/hs-test/infra/suite_vpp_udp_proxy.go +++ b/extras/hs-test/infra/suite_vpp_udp_proxy.go @@ -11,12 +11,17 @@ import ( . "github.com/onsi/ginkgo/v2" ) -const VppUdpProxyContainerName = "vpp" - type VppUdpProxySuite struct { HstSuite proxyPort int serverPort int + Interfaces struct { + Client *NetInterface + Server *NetInterface + } + Containers struct { + VppProxy *Container + } } var vppUdpProxyTests = map[string][]func(s *VppUdpProxySuite){} @@ -34,30 +39,29 @@ func (s *VppUdpProxySuite) SetupSuite() { s.HstSuite.SetupSuite() s.LoadNetworkTopology("2taps") s.LoadContainerTopology("single") + s.Interfaces.Client = s.GetInterfaceByName("hstcln") + s.Interfaces.Server = s.GetInterfaceByName("hstsrv") + s.Containers.VppProxy = s.GetContainerByName("vpp") } func (s *VppUdpProxySuite) SetupTest() { s.HstSuite.SetupTest() // VPP proxy - vppContainer := s.GetContainerByName(VppUdpProxyContainerName) - vpp, err := vppContainer.newVppInstance(vppContainer.AllocatedCpus) + vpp, err := s.Containers.VppProxy.newVppInstance(s.Containers.VppProxy.AllocatedCpus) s.AssertNotNil(vpp, fmt.Sprint(err)) - clientInterface := s.GetInterfaceByName(ClientTapInterfaceName) - serverInterface := s.GetInterfaceByName(ServerTapInterfaceName) - s.AssertNil(vpp.Start()) - s.AssertNil(vpp.CreateTap(clientInterface, 1, 1)) - s.AssertNil(vpp.CreateTap(serverInterface, 1, 2)) + s.AssertNil(vpp.CreateTap(s.Interfaces.Client, 1, 1)) + s.AssertNil(vpp.CreateTap(s.Interfaces.Server, 1, 2)) s.proxyPort = 8080 s.serverPort = 80 arp := fmt.Sprintf("set ip neighbor %s %s %s", - serverInterface.Peer.Name(), - serverInterface.Ip4AddressString(), - serverInterface.HwAddress) + s.Interfaces.Server.Peer.Name(), + s.Interfaces.Server.Ip4AddressString(), + s.Interfaces.Server.HwAddress) vpp.Vppctl(arp) if *DryRun { @@ -67,7 +71,7 @@ func (s *VppUdpProxySuite) SetupTest() { } func (s *VppUdpProxySuite) TearDownTest() { - vpp := s.GetContainerByName(VppUdpProxyContainerName).VppInstance + vpp := s.Containers.VppProxy.VppInstance if CurrentSpecReport().Failed() { s.Log(vpp.Vppctl("show session verbose 2")) s.Log(vpp.Vppctl("show error")) @@ -76,7 +80,7 @@ func (s *VppUdpProxySuite) TearDownTest() { } func (s *VppUdpProxySuite) VppProxyAddr() string { - return s.GetInterfaceByName(ClientTapInterfaceName).Peer.Ip4AddressString() + return s.Interfaces.Client.Peer.Ip4AddressString() } func (s *VppUdpProxySuite) ProxyPort() int { @@ -84,7 +88,7 @@ func (s *VppUdpProxySuite) ProxyPort() int { } func (s *VppUdpProxySuite) ServerAddr() string { - return s.GetInterfaceByName(ServerTapInterfaceName).Ip4AddressString() + return s.Interfaces.Server.Ip4AddressString() } func (s *VppUdpProxySuite) ServerPort() int { @@ -92,7 +96,7 @@ func (s *VppUdpProxySuite) ServerPort() int { } func (s *VppUdpProxySuite) ClientAddr() string { - return s.GetInterfaceByName(ClientTapInterfaceName).Ip4AddressString() + return s.Interfaces.Client.Ip4AddressString() } func (s *VppUdpProxySuite) StartEchoServer() *net.UDPConn { diff --git a/extras/hs-test/infra/utils.go b/extras/hs-test/infra/utils.go index a7c2f13625e..b690efc32ca 100644 --- a/extras/hs-test/infra/utils.go +++ b/extras/hs-test/infra/utils.go @@ -174,8 +174,7 @@ RunCurlContainer execute curl command with given args. Container with name "curl" must be available. Curl runs in verbose mode and progress meter switch off by default. */ -func (s *HstSuite) RunCurlContainer(args string) (string, string) { - curlCont := s.GetContainerByName("curl") +func (s *HstSuite) RunCurlContainer(curlCont *Container, args string) (string, string) { cmd := fmt.Sprintf("curl -v -s %s", args) s.Log(cmd) curlCont.ExtraRunningArgs = cmd @@ -195,8 +194,7 @@ Nginx logging need to be set following way: where LogPrefix is set to nginxContainer.Name */ -func (s *HstSuite) CollectNginxLogs(containerName string) { - nginxContainer := s.GetContainerByName(containerName) +func (s *HstSuite) CollectNginxLogs(nginxContainer *Container) { targetDir := nginxContainer.Suite.getLogDirPath() source := nginxContainer.GetHostWorkDir() + "/" + nginxContainer.Name + "-" cmd := exec.Command("cp", "-t", targetDir, source+"error.log", source+"access.log") @@ -213,8 +211,7 @@ Envoy access log path need to be set following way: