hs-test: update docs, makefile, maintainers
- don't run 'make list-tests' after 'make help'
Type: docs
Change-Id: I1b2ae02faf53b072b96c91f2e1fead52128f4710
Signed-off-by: Adrian Villin <avillin@cisco.com>
diff --git a/MAINTAINERS b/MAINTAINERS
index d6a9b1a..8c3ea68 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -882,8 +882,8 @@
Host stack test framework
I: hs-test
M: Florin Coras <fcoras@cisco.com>
-M: Filip Tehlar <ftehlar@cisco.com>
-M: Maros Ondrejicka <maros.ondrejicka@pantheon.tech>
+M: Matus Fabian <matfabia@cisco.com>
+M: Adrian Villin <avillin@cisco.com>
F: extras/hs-test
THE REST
diff --git a/docs/spelling_wordlist.txt b/docs/spelling_wordlist.txt
index 7f62393..54976ac 100644
--- a/docs/spelling_wordlist.txt
+++ b/docs/spelling_wordlist.txt
@@ -1081,6 +1081,7 @@
strongSwan
Strongswan
struct
+structs
su
subdirectories
subdirectory
diff --git a/extras/hs-test/Makefile b/extras/hs-test/Makefile
index 54ab922..8d7d641 100644
--- a/extras/hs-test/Makefile
+++ b/extras/hs-test/Makefile
@@ -72,28 +72,25 @@
@echo " cleanup-hst - stops and removes all docker contaiers and namespaces"
@echo " list-tests - list all tests"
@echo
- @echo "'make build' arguments:"
+ @echo "'make build' and 'make test' arguments:"
@echo " UBUNTU_VERSION - ubuntu version for docker image"
@echo
- @echo "'make test' arguments:"
+ @echo "'make test' specific arguments:"
@echo " PERSIST=[true|false] - whether clean up topology and dockers after test"
@echo " VERBOSE=[true|false] - verbose output"
@echo " UNCONFIGURE=[true|false] - unconfigure selected test"
@echo " DEBUG=[true|false] - attach VPP to GDB"
- @echo " TEST=[test-name] - specific test to run"
+ @echo " TEST=[name1,name2...] - specific test(s) to run"
@echo " CPUS=[n-cpus] - number of cpus to allocate to VPP and containers"
@echo " VPPSRC=[path-to-vpp-src] - path to vpp source files (for gdb)"
@echo " PARALLEL=[n-cpus] - number of test processes to spawn to run in parallel"
@echo " REPEAT=[n] - repeat tests up to N times or until a failure occurs"
@echo " CPU0=[true|false] - use cpu0"
@echo " DRYRUN=[true|false] - set up containers but don't run tests"
- @echo
- @echo "List of all tests:"
- @$(MAKE) list-tests
.PHONY: list-tests
list-tests:
- @go run github.com/onsi/ginkgo/v2/ginkgo --dry-run -v --no-color --seed=2 | head -n -1 | grep 'Test' | \
+ @go run github.com/onsi/ginkgo/v2/ginkgo --dry-run -v --no-color --seed=2 | head -n -1 | grep 'test.go' | \
sed 's/^/* /; s/\(Suite\) /\1\//g'
.PHONY: build-vpp-release
diff --git a/extras/hs-test/README.rst b/extras/hs-test/README.rst
index 25f512c..4b6fbd3 100644
--- a/extras/hs-test/README.rst
+++ b/extras/hs-test/README.rst
@@ -90,9 +90,9 @@
}
func MyTest(s *MySuite) {
- clientVpp := s.GetContainerByName("client-vpp").VppInstance
+ clientVpp := s.Containers.ClientVpp.VppInstance
- serverVethAddress := s.NetInterfaces["server-iface"].Ip4AddressString()
+ serverVethAddress := s.Interfaces.Server.Ip4AddressString()
result := clientVpp.Vppctl("ping " + serverVethAddress)
s.AssertNotNil(result)
@@ -138,8 +138,10 @@
#. To add a new suite, create a new file in the ``infra/`` folder. Naming convention for the suite files is ``suite_[name].go``.
-#. Make a ``struct``, in the suite file, with at least ``HstSuite`` struct as its member.
- HstSuite provides functionality that can be shared for all suites, like starting containers
+#. Make a ``struct``, in the suite file, with at least ``HstSuite``, ``Interfaces`` and ``Containers`` structs as its members.
+ HstSuite provides functionality that can be shared for all suites, like starting containers. ``Interfaces`` and ``Containers`` structs
+ are used to provide simpler access to interfaces and containers respectively. ``s.GetInterfaceByName([name])`` or ``s.GetContainerByName([name])``
+ should only be used to initialize interface and container struct fields within ``SetupSuite``.
#. Create a new map that will contain a file name where a test is located and test functions with a pointer to the suite's struct: ``var myTests = map[string][]func(s *MySuite){}``
@@ -149,6 +151,16 @@
type MySuite struct {
HstSuite
+ Interfaces struct {
+ Server *NetInterface
+ Client *NetInterface
+ ...
+ }
+ Containers struct {
+ ServerVpp *Container
+ ClientVpp *Container
+ ...
+ }
}
@@ -163,12 +175,13 @@
#. In suite file, implement ``SetupSuite`` method which Ginkgo runs once before starting any of the tests.
It's important here to call ``ConfigureNetworkTopology()`` method,
- pass the topology name to the function in a form of file name of one of the *yaml* files in ``topo-network`` folder.
- Without the extension. In this example, *myTopology* corresponds to file ``extras/hs-test/topo-network/myTopology.yaml``
+ pass the topology name to the function in a form of file name of one of the *yaml* files in ``topo-network`` folder
+ without the extension. In this example, *myTopology* corresponds to file ``extras/hs-test/topo-network/myTopology.yaml``
This will ensure network topology, such as network interfaces and namespaces, will be created.
Another important method to call is ``LoadContainerTopology()`` which will load
containers and shared volumes used by the suite. This time the name passed to method corresponds
- to file in ``extras/hs-test/topo-containers`` folder
+ to file in ``extras/hs-test/topo-containers`` folder. Lastly, initialize ``Interfaces`` and ``Containers`` struct fields
+ using ``s.GetInterfaceByName("interfaceName")`` and ``s.GetContainerByName("containerName")``. Use the names that are defined in ``.yaml`` files
::
@@ -179,6 +192,9 @@
s.ConfigureNetworkTopology("myNetworkTopology")
s.LoadContainerTopology("myContainerTopology")
+ s.Interfaces.Server = s.GetInterfaceByName("interfaceName")
+ s.Containers.ServerVpp = s.GetContainerByName("containerName")
+ ...
}
#. In suite file, implement ``SetupTest`` method which gets executed before each test. Starting containers and
@@ -368,7 +384,7 @@
func MemLeakTest(s *NoTopoSuite) {
s.SkipUnlessLeakCheck() // test is excluded from usual test run
- vpp := s.GetContainerByName("vpp").VppInstance
+ vpp := s.Containers.Vpp.VppInstance
/* do your configuration here */
vpp.Disconnect() // no goVPP less noise
vpp.EnableMemoryTrace() // enable memory traces
diff --git a/extras/hs-test/http_test.go b/extras/hs-test/http_test.go
index 90c3b77..99e812d 100644
--- a/extras/hs-test/http_test.go
+++ b/extras/hs-test/http_test.go
@@ -1413,7 +1413,7 @@
}
func HttpIgnoreH2UpgradeTest(s *NoTopoSuite) {
- vpp := s.GetContainerByName("vpp").VppInstance
+ vpp := s.Containers.Vpp.VppInstance
serverAddress := s.VppAddr()
s.Log(vpp.Vppctl("http static server uri tcp://" + serverAddress + "/80 url-handlers"))