hs-test: use consistent naming convention

Exported indentifiers in Go start with capital letters. Only few fields
in hs-test, which are being unmarshaled from yaml are required to be
exported. Every other field name or method name should start with
lower-case letter, to be consistent with this naming convention.

Type: test
Signed-off-by: Maros Ondrejicka <mondreji@cisco.com>
Change-Id: I7eab0eef9fd08a7890c77b6ce1aeb3fa4b80f3cd
This commit is contained in:
Maros Ondrejicka
2023-02-28 16:55:01 +01:00
committed by Florin Coras
parent c3542e17b5
commit e7625d0856
17 changed files with 205 additions and 238 deletions

View File

@@ -35,7 +35,7 @@ type Container struct {
vppInstance *VppInstance
}
func NewContainer(yamlInput ContainerConfig) (*Container, error) {
func newContainer(yamlInput ContainerConfig) (*Container, error) {
containerName := yamlInput["name"].(string)
if len(containerName) == 0 {
err := fmt.Errorf("container name must not be blank")
@@ -93,10 +93,6 @@ func NewContainer(yamlInput ContainerConfig) (*Container, error) {
return container, nil
}
func (c *Container) Suite() *HstSuite {
return c.suite
}
func (c *Container) getWorkDirVolume() (res Volume, exists bool) {
for _, v := range c.volumes {
if v.isDefaultWorkDir {
@@ -108,14 +104,14 @@ func (c *Container) getWorkDirVolume() (res Volume, exists bool) {
return
}
func (c *Container) GetHostWorkDir() (res string) {
func (c *Container) getHostWorkDir() (res string) {
if v, ok := c.getWorkDirVolume(); ok {
res = v.hostDir
}
return
}
func (c *Container) GetContainerWorkDir() (res string) {
func (c *Container) getContainerWorkDir() (res string) {
if v, ok := c.getWorkDirVolume(); ok {
res = v.containerDir
}
@@ -133,13 +129,13 @@ func (c *Container) getContainerArguments() string {
func (c *Container) create() error {
cmd := "docker create " + c.getContainerArguments()
c.Suite().log(cmd)
c.suite.log(cmd)
return exechelper.Run(cmd)
}
func (c *Container) start() error {
cmd := "docker start " + c.name
c.Suite().log(cmd)
c.suite.log(cmd)
return exechelper.Run(cmd)
}
@@ -149,7 +145,7 @@ func (c *Container) run() error {
}
cmd := "docker run -d " + c.getContainerArguments()
c.Suite().log(cmd)
c.suite.log(cmd)
err := exechelper.Run(cmd)
if err != nil {
return fmt.Errorf("container run failed: %s", err)
@@ -237,30 +233,30 @@ func (c *Container) execServer(command string, arguments ...any) {
serverCommand := fmt.Sprintf(command, arguments...)
containerExecCommand := "docker exec -d" + c.getEnvVarsAsCliOption() +
" " + c.name + " " + serverCommand
c.Suite().T().Helper()
c.Suite().log(containerExecCommand)
c.Suite().assertNil(exechelper.Run(containerExecCommand))
c.suite.T().Helper()
c.suite.log(containerExecCommand)
c.suite.assertNil(exechelper.Run(containerExecCommand))
}
func (c *Container) exec(command string, arguments ...any) string {
cliCommand := fmt.Sprintf(command, arguments...)
containerExecCommand := "docker exec" + c.getEnvVarsAsCliOption() +
" " + c.name + " " + cliCommand
c.Suite().T().Helper()
c.Suite().log(containerExecCommand)
c.suite.T().Helper()
c.suite.log(containerExecCommand)
byteOutput, err := exechelper.CombinedOutput(containerExecCommand)
c.Suite().assertNil(err)
c.suite.assertNil(err)
return string(byteOutput)
}
func (c *Container) getLogDirPath() string {
testId := c.Suite().getTestId()
testName := c.Suite().T().Name()
testId := c.suite.getTestId()
testName := c.suite.T().Name()
logDirPath := logDir + testName + "/" + testId + "/"
cmd := exec.Command("mkdir", "-p", logDirPath)
if err := cmd.Run(); err != nil {
c.Suite().T().Fatalf("mkdir error: %v", err)
c.suite.T().Fatalf("mkdir error: %v", err)
}
return logDirPath
@@ -277,22 +273,22 @@ func (c *Container) saveLogs() {
cmd = exec.Command("docker", "logs", "--details", "-t", c.name)
output, err := cmd.CombinedOutput()
if err != nil {
c.Suite().T().Fatalf("fetching logs error: %v", err)
c.suite.T().Fatalf("fetching logs error: %v", err)
}
f, err := os.Create(testLogFilePath)
if err != nil {
c.Suite().T().Fatalf("file create error: %v", err)
c.suite.T().Fatalf("file create error: %v", err)
}
fmt.Fprintf(f, string(output))
fmt.Fprint(f, string(output))
f.Close()
}
func (c *Container) log() string {
cmd := "docker logs " + c.name
c.Suite().log(cmd)
c.suite.log(cmd)
o, err := exechelper.CombinedOutput(cmd)
c.Suite().assertNil(err)
c.suite.assertNil(err)
return string(o)
}
@@ -310,14 +306,14 @@ func (c *Container) createConfig(targetConfigName string, templateName string, v
template := template.Must(template.ParseFiles(templateName))
f, err := os.CreateTemp("/tmp/hs-test/", "hst-config")
c.Suite().assertNil(err)
c.suite.assertNil(err)
defer os.Remove(f.Name())
err = template.Execute(f, values)
c.Suite().assertNil(err)
c.suite.assertNil(err)
err = f.Close()
c.Suite().assertNil(err)
c.suite.assertNil(err)
c.copy(f.Name(), targetConfigName)
}

View File

@@ -6,12 +6,12 @@ func (s *VethsSuite) TestEchoBuiltin() {
serverVpp.vppctl("test echo server " +
" private-segment-size 1g fifo-size 4 no-echo" +
" uri tcp://" + serverVeth.IP4AddressString() + "/1234")
" uri tcp://" + serverVeth.ip4AddressString() + "/1234")
clientVpp := s.getContainerByName("client-vpp").vppInstance
o := clientVpp.vppctl("test echo client nclients 10000 bytes 1" +
" syn-timeout 100 test-timeout 100 no-return private-segment-size 1g" +
" fifo-size 4 uri tcp://" + serverVeth.IP4AddressString() + "/1234")
" fifo-size 4 uri tcp://" + serverVeth.ip4AddressString() + "/1234")
s.log(o)
}

View File

@@ -17,10 +17,10 @@ const (
defaultNetworkNumber int = 1
)
var IsPersistent = flag.Bool("persist", false, "persists topology config")
var IsVerbose = flag.Bool("verbose", false, "verbose test output")
var IsUnconfiguring = flag.Bool("unconfigure", false, "remove topology")
var IsVppDebug = flag.Bool("debug", false, "attach gdb to vpp")
var isPersistent = flag.Bool("persist", false, "persists topology config")
var isVerbose = flag.Bool("verbose", false, "verbose test output")
var isUnconfiguring = flag.Bool("unconfigure", false, "remove topology")
var isVppDebug = flag.Bool("debug", false, "attach gdb to vpp")
type HstSuite struct {
suite.Suite
@@ -37,26 +37,26 @@ func (s *HstSuite) TearDownSuite() {
}
func (s *HstSuite) TearDownTest() {
if *IsPersistent {
if *isPersistent {
return
}
s.ResetContainers()
s.RemoveVolumes()
s.resetContainers()
s.removeVolumes()
}
func (s *HstSuite) skipIfUnconfiguring() {
if *IsUnconfiguring {
if *isUnconfiguring {
s.skip("skipping to unconfigure")
}
}
func (s *HstSuite) SetupTest() {
s.skipIfUnconfiguring()
s.SetupVolumes()
s.SetupContainers()
s.setupVolumes()
s.setupContainers()
}
func (s *HstSuite) SetupVolumes() {
func (s *HstSuite) setupVolumes() {
for _, volume := range s.volumes {
cmd := "docker volume create --name=" + volume
s.log(cmd)
@@ -64,7 +64,7 @@ func (s *HstSuite) SetupVolumes() {
}
}
func (s *HstSuite) SetupContainers() {
func (s *HstSuite) setupContainers() {
for _, container := range s.containers {
if container.isOptional == false {
container.run()
@@ -119,7 +119,7 @@ func (s *HstSuite) assertNotEmpty(object interface{}, msgAndArgs ...interface{})
}
func (s *HstSuite) log(args ...any) {
if *IsVerbose {
if *isVerbose {
s.T().Helper()
s.T().Log(args...)
}
@@ -130,13 +130,13 @@ func (s *HstSuite) skip(args ...any) {
s.T().SkipNow()
}
func (s *HstSuite) ResetContainers() {
func (s *HstSuite) resetContainers() {
for _, container := range s.containers {
container.stop()
}
}
func (s *HstSuite) RemoveVolumes() {
func (s *HstSuite) removeVolumes() {
for _, volumeName := range s.volumes {
cmd := "docker volume rm " + volumeName
exechelper.Run(cmd)
@@ -158,7 +158,7 @@ func (s *HstSuite) getTransientContainerByName(name string) *Container {
}
func (s *HstSuite) loadContainerTopology(topologyName string) {
data, err := ioutil.ReadFile(ContainerTopologyDir + topologyName + ".yaml")
data, err := ioutil.ReadFile(containerTopologyDir + topologyName + ".yaml")
if err != nil {
s.T().Fatalf("read error: %v", err)
}
@@ -176,7 +176,7 @@ func (s *HstSuite) loadContainerTopology(topologyName string) {
s.containers = make(map[string]*Container)
for _, elem := range yamlTopo.Containers {
newContainer, err := NewContainer(elem)
newContainer, err := newContainer(elem)
newContainer.suite = s
if err != nil {
s.T().Fatalf("container config error: %v", err)
@@ -186,7 +186,7 @@ func (s *HstSuite) loadContainerTopology(topologyName string) {
}
func (s *HstSuite) loadNetworkTopology(topologyName string) {
data, err := ioutil.ReadFile(NetworkTopologyDir + topologyName + ".yaml")
data, err := ioutil.ReadFile(networkTopologyDir + topologyName + ".yaml")
if err != nil {
s.T().Fatalf("read error: %v", err)
}
@@ -196,13 +196,13 @@ func (s *HstSuite) loadNetworkTopology(topologyName string) {
s.T().Fatalf("unmarshal error: %v", err)
}
s.addresser = NewAddresser(s)
s.addresser = newAddresser(s)
s.netInterfaces = make(map[string]*NetInterface)
for _, elem := range yamlTopo.Devices {
switch elem["type"].(string) {
case NetNs:
{
if namespace, err := NewNetNamespace(elem); err == nil {
if namespace, err := newNetNamespace(elem); err == nil {
s.netConfigs = append(s.netConfigs, &namespace)
} else {
s.T().Fatalf("network config error: %v", err)
@@ -210,7 +210,7 @@ func (s *HstSuite) loadNetworkTopology(topologyName string) {
}
case Veth, Tap:
{
if netIf, err := NewNetworkInterface(elem, s.addresser); err == nil {
if netIf, err := newNetworkInterface(elem, s.addresser); err == nil {
s.netConfigs = append(s.netConfigs, netIf)
s.netInterfaces[netIf.Name()] = netIf
} else {
@@ -219,7 +219,7 @@ func (s *HstSuite) loadNetworkTopology(topologyName string) {
}
case Bridge:
{
if bridge, err := NewBridge(elem); err == nil {
if bridge, err := newBridge(elem); err == nil {
s.netConfigs = append(s.netConfigs, &bridge)
} else {
s.T().Fatalf("network config error: %v", err)
@@ -232,23 +232,23 @@ func (s *HstSuite) loadNetworkTopology(topologyName string) {
func (s *HstSuite) configureNetworkTopology(topologyName string) {
s.loadNetworkTopology(topologyName)
if *IsUnconfiguring {
if *isUnconfiguring {
return
}
for _, nc := range s.netConfigs {
if err := nc.Configure(); err != nil {
if err := nc.configure(); err != nil {
s.T().Fatalf("network config error: %v", err)
}
}
}
func (s *HstSuite) unconfigureNetworkTopology() {
if *IsPersistent {
if *isPersistent {
return
}
for _, nc := range s.netConfigs {
nc.Unconfigure()
nc.unconfigure()
}
}
@@ -273,18 +273,18 @@ type Addresser struct {
suite *HstSuite
}
func (a *Addresser) AddNetwork(networkNumber int) {
func (a *Addresser) addNetwork(networkNumber int) {
a.networks[networkNumber] = 1
}
func (a *Addresser) NewIp4Address(inputNetworkNumber ...int) (string, error) {
func (a *Addresser) newIp4Address(inputNetworkNumber ...int) (string, error) {
var networkNumber int = 0
if len(inputNetworkNumber) > 0 {
networkNumber = inputNetworkNumber[0]
}
if _, ok := a.networks[networkNumber]; !ok {
a.AddNetwork(networkNumber)
a.addNetwork(networkNumber)
}
numberOfAddresses := a.networks[networkNumber]
@@ -299,10 +299,10 @@ func (a *Addresser) NewIp4Address(inputNetworkNumber ...int) (string, error) {
return address, nil
}
func NewAddresser(suite *HstSuite) *Addresser {
func newAddresser(suite *HstSuite) *Addresser {
var addresser = new(Addresser)
addresser.suite = suite
addresser.networks = make(map[int]AddressCounter)
addresser.AddNetwork(0)
addresser.addNetwork(0)
return addresser
}

View File

@@ -8,7 +8,7 @@ import (
func (s *NsSuite) TestHttpTps() {
iface := s.netInterfaces[clientInterface]
client_ip := iface.IP4AddressString()
client_ip := iface.ip4AddressString()
port := "8080"
finished := make(chan error, 1)
@@ -31,7 +31,7 @@ func (s *VethsSuite) TestHttpCli() {
serverContainer.vppInstance.vppctl("http cli server")
uri := "http://" + serverVeth.IP4AddressString() + "/80"
uri := "http://" + serverVeth.ip4AddressString() + "/80"
o := clientContainer.vppInstance.vppctl("http cli client" +
" uri " + uri + " query /show/version")
@@ -50,7 +50,7 @@ func (s *NoTopoSuite) TestNginxAsServer() {
vpp := s.getContainerByName("vpp").vppInstance
vpp.waitForApp("nginx-", 5)
serverAddress := s.netInterfaces[tapInterfaceName].Peer().IP4AddressString()
serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
defer func() { os.Remove(query) }()
go startWget(finished, serverAddress, "80", query, "")
@@ -63,7 +63,7 @@ func runNginxPerf(s *NoTopoSuite, mode, ab_or_wrk string) error {
var args []string
var exeName string
serverAddress := s.netInterfaces[tapInterfaceName].Peer().IP4AddressString()
serverAddress := s.netInterfaces[tapInterfaceName].peer.ip4AddressString()
if ab_or_wrk == "ab" {
args = []string{"-n", fmt.Sprintf("%d", nRequests), "-c",

View File

@@ -9,10 +9,10 @@ func (s *VethsSuite) TestLDPreloadIperfVpp() {
var clnVclConf, srvVclConf Stanza
serverContainer := s.getContainerByName("server-vpp")
serverVclFileName := serverContainer.GetHostWorkDir() + "/vcl_srv.conf"
serverVclFileName := serverContainer.getHostWorkDir() + "/vcl_srv.conf"
clientContainer := s.getContainerByName("client-vpp")
clientVclFileName := clientContainer.GetHostWorkDir() + "/vcl_cln.conf"
clientVclFileName := clientContainer.getHostWorkDir() + "/vcl_cln.conf"
ldpreload := os.Getenv("HST_LDPRELOAD")
s.assertNotEqual("", ldpreload)
@@ -26,35 +26,35 @@ func (s *VethsSuite) TestLDPreloadIperfVpp() {
s.log("starting VPPs")
clientAppSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/2",
clientContainer.GetContainerWorkDir())
clientContainer.getContainerWorkDir())
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)
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)
serverAppSocketApi := fmt.Sprintf("app-socket-api %s/var/run/app_ns_sockets/1",
serverContainer.GetContainerWorkDir())
serverContainer.getContainerWorkDir())
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)
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)
s.log("attaching server to vpp")
srvEnv := append(os.Environ(), ldpreload, "VCL_CONFIG="+serverVclFileName)
go StartServerApp(srvCh, stopServerCh, srvEnv)
go startServerApp(srvCh, stopServerCh, srvEnv)
err = <-srvCh
s.assertNil(err)
@@ -62,8 +62,8 @@ 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()
go StartClientApp(serverVethAddress, clnEnv, clnCh, clnRes)
serverVethAddress := s.netInterfaces[serverInterfaceName].ip4AddressString()
go startClientApp(serverVethAddress, clnEnv, clnCh, clnRes)
s.log(<-clnRes)
// wait for client's result

View File

@@ -9,13 +9,13 @@ func (s *TapSuite) TestLinuxIperf() {
stopServerCh <- struct{}{}
}()
go StartServerApp(srvCh, stopServerCh, nil)
go startServerApp(srvCh, stopServerCh, nil)
err := <-srvCh
s.assertNil(err)
s.log("server running")
ipAddress := s.netInterfaces[tapInterfaceName].IP4AddressString()
go StartClientApp(ipAddress, nil, clnCh, clnRes)
ipAddress := s.netInterfaces[tapInterfaceName].ip4AddressString()
go startClientApp(ipAddress, nil, clnCh, clnRes)
s.log("client running")
s.log(<-clnRes)
err = <-clnCh

View File

@@ -5,7 +5,7 @@ import (
)
func (s *NginxSuite) TestMirroring() {
proxyAddress := s.netInterfaces[mirroringClientInterfaceName].Peer().IP4AddressString()
proxyAddress := s.netInterfaces[mirroringClientInterfaceName].peer.ip4AddressString()
path := "/64B.json"

View File

@@ -19,8 +19,8 @@ type (
InterfaceIndex = interface_types.InterfaceIndex
NetConfig interface {
Configure() error
Unconfigure()
configure() error
unconfigure()
Name() string
Type() string
}
@@ -72,7 +72,7 @@ var (
}
)
func NewNetworkInterface(cfg NetDevConfig, a *Addresser) (*NetInterface, error) {
func newNetworkInterface(cfg NetDevConfig, a *Addresser) (*NetInterface, error) {
var newInterface *NetInterface = &NetInterface{}
var err error
newInterface.addresser = a
@@ -98,7 +98,7 @@ func NewNetworkInterface(cfg NetDevConfig, a *Addresser) (*NetInterface, error)
if n, ok := ip.(NetDevConfig)["network"]; ok {
newInterface.networkNumber = n.(int)
}
newInterface.ip4Address, err = newInterface.addresser.NewIp4Address(
newInterface.ip4Address, err = newInterface.addresser.newIp4Address(
newInterface.networkNumber,
)
if err != nil {
@@ -112,24 +112,24 @@ func NewNetworkInterface(cfg NetDevConfig, a *Addresser) (*NetInterface, error)
peer := cfg["peer"].(NetDevConfig)
if newInterface.peer, err = NewNetworkInterface(peer, a); err != nil {
if newInterface.peer, err = newNetworkInterface(peer, a); err != nil {
return &NetInterface{}, err
}
return newInterface, nil
}
func (n *NetInterface) ConfigureUpState() error {
err := SetDevUp(n.Name(), "")
func (n *NetInterface) configureUpState() error {
err := setDevUp(n.Name(), "")
if err != nil {
return fmt.Errorf("set link up failed: %v", err)
}
return nil
}
func (n *NetInterface) ConfigureNetworkNamespace() error {
func (n *NetInterface) configureNetworkNamespace() error {
if n.networkNamespace != "" {
err := LinkSetNetns(n.name, n.networkNamespace)
err := linkSetNetns(n.name, n.networkNamespace)
if err != nil {
return err
}
@@ -137,9 +137,9 @@ func (n *NetInterface) ConfigureNetworkNamespace() error {
return nil
}
func (n *NetInterface) ConfigureAddress() error {
func (n *NetInterface) configureAddress() error {
if n.ip4Address != "" {
if err := AddAddress(
if err := addAddress(
n.Name(),
n.ip4Address,
n.networkNamespace,
@@ -151,35 +151,35 @@ func (n *NetInterface) ConfigureAddress() error {
return nil
}
func (n *NetInterface) Configure() error {
func (n *NetInterface) configure() error {
cmd := ipCommandMap[n.Type()](n)
_, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("creating interface '%v' failed: %v", n.Name(), err)
}
if err := n.ConfigureUpState(); err != nil {
if err := n.configureUpState(); err != nil {
return err
}
if err := n.ConfigureNetworkNamespace(); err != nil {
if err := n.configureNetworkNamespace(); err != nil {
return err
}
if err := n.ConfigureAddress(); err != nil {
if err := n.configureAddress(); err != nil {
return err
}
if n.peer != nil && n.peer.name != "" {
if err := n.Peer().ConfigureUpState(); err != nil {
if err := n.peer.configureUpState(); err != nil {
return err
}
if err := n.Peer().ConfigureNetworkNamespace(); err != nil {
if err := n.peer.configureNetworkNamespace(); err != nil {
return err
}
if err := n.Peer().ConfigureAddress(); err != nil {
if err := n.peer.configureAddress(); err != nil {
return err
}
}
@@ -187,8 +187,8 @@ func (n *NetInterface) Configure() error {
return nil
}
func (n *NetInterface) Unconfigure() {
DelLink(n.name)
func (n *NetInterface) unconfigure() {
delLink(n.name)
}
func (n *NetInterface) Name() string {
@@ -199,41 +199,21 @@ func (n *NetInterface) Type() string {
return n.category
}
func (n *NetInterface) SetAddress(address string) {
n.ip4Address = address
}
func (n *NetInterface) SetIndex(index InterfaceIndex) {
n.index = index
}
func (n *NetInterface) Index() InterfaceIndex {
return n.index
}
func (n *NetInterface) AddressWithPrefix() AddressWithPrefix {
func (n *NetInterface) addressWithPrefix() AddressWithPrefix {
address, _ := ip_types.ParseAddressWithPrefix(n.ip4Address)
return address
}
func (n *NetInterface) IP4AddressWithPrefix() IP4AddressWithPrefix {
func (n *NetInterface) ip4AddressWithPrefix() IP4AddressWithPrefix {
ip4Prefix, _ := ip_types.ParseIP4Prefix(n.ip4Address)
ip4AddressWithPrefix := ip_types.IP4AddressWithPrefix(ip4Prefix)
return ip4AddressWithPrefix
}
func (n *NetInterface) IP4AddressString() string {
func (n *NetInterface) ip4AddressString() string {
return strings.Split(n.ip4Address, "/")[0]
}
func (n *NetInterface) HwAddress() MacAddress {
return n.hwAddress
}
func (n *NetInterface) Peer() *NetInterface {
return n.peer
}
func (b *NetConfigBase) Name() string {
return b.name
}
@@ -242,22 +222,22 @@ func (b *NetConfigBase) Type() string {
return b.category
}
func NewNetNamespace(cfg NetDevConfig) (NetworkNamespace, error) {
func newNetNamespace(cfg NetDevConfig) (NetworkNamespace, error) {
var networkNamespace NetworkNamespace
networkNamespace.name = cfg["name"].(string)
networkNamespace.category = NetNs
return networkNamespace, nil
}
func (ns *NetworkNamespace) Configure() error {
func (ns *NetworkNamespace) configure() error {
return addDelNetns(ns.name, true)
}
func (ns *NetworkNamespace) Unconfigure() {
func (ns *NetworkNamespace) unconfigure() {
addDelNetns(ns.name, false)
}
func NewBridge(cfg NetDevConfig) (NetworkBridge, error) {
func newBridge(cfg NetDevConfig) (NetworkBridge, error) {
var bridge NetworkBridge
bridge.name = cfg["name"].(string)
bridge.category = Bridge
@@ -272,16 +252,16 @@ func NewBridge(cfg NetDevConfig) (NetworkBridge, error) {
return bridge, nil
}
func (b *NetworkBridge) Configure() error {
return AddBridge(b.name, b.interfaces, b.networkNamespace)
func (b *NetworkBridge) configure() error {
return addBridge(b.name, b.interfaces, b.networkNamespace)
}
func (b *NetworkBridge) Unconfigure() {
DelBridge(b.name, b.networkNamespace)
func (b *NetworkBridge) unconfigure() {
delBridge(b.name, b.networkNamespace)
}
func DelBridge(brName, ns string) error {
err := SetDevDown(brName, ns)
func delBridge(brName, ns string) error {
err := setDevDown(brName, ns)
if err != nil {
return err
}
@@ -294,15 +274,15 @@ func DelBridge(brName, ns string) error {
return nil
}
func SetDevUp(dev, ns string) error {
func setDevUp(dev, ns string) error {
return setDevUpDown(dev, ns, true)
}
func SetDevDown(dev, ns string) error {
func setDevDown(dev, ns string) error {
return setDevUpDown(dev, ns, false)
}
func DelLink(ifName string) {
func delLink(ifName string) {
cmd := exec.Command("ip", "link", "del", ifName)
cmd.Run()
}
@@ -339,15 +319,7 @@ func addDelNetns(name string, isAdd bool) error {
return nil
}
func AddNetns(nsName string) error {
return addDelNetns(nsName, true)
}
func DelNetns(nsName string) error {
return addDelNetns(nsName, false)
}
func LinkSetNetns(ifName, ns string) error {
func linkSetNetns(ifName, ns string) error {
cmd := exec.Command("ip", "link", "set", "dev", ifName, "up", "netns", ns)
err := cmd.Run()
if err != nil {
@@ -356,7 +328,7 @@ func LinkSetNetns(ifName, ns string) error {
return nil
}
func NewCommand(s []string, ns string) *exec.Cmd {
func newCommand(s []string, ns string) *exec.Cmd {
return appendNetns(s, ns)
}
@@ -390,7 +362,7 @@ func addDelBridge(brName, ns string, isAdd bool) error {
return nil
}
func AddBridge(brName string, ifs []string, ns string) error {
func addBridge(brName string, ifs []string, ns string) error {
err := addDelBridge(brName, ns, true)
if err != nil {
return err
@@ -405,7 +377,7 @@ func AddBridge(brName string, ifs []string, ns string) error {
return errors.New(s)
}
}
err = SetDevUp(brName, ns)
err = setDevUp(brName, ns)
if err != nil {
return err
}

View File

@@ -35,7 +35,7 @@ func testProxyHttpTcp(s *NsSuite) error {
" --retry-on-http-error=503 --tries=10"+
" -O %s %s:555/%s",
outputFile,
clientVeth.IP4AddressString(),
clientVeth.ip4AddressString(),
srcFile,
)
s.log(c)
@@ -56,8 +56,8 @@ func configureVppProxy(s *NsSuite) {
testVppProxy := s.getContainerByName("vpp").vppInstance
output := testVppProxy.vppctl(
"test proxy server server-uri tcp://%s/555 client-uri tcp://%s/666",
clientVeth.IP4AddressString(),
serverVeth.Peer().IP4AddressString(),
clientVeth.ip4AddressString(),
serverVeth.peer.ip4AddressString(),
)
s.log("proxy configured...", output)
}
@@ -76,7 +76,7 @@ func configureEnvoyProxy(s *NsSuite) {
address := struct {
Server string
}{
Server: serverVeth.Peer().IP4AddressString(),
Server: serverVeth.peer.ip4AddressString(),
}
envoyContainer.createConfig(
"/etc/envoy/envoy.yaml",

View File

@@ -22,15 +22,15 @@ func (s *NginxSuite) SetupSuite() {
func (s *NginxSuite) SetupTest() {
s.skipIfUnconfiguring()
s.SetupVolumes()
s.SetupContainers()
s.setupVolumes()
s.setupContainers()
// Setup test conditions
var startupConfig Stanza
startupConfig.
NewStanza("session").
Append("enable").
Append("use-app-socket-api").Close()
newStanza("session").
append("enable").
append("use-app-socket-api").close()
// ... for proxy
vppProxyContainer := s.getContainerByName(vppProxyContainerName)
@@ -50,8 +50,8 @@ func (s *NginxSuite) SetupTest() {
Proxy string
Server string
}{
Proxy: clientInterface.Peer().IP4AddressString(),
Server: serverInterface.IP4AddressString(),
Proxy: clientInterface.peer.ip4AddressString(),
Server: serverInterface.ip4AddressString(),
}
nginxContainer.createConfig(
"/nginx.conf",

View File

@@ -19,15 +19,15 @@ func (s *NoTopoSuite) SetupSuite() {
func (s *NoTopoSuite) SetupTest() {
s.skipIfUnconfiguring()
s.SetupVolumes()
s.SetupContainers()
s.setupVolumes()
s.setupContainers()
// Setup test conditions
var startupConfig Stanza
startupConfig.
NewStanza("session").
Append("enable").
Append("use-app-socket-api").Close()
newStanza("session").
append("enable").
append("use-app-socket-api").close()
container := s.getContainerByName(singleTopoContainerVpp)
vpp, _ := container.newVppInstance(startupConfig)

View File

@@ -18,17 +18,17 @@ func (s *NsSuite) SetupSuite() {
func (s *NsSuite) SetupTest() {
s.skipIfUnconfiguring()
s.SetupVolumes()
s.SetupContainers()
s.setupVolumes()
s.setupContainers()
// Setup test conditions
var startupConfig Stanza
startupConfig.
NewStanza("session").
Append("enable").
Append("use-app-socket-api").
Append("evt_qs_memfd_seg").
Append("event-queue-length 100000").Close()
newStanza("session").
append("enable").
append("use-app-socket-api").
append("evt_qs_memfd_seg").
append("event-queue-length 100000").close()
container := s.getContainerByName("vpp")
vpp, _ := container.newVppInstance(startupConfig)
@@ -42,5 +42,5 @@ func (s *NsSuite) SetupTest() {
s.assertNil(err)
s.assertNotEqual(0, idx)
container.exec("chmod 777 -R %s", container.GetContainerWorkDir())
container.exec("chmod 777 -R %s", container.getContainerWorkDir())
}

View File

@@ -25,16 +25,16 @@ func (s *VethsSuite) SetupSuite() {
func (s *VethsSuite) SetupTest() {
s.skipIfUnconfiguring()
s.SetupVolumes()
s.SetupContainers()
s.setupVolumes()
s.setupContainers()
// Setup test conditions
var startupConfig Stanza
startupConfig.
NewStanza("session").
Append("enable").
Append("use-app-socket-api").Close()
newStanza("session").
append("enable").
append("use-app-socket-api").close()
// ... For server
serverContainer := s.getContainerByName("server-vpp")

View File

@@ -14,7 +14,7 @@ type YamlTopology struct {
Volumes []VolumeConfig `yaml:"volumes"`
}
func AddAddress(device, address, ns string) error {
func addAddress(device, address, ns string) error {
c := []string{"ip", "addr", "add", address, "dev", device}
cmd := appendNetns(c, ns)
err := cmd.Run()

View File

@@ -20,8 +20,8 @@ const vclTemplate = `vcl {
}
`
const NetworkTopologyDir string = "topo-network/"
const ContainerTopologyDir string = "topo-containers/"
const networkTopologyDir string = "topo-network/"
const containerTopologyDir string = "topo-containers/"
type Stanza struct {
content string
@@ -42,7 +42,7 @@ type JsonResult struct {
StdOutput string
}
func StartServerApp(running chan error, done chan struct{}, env []string) {
func startServerApp(running chan error, done chan struct{}, env []string) {
cmd := exec.Command("iperf3", "-4", "-s")
if env != nil {
cmd.Env = env
@@ -58,7 +58,7 @@ func StartServerApp(running chan error, done chan struct{}, env []string) {
cmd.Process.Kill()
}
func StartClientApp(ipAddress string, env []string, clnCh chan error, clnRes chan string) {
func startClientApp(ipAddress string, env []string, clnCh chan error, clnRes chan string) {
defer func() {
clnCh <- nil
}()
@@ -104,7 +104,7 @@ func assertFileSize(f1, f2 string) error {
}
func startHttpServer(running chan struct{}, done chan struct{}, addressPort, netNs string) {
cmd := NewCommand([]string{"./http_server", addressPort}, netNs)
cmd := newCommand([]string{"./http_server", addressPort}, netNs)
err := cmd.Start()
if err != nil {
fmt.Println("Failed to start http server")
@@ -120,7 +120,7 @@ func startWget(finished chan error, server_ip, port, query, netNs string) {
finished <- errors.New("wget error")
}()
cmd := NewCommand([]string{"wget", "--timeout=10", "--no-proxy", "--tries=5", "-O", "/dev/null", server_ip + ":" + port + "/" + query},
cmd := newCommand([]string{"wget", "--timeout=10", "--no-proxy", "--tries=5", "-O", "/dev/null", server_ip + ":" + port + "/" + query},
netNs)
o, err := cmd.CombinedOutput()
if err != nil {
@@ -133,29 +133,29 @@ func startWget(finished chan error, server_ip, port, query, netNs string) {
finished <- nil
}
func (c *Stanza) NewStanza(name string) *Stanza {
c.Append("\n" + name + " {")
func (c *Stanza) newStanza(name string) *Stanza {
c.append("\n" + name + " {")
c.pad += 2
return c
}
func (c *Stanza) Append(name string) *Stanza {
func (c *Stanza) append(name string) *Stanza {
c.content += strings.Repeat(" ", c.pad)
c.content += name + "\n"
return c
}
func (c *Stanza) Close() *Stanza {
func (c *Stanza) close() *Stanza {
c.content += "}\n"
c.pad -= 2
return c
}
func (s *Stanza) ToString() string {
func (s *Stanza) toString() string {
return s.content
}
func (s *Stanza) SaveToFile(fileName string) error {
func (s *Stanza) saveToFile(fileName string) error {
fo, err := os.Create(fileName)
if err != nil {
return err

View File

@@ -20,12 +20,12 @@ func (s *VethsSuite) TestVclEchoTcp() {
}
func (s *VethsSuite) testVclEcho(proto string) {
serverVethAddress := s.netInterfaces["vppsrv"].IP4AddressString()
serverVethAddress := s.netInterfaces["vppsrv"].ip4AddressString()
uri := proto + "://" + serverVethAddress + "/12344"
echoSrvContainer := s.getContainerByName("server-application")
serverCommand := "vpp_echo server TX=RX" +
" socket-name " + echoSrvContainer.GetContainerWorkDir() + "/var/run/app_ns_sockets/1" +
" socket-name " + echoSrvContainer.getContainerWorkDir() + "/var/run/app_ns_sockets/1" +
" use-app-socket-api" +
" uri " + uri
s.log(serverCommand)
@@ -34,7 +34,7 @@ func (s *VethsSuite) testVclEcho(proto string) {
echoClnContainer := s.getContainerByName("client-application")
clientCommand := "vpp_echo client" +
" socket-name " + echoClnContainer.GetContainerWorkDir() + "/var/run/app_ns_sockets/2" +
" socket-name " + echoClnContainer.getContainerWorkDir() + "/var/run/app_ns_sockets/2" +
" use-app-socket-api uri " + uri
s.log(clientCommand)
o := echoClnContainer.exec(clientCommand)
@@ -52,7 +52,7 @@ func (s *VethsSuite) testRetryAttach(proto string) {
echoSrvContainer := s.getContainerByName("server-application")
serverVclConfContent := fmt.Sprintf(vclTemplate, echoSrvContainer.GetContainerWorkDir(), "1")
serverVclConfContent := fmt.Sprintf(vclTemplate, echoSrvContainer.getContainerWorkDir(), "1")
echoSrvContainer.createFile("/vcl.conf", serverVclConfContent)
echoSrvContainer.addEnvVar("VCL_CONFIG", "/vcl.conf")
@@ -62,10 +62,10 @@ func (s *VethsSuite) testRetryAttach(proto string) {
s.log("... Running first echo client test, before disconnect.")
serverVeth := s.netInterfaces[serverInterfaceName]
serverVethAddress := serverVeth.IP4AddressString()
serverVethAddress := serverVeth.ip4AddressString()
echoClnContainer := s.getTransientContainerByName("client-application")
clientVclConfContent := fmt.Sprintf(vclTemplate, echoClnContainer.GetContainerWorkDir(), "2")
clientVclConfContent := fmt.Sprintf(vclTemplate, echoClnContainer.getContainerWorkDir(), "2")
echoClnContainer.createFile("/vcl.conf", clientVclConfContent)
testClientCommand := "vcl_test_client -U -p " + proto + " " + serverVethAddress + " 12346"
@@ -95,13 +95,13 @@ func (s *VethsSuite) TestTcpWithLoss() {
serverVeth := s.netInterfaces[serverInterfaceName]
serverVpp.vppctl("test echo server uri tcp://%s/20022",
serverVeth.IP4AddressString())
serverVeth.ip4AddressString())
clientVpp := s.getContainerByName("client-vpp").vppInstance
// Ensure that VPP doesn't abort itself with NSIM enabled
// Warning: Removing this ping will make the test fail!
clientVpp.vppctl("ping %s", serverVeth.IP4AddressString())
clientVpp.vppctl("ping %s", serverVeth.ip4AddressString())
// Add loss of packets with Network Delay Simulator
clientVpp.vppctl("set nsim poll-main-thread delay 0.01 ms bandwidth 40 gbit" +
@@ -111,7 +111,7 @@ func (s *VethsSuite) TestTcpWithLoss() {
// Do echo test from client-vpp container
output := clientVpp.vppctl("test echo client uri tcp://%s/20022 mbytes 50",
serverVeth.IP4AddressString())
serverVeth.ip4AddressString())
s.assertEqual(true, len(output) != 0)
s.assertNotContains(output, "failed: timeout")
s.log(output)

View File

@@ -77,29 +77,29 @@ type VppInstance struct {
apiChannel api.Channel
}
func (vpp *VppInstance) Suite() *HstSuite {
func (vpp *VppInstance) getSuite() *HstSuite {
return vpp.container.suite
}
func (vpp *VppInstance) getCliSocket() string {
return fmt.Sprintf("%s%s", vpp.container.GetContainerWorkDir(), defaultCliSocketFilePath)
return fmt.Sprintf("%s%s", vpp.container.getContainerWorkDir(), defaultCliSocketFilePath)
}
func (vpp *VppInstance) getRunDir() string {
return vpp.container.GetContainerWorkDir() + "/var/run/vpp"
return vpp.container.getContainerWorkDir() + "/var/run/vpp"
}
func (vpp *VppInstance) getLogDir() string {
return vpp.container.GetContainerWorkDir() + "/var/log/vpp"
return vpp.container.getContainerWorkDir() + "/var/log/vpp"
}
func (vpp *VppInstance) getEtcDir() string {
return vpp.container.GetContainerWorkDir() + "/etc/vpp"
return vpp.container.getContainerWorkDir() + "/etc/vpp"
}
func (vpp *VppInstance) start() error {
// Create folders
containerWorkDir := vpp.container.GetContainerWorkDir()
containerWorkDir := vpp.container.getContainerWorkDir()
vpp.container.exec("mkdir --mode=0700 -p " + vpp.getRunDir())
vpp.container.exec("mkdir --mode=0700 -p " + vpp.getLogDir())
@@ -113,7 +113,7 @@ func (vpp *VppInstance) start() error {
defaultApiSocketFilePath,
defaultLogFilePath,
)
configContent += vpp.additionalConfig.ToString()
configContent += vpp.additionalConfig.toString()
startupFileName := vpp.getEtcDir() + "/startup.conf"
vpp.container.createFile(startupFileName, configContent)
@@ -123,7 +123,7 @@ func (vpp *VppInstance) start() error {
vpp.container.createFile(vppcliFileName, cliContent)
vpp.container.exec("chmod 0755 " + vppcliFileName)
if *IsVppDebug {
if *isVppDebug {
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGINT)
cont := make(chan bool, 1)
@@ -145,7 +145,7 @@ func (vpp *VppInstance) start() error {
}
// Connect to VPP and store the connection
sockAddress := vpp.container.GetHostWorkDir() + defaultApiSocketFilePath
sockAddress := vpp.container.getHostWorkDir() + defaultApiSocketFilePath
conn, connEv, err := govpp.AsyncConnect(
sockAddress,
core.DefaultMaxReconnectAttempts,
@@ -181,9 +181,9 @@ func (vpp *VppInstance) vppctl(command string, arguments ...any) string {
vppCliCommand := fmt.Sprintf(command, arguments...)
containerExecCommand := fmt.Sprintf("docker exec --detach=false %[1]s vppctl -s %[2]s %[3]s",
vpp.container.name, vpp.getCliSocket(), vppCliCommand)
vpp.Suite().log(containerExecCommand)
vpp.getSuite().log(containerExecCommand)
output, err := exechelper.CombinedOutput(containerExecCommand)
vpp.Suite().assertNil(err)
vpp.getSuite().assertNil(err)
return string(output)
}
@@ -196,8 +196,7 @@ func (vpp *VppInstance) waitForApp(appName string, timeout int) {
}
time.Sleep(1 * time.Second)
}
vpp.Suite().assertNil(1, "Timeout while waiting for app '%s'", appName)
return
vpp.getSuite().assertNil(1, "Timeout while waiting for app '%s'", appName)
}
func (vpp *VppInstance) createAfPacket(
@@ -207,20 +206,20 @@ func (vpp *VppInstance) createAfPacket(
UseRandomHwAddr: true,
HostIfName: veth.Name(),
}
if veth.HwAddress() != (MacAddress{}) {
if veth.hwAddress != (MacAddress{}) {
createReq.UseRandomHwAddr = false
createReq.HwAddr = veth.HwAddress()
createReq.HwAddr = veth.hwAddress
}
createReply := &af_packet.AfPacketCreateV2Reply{}
if err := vpp.apiChannel.SendRequest(createReq).ReceiveReply(createReply); err != nil {
return 0, err
}
veth.SetIndex(createReply.SwIfIndex)
veth.index = createReply.SwIfIndex
// Set to up
upReq := &interfaces.SwInterfaceSetFlags{
SwIfIndex: veth.Index(),
SwIfIndex: veth.index,
Flags: interface_types.IF_STATUS_API_FLAG_ADMIN_UP,
}
upReply := &interfaces.SwInterfaceSetFlagsReply{}
@@ -230,19 +229,19 @@ func (vpp *VppInstance) createAfPacket(
}
// Add address
if veth.AddressWithPrefix() == (AddressWithPrefix{}) {
if veth.addressWithPrefix() == (AddressWithPrefix{}) {
var err error
var ip4Address string
if ip4Address, err = veth.addresser.NewIp4Address(veth.Peer().networkNumber); err == nil {
veth.SetAddress(ip4Address)
if ip4Address, err = veth.addresser.newIp4Address(veth.peer.networkNumber); err == nil {
veth.ip4Address = ip4Address
} else {
return 0, err
}
}
addressReq := &interfaces.SwInterfaceAddDelAddress{
IsAdd: true,
SwIfIndex: veth.Index(),
Prefix: veth.AddressWithPrefix(),
SwIfIndex: veth.index,
Prefix: veth.addressWithPrefix(),
}
addressReply := &interfaces.SwInterfaceAddDelAddressReply{}
@@ -250,7 +249,7 @@ func (vpp *VppInstance) createAfPacket(
return 0, err
}
return veth.Index(), nil
return veth.index, nil
}
func (vpp *VppInstance) addAppNamespace(
@@ -294,7 +293,7 @@ func (vpp *VppInstance) createTap(
HostIfNameSet: true,
HostIfName: tap.Name(),
HostIP4PrefixSet: true,
HostIP4Prefix: tap.IP4AddressWithPrefix(),
HostIP4Prefix: tap.ip4AddressWithPrefix(),
}
createTapReply := &tapv2.TapCreateV2Reply{}
@@ -307,7 +306,7 @@ func (vpp *VppInstance) createTap(
addAddressReq := &interfaces.SwInterfaceAddDelAddress{
IsAdd: true,
SwIfIndex: createTapReply.SwIfIndex,
Prefix: tap.Peer().AddressWithPrefix(),
Prefix: tap.peer.addressWithPrefix(),
}
addAddressReply := &interfaces.SwInterfaceAddDelAddressReply{}
@@ -331,10 +330,10 @@ func (vpp *VppInstance) createTap(
func (vpp *VppInstance) saveLogs() {
logTarget := vpp.container.getLogDirPath() + "vppinstance-" + vpp.container.name + ".log"
logSource := vpp.container.GetHostWorkDir() + defaultLogFilePath
logSource := vpp.container.getHostWorkDir() + defaultLogFilePath
cmd := exec.Command("cp", logSource, logTarget)
vpp.Suite().T().Helper()
vpp.Suite().log(cmd.String())
vpp.getSuite().T().Helper()
vpp.getSuite().log(cmd.String())
cmd.Run()
}