hs-test: abstract away topology from test cases
Definition of shared volumes and containers has been moved to yaml files to be together with network topology. Containers are automatically run at the beginning of each test case and stopped afterward. Type: test Signed-off-by: Maros Ondrejicka <maros.ondrejicka@pantheon.tech> Change-Id: I264cbb4f1355f8bd7aade221e9609fb5b9bd693e
This commit is contained in:

committed by
Florin Coras

parent
aff4d320f0
commit
db823ed6e9
@@ -3,26 +3,43 @@ package main
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
"io/ioutil"
|
||||
|
||||
"github.com/edwarnicke/exechelper"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/suite"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type HstSuite struct {
|
||||
suite.Suite
|
||||
teardownSuite func()
|
||||
containers []*Container
|
||||
containers map[string]*Container
|
||||
volumes []string
|
||||
}
|
||||
|
||||
func (s *HstSuite) TearDownSuite() {
|
||||
s.teardownSuite()
|
||||
s.StopContainers()
|
||||
}
|
||||
|
||||
func (s *HstSuite) TearDownTest() {
|
||||
s.ResetContainers()
|
||||
s.RemoveVolumes()
|
||||
}
|
||||
|
||||
func (s *HstSuite) SetupTest() {
|
||||
for _, volume := range s.volumes {
|
||||
cmd := "docker volume create --name=" + volume
|
||||
fmt.Println(cmd)
|
||||
exechelper.Run(cmd)
|
||||
}
|
||||
for _, container := range s.containers {
|
||||
if container.isOptional == false {
|
||||
container.run()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *HstSuite) hstFail() {
|
||||
s.T().FailNow()
|
||||
}
|
||||
@@ -63,20 +80,7 @@ func (s *HstSuite) assertNotContains(testString, contains interface{}, msgAndArg
|
||||
}
|
||||
}
|
||||
|
||||
func (s *HstSuite) NewContainer(name string) (*Container, error) {
|
||||
if name == "" {
|
||||
return nil, fmt.Errorf("creating container failed: name must not be blank")
|
||||
}
|
||||
|
||||
container := new(Container)
|
||||
container.name = name
|
||||
|
||||
s.containers = append(s.containers, container)
|
||||
|
||||
return container, nil
|
||||
}
|
||||
|
||||
func (s *HstSuite) StopContainers() {
|
||||
func (s *HstSuite) ResetContainers() {
|
||||
for _, container := range s.containers {
|
||||
container.stop()
|
||||
}
|
||||
@@ -94,39 +98,43 @@ func (s *HstSuite) NewVolume(name string) error {
|
||||
|
||||
func (s *HstSuite) RemoveVolumes() {
|
||||
for _, volumeName := range s.volumes {
|
||||
exechelper.Run("docker volume rm " + volumeName)
|
||||
cmd := "docker volume rm " + volumeName
|
||||
exechelper.Run(cmd)
|
||||
}
|
||||
}
|
||||
|
||||
type TapSuite struct {
|
||||
HstSuite
|
||||
func (s *HstSuite) getContainerByName(name string) *Container {
|
||||
return s.containers[name]
|
||||
}
|
||||
|
||||
func (s *TapSuite) SetupSuite() {
|
||||
time.Sleep(1 * time.Second)
|
||||
s.teardownSuite = setupSuite(&s.Suite, "tap")
|
||||
}
|
||||
func (s *HstSuite) loadContainerTopology(topologyName string) {
|
||||
data, err := ioutil.ReadFile(ContainerTopologyDir + topologyName + ".yaml")
|
||||
if err != nil {
|
||||
s.T().Fatalf("read error: %v", err)
|
||||
}
|
||||
var yamlTopo YamlTopology
|
||||
err = yaml.Unmarshal(data, &yamlTopo)
|
||||
if err != nil {
|
||||
s.T().Fatalf("unmarshal error: %v", err)
|
||||
}
|
||||
|
||||
type VethsSuite struct {
|
||||
HstSuite
|
||||
}
|
||||
for _, elem := range yamlTopo.Volumes {
|
||||
s.volumes = append(s.volumes, elem)
|
||||
}
|
||||
|
||||
func (s *VethsSuite) SetupSuite() {
|
||||
time.Sleep(1 * time.Second)
|
||||
s.teardownSuite = setupSuite(&s.Suite, "2peerVeth")
|
||||
}
|
||||
|
||||
type NsSuite struct {
|
||||
HstSuite
|
||||
}
|
||||
|
||||
func (s *NsSuite) SetupSuite() {
|
||||
s.teardownSuite = setupSuite(&s.Suite, "ns")
|
||||
s.containers = make(map[string]*Container)
|
||||
for _, elem := range yamlTopo.Containers {
|
||||
newContainer, err := NewContainer(elem)
|
||||
if err != nil {
|
||||
s.T().Fatalf("config error: %v", err)
|
||||
}
|
||||
s.containers[newContainer.name] = newContainer
|
||||
}
|
||||
}
|
||||
|
||||
func setupSuite(s *suite.Suite, topologyName string) func() {
|
||||
t := s.T()
|
||||
topology, err := LoadTopology(TopologyDir, topologyName)
|
||||
topology, err := LoadTopology(NetworkTopologyDir, topologyName)
|
||||
if err != nil {
|
||||
t.Fatalf("error on loading topology '%s': %v", topologyName, err)
|
||||
}
|
||||
|
Reference in New Issue
Block a user