hs-test: containerize iperf tests

Type: test

Change-Id: I2c0bb76d96ccadd5ecfd6a04565420855043699e
Signed-off-by: Adrian Villin <avillin@cisco.com>
diff --git a/extras/hs-test/infra/suite_iperf_linux.go b/extras/hs-test/infra/suite_iperf_linux.go
new file mode 100644
index 0000000..728429b
--- /dev/null
+++ b/extras/hs-test/infra/suite_iperf_linux.go
@@ -0,0 +1,96 @@
+package hst
+
+import (
+	"reflect"
+	"runtime"
+	"strings"
+	"time"
+
+	. "github.com/onsi/ginkgo/v2"
+)
+
+type IperfSuite struct {
+	HstSuite
+}
+
+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){}
+
+func RegisterIperfTests(tests ...func(s *IperfSuite)) {
+	iperfTests[getTestFilename()] = tests
+}
+func RegisterIperfSoloTests(tests ...func(s *IperfSuite)) {
+	iperfSoloTests[getTestFilename()] = tests
+}
+
+func (s *IperfSuite) SetupSuite() {
+	time.Sleep(1 * time.Second)
+	s.HstSuite.SetupSuite()
+	s.ConfigureNetworkTopology("2taps")
+	s.LoadContainerTopology("2containers")
+}
+
+var _ = Describe("IperfSuite", Ordered, ContinueOnFailure, func() {
+	var s IperfSuite
+	BeforeAll(func() {
+		s.SetupSuite()
+	})
+	BeforeEach(func() {
+		s.SetupTest()
+	})
+	AfterAll(func() {
+		s.TearDownSuite()
+	})
+	AfterEach(func() {
+		s.TearDownTest()
+	})
+
+	for filename, tests := range iperfTests {
+		for _, test := range tests {
+			test := test
+			pc := reflect.ValueOf(test).Pointer()
+			funcValue := runtime.FuncForPC(pc)
+			testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
+			It(testName, func(ctx SpecContext) {
+				s.Log(testName + ": BEGIN")
+				test(&s)
+			}, SpecTimeout(SuiteTimeout))
+		}
+	}
+})
+
+var _ = Describe("IperfSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
+	var s IperfSuite
+	BeforeAll(func() {
+		s.SetupSuite()
+	})
+	BeforeEach(func() {
+		s.SetupTest()
+	})
+	AfterAll(func() {
+		s.TearDownSuite()
+	})
+	AfterEach(func() {
+		s.TearDownTest()
+	})
+
+	for filename, tests := range iperfSoloTests {
+		for _, test := range tests {
+			test := test
+			pc := reflect.ValueOf(test).Pointer()
+			funcValue := runtime.FuncForPC(pc)
+			testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
+			It(testName, Label("SOLO"), func(ctx SpecContext) {
+				s.Log(testName + ": BEGIN")
+				test(&s)
+			}, SpecTimeout(SuiteTimeout))
+		}
+	}
+})
diff --git a/extras/hs-test/infra/suite_tap.go b/extras/hs-test/infra/suite_tap.go
deleted file mode 100644
index c02ab8e..0000000
--- a/extras/hs-test/infra/suite_tap.go
+++ /dev/null
@@ -1,88 +0,0 @@
-package hst
-
-import (
-	"reflect"
-	"runtime"
-	"strings"
-	"time"
-
-	. "github.com/onsi/ginkgo/v2"
-)
-
-type TapSuite struct {
-	HstSuite
-}
-
-var tapTests = map[string][]func(s *TapSuite){}
-var tapSoloTests = map[string][]func(s *TapSuite){}
-
-func RegisterTapTests(tests ...func(s *TapSuite)) {
-	tapTests[getTestFilename()] = tests
-}
-func RegisterTapSoloTests(tests ...func(s *TapSuite)) {
-	tapSoloTests[getTestFilename()] = tests
-}
-
-func (s *TapSuite) SetupSuite() {
-	time.Sleep(1 * time.Second)
-	s.HstSuite.SetupSuite()
-	s.ConfigureNetworkTopology("tap")
-}
-
-var _ = Describe("TapSuite", Ordered, ContinueOnFailure, func() {
-	var s TapSuite
-	BeforeAll(func() {
-		s.SetupSuite()
-	})
-	BeforeEach(func() {
-		s.SetupTest()
-	})
-	AfterAll(func() {
-		s.TearDownSuite()
-	})
-	AfterEach(func() {
-		s.TearDownTest()
-	})
-
-	for filename, tests := range tapTests {
-		for _, test := range tests {
-			test := test
-			pc := reflect.ValueOf(test).Pointer()
-			funcValue := runtime.FuncForPC(pc)
-			testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
-			It(testName, func(ctx SpecContext) {
-				s.Log(testName + ": BEGIN")
-				test(&s)
-			}, SpecTimeout(SuiteTimeout))
-		}
-	}
-})
-
-var _ = Describe("TapSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
-	var s TapSuite
-	BeforeAll(func() {
-		s.SetupSuite()
-	})
-	BeforeEach(func() {
-		s.SetupTest()
-	})
-	AfterAll(func() {
-		s.TearDownSuite()
-	})
-	AfterEach(func() {
-		s.TearDownTest()
-	})
-
-	for filename, tests := range tapSoloTests {
-		for _, test := range tests {
-			test := test
-			pc := reflect.ValueOf(test).Pointer()
-			funcValue := runtime.FuncForPC(pc)
-			testName := filename + "/" + strings.Split(funcValue.Name(), ".")[2]
-			It(testName, Label("SOLO"), func(ctx SpecContext) {
-				s.Log(testName + ": BEGIN")
-				test(&s)
-			}, SpecTimeout(SuiteTimeout))
-		}
-	}
-})
diff --git a/extras/hs-test/iperf_linux_test.go b/extras/hs-test/iperf_linux_test.go
new file mode 100644
index 0000000..14422fe
--- /dev/null
+++ b/extras/hs-test/iperf_linux_test.go
@@ -0,0 +1,48 @@
+package main
+
+import (
+	"fmt"
+
+	. "fd.io/hs-test/infra"
+	. "github.com/onsi/ginkgo/v2"
+)
+
+func init() {
+	RegisterIperfTests(IperfLinuxTest)
+}
+
+func IperfLinuxTest(s *IperfSuite) {
+	serverContainer := s.GetContainerByName(ServerIperfContainerName)
+	serverIpAddress := s.GetInterfaceByName(ServerIperfInterfaceName).Ip4AddressString()
+	clientContainer := s.GetContainerByName(ClientIperfContainerName)
+	clientIpAddress := s.GetInterfaceByName(ClientIperfInterfaceName).Ip4AddressString()
+
+	clnCh := make(chan error)
+	stopServerCh := make(chan struct{})
+	srvCh := make(chan error, 1)
+	clnRes := make(chan string, 1)
+
+	defer func() {
+		stopServerCh <- struct{}{}
+	}()
+
+	go func() {
+		defer GinkgoRecover()
+		cmd := "iperf3 -4 -s -B " + serverIpAddress + " -p " + s.GetPortFromPpid()
+		s.StartServerApp(serverContainer, "iperf3", cmd, srvCh, stopServerCh)
+	}()
+	err := <-srvCh
+	s.AssertNil(err, fmt.Sprint(err))
+	s.Log("server running")
+
+	go func() {
+		defer GinkgoRecover()
+		cmd := "iperf3 -c " + serverIpAddress + " -B " + clientIpAddress +
+			" -u -l 1460 -b 10g -p " + s.GetPortFromPpid()
+		s.StartClientApp(clientContainer, cmd, clnCh, clnRes)
+	}()
+
+	s.Log(<-clnRes)
+	err = <-clnCh
+	s.AssertNil(err, "err: '%s'", err)
+}
diff --git a/extras/hs-test/linux_iperf_test.go b/extras/hs-test/linux_iperf_test.go
deleted file mode 100644
index 9342e86..0000000
--- a/extras/hs-test/linux_iperf_test.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package main
-
-import (
-	. "fd.io/hs-test/infra"
-	"fmt"
-	. "github.com/onsi/ginkgo/v2"
-)
-
-func init() {
-	RegisterTapTests(LinuxIperfTest)
-}
-
-func LinuxIperfTest(s *TapSuite) {
-	clnCh := make(chan error)
-	stopServerCh := make(chan struct{})
-	srvCh := make(chan error, 1)
-	clnRes := make(chan string, 1)
-	defer func() {
-		stopServerCh <- struct{}{}
-	}()
-
-	go func() {
-		defer GinkgoRecover()
-		s.StartIperfServerApp(srvCh, stopServerCh, nil)
-	}()
-	err := <-srvCh
-	s.AssertNil(err, fmt.Sprint(err))
-	s.Log("server running")
-
-	ipAddress := s.GetInterfaceByName(TapInterfaceName).Ip4AddressString()
-	go func() {
-		defer GinkgoRecover()
-		s.StartIperfClientApp(ipAddress, nil, clnCh, clnRes)
-	}()
-	s.Log("client running")
-	s.Log(<-clnRes)
-	err = <-clnCh
-	s.AssertNil(err, "err: '%s', ip: '%s'", err, ipAddress)
-	s.Log("Test completed")
-}
diff --git a/extras/hs-test/topo-containers/2containers.yaml b/extras/hs-test/topo-containers/2containers.yaml
new file mode 100644
index 0000000..1217c27
--- /dev/null
+++ b/extras/hs-test/topo-containers/2containers.yaml
@@ -0,0 +1,4 @@
+---
+containers:
+  - name: "server"
+  - name: "client"
\ No newline at end of file