diff options
Diffstat (limited to 'extras/hs-test/ldp_test.go')
-rw-r--r-- | extras/hs-test/ldp_test.go | 125 |
1 files changed, 70 insertions, 55 deletions
diff --git a/extras/hs-test/ldp_test.go b/extras/hs-test/ldp_test.go index 8d9168d3d5d..03636b11191 100644 --- a/extras/hs-test/ldp_test.go +++ b/extras/hs-test/ldp_test.go @@ -2,74 +2,89 @@ package main import ( "fmt" - "os" -) - -func (s *VethsSuite) TestLDPreloadIperfVpp() { - var clnVclConf, srvVclConf Stanza - serverContainer := s.getContainerByName("server-vpp") - serverVclFileName := serverContainer.getHostWorkDir() + "/vcl_srv.conf" + . "fd.io/hs-test/infra" + . "github.com/onsi/ginkgo/v2" +) - clientContainer := s.getContainerByName("client-vpp") - clientVclFileName := clientContainer.getHostWorkDir() + "/vcl_cln.conf" +func init() { + RegisterLdpTests(LDPreloadIperfVppTest, LDPreloadIperfVppInterruptModeTest, RedisBenchmarkTest) +} - ldpreload := os.Getenv("HST_LDPRELOAD") - s.assertNotEqual("", ldpreload) +func LDPreloadIperfVppInterruptModeTest(s *LdpSuite) { + LDPreloadIperfVppTest(s) +} - ldpreload = "LD_PRELOAD=" + ldpreload +func LDPreloadIperfVppTest(s *LdpSuite) { + clientContainer := s.GetContainerByName("client-vpp") + serverContainer := s.GetContainerByName("server-vpp") stopServerCh := make(chan struct{}, 1) srvCh := make(chan error, 1) clnCh := make(chan error) + clnRes := make(chan string, 1) + + go func() { + defer GinkgoRecover() + cmd := "iperf3 -4 -s -p " + s.GetPortFromPpid() + s.StartServerApp(serverContainer, "iperf3", cmd, srvCh, stopServerCh) + }() - s.log("starting VPPs") - - clientAppSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/default", - clientContainer.getHostWorkDir()) - err := clnVclConf. - newStanza("vcl"). - append("rx-fifo-size 4000000"). - append("tx-fifo-size 4000000"). - append("app-scope-local"). - append("app-scope-global"). - append("use-mq-eventfd"). - append(clientAppSocketApi).close(). - saveToFile(clientVclFileName) - s.assertNil(err, err) - - serverAppSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/default", - serverContainer.getHostWorkDir()) - err = srvVclConf. - newStanza("vcl"). - append("rx-fifo-size 4000000"). - append("tx-fifo-size 4000000"). - append("app-scope-local"). - append("app-scope-global"). - append("use-mq-eventfd"). - append(serverAppSocketApi).close(). - saveToFile(serverVclFileName) - s.assertNil(err, err) - - s.log("attaching server to vpp") - - srvEnv := append(os.Environ(), ldpreload, "VCL_CONFIG="+serverVclFileName) - go s.startServerApp(srvCh, stopServerCh, srvEnv) - - err = <-srvCh - s.assertNil(err, err) - - s.log("attaching client to vpp") - var clnRes = make(chan string, 1) - clnEnv := append(os.Environ(), ldpreload, "VCL_CONFIG="+clientVclFileName) - serverVethAddress := s.getInterfaceByName(serverInterfaceName).ip4AddressString() - go s.startClientApp(serverVethAddress, clnEnv, clnCh, clnRes) - s.log(<-clnRes) + err := <-srvCh + s.AssertNil(err, fmt.Sprint(err)) + + serverVethAddress := s.GetInterfaceByName(ServerInterfaceName).Ip4AddressString() + go func() { + defer GinkgoRecover() + cmd := "iperf3 -c " + serverVethAddress + " -u -l 1460 -b 10g -p " + s.GetPortFromPpid() + s.StartClientApp(clientContainer, cmd, clnCh, clnRes) + }() + s.Log(<-clnRes) // wait for client's result err = <-clnCh - s.assertNil(err, err) + s.AssertNil(err, fmt.Sprint(err)) // stop server stopServerCh <- struct{}{} } + +func RedisBenchmarkTest(s *LdpSuite) { + s.SkipIfMultiWorker() + + serverContainer := s.GetContainerByName("server-vpp") + clientContainer := s.GetContainerByName("client-vpp") + + serverVethAddress := s.GetInterfaceByName(ServerInterfaceName).Ip4AddressString() + runningSrv := make(chan error) + doneSrv := make(chan struct{}) + clnCh := make(chan error) + clnRes := make(chan string, 1) + + go func() { + defer GinkgoRecover() + cmd := "redis-server --daemonize yes --protected-mode no --bind " + serverVethAddress + s.StartServerApp(serverContainer, "redis-server", cmd, runningSrv, doneSrv) + }() + + err := <-runningSrv + s.AssertNil(err) + + go func() { + defer GinkgoRecover() + var cmd string + if *NConfiguredCpus == 1 { + cmd = "redis-benchmark --threads 1 -h " + serverVethAddress + } else { + cmd = "redis-benchmark --threads " + fmt.Sprint(*NConfiguredCpus) + "-h " + serverVethAddress + } + s.StartClientApp(clientContainer, cmd, clnCh, clnRes) + }() + + s.Log(<-clnRes) + // wait for client's result + err = <-clnCh + s.AssertNil(err, fmt.Sprint(err)) + // stop server + doneSrv <- struct{}{} +} |