hs-test: containerize iperf tests

Type: test

Change-Id: I2c0bb76d96ccadd5ecfd6a04565420855043699e
Signed-off-by: Adrian Villin <avillin@cisco.com>
This commit is contained in:
Adrian Villin
2024-06-26 09:47:10 +02:00
committed by Florin Coras
parent 0950830ee9
commit 3ecd6840af
4 changed files with 75 additions and 55 deletions
@@ -9,28 +9,36 @@ import (
. "github.com/onsi/ginkgo/v2"
)
type TapSuite struct {
type IperfSuite struct {
HstSuite
}
var tapTests = map[string][]func(s *TapSuite){}
var tapSoloTests = map[string][]func(s *TapSuite){}
const (
ServerIperfContainerName string = "server"
ServerIperfInterfaceName string = "hstsrv"
ClientIperfContainerName string = "client"
ClientIperfInterfaceName string = "hstcln"
)
func RegisterTapTests(tests ...func(s *TapSuite)) {
tapTests[getTestFilename()] = tests
var iperfTests = map[string][]func(s *IperfSuite){}
var iperfSoloTests = map[string][]func(s *IperfSuite){}
func RegisterIperfTests(tests ...func(s *IperfSuite)) {
iperfTests[getTestFilename()] = tests
}
func RegisterTapSoloTests(tests ...func(s *TapSuite)) {
tapSoloTests[getTestFilename()] = tests
func RegisterIperfSoloTests(tests ...func(s *IperfSuite)) {
iperfSoloTests[getTestFilename()] = tests
}
func (s *TapSuite) SetupSuite() {
func (s *IperfSuite) SetupSuite() {
time.Sleep(1 * time.Second)
s.HstSuite.SetupSuite()
s.ConfigureNetworkTopology("tap")
s.ConfigureNetworkTopology("2taps")
s.LoadContainerTopology("2containers")
}
var _ = Describe("TapSuite", Ordered, ContinueOnFailure, func() {
var s TapSuite
var _ = Describe("IperfSuite", Ordered, ContinueOnFailure, func() {
var s IperfSuite
BeforeAll(func() {
s.SetupSuite()
})
@@ -44,7 +52,7 @@ var _ = Describe("TapSuite", Ordered, ContinueOnFailure, func() {
s.TearDownTest()
})
for filename, tests := range tapTests {
for filename, tests := range iperfTests {
for _, test := range tests {
test := test
pc := reflect.ValueOf(test).Pointer()
@@ -58,8 +66,8 @@ var _ = Describe("TapSuite", Ordered, ContinueOnFailure, func() {
}
})
var _ = Describe("TapSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
var s TapSuite
var _ = Describe("IperfSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
var s IperfSuite
BeforeAll(func() {
s.SetupSuite()
})
@@ -73,7 +81,7 @@ var _ = Describe("TapSuiteSolo", Ordered, ContinueOnFailure, Serial, func() {
s.TearDownTest()
})
for filename, tests := range tapSoloTests {
for filename, tests := range iperfSoloTests {
for _, test := range tests {
test := test
pc := reflect.ValueOf(test).Pointer()
+48
View File
@@ -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)
}
-40
View File
@@ -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")
}
@@ -0,0 +1,4 @@
---
containers:
- name: "server"
- name: "client"