package main
import (
+ "flag"
"fmt"
"io/ioutil"
"os"
+ "time"
"github.com/edwarnicke/exechelper"
"github.com/stretchr/testify/assert"
defaultNetworkNumber int = 1
)
-func IsPersistent() bool {
- return os.Getenv("HST_PERSIST") == "1"
-}
-
-func IsVerbose() bool {
- return os.Getenv("HST_VERBOSE") == "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")
type HstSuite struct {
suite.Suite
containers map[string]*Container
volumes []string
netConfigs []NetConfig
- netInterfaces map[string]NetInterface
+ netInterfaces map[string]*NetInterface
addresser *Addresser
+ testIds map[string]string
}
func (s *HstSuite) TearDownSuite() {
}
func (s *HstSuite) TearDownTest() {
- if IsPersistent() {
+ if *IsPersistent {
return
}
s.ResetContainers()
s.RemoveVolumes()
}
+func (s *HstSuite) skipIfUnconfiguring() {
+ if *IsUnconfiguring {
+ s.skip("skipping to unconfigure")
+ }
+}
+
func (s *HstSuite) SetupTest() {
+ s.skipIfUnconfiguring()
s.SetupVolumes()
s.SetupContainers()
}
}
func (s *HstSuite) log(args ...any) {
- if IsVerbose() {
+ if *IsVerbose {
+ s.T().Helper()
s.T().Log(args...)
}
}
}
s.addresser = NewAddresser(s)
- s.netInterfaces = make(map[string]NetInterface)
+ s.netInterfaces = make(map[string]*NetInterface)
for _, elem := range yamlTopo.Devices {
switch elem["type"].(string) {
case NetNs:
s.T().Fatalf("network config error: %v", err)
}
}
- case Veth:
+ case Veth, Tap:
{
- if veth, err := NewVeth(elem, s.addresser); err == nil {
- s.netConfigs = append(s.netConfigs, &veth)
- s.netInterfaces[veth.Name()] = &veth
- } else {
- s.T().Fatalf("network config error: %v", err)
- }
- }
- case Tap:
- {
- if tap, err := NewTap(elem, s.addresser); err == nil {
- s.netConfigs = append(s.netConfigs, &tap)
- s.netInterfaces[tap.Name()] = &tap
+ if netIf, err := NewNetworkInterface(elem, s.addresser); err == nil {
+ s.netConfigs = append(s.netConfigs, netIf)
+ s.netInterfaces[netIf.Name()] = netIf
} else {
s.T().Fatalf("network config error: %v", err)
}
func (s *HstSuite) configureNetworkTopology(topologyName string) {
s.loadNetworkTopology(topologyName)
+ if *IsUnconfiguring {
+ return
+ }
+
for _, nc := range s.netConfigs {
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 {
}
}
-type NetworkAddresses struct {
- network int
- numberOfAddresses int
+func (s *HstSuite) getTestId() string {
+ testName := s.T().Name()
+
+ if s.testIds == nil {
+ s.testIds = map[string]string{}
+ }
+
+ if _, ok := s.testIds[testName]; !ok {
+ s.testIds[testName] = time.Now().Format(time.RFC3339)
+ }
+
+ return s.testIds[testName]
}
type AddressCounter = int