hs-test: fix LDPreloadIperfVppTest
[vpp.git] / extras / hs-test / Makefile
1 export HS_ROOT=$(CURDIR)
2
3 # sets WS_ROOT if called from extras/hs-test
4 ifeq ($(WS_ROOT),)
5 export WS_ROOT=$(HS_ROOT)/../..
6 endif
7
8 ifeq ($(VERBOSE),)
9 VERBOSE=false
10 endif
11
12 ifeq ($(PERSIST),)
13 PERSIST=false
14 endif
15
16 ifeq ($(UNCONFIGURE),)
17 UNCONFIGURE=false
18 endif
19
20 ifeq ($(TEST),)
21 TEST=all
22 endif
23
24 ifeq ($(TEST-HS),)
25 TEST-HS=all
26 endif
27
28 ifeq ($(DEBUG),)
29 DEBUG=false
30 endif
31
32 ifeq ($(CPUS),)
33 CPUS=1
34 endif
35
36 ifeq ($(PARALLEL),)
37 PARALLEL=1
38 endif
39
40 ifeq ($(REPEAT),)
41 REPEAT=0
42 endif
43
44 ifeq ($(VPPSRC),)
45 VPPSRC=$(shell pwd)/../..
46 endif
47
48 ifeq ($(UBUNTU_CODENAME),)
49 UBUNTU_CODENAME=$(shell grep '^UBUNTU_CODENAME=' /etc/os-release | cut -f2- -d=)
50 endif
51
52 ifeq ($(ARCH),)
53 ARCH=$(shell dpkg --print-architecture)
54 endif
55
56 .PHONY: help
57 help:
58         @echo "Make targets:"
59         @echo " test                     - run tests"
60         @echo " test-debug               - run tests (vpp debug image)"
61         @echo " build                    - build test infra"
62         @echo " build-cov                - coverage build of VPP and Docker images"
63         @echo " build-debug              - build test infra (vpp debug image)"
64         @echo " build-go                 - just build golang files"
65         @echo " checkstyle-go            - check style of .go source files"
66         @echo " fixstyle-go              - format .go source files"
67         @echo " cleanup-hst              - stops and removes all docker contaiers and namespaces"
68         @echo " list-tests               - list all tests"
69         @echo
70         @echo "'make build' arguments:"
71         @echo " UBUNTU_VERSION           - ubuntu version for docker image"
72         @echo " HST_EXTENDED_TESTS       - build extended tests"
73         @echo
74         @echo "'make test' arguments:"
75         @echo " PERSIST=[true|false]     - whether clean up topology and dockers after test"
76         @echo " VERBOSE=[true|false]     - verbose output"
77         @echo " UNCONFIGURE=[true|false] - unconfigure selected test"
78         @echo " DEBUG=[true|false]       - attach VPP to GDB"
79         @echo " TEST=[test-name]         - specific test to run"
80         @echo " CPUS=[n-cpus]            - number of cpus to allocate to VPP and containers"
81         @echo " VPPSRC=[path-to-vpp-src] - path to vpp source files (for gdb)"
82         @echo " PARALLEL=[n-cpus]        - number of test processes to spawn to run in parallel"
83         @echo " REPEAT=[n]               - repeat tests up to N times or until a failure occurs"
84         @echo
85         @echo "List of all tests:"
86         @$(MAKE) list-tests
87
88 .PHONY: list-tests
89 list-tests:
90         @go run github.com/onsi/ginkgo/v2/ginkgo --dry-run -v --no-color --seed=2 | head -n -1 | grep 'Test' | \
91                 sed 's/^/* /; s/\(Suite\) /\1\//g'
92
93 .PHONY: build-vpp-release
94 build-vpp-release:
95         @$(MAKE) -C ../.. build-release
96
97 .PHONY: build-vpp-debug
98 build-vpp-debug:
99         @$(MAKE) -C ../.. build
100
101 .PHONY: build-vpp-gcov
102 build-vpp-gcov:
103         @$(MAKE) -C ../.. build-vpp-gcov
104
105 .build.ok: build
106         @touch .build.ok
107
108 .build.cov.ok: build-vpp-gcov
109         @touch .build.cov.ok
110
111 .build_debug.ok: build-debug
112         @touch .build.ok
113
114 .PHONY: test
115 test: .deps.ok .build.ok
116         @# '-' ignores the exit status, it is set in compress.sh
117         @# necessary so gmake won't skip executing the bash script
118         @-bash ./hs_test.sh --persist=$(PERSIST) --verbose=$(VERBOSE) \
119                 --unconfigure=$(UNCONFIGURE) --debug=$(DEBUG) --test=$(TEST) --cpus=$(CPUS) \
120                 --vppsrc=$(VPPSRC) --parallel=$(PARALLEL) --repeat=$(REPEAT)
121         @bash ./script/compress.sh
122
123 .PHONY: test-debug
124 test-debug: .deps.ok .build_debug.ok
125         @# '-' ignores the exit status, it is set in compress.sh
126         @# necessary so gmake won't skip executing the bash script
127         @-bash ./hs_test.sh --persist=$(PERSIST) --verbose=$(VERBOSE) \
128                 --unconfigure=$(UNCONFIGURE) --debug=$(DEBUG) --test=$(TEST) --cpus=$(CPUS) \
129                 --vppsrc=$(VPPSRC) --parallel=$(PARALLEL) --repeat=$(REPEAT) --debug_build=true
130         @bash ./script/compress.sh
131
132 .PHONY: test-cov
133 test-cov: .deps.ok .build.cov.ok
134         @-bash ./hs_test.sh --persist=$(PERSIST) --verbose=$(VERBOSE) \
135                 --unconfigure=$(UNCONFIGURE) --debug=$(DEBUG) --test=$(TEST-HS) --cpus=$(CPUS) \
136                 --vppsrc=$(VPPSRC)
137         @$(MAKE) -C ../.. test-cov-post HS_TEST=1
138         @bash ./script/compress.sh
139
140 .PHONY: build-go
141 build-go:
142         go build ./tools/http_server
143
144 .PHONY: build
145 build: .deps.ok build-vpp-release build-go
146         @rm -f .build.ok
147         bash ./script/build_hst.sh release
148         @touch .build.ok
149
150 .PHONY: build-cov
151 build-cov: .deps.ok build-vpp-gcov build-go
152         @rm -f .build.cov.ok
153         bash ./script/build_hst.sh gcov
154         @touch .build.cov.ok
155
156 .PHONY: build-debug
157 build-debug: .deps.ok build-vpp-debug build-go
158         @rm -f .build.ok
159         bash ./script/build_hst.sh debug
160         @touch .build.ok
161
162 .deps.ok:
163         @sudo $(MAKE) install-deps
164
165 .PHONY: install-deps
166 install-deps:
167         @rm -f .deps.ok
168         @apt-get update \
169                 && apt-get install -y apt-transport-https ca-certificates curl software-properties-common \
170                 apache2-utils wrk bridge-utils
171         @if [ ! -f /usr/share/keyrings/docker-archive-keyring.gpg ] ; then \
172                 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg; \
173                 echo "deb [arch=$(ARCH) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(UBUNTU_CODENAME) stable" \
174                         | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ; \
175                 apt-get update; \
176         fi
177         @touch .deps.ok
178
179 .PHONY: checkstyle-go
180 checkstyle-go:
181         @output=$$(gofmt -d $${WS_ROOT}); \
182     if [ -z "$$output" ]; then \
183         echo "*******************************************************************"; \
184         echo "Checkstyle OK."; \
185         echo "*******************************************************************"; \
186     else \
187         echo "$$output"; \
188         echo "*******************************************************************"; \
189         echo "Checkstyle failed. Use 'make fixstyle-go' or fix errors manually."; \
190         echo "*******************************************************************"; \
191         exit 1; \
192     fi
193
194 .PHONY: fixstyle-go
195 fixstyle-go:
196         @echo "Modified files:"
197         @gofmt -w -l $(WS_ROOT)
198         @go mod tidy
199         @echo "*******************************************************************"
200         @echo "Fixstyle done."
201         @echo "*******************************************************************"
202
203 .PHONY: cleanup-hst
204 cleanup-hst:
205         @if [ ! -f ".last_hst_ppid" ]; then \
206                 echo "'.last_hst_ppid' file does not exist."; \
207                 exit 1; \
208         fi
209         @echo "****************************"
210         @echo "Removing docker containers:"
211         @# "-" ignores errors
212         @-sudo docker rm $$(sudo docker stop $$(sudo docker ps -a -q --filter "name=$$(cat .last_hst_ppid)") -t 0)
213         @echo "****************************"
214         @echo "Removing IP address files:"
215         @find . -type f -regextype egrep -regex '.*[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' -exec sudo rm -v {} \;
216         @echo "****************************"
217         @echo "Removing network namespaces:"
218         @for ns in $$(ip netns list | grep $$(cat .last_hst_ppid) | awk '{print $$1}'); do \
219                 echo $$ns; \
220         sudo ip netns delete $$ns; \
221         done
222         @echo "****************************"
223         @echo "Done."
224         @echo "****************************"