From c9de6bf56f7873e2a1e1367522d524820c61646c Mon Sep 17 00:00:00 2001 From: Armin Luntzer <armin.luntzer@univie.ac.at> Date: Tue, 6 Dec 2016 14:28:16 +0100 Subject: [PATCH] unit tests: add coverage targets --- tools/testing/unittest/Makefile | 22 ++++++++++++++++------ tools/testing/unittest/lib.mk | 21 ++++++++++++++++----- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/tools/testing/unittest/Makefile b/tools/testing/unittest/Makefile index c923ae5..e55df8e 100644 --- a/tools/testing/unittest/Makefile +++ b/tools/testing/unittest/Makefile @@ -6,14 +6,13 @@ TARGETS += sysctl # Makefile to avoid test build failures when test # Makefile doesn't have explicit build rules. -CFLAGS += -fprofile-arcs -ftest-coverage + +export CFLAGS = -fprofile-arcs -ftest-coverage +export LDFLAGS = -lgcov --coverage ifeq (1,$(MAKELEVEL)) -override LDFLAGS = override MAKEFLAGS = else -export CFLAGS -export LDFLAGS = -lgcov --coverage endif @@ -26,9 +25,20 @@ run_tests: all for TARGET in $(TARGETS); do \ make -C $$TARGET run_tests; \ done; -clean: + +coverage_tests: all + for TARGET in $(TARGETS); do \ + make -C $$TARGET coverage_tests; \ + done; + +clean_coverage: + for TARGET in $(TARGETS); do \ + make -C $$TARGET clean_coverage; \ + done; + +clean: clean_coverage for TARGET in $(TARGETS); do \ make -C $$TARGET clean; \ done; -.PHONY: install +.PHONY: diff --git a/tools/testing/unittest/lib.mk b/tools/testing/unittest/lib.mk index 479fc11..f0fffdb 100644 --- a/tools/testing/unittest/lib.mk +++ b/tools/testing/unittest/lib.mk @@ -16,13 +16,24 @@ endef run_tests: all $(RUN_TESTS) -define EMIT_TESTS +define COVERAGE_TESTS @for TEST in $(TEST_PROGS); do \ - echo "(./$$TEST && echo \"selftests: $$TEST [PASS]\") || echo \"selftests: $$TEST [FAIL]\""; \ + lcov --rc lcov_branch_coverage=1 --capture --directory ./ --output-file coverage.info; \ + genhtml --branch-coverage coverage.info --output-directory out; \ done; endef -emit_tests: - $(EMIT_TESTS) +coverage_tests: run_tests + $(COVERAGE_TESTS) -.PHONY: run_tests all clean emit_tests + +define CLEAN_COVERAGE + @for TEST in $(TEST_PROGS); do \ + $(RM) -r $$TEST $$TEST.gcno $$TEST.gcda coverage.info out/; \ + done; +endef + +clean_coverage: + $(CLEAN_COVERAGE) + +.PHONY: run_tests all clean coverage_tests clean_coverage -- GitLab