diff options
Diffstat (limited to 'extras/hs-test/Makefile')
-rw-r--r-- | extras/hs-test/Makefile | 157 |
1 files changed, 124 insertions, 33 deletions
diff --git a/extras/hs-test/Makefile b/extras/hs-test/Makefile index e247bf44160..b72aca1d7dd 100644 --- a/extras/hs-test/Makefile +++ b/extras/hs-test/Makefile @@ -1,5 +1,10 @@ export HS_ROOT=$(CURDIR) +# sets WS_ROOT if called from extras/hs-test +ifeq ($(WS_ROOT),) +export WS_ROOT=$(HS_ROOT)/../.. +endif + ifeq ($(VERBOSE),) VERBOSE=false endif @@ -16,6 +21,10 @@ ifeq ($(TEST),) TEST=all endif +ifeq ($(TEST-HS),) +TEST-HS=all +endif + ifeq ($(DEBUG),) DEBUG=false endif @@ -32,6 +41,10 @@ ifeq ($(REPEAT),) REPEAT=0 endif +ifeq ($(CPU0),) +CPU0=false +endif + ifeq ($(VPPSRC),) VPPSRC=$(shell pwd)/../.. endif @@ -44,73 +57,92 @@ ifeq ($(ARCH),) ARCH=$(shell dpkg --print-architecture) endif -list_tests = @go run github.com/onsi/ginkgo/v2/ginkgo --dry-run -v --no-color --seed=2 | head -n -1 | grep 'Test' | \ - sed 's/^/* /; s/\(Suite\) /\1\//g' - .PHONY: help help: @echo "Make targets:" - @echo " test - run tests" - @echo " test-debug - run tests (vpp debug image)" - @echo " build - build test infra" - @echo " build-debug - build test infra (vpp debug image)" - @echo " build-go - just build golang files" - @echo " fixstyle - format .go source files" - @echo " list-tests - list all tests" + @echo " test - run tests" + @echo " test-debug - run tests (vpp debug image)" + @echo " test-leak - run memory leak tests (vpp debug image)" + @echo " build - build test infra" + @echo " build-cov - coverage build of VPP and Docker images" + @echo " build-debug - build test infra (vpp debug image)" + @echo " build-go - just build golang files" + @echo " checkstyle-go - check style of .go source files" + @echo " fixstyle-go - format .go source files" + @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' arguments:" @echo " UBUNTU_VERSION - ubuntu version for docker image" - @echo " HST_EXTENDED_TESTS - build extended tests" + @echo " HST_EXTENDED_TESTS - build extended tests" @echo - @echo "make test arguments:" + @echo "'make test' 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 " CPUS=[n-cpus] - number of cpus to run with vpp" + @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 @echo "List of all tests:" - $(call list_tests) + @$(MAKE) list-tests .PHONY: list-tests list-tests: - $(call list_tests) + @go run github.com/onsi/ginkgo/v2/ginkgo --dry-run -v --no-color --seed=2 | head -n -1 | grep 'Test' | \ + sed 's/^/* /; s/\(Suite\) /\1\//g' .PHONY: build-vpp-release build-vpp-release: - @make -C ../.. build-release + @$(MAKE) -C ../.. build-release .PHONY: build-vpp-debug build-vpp-debug: - @make -C ../.. build + @$(MAKE) -C ../.. build + +.PHONY: build-vpp-gcov +build-vpp-gcov: + @$(MAKE) -C ../.. build-vpp-gcov .build.ok: build @touch .build.ok +.build.cov.ok: build-vpp-gcov + @touch .build.cov.ok + .build_debug.ok: build-debug @touch .build.ok .PHONY: test test: .deps.ok .build.ok - # '-' ignores the exit status, it is set in compress.sh - # necessary so gmake won't skip executing the bash script - -bash ./test --persist=$(PERSIST) --verbose=$(VERBOSE) \ + @bash ./hs_test.sh --persist=$(PERSIST) --verbose=$(VERBOSE) \ --unconfigure=$(UNCONFIGURE) --debug=$(DEBUG) --test=$(TEST) --cpus=$(CPUS) \ - --vppsrc=$(VPPSRC) --parallel=$(PARALLEL) --repeat=$(REPEAT) - @bash ./script/compress.sh + --vppsrc=$(VPPSRC) --parallel=$(PARALLEL) --repeat=$(REPEAT) --cpu0=$(CPU0); \ + ./script/compress.sh $$? + .PHONY: test-debug test-debug: .deps.ok .build_debug.ok - # '-' ignores the exit status, it is set in compress.sh - # necessary so gmake won't skip executing the bash script - -bash ./test --persist=$(PERSIST) --verbose=$(VERBOSE) \ + @bash ./hs_test.sh --persist=$(PERSIST) --verbose=$(VERBOSE) \ --unconfigure=$(UNCONFIGURE) --debug=$(DEBUG) --test=$(TEST) --cpus=$(CPUS) \ - --vppsrc=$(VPPSRC) --parallel=$(PARALLEL) --repeat=$(REPEAT) - @bash ./script/compress.sh + --vppsrc=$(VPPSRC) --parallel=$(PARALLEL) --repeat=$(REPEAT) --debug_build=true \ + --cpu0=$(CPU0); \ + ./script/compress.sh $$? + +.PHONY: test-cov +test-cov: .deps.ok .build.cov.ok + @bash ./hs_test.sh --persist=$(PERSIST) --verbose=$(VERBOSE) \ + --unconfigure=$(UNCONFIGURE) --debug=$(DEBUG) --test=$(TEST-HS) --cpus=$(CPUS) \ + --vppsrc=$(VPPSRC) --cpu0=$(CPU0); \ + ./script/compress.sh $$? + +.PHONY: test-leak +test-leak: .deps.ok .build_debug.ok + @bash ./hs_test.sh --test=$(TEST) --debug_build=true --leak_check=true --vppsrc=$(VPPSRC) .PHONY: build-go build-go: @@ -122,6 +154,12 @@ build: .deps.ok build-vpp-release build-go bash ./script/build_hst.sh release @touch .build.ok +.PHONY: build-cov +build-cov: .deps.ok build-vpp-gcov build-go + @rm -f .build.cov.ok + bash ./script/build_hst.sh gcov + @touch .build.cov.ok + .PHONY: build-debug build-debug: .deps.ok build-vpp-debug build-go @rm -f .build.ok @@ -129,23 +167,76 @@ build-debug: .deps.ok build-vpp-debug build-go @touch .build.ok .deps.ok: - @sudo make install-deps + @sudo $(MAKE) install-deps .PHONY: install-deps install-deps: @rm -f .deps.ok @apt-get update \ && apt-get install -y apt-transport-https ca-certificates curl software-properties-common \ - apache2-utils wrk bridge-utils + apache2-utils wrk bridge-utils gpg @if [ ! -f /usr/share/keyrings/docker-archive-keyring.gpg ] ; then \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg; \ echo "deb [arch=$(ARCH) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(UBUNTU_CODENAME) stable" \ | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ; \ apt-get update; \ fi + @apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin @touch .deps.ok -.PHONY: fixstyle -fixstyle: - @gofmt -w . +.goimports.ok: + @rm -f .goimports.ok + go install golang.org/x/tools/cmd/goimports@v0.25.0 + @touch .goimports.ok + +.PHONY: checkstyle-go +checkstyle-go: .goimports.ok + $(eval GOPATH := $(shell go env GOPATH)) + @output=$$($(GOPATH)/bin/goimports -d $${WS_ROOT}); \ + status=$$?; \ + if [ $$status -ne 0 ]; then \ + exit $$status; \ + elif [ -z "$$output" ]; then \ + echo "*******************************************************************"; \ + echo "Checkstyle OK."; \ + echo "*******************************************************************"; \ + else \ + echo "$$output"; \ + echo "*******************************************************************"; \ + echo "Checkstyle failed. Use 'make fixstyle-go' or fix errors manually."; \ + echo "*******************************************************************"; \ + exit 1; \ + fi + +.PHONY: fixstyle-go +fixstyle-go: .goimports.ok + $(eval GOPATH := $(shell go env GOPATH)) + @echo "Modified files:" + @$(GOPATH)/bin/goimports -w -l $(WS_ROOT) @go mod tidy + @echo "*******************************************************************" + @echo "Fixstyle done." + @echo "*******************************************************************" + +.PHONY: cleanup-hst +cleanup-hst: + @if [ ! -f ".last_hst_ppid" ]; then \ + echo "'.last_hst_ppid' file does not exist."; \ + exit 1; \ + fi + @echo "****************************" + @echo "Removing docker containers:" + @# "-" ignores errors + @-sudo docker rm $$(sudo docker stop $$(sudo docker ps -a -q --filter "name=$$(cat .last_hst_ppid)") -t 0) + @echo "****************************" + @echo "Removing IP address files:" + @find . -type f -regextype egrep -regex '.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' -exec sudo rm -v {} \; + @echo "****************************" + @echo "Removing network namespaces:" + @for ns in $$(ip netns list | grep $$(cat .last_hst_ppid) | awk '{print $$1}'); do \ + echo $$ns; \ + sudo ip netns delete $$ns; \ + done + @echo "****************************" + @echo "Done." + @echo "****************************" |