aboutsummaryrefslogtreecommitdiffstats
path: root/docs/_scripts/siphon_templates
diff options
context:
space:
mode:
authorhsandid <halsandi@cisco.com>2023-10-30 18:47:36 +0100
committerDave Wallace <dwallacelf@gmail.com>2023-10-31 23:54:28 +0000
commite75176a257bae8753c334f25fe09aa790cf4bf48 (patch)
tree62243c18e0a00b427bad3d01c7d34bc0e2749a12 /docs/_scripts/siphon_templates
parente908fe7e474d6b7b1e9e1bd2fb39423e1552a35f (diff)
docs: Updated "VPP with Containers" use-case section
Type: improvement Modified "VPP with Containers" doc section to run on Ubuntu 22.04 LTS. Change-Id: Ic09b88cf0e3b492711222a1bb24552de964a7d03 Signed-off-by: hsandid <halsandi@cisco.com>
Diffstat (limited to 'docs/_scripts/siphon_templates')
0 files changed, 0 insertions, 0 deletions
n142'>142 143 144 145 146 147 148 149 150
package main

import (
	"fmt"
	"time"
)

const vclTemplate = `vcl {
  app-socket-api %[1]s/var/run/app_ns_sockets/%[2]s
  app-scope-global
  app-scope-local
  namespace-id %[2]s
  namespace-secret %[2]s
  use-mq-eventfd
}
`

func (s *VethsSuite) TestXEchoVclClientUdp() {
	s.testXEchoVclClient("udp")
}

func (s *VethsSuite) TestXEchoVclClientTcp() {
	s.testXEchoVclClient("tcp")
}

func (s *VethsSuite) testXEchoVclClient(proto string) {
	port := "12345"
	serverVpp := s.getContainerByName("server-vpp").vppInstance

	serverVeth := s.netInterfaces[serverInterfaceName]
	serverVpp.vppctl("test echo server uri %s://%s/%s fifo-size 64k", proto, serverVeth.ip4AddressString(), port)

	echoClnContainer := s.getTransientContainerByName("client-app")
	clientVclConfContent := fmt.Sprintf(vclTemplate, echoClnContainer.getContainerWorkDir(), "2")
	echoClnContainer.createFile("/vcl.conf", clientVclConfContent)

	testClientCommand := "vcl_test_client -N 100 -p " + proto + " " + serverVeth.ip4AddressString() + " " + port
	s.log(testClientCommand)
	echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
	o := echoClnContainer.exec(testClientCommand)
	s.log(o)
	s.assertContains(o, "CLIENT RESULTS")
}

func (s *VethsSuite) TestXEchoVclServerUdp() {
	s.testXEchoVclServer("udp")
}

func (s *VethsSuite) TestXEchoVclServerTcp() {
	s.testXEchoVclServer("tcp")
}

func (s *VethsSuite) testXEchoVclServer(proto string) {
	port := "12345"
	srvVppCont := s.getContainerByName("server-vpp")
	srvAppCont := s.getContainerByName("server-app")

	serverVclConfContent := fmt.Sprintf(vclTemplate, srvVppCont.getContainerWorkDir(), "1")
	srvAppCont.createFile("/vcl.conf", serverVclConfContent)
	srvAppCont.addEnvVar("VCL_CONFIG", "/vcl.conf")
	vclSrvCmd := fmt.Sprintf("vcl_test_server -p %s %s", proto, port)
	srvAppCont.execServer(vclSrvCmd)

	serverVeth := s.netInterfaces[serverInterfaceName]
	serverVethAddress := serverVeth.ip4AddressString()

	clientVpp := s.getContainerByName("client-vpp").vppInstance
	o := clientVpp.vppctl("test echo client uri %s://%s/%s fifo-size 64k verbose mbytes 2", proto, serverVethAddress, port)
	s.log(o)
	s.assertContains(o, "Test finished at")
}

func (s *VethsSuite) testVclEcho(proto string) {
	port := "12345"
	srvVppCont := s.getContainerByName("server-vpp")
	srvAppCont := s.getContainerByName("server-app")

	serverVclConfContent := fmt.Sprintf(vclTemplate, srvVppCont.getContainerWorkDir(), "1")
	srvAppCont.createFile("/vcl.conf", serverVclConfContent)
	srvAppCont.addEnvVar("VCL_CONFIG", "/vcl.conf")
	srvAppCont.execServer("vcl_test_server " + port)

	serverVeth := s.netInterfaces[serverInterfaceName]
	serverVethAddress := serverVeth.ip4AddressString()

	echoClnContainer := s.getTransientContainerByName("client-app")
	clientVclConfContent := fmt.Sprintf(vclTemplate, echoClnContainer.getContainerWorkDir(), "2")
	echoClnContainer.createFile("/vcl.conf", clientVclConfContent)

	testClientCommand := "vcl_test_client -p " + proto + " " + serverVethAddress + " " + port
	echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
	o := echoClnContainer.exec(testClientCommand)
	s.log(o)
}

func (s *VethsSuite) TestVclEchoTcp() {
	s.testVclEcho("tcp")
}

func (s *VethsSuite) TestVclEchoUdp() {
	s.testVclEcho("udp")
}

func (s *VethsSuite) TestVclRetryAttach() {
	s.skip("this test takes too long, for now it's being skipped")
	s.testRetryAttach("tcp")
}

func (s *VethsSuite) testRetryAttach(proto string) {
	srvVppContainer := s.getTransientContainerByName("server-vpp")

	echoSrvContainer := s.getContainerByName("server-app")

	serverVclConfContent := fmt.Sprintf(vclTemplate, echoSrvContainer.getContainerWorkDir(), "1")
	echoSrvContainer.createFile("/vcl.conf", serverVclConfContent)

	echoSrvContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
	echoSrvContainer.execServer("vcl_test_server -p " + proto + " 12346")

	s.log("This whole test case can take around 3 minutes to run. Please be patient.")
	s.log("... Running first echo client test, before disconnect.")

	serverVeth := s.netInterfaces[serverInterfaceName]
	serverVethAddress := serverVeth.ip4AddressString()

	echoClnContainer := s.getTransientContainerByName("client-app")
	clientVclConfContent := fmt.Sprintf(vclTemplate, echoClnContainer.getContainerWorkDir(), "2")
	echoClnContainer.createFile("/vcl.conf", clientVclConfContent)

	testClientCommand := "vcl_test_client -U -p " + proto + " " + serverVethAddress + " 12346"
	echoClnContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
	o := echoClnContainer.exec(testClientCommand)
	s.log(o)
	s.log("... First test ended. Stopping VPP server now.")

	// Stop server-vpp-instance, start it again and then run vcl-test-client once more
	srvVppContainer.vppInstance.disconnect()
	stopVppCommand := "/bin/bash -c 'ps -C vpp_main -o pid= | xargs kill -9'"
	srvVppContainer.exec(stopVppCommand)

	s.setupServerVpp()

	s.log("... VPP server is starting again, so waiting for a bit.")
	time.Sleep(30 * time.Second) // Wait a moment for the re-attachment to happen

	s.log("... Running second echo client test, after disconnect and re-attachment.")
	o = echoClnContainer.exec(testClientCommand)
	s.log(o)
	s.log("Done.")
}