hs-test: experimental support for multiple test instances
- appending PID to interface and container names - added a check for used IP addresses - TestEnvoyProxyHttpTcp and TestTcpWithLoss are broken when running multiple instances Type: test Change-Id: Ib917079ec7cf851dee59ff9c67e74f48c7c5e3c6 Signed-off-by: adrianvillin <avillin@cisco.com>
This commit is contained in:

committed by
Florin Coras

parent
7a2961523e
commit
28bd8f07d3
@@ -1,11 +1,20 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/edwarnicke/exechelper"
|
||||
)
|
||||
|
||||
type AddressCounter = int
|
||||
|
||||
type Ip4AddressAllocator struct {
|
||||
networks map[int]AddressCounter
|
||||
chosenOctet int
|
||||
assignedIps []string
|
||||
}
|
||||
|
||||
func (a *Ip4AddressAllocator) AddNetwork(networkNumber int) {
|
||||
@@ -28,12 +37,59 @@ func (a *Ip4AddressAllocator) NewIp4InterfaceAddress(inputNetworkNumber ...int)
|
||||
return "", fmt.Errorf("no available IPv4 addresses")
|
||||
}
|
||||
|
||||
address := fmt.Sprintf("10.10.%v.%v/24", networkNumber, numberOfAddresses)
|
||||
address, err := a.createIpAddress(networkNumber, numberOfAddresses)
|
||||
|
||||
a.networks[networkNumber] = numberOfAddresses + 1
|
||||
|
||||
return address + "/24", err
|
||||
}
|
||||
|
||||
// Creates a file every time an IP is assigned: used to keep track of addresses in use.
|
||||
// If an address is not in use, 'counter' is then copied to 'chosenOctet' and it is used for the remaining tests.
|
||||
// Also checks host IP addresses.
|
||||
func (a *Ip4AddressAllocator) createIpAddress(networkNumber int, numberOfAddresses int) (string, error){
|
||||
hostIps, _ := exechelper.CombinedOutput("ip a")
|
||||
counter := 10
|
||||
var address string
|
||||
|
||||
for {
|
||||
if a.chosenOctet != 0 {
|
||||
address = fmt.Sprintf("10.%v.%v.%v", a.chosenOctet, networkNumber, numberOfAddresses)
|
||||
file, err := os.Create(address)
|
||||
if err != nil{
|
||||
return "", errors.New("unable to create file: " + fmt.Sprint(err))
|
||||
}
|
||||
file.Close()
|
||||
break
|
||||
} else {
|
||||
address = fmt.Sprintf("10.%v.%v.%v", counter, networkNumber, numberOfAddresses)
|
||||
_, err := os.Stat(address)
|
||||
if err == nil || strings.Contains(string(hostIps), address) {
|
||||
counter++
|
||||
} else if os.IsNotExist(err) {
|
||||
file, err := os.Create(address)
|
||||
if err != nil{
|
||||
return "", errors.New("unable to create file: " + fmt.Sprint(err))
|
||||
}
|
||||
file.Close()
|
||||
a.chosenOctet = counter
|
||||
break
|
||||
} else {
|
||||
return "", errors.New("an error occured while checking if a file exists: " + fmt.Sprint(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
a.assignedIps = append(a.assignedIps, address)
|
||||
return address, nil
|
||||
}
|
||||
|
||||
func (a *Ip4AddressAllocator) deleteIpAddresses(){
|
||||
for ip := range a.assignedIps{
|
||||
os.Remove(a.assignedIps[ip])
|
||||
}
|
||||
}
|
||||
|
||||
func NewIp4AddressAllocator() *Ip4AddressAllocator {
|
||||
var ip4AddrAllocator = new(Ip4AddressAllocator)
|
||||
ip4AddrAllocator.networks = make(map[int]AddressCounter)
|
||||
|
@@ -38,7 +38,7 @@ type Container struct {
|
||||
vppInstance *VppInstance
|
||||
}
|
||||
|
||||
func newContainer(suite *HstSuite, yamlInput ContainerConfig) (*Container, error) {
|
||||
func newContainer(suite *HstSuite, yamlInput ContainerConfig, pid string) (*Container, error) {
|
||||
containerName := yamlInput["name"].(string)
|
||||
if len(containerName) == 0 {
|
||||
err := fmt.Errorf("container name must not be blank")
|
||||
@@ -48,7 +48,7 @@ func newContainer(suite *HstSuite, yamlInput ContainerConfig) (*Container, error
|
||||
var container = new(Container)
|
||||
container.volumes = make(map[string]Volume)
|
||||
container.envVars = make(map[string]string)
|
||||
container.name = containerName
|
||||
container.name = containerName + pid
|
||||
container.suite = suite
|
||||
|
||||
if image, ok := yamlInput["image"]; ok {
|
||||
@@ -76,7 +76,7 @@ func newContainer(suite *HstSuite, yamlInput ContainerConfig) (*Container, error
|
||||
}
|
||||
|
||||
if _, ok := yamlInput["volumes"]; ok {
|
||||
workingVolumeDir := logDir + container.suite.T().Name() + volumeDir
|
||||
workingVolumeDir := logDir + container.suite.T().Name() + pid + volumeDir
|
||||
workDirReplacer := strings.NewReplacer("$HST_DIR", workDir)
|
||||
volDirReplacer := strings.NewReplacer("$HST_VOLUME_DIR", workingVolumeDir)
|
||||
for _, volu := range yamlInput["volumes"].([]interface{}) {
|
||||
@@ -249,7 +249,7 @@ func (c *Container) copy(sourceFileName string, targetFileName string) error {
|
||||
}
|
||||
|
||||
func (c *Container) createFile(destFileName string, content string) error {
|
||||
f, err := os.CreateTemp("/tmp", "hst-config")
|
||||
f, err := os.CreateTemp("/tmp", "hst-config" + c.suite.pid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@ package main
|
||||
|
||||
func (s *VethsSuite) TestEchoBuiltin() {
|
||||
serverVpp := s.getContainerByName("server-vpp").vppInstance
|
||||
serverVeth := s.netInterfaces[serverInterfaceName]
|
||||
serverVeth := s.getInterfaceByName(serverInterfaceName)
|
||||
|
||||
serverVpp.vppctl("test echo server " +
|
||||
" uri tcp://" + serverVeth.ip4AddressString() + "/1234")
|
||||
@@ -19,7 +19,7 @@ func (s *VethsSuite) TestEchoBuiltin() {
|
||||
func (s *VethsSuite) TestTcpWithLoss() {
|
||||
serverVpp := s.getContainerByName("server-vpp").vppInstance
|
||||
|
||||
serverVeth := s.netInterfaces[serverInterfaceName]
|
||||
serverVeth := s.getInterfaceByName(serverInterfaceName)
|
||||
serverVpp.vppctl("test echo server uri tcp://%s/20022",
|
||||
serverVeth.ip4AddressString())
|
||||
|
||||
@@ -33,7 +33,7 @@ func (s *VethsSuite) TestTcpWithLoss() {
|
||||
clientVpp.vppctl("set nsim poll-main-thread delay 0.01 ms bandwidth 40 gbit" +
|
||||
" packet-size 1400 packets-per-drop 1000")
|
||||
|
||||
clientVpp.vppctl("nsim output-feature enable-disable " + s.netInterfaces[clientInterfaceName].name)
|
||||
clientVpp.vppctl("nsim output-feature enable-disable " + s.getInterfaceByName(clientInterfaceName).name)
|
||||
|
||||
// Do echo test from client-vpp container
|
||||
output := clientVpp.vppctl("test echo client uri tcp://%s/20022 verbose echo-bytes mbytes 50",
|
||||
|
@@ -38,10 +38,12 @@ type HstSuite struct {
|
||||
cpuAllocator *CpuAllocatorT
|
||||
cpuContexts []*CpuContext
|
||||
cpuPerVpp int
|
||||
pid string
|
||||
}
|
||||
|
||||
func (s *HstSuite) SetupSuite() {
|
||||
var err error
|
||||
s.pid = fmt.Sprint(os.Getpid())
|
||||
s.cpuAllocator, err = CpuAllocator()
|
||||
if err != nil {
|
||||
s.FailNow("failed to init cpu allocator: %v", err)
|
||||
@@ -73,6 +75,7 @@ func (s *HstSuite) TearDownTest() {
|
||||
}
|
||||
s.resetContainers()
|
||||
s.removeVolumes()
|
||||
s.ip4AddrAllocator.deleteIpAddresses()
|
||||
}
|
||||
|
||||
func (s *HstSuite) skipIfUnconfiguring() {
|
||||
@@ -134,7 +137,6 @@ func logVppInstance(container *Container, maxLines int){
|
||||
fmt.Println(line)
|
||||
}
|
||||
fmt.Printf("^^^^^^^^^^^^^^^\n\n")
|
||||
|
||||
}
|
||||
|
||||
func (s *HstSuite) hstFail() {
|
||||
@@ -242,8 +244,16 @@ func (s *HstSuite) removeVolumes() {
|
||||
}
|
||||
}
|
||||
|
||||
func (s *HstSuite) getNetNamespaceByName(name string) string {
|
||||
return name + s.pid
|
||||
}
|
||||
|
||||
func (s *HstSuite) getInterfaceByName(name string) *NetInterface {
|
||||
return s.netInterfaces[name + s.pid]
|
||||
}
|
||||
|
||||
func (s *HstSuite) getContainerByName(name string) *Container {
|
||||
return s.containers[name]
|
||||
return s.containers[name + s.pid]
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -251,7 +261,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[name]
|
||||
containerCopy := *s.containers[name + s.pid]
|
||||
return &containerCopy
|
||||
}
|
||||
|
||||
@@ -269,7 +279,7 @@ func (s *HstSuite) loadContainerTopology(topologyName string) {
|
||||
for _, elem := range yamlTopo.Volumes {
|
||||
volumeMap := elem["volume"].(VolumeConfig)
|
||||
hostDir := volumeMap["host-dir"].(string)
|
||||
workingVolumeDir := logDir + s.T().Name() + volumeDir
|
||||
workingVolumeDir := logDir + s.T().Name() + s.pid + volumeDir
|
||||
volDirReplacer := strings.NewReplacer("$HST_VOLUME_DIR", workingVolumeDir)
|
||||
hostDir = volDirReplacer.Replace(hostDir)
|
||||
s.volumes = append(s.volumes, hostDir)
|
||||
@@ -277,7 +287,8 @@ func (s *HstSuite) loadContainerTopology(topologyName string) {
|
||||
|
||||
s.containers = make(map[string]*Container)
|
||||
for _, elem := range yamlTopo.Containers {
|
||||
newContainer, err := newContainer(s, elem)
|
||||
newContainer, err := newContainer(s, elem, s.pid)
|
||||
newContainer.suite = s
|
||||
if err != nil {
|
||||
s.T().Fatalf("container config error: %v", err)
|
||||
}
|
||||
@@ -298,7 +309,32 @@ func (s *HstSuite) loadNetworkTopology(topologyName string) {
|
||||
|
||||
s.ip4AddrAllocator = NewIp4AddressAllocator()
|
||||
s.netInterfaces = make(map[string]*NetInterface)
|
||||
|
||||
for _, elem := range yamlTopo.Devices {
|
||||
if _, ok := elem["name"]; ok {
|
||||
elem["name"] = elem["name"].(string) + s.pid
|
||||
}
|
||||
|
||||
if peer, ok := elem["peer"].(NetDevConfig); ok {
|
||||
if peer["name"].(string) != ""{
|
||||
peer["name"] = peer["name"].(string) + s.pid
|
||||
}
|
||||
if _, ok := peer["netns"]; ok{
|
||||
peer["netns"] = peer["netns"].(string) + s.pid
|
||||
}
|
||||
}
|
||||
|
||||
if _, ok := elem["netns"]; ok {
|
||||
elem["netns"] = elem["netns"].(string) + s.pid
|
||||
}
|
||||
|
||||
if _, ok := elem["interfaces"]; ok {
|
||||
interfaceCount := len(elem["interfaces"].([]interface{}))
|
||||
for i := 0; i < interfaceCount; i++ {
|
||||
elem["interfaces"].([]interface{})[i] = elem["interfaces"].([]interface{})[i].(string) + s.pid
|
||||
}
|
||||
}
|
||||
|
||||
switch elem["type"].(string) {
|
||||
case NetNs:
|
||||
{
|
||||
@@ -366,8 +402,17 @@ func (s *HstSuite) getTestId() string {
|
||||
return s.testIds[testName]
|
||||
}
|
||||
|
||||
// Returns last 4 digits of PID
|
||||
func (s *HstSuite) getPortFromPid() string {
|
||||
port := s.pid
|
||||
for len(port) < 4 {
|
||||
port += "0"
|
||||
}
|
||||
return port[len(port)-4:]
|
||||
}
|
||||
|
||||
func (s *HstSuite) startServerApp(running chan error, done chan struct{}, env []string) {
|
||||
cmd := exec.Command("iperf3", "-4", "-s")
|
||||
cmd := exec.Command("iperf3", "-4", "-s", "-p", s.getPortFromPid())
|
||||
if env != nil {
|
||||
cmd.Env = env
|
||||
}
|
||||
@@ -391,7 +436,7 @@ func (s *HstSuite) startClientApp(ipAddress string, env []string, clnCh chan err
|
||||
nTries := 0
|
||||
|
||||
for {
|
||||
cmd := exec.Command("iperf3", "-c", ipAddress, "-u", "-l", "1460", "-b", "10g")
|
||||
cmd := exec.Command("iperf3", "-c", ipAddress, "-u", "-l", "1460", "-b", "10g", "-p", s.getPortFromPid())
|
||||
if env != nil {
|
||||
cmd.Env = env
|
||||
}
|
||||
@@ -413,7 +458,7 @@ func (s *HstSuite) startClientApp(ipAddress string, env []string, clnCh chan err
|
||||
}
|
||||
|
||||
func (s *HstSuite) startHttpServer(running chan struct{}, done chan struct{}, addressPort, netNs string) {
|
||||
cmd := newCommand([]string{"./http_server", addressPort}, netNs)
|
||||
cmd := newCommand([]string{"./http_server", addressPort, s.pid}, netNs)
|
||||
err := cmd.Start()
|
||||
s.log(cmd)
|
||||
if err != nil {
|
||||
|
@@ -7,11 +7,11 @@ import (
|
||||
)
|
||||
|
||||
func (s *NsSuite) TestHttpTps() {
|
||||
iface := s.netInterfaces[clientInterface]
|
||||
iface := s.getInterfaceByName(clientInterface)
|
||||
client_ip := iface.ip4AddressString()
|
||||
port := "8080"
|
||||
finished := make(chan error, 1)
|
||||
clientNetns := "cln"
|
||||
clientNetns := s.getNetNamespaceByName("cln")
|
||||
|
||||
container := s.getContainerByName("vpp")
|
||||
|
||||
@@ -28,7 +28,7 @@ func (s *VethsSuite) TestHttpCli() {
|
||||
serverContainer := s.getContainerByName("server-vpp")
|
||||
clientContainer := s.getContainerByName("client-vpp")
|
||||
|
||||
serverVeth := s.netInterfaces[serverInterfaceName]
|
||||
serverVeth := s.getInterfaceByName(serverInterfaceName)
|
||||
|
||||
serverContainer.vppInstance.vppctl("http cli server")
|
||||
|
||||
@@ -50,7 +50,7 @@ func (s *NoTopoSuite) TestNginxHttp3() {
|
||||
|
||||
vpp := s.getContainerByName("vpp").vppInstance
|
||||
vpp.waitForApp("nginx-", 5)
|
||||
serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
|
||||
serverAddress := s.getInterfaceByName(tapInterfaceName).peer.ip4AddressString()
|
||||
|
||||
defer func() { os.Remove(query) }()
|
||||
curlCont := s.getContainerByName("curl")
|
||||
@@ -65,7 +65,7 @@ func (s *NoTopoSuite) TestHttpStaticProm() {
|
||||
finished := make(chan error, 1)
|
||||
query := "stats.prom"
|
||||
vpp := s.getContainerByName("vpp").vppInstance
|
||||
serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
|
||||
serverAddress := s.getInterfaceByName(tapInterfaceName).peer.ip4AddressString()
|
||||
s.log(vpp.vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers"))
|
||||
s.log(vpp.vppctl("prom enable"))
|
||||
go s.startWget(finished, serverAddress, "80", query, "")
|
||||
@@ -83,7 +83,7 @@ func (s *NoTopoSuite) TestNginxAsServer() {
|
||||
vpp := s.getContainerByName("vpp").vppInstance
|
||||
vpp.waitForApp("nginx-", 5)
|
||||
|
||||
serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
|
||||
serverAddress := s.getInterfaceByName(tapInterfaceName).peer.ip4AddressString()
|
||||
|
||||
defer func() { os.Remove(query) }()
|
||||
go s.startWget(finished, serverAddress, "80", query, "")
|
||||
@@ -104,7 +104,7 @@ func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error {
|
||||
nRequests := 1000000
|
||||
nClients := 1000
|
||||
|
||||
serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
|
||||
serverAddress := s.getInterfaceByName(tapInterfaceName).peer.ip4AddressString()
|
||||
|
||||
vpp := s.getContainerByName("vpp").vppInstance
|
||||
|
||||
|
@@ -62,7 +62,7 @@ func (s *VethsSuite) TestLDPreloadIperfVpp() {
|
||||
s.log("attaching client to vpp")
|
||||
var clnRes = make(chan string, 1)
|
||||
clnEnv := append(os.Environ(), ldpreload, "VCL_CONFIG="+clientVclFileName)
|
||||
serverVethAddress := s.netInterfaces[serverInterfaceName].ip4AddressString()
|
||||
serverVethAddress := s.getInterfaceByName(serverInterfaceName).ip4AddressString()
|
||||
go s.startClientApp(serverVethAddress, clnEnv, clnCh, clnRes)
|
||||
s.log(<-clnRes)
|
||||
|
||||
|
@@ -14,7 +14,7 @@ func (s *TapSuite) TestLinuxIperf() {
|
||||
s.assertNil(err, err)
|
||||
s.log("server running")
|
||||
|
||||
ipAddress := s.netInterfaces[tapInterfaceName].ip4AddressString()
|
||||
ipAddress := s.getInterfaceByName(tapInterfaceName).ip4AddressString()
|
||||
go s.startClientApp(ipAddress, nil, clnCh, clnRes)
|
||||
s.log("client running")
|
||||
s.log(<-clnRes)
|
||||
|
@@ -5,7 +5,7 @@ import (
|
||||
)
|
||||
|
||||
func (s *NginxSuite) TestMirroring() {
|
||||
proxyAddress := s.netInterfaces[mirroringClientInterfaceName].peer.ip4AddressString()
|
||||
proxyAddress := s.getInterfaceByName(mirroringClientInterfaceName).peer.ip4AddressString()
|
||||
|
||||
path := "/64B.json"
|
||||
|
||||
|
@@ -8,18 +8,19 @@ import (
|
||||
)
|
||||
|
||||
func testProxyHttpTcp(s *NsSuite, proto string) error {
|
||||
const outputFile = "test.data"
|
||||
const srcFile = "httpTestFile"
|
||||
const fileSize = "10M"
|
||||
var outputFile string = "test" + s.pid + ".data"
|
||||
var srcFilePid string = "httpTestFile" + s.pid
|
||||
const srcFileNoPid = "httpTestFile"
|
||||
const fileSize string = "10M"
|
||||
stopServer := make(chan struct{}, 1)
|
||||
serverRunning := make(chan struct{}, 1)
|
||||
serverNetns := "srv"
|
||||
clientNetns := "cln"
|
||||
serverNetns := s.getNetNamespaceByName("srv")
|
||||
clientNetns := s.getNetNamespaceByName("cln")
|
||||
|
||||
// create test file
|
||||
err := exechelper.Run(fmt.Sprintf("ip netns exec %s truncate -s %s %s", serverNetns, fileSize, srcFile))
|
||||
err := exechelper.Run(fmt.Sprintf("ip netns exec %s truncate -s %s %s", serverNetns, fileSize, srcFilePid))
|
||||
s.assertNil(err, "failed to run truncate command: " + fmt.Sprint(err))
|
||||
defer func() { os.Remove(srcFile) }()
|
||||
defer func() { os.Remove(srcFilePid) }()
|
||||
|
||||
s.log("test file created...")
|
||||
|
||||
@@ -33,13 +34,13 @@ func testProxyHttpTcp(s *NsSuite, proto string) error {
|
||||
|
||||
s.log("http server started...")
|
||||
|
||||
clientVeth := s.netInterfaces[clientInterface]
|
||||
clientVeth := s.getInterfaceByName(clientInterface)
|
||||
c := fmt.Sprintf("ip netns exec %s wget --no-proxy --retry-connrefused"+
|
||||
" --retry-on-http-error=503 --tries=10 -O %s ", clientNetns, outputFile)
|
||||
if proto == "tls" {
|
||||
c += " --secure-protocol=TLSv1_3 --no-check-certificate https://"
|
||||
}
|
||||
c += fmt.Sprintf("%s:555/%s", clientVeth.ip4AddressString(), srcFile)
|
||||
c += fmt.Sprintf("%s:555/%s", clientVeth.ip4AddressString(), srcFileNoPid)
|
||||
s.log(c)
|
||||
_, err = exechelper.CombinedOutput(c)
|
||||
|
||||
@@ -48,13 +49,13 @@ func testProxyHttpTcp(s *NsSuite, proto string) error {
|
||||
s.assertNil(err, "failed to run wget: '%s', cmd: %s", err, c)
|
||||
stopServer <- struct{}{}
|
||||
|
||||
s.assertNil(assertFileSize(outputFile, srcFile))
|
||||
s.assertNil(assertFileSize(outputFile, srcFilePid))
|
||||
return nil
|
||||
}
|
||||
|
||||
func configureVppProxy(s *NsSuite, proto string) {
|
||||
serverVeth := s.netInterfaces[serverInterface]
|
||||
clientVeth := s.netInterfaces[clientInterface]
|
||||
serverVeth := s.getInterfaceByName(serverInterface)
|
||||
clientVeth := s.getInterfaceByName(clientInterface)
|
||||
|
||||
testVppProxy := s.getContainerByName("vpp").vppInstance
|
||||
output := testVppProxy.vppctl(
|
||||
@@ -85,7 +86,7 @@ func configureEnvoyProxy(s *NsSuite) {
|
||||
err := envoyContainer.create()
|
||||
s.assertNil(err, "Error creating envoy container: %s", err)
|
||||
|
||||
serverVeth := s.netInterfaces[serverInterface]
|
||||
serverVeth := s.getInterfaceByName(serverInterface)
|
||||
address := struct {
|
||||
Server string
|
||||
}{
|
||||
|
@@ -14,7 +14,7 @@ func (s *VethsSuite) TestVppEchoTcp() {
|
||||
}
|
||||
|
||||
func (s *VethsSuite) testVppEcho(proto string) {
|
||||
serverVethAddress := s.netInterfaces[serverInterfaceName].ip4AddressString()
|
||||
serverVethAddress := s.getInterfaceByName(serverInterfaceName).ip4AddressString()
|
||||
uri := proto + "://" + serverVethAddress + "/12344"
|
||||
|
||||
echoSrvContainer := s.getContainerByName("server-app")
|
||||
|
@@ -1,12 +1,12 @@
|
||||
package main
|
||||
|
||||
// These correspond to names used in yaml config
|
||||
const (
|
||||
// These correspond to names used in yaml config
|
||||
mirroringClientInterfaceName = "hstcln"
|
||||
mirroringServerInterfaceName = "hstsrv"
|
||||
vppProxyContainerName = "vpp-proxy"
|
||||
nginxProxyContainerName = "nginx-proxy"
|
||||
nginxServerContainerName = "nginx-server"
|
||||
mirroringClientInterfaceName = "hstcln"
|
||||
mirroringServerInterfaceName = "hstsrv"
|
||||
)
|
||||
|
||||
type NginxSuite struct {
|
||||
@@ -35,10 +35,10 @@ func (s *NginxSuite) SetupTest() {
|
||||
proxyVpp, _ := vppProxyContainer.newVppInstance(cpus, sessionConfig)
|
||||
s.assertNil(proxyVpp.start())
|
||||
|
||||
clientInterface := s.netInterfaces[mirroringClientInterfaceName]
|
||||
clientInterface := s.getInterfaceByName(mirroringClientInterfaceName)
|
||||
s.assertNil(proxyVpp.createTap(clientInterface, 1))
|
||||
|
||||
serverInterface := s.netInterfaces[mirroringServerInterfaceName]
|
||||
serverInterface := s.getInterfaceByName(mirroringServerInterfaceName)
|
||||
s.assertNil(proxyVpp.createTap(serverInterface, 2))
|
||||
|
||||
nginxContainer := s.getTransientContainerByName(nginxProxyContainerName)
|
||||
|
@@ -1,9 +1,9 @@
|
||||
package main
|
||||
|
||||
const (
|
||||
singleTopoContainerVpp = "vpp"
|
||||
singleTopoContainerNginx = "nginx"
|
||||
tapInterfaceName = "htaphost"
|
||||
singleTopoContainerVpp = "vpp"
|
||||
singleTopoContainerNginx = "nginx"
|
||||
tapInterfaceName = "htaphost"
|
||||
)
|
||||
|
||||
type NoTopoSuite struct {
|
||||
@@ -31,7 +31,7 @@ func (s *NoTopoSuite) SetupTest() {
|
||||
vpp, _ := container.newVppInstance(cpus, sessionConfig)
|
||||
s.assertNil(vpp.start())
|
||||
|
||||
tapInterface := s.netInterfaces[tapInterfaceName]
|
||||
tapInterface := s.getInterfaceByName(tapInterfaceName)
|
||||
|
||||
s.assertNil(vpp.createTap(tapInterface), "failed to create tap interface")
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package main
|
||||
|
||||
// These correspond to names used in yaml config
|
||||
const (
|
||||
// These correspond to names used in yaml config
|
||||
clientInterface = "hclnvpp"
|
||||
serverInterface = "hsrvvpp"
|
||||
)
|
||||
@@ -33,11 +33,11 @@ func (s *NsSuite) SetupTest() {
|
||||
vpp, _ := container.newVppInstance(cpus, sessionConfig)
|
||||
s.assertNil(vpp.start())
|
||||
|
||||
idx, err := vpp.createAfPacket(s.netInterfaces[serverInterface])
|
||||
idx, err := vpp.createAfPacket(s.getInterfaceByName(serverInterface))
|
||||
s.assertNil(err, err)
|
||||
s.assertNotEqual(0, idx)
|
||||
|
||||
idx, err = vpp.createAfPacket(s.netInterfaces[clientInterface])
|
||||
idx, err = vpp.createAfPacket(s.getInterfaceByName(clientInterface))
|
||||
s.assertNil(err, err)
|
||||
s.assertNotEqual(0, idx)
|
||||
|
||||
|
@@ -4,8 +4,8 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// These correspond to names used in yaml config
|
||||
const (
|
||||
// These correspond to names used in yaml config
|
||||
serverInterfaceName = "srv"
|
||||
clientInterfaceName = "cln"
|
||||
)
|
||||
@@ -25,7 +25,6 @@ func (s *VethsSuite) SetupTest() {
|
||||
s.HstSuite.SetupTest()
|
||||
|
||||
// Setup test conditions
|
||||
|
||||
var sessionConfig Stanza
|
||||
sessionConfig.
|
||||
newStanza("session").
|
||||
@@ -55,7 +54,7 @@ func (s *VethsSuite) setupServerVpp() {
|
||||
serverVpp := s.getContainerByName("server-vpp").vppInstance
|
||||
s.assertNil(serverVpp.start())
|
||||
|
||||
serverVeth := s.netInterfaces[serverInterfaceName]
|
||||
serverVeth := s.getInterfaceByName(serverInterfaceName)
|
||||
idx, err := serverVpp.createAfPacket(serverVeth)
|
||||
s.assertNil(err, err)
|
||||
s.assertNotEqual(0, idx)
|
||||
@@ -65,7 +64,7 @@ func (s *VethsSuite) setupClientVpp() {
|
||||
clientVpp := s.getContainerByName("client-vpp").vppInstance
|
||||
s.assertNil(clientVpp.start())
|
||||
|
||||
clientVeth := s.netInterfaces[clientInterfaceName]
|
||||
clientVeth := s.getInterfaceByName(clientInterfaceName)
|
||||
idx, err := clientVpp.createAfPacket(clientVeth)
|
||||
s.assertNil(err, err)
|
||||
s.assertNotEqual(0, idx)
|
||||
|
@@ -8,13 +8,13 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
if len(os.Args) < 2 {
|
||||
if len(os.Args) < 3 {
|
||||
fmt.Println("arg expected")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
http.HandleFunc("/httpTestFile", func(w http.ResponseWriter, r *http.Request) {
|
||||
file, _ := os.Open("httpTestFile")
|
||||
file, _ := os.Open("httpTestFile" + os.Args[2])
|
||||
defer file.Close()
|
||||
io.Copy(w, file)
|
||||
})
|
||||
|
@@ -35,7 +35,7 @@ func (s *VethsSuite) testXEchoVclClient(proto string) {
|
||||
port := "12345"
|
||||
serverVpp := s.getContainerByName("server-vpp").vppInstance
|
||||
|
||||
serverVeth := s.netInterfaces[serverInterfaceName]
|
||||
serverVeth := s.getInterfaceByName(serverInterfaceName)
|
||||
serverVpp.vppctl("test echo server uri %s://%s/%s fifo-size 64k", proto, serverVeth.ip4AddressString(), port)
|
||||
|
||||
echoClnContainer := s.getTransientContainerByName("client-app")
|
||||
@@ -67,7 +67,7 @@ func (s *VethsSuite) testXEchoVclServer(proto string) {
|
||||
vclSrvCmd := fmt.Sprintf("vcl_test_server -p %s %s", proto, port)
|
||||
srvAppCont.execServer(vclSrvCmd)
|
||||
|
||||
serverVeth := s.netInterfaces[serverInterfaceName]
|
||||
serverVeth := s.getInterfaceByName(serverInterfaceName)
|
||||
serverVethAddress := serverVeth.ip4AddressString()
|
||||
|
||||
clientVpp := s.getContainerByName("client-vpp").vppInstance
|
||||
@@ -85,7 +85,7 @@ func (s *VethsSuite) testVclEcho(proto string) {
|
||||
srvAppCont.addEnvVar("VCL_CONFIG", "/vcl.conf")
|
||||
srvAppCont.execServer("vcl_test_server " + port)
|
||||
|
||||
serverVeth := s.netInterfaces[serverInterfaceName]
|
||||
serverVeth := s.getInterfaceByName(serverInterfaceName)
|
||||
serverVethAddress := serverVeth.ip4AddressString()
|
||||
|
||||
echoClnContainer := s.getTransientContainerByName("client-app")
|
||||
@@ -123,7 +123,7 @@ func (s *VethsSuite) testRetryAttach(proto string) {
|
||||
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]
|
||||
serverVeth := s.getInterfaceByName(serverInterfaceName)
|
||||
serverVethAddress := serverVeth.ip4AddressString()
|
||||
|
||||
echoClnContainer := s.getTransientContainerByName("client-app")
|
||||
|
Reference in New Issue
Block a user