hs-test: added targets to makefiles to get coverage from HS tests 77/40177/10
authoradrianvillin <avillin@cisco.com>
Thu, 11 Jan 2024 10:59:47 +0000 (11:59 +0100)
committerDave Wallace <dwallacelf@gmail.com>
Thu, 30 May 2024 15:59:07 +0000 (15:59 +0000)
Type: make

Change-Id: Iae7998692890264dfeea98c165617d0efa024d42
Signed-off-by: adrianvillin <avillin@cisco.com>
Makefile
extras/hs-test/Makefile
extras/hs-test/script/build_hst.sh
test/Makefile

index d41ff36..1ab387e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -245,6 +245,7 @@ help:
        @echo " build                - build debug binaries"
        @echo " build-release        - build release binaries"
        @echo " build-coverity       - build coverity artifacts"
+       @echo " build-vpp-gcov           - build gcov vpp only"
        @echo " rebuild              - wipe and build debug binaries"
        @echo " rebuild-release      - wipe and build release binaries"
        @echo " run                  - run debug binary"
@@ -252,6 +253,8 @@ help:
        @echo " debug                - run debug binary with debugger"
        @echo " debug-release        - run release binary with debugger"
        @echo " test                 - build and run tests"
+       @echo " test-cov-hs              - build and run host stack tests with coverage"
+       @echo " test-cov-both            - build and run python and host stack tests, merge coverage data"
        @echo " test-help            - show help on test framework"
        @echo " run-vat              - run vpp-api-test tool"
        @echo " pkg-deb              - build DEB packages"
@@ -440,6 +443,10 @@ rebuild: wipe build
 build-release: $(BR)/.deps.ok
        $(call make,$(PLATFORM),$(addsuffix -install,$(TARGETS)))
 
+.PHONY: build-vpp-gcov
+build-vpp-gcov:
+       $(call test,vpp_gcov)
+
 .PHONY: wipe-release
 wipe-release: test-wipe $(BR)/.deps.ok
        $(call make,$(PLATFORM),$(addsuffix -wipe,$(TARGETS)))
@@ -486,6 +493,20 @@ test-cov:
        $(eval TEST_GCOV=1)
        $(call test,vpp_gcov,cov)
 
+.PHONY: test-cov-hs
+test-cov-hs:
+       @make -C extras/hs-test build-cov
+       @make -C extras/hs-test test-cov
+
+.PHONY: test-cov-both
+test-cov-both:
+       @echo "Running Python, Golang tests and merging coverage reports."
+       find $(BR) -name '*.gcda' -delete
+       @make test-cov
+       find $(BR) -name '*.gcda' -delete
+       @make test-cov-hs
+       @make cov-merge
+
 .PHONY: test-cov-build
 test-cov-build:
        $(eval CC=gcc)
@@ -502,6 +523,14 @@ test-cov-post:
        $(eval CC=gcc)
        $(call test,vpp_gcov,cov-post)
 
+.PHONY: cov-merge
+cov-merge:
+       @lcov --add-tracefile $(BR)/test-coverage-merged/coverage-filtered.info \
+               -a $(BR)/test-coverage-merged/coverage-filtered1.info -o $(BR)/test-coverage-merged/coverage-merged.info
+       @genhtml $(BR)/test-coverage-merged/coverage-merged.info \
+               --output-directory $(BR)/test-coverage-merged/html
+       @echo "Code coverage report is in $(BR)/test-coverage-merged/html/index.html"
+
 .PHONY: test-all
 test-all:
        $(eval EXTENDED_TESTS=1)
index 0db3958..b809b17 100644 (file)
@@ -16,6 +16,10 @@ ifeq ($(TEST),)
 TEST=all
 endif
 
+ifeq ($(TEST-HS),)
+TEST-HS=all
+endif
+
 ifeq ($(DEBUG),)
 DEBUG=false
 endif
@@ -53,6 +57,7 @@ help:
        @echo " test                 - run tests"
        @echo " test-debug           - run 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 " fixstyle             - format .go source files"
@@ -88,6 +93,10 @@ build-vpp-release:
 build-vpp-debug:
        @make -C ../.. build
 
+.PHONY: build-vpp-gcov
+build-vpp-gcov:
+       @make -C ../.. build-vpp-gcov
+
 .build.ok: build
        @touch .build.ok
 
@@ -112,6 +121,14 @@ test-debug: .deps.ok .build_debug.ok
                --vppsrc=$(VPPSRC) --parallel=$(PARALLEL) --repeat=$(REPEAT)
        @bash ./script/compress.sh
 
+.PHONY: test-cov
+test-cov: .deps.ok .build.ok
+       -bash ./test --persist=$(PERSIST) --verbose=$(VERBOSE) \
+               --unconfigure=$(UNCONFIGURE) --debug=$(DEBUG) --test=$(TEST-HS) --cpus=$(CPUS) \
+               --vppsrc=$(VPPSRC)
+       @make -C ../.. test-cov-post HS_TEST=1
+       @bash ./script/compress.sh
+
 .PHONY: build-go
 build-go:
        go build ./tools/http_server
@@ -122,6 +139,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.vpp
+       bash ./script/build_hst.sh gcov
+       @touch .build.vpp
+
 .PHONY: build-debug
 build-debug: .deps.ok build-vpp-debug build-go
        @rm -f .build.ok
index cc2d00b..3b4bc28 100755 (executable)
@@ -21,6 +21,8 @@ export VPP_WS=../..
 
 if [ "$1" == "debug" ]; then
        VPP_BUILD_ROOT=${VPP_WS}/build-root/build-vpp_debug-native/vpp
+elif [ "$1" == "gcov" ]; then
+  VPP_BUILD_ROOT=${VPP_WS}/build-root/build-vpp_gcov-native/vpp
 else
        VPP_BUILD_ROOT=${VPP_WS}/build-root/build-vpp-native/vpp
 fi
index 9b9cc17..203a12e 100644 (file)
@@ -354,12 +354,12 @@ cov-prep: test-dep
 cov-post: wipe-cov $(BUILD_COV_DIR)
        @lcov --capture \
                --directory $(VPP_BUILD_DIR) \
-               --output-file $(BUILD_COV_DIR)/coverage.info
+               --output-file $(BUILD_COV_DIR)/coverage$(HS_TEST).info
        @test -z "$(EXTERN_COV_DIR)" || \
                lcov --capture \
                --directory $(EXTERN_COV_DIR) \
-               --output-file $(BUILD_COV_DIR)/extern-coverage.info
-       @lcov --remove $(BUILD_COV_DIR)/coverage.info \
+               --output-file $(BUILD_COV_DIR)/extern-coverage$(HS_TEST).info
+       @lcov --remove $(BUILD_COV_DIR)/coverage$(HS_TEST).info \
                "/usr/include/*" "*/build-root/*" "/opt/*" "/usr/lib/*" \
                "*_test.*" "*vat*" "*rdma*" "*/vpp-api/client/*" "*/plugins/af_packet/*" \
                "*/plugins/af_xdp/*" "*/plugins/avf/*" "*/plugins/dma_intel/*" \
@@ -367,15 +367,17 @@ cov-post: wipe-cov $(BUILD_COV_DIR)
                "*/plugins/perfmon/arm*" "*/plugins/perfmon/intel/*" "*/vlib/vmbus/*" \
                "*/vnet/dev/*" "*/plugins/dev_ena/*" "*/plugins/builtinurl/*" "*/vnet/flow/*" \
                "*/plugins/http_static/builtinurl/*" "*/plugins/dev_iavf/*" \
-               -o $(BUILD_COV_DIR)/coverage-filtered.info
-       @genhtml $(BUILD_COV_DIR)/coverage-filtered.info \
+               -o $(BUILD_COV_DIR)/coverage-filtered$(HS_TEST).info
+       @genhtml $(BUILD_COV_DIR)/coverage-filtered$(HS_TEST).info \
                --output-directory $(BUILD_COV_DIR)/html
        @test -z "$(EXTERN_COV_DIR)" || \
-               genhtml $(BUILD_COV_DIR)/extern-coverage.info \
+               genhtml $(BUILD_COV_DIR)/extern-coverage$(HS_TEST).info \
                        --output-directory $(BUILD_COV_DIR)/extern-html
        @echo
        @echo "Build finished. Code coverage report is in $(BUILD_COV_DIR)/html/index.html"
        @test -z "$(EXTERN_COV_DIR)" || echo "Code coverage report for out-of-tree objects is in $(BUILD_COV_DIR)/extern-html/index.html"
+       @mkdir -p $(BR)/test-coverage-merged
+       @cp -f $(BUILD_COV_DIR)/coverage-filtered$(HS_TEST).info $(BR)/test-coverage-merged
 
 .PHONY: cov
 cov:
@@ -434,6 +436,7 @@ help:
        @echo " test-cov-prep          - coverage phase #1 : prepare lcov"
        @echo " test-cov-build         - coverage phase #2 : build gcov image & run tests against it (use TEST=)"
        @echo " test-cov-post          - coverage phase #3 : generate lcov html report"
+       @echo " test-cov-both          - generate and merge code coverage report for Python and Golang tests"
        @echo " test-all               - build and run functional and extended tests"
        @echo " test-all-debug         - build and run functional and extended tests (debug build)"
        @echo " test-all-cov           - generate code coverage report for functional and extended tests"