Skip to content

Commit 7a6ed30

Browse files
committed
Add code coverage for unit tests
Enable code coverage to run during CI testing. Signed-off-by: Matt Spinler <[email protected]> Change-Id: I9d928122c9c629f1e74e8660f716f148afa2988a
1 parent bcf3b2a commit 7a6ed30

File tree

6 files changed

+110
-11
lines changed

6 files changed

+110
-11
lines changed

.gitignore

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ aclocal.m4
44
ar-lib
55
*-libtool
66
autom4te.cache*
7+
aminclude_static.am
78
compile
89
config.*
910
depcomp
@@ -15,7 +16,7 @@ ltmain.sh
1516
missing
1617
test-driver
1718
test/.deps*
18-
test/.dirstamp
19+
*.dirstamp
1920
test/Makefile
2021
test/Makefile.in
2122
.deps*
@@ -30,7 +31,6 @@ xyz/openbmc_project/Logging/Internal/Manager/
3031
libtool
3132
callout-test
3233
callouts-gen.hpp
33-
callouts/.dirstamp
3434
elog-lookup.cpp
3535
elog-process-metadata.cpp
3636
phosphor-log-manager
@@ -40,6 +40,10 @@ test/*_test.trs
4040
test/*_test_*.log
4141
test/*_test_*.trs
4242
test/test-suite.log
43+
*.gcda
44+
*.gcno
45+
*.trs
46+
*-coverage*
4347
test/remote_logging_test_address
4448
test/remote_logging_test_config
4549
test/remote_logging_test_port

.lcovrc

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
geninfo_gcov_all_blocks = 1
2+
lcov_function_coverage = 1
3+
lcov_branch_coverage = 0

Makefile.am

+20
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
if AUTOCONF_CODE_COVERAGE_2019_01_06
2+
include $(top_srcdir)/Makefile.am.include
3+
include $(top_srcdir)/aminclude_static.am
4+
clean-local: code-coverage-clean
5+
distclean-local: code-coverage-dist-clean
6+
else
7+
@CODE_COVERAGE_RULES@
8+
endif
9+
10+
AM_LIBS = $(CODE_COVERAGE_LIBS)
11+
AM_CPPFLAGS = $(CODE_COVERAGE_CPPFLAGS) -UNDEBUG $(GTEST_CPPFLAGS)
12+
AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
13+
AM_CXXFLAGS = $(CODE_COVERAGE_CXXFLAGS)
14+
AM_LDFLAGS = $(GMOCK_LIBS) -lgmock_main \
15+
$(GTEST_LIBS) $(OESDK_TESTCASE_FLAGS) $(PTHREAD_LIBS) $(SDBUSPLUS_LIBS)
16+
117
if !INSTALL_SCRIPTS
218
# export these headers
319
nobase_include_HEADERS = \
@@ -132,3 +148,7 @@ elogdir = ${datadir}/phosphor-logging/elog
132148
nobase_elog_DATA = \
133149
tools/elog-gen.py \
134150
tools/phosphor-logging/templates/elog-gen-template.mako.hpp
151+
152+
# check_PROGRAMS =
153+
# XFAIL_TESTS =
154+
# TESTS = $(check_PROGRAMS)

Makefile.am.include

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Ignore system headers
2+
CODE_COVERAGE_IGNORE_PATTERN = '/include/*' '/usr/include/*' '$(includedir)/*'
3+
export CODE_COVERAGE_IGNORE_PATTERN
4+
5+
CODE_COVERAGE_LCOV_SHOPTS = $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
6+
# Use our configuration file for lcov
7+
CODE_COVERAGE_LCOV_SHOPTS += --config-file $(abs_srcdir)/.lcovrc
8+
export CODE_COVERAGE_LCOV_SHOPTS
9+
#
10+
CODE_COVERAGE_LCOV_OPTIONS = $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
11+
# Use our configuration file for lcov
12+
CODE_COVERAGE_LCOV_OPTIONS += --config-file $(abs_srcdir)/.lcovrc
13+
export CODE_COVERAGE_LCOV_OPTIONS
14+
15+
CODE_COVERAGE_LCOV_RMOPTS = $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
16+
# Use our configuration file for lcov
17+
CODE_COVERAGE_LCOV_RMOPTS += --config-file $(abs_srcdir)/.lcovrc
18+
export CODE_COVERAGE_LCOV_RMOPTS
19+
20+
CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
21+
# Use our configuration file for genhtml
22+
CODE_COVERAGE_GENHTML_OPTIONS += --config-file $(abs_srcdir)/.lcovrc
23+
# Don't generate the absolute path for each file in the HTML output
24+
CODE_COVERAGE_GENHTML_OPTIONS += --prefix $(abs_srcdir) --prefix $(abs_builddir)
25+
export CODE_COVERAGE_GENHTML_OPTIONS

configure.ac

+35-1
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,22 @@
22
AC_PREREQ([2.69])
33
AC_INIT([phosphor-logging], [1.0], [https://github.com/openbmc/phosphor-logging/issues])
44
AC_LANG([C++])
5-
AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
5+
AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror -Wno-portability foreign dist-xz])
66
AM_SILENT_RULES([yes])
77

8+
# Make sure the default CFLAGS of `-O2 -g` don't override CODE_COVERAGE_CFLAGS
9+
# It is important that this comes before AC_PROG_C{C,XX}, as we are attempting
10+
# to stop them from populating default CFLAGS and CXXFLAGS.
11+
AS_IF([test "x$enable_tests" = "xno"], [enable_code_coverage=no])
12+
AS_IF([test "x$enable_code_coverage" != "xno"], [
13+
AS_IF([test "x${CXXFLAGS+set}" != "xset"], [
14+
AC_SUBST(CXXFLAGS, [""])
15+
])
16+
AS_IF([test "x${CFLAGS+set}" != "xset"], [
17+
AC_SUBST(CFLAGS, [""])
18+
])
19+
])
20+
821
# Checks for programs
922
AC_PROG_CXX
1023
AM_PROG_AR
@@ -75,6 +88,27 @@ AC_ARG_ENABLE([tests],
7588
AS_HELP_STRING([--enable-tests], [Specifies running in the CI environment])
7689
)
7790

91+
92+
# Check for valgrind
93+
AS_IF([test "x$enable_tests" = "xno"], [enable_valgrind=no])
94+
m4_foreach([vgtool], [valgrind_tool_list],
95+
[AX_VALGRIND_DFLT(vgtool, [off])])
96+
AX_VALGRIND_DFLT([memcheck], [on])
97+
AX_VALGRIND_CHECK
98+
AM_EXTRA_RECURSIVE_TARGETS([check-valgrind])
99+
m4_foreach([vgtool], [valgrind_tool_list],
100+
[AM_EXTRA_RECURSIVE_TARGETS([check-valgrind-]vgtool)])
101+
102+
# Code coverage
103+
AX_CODE_COVERAGE
104+
AS_IF([test "x$CODE_COVERAGE_ENABLED" = "xyes"], [
105+
AX_APPEND_COMPILE_FLAGS([-DHAVE_GCOV], [CODE_COVERAGE_CPPFLAGS])
106+
])
107+
m4_ifdef([_AX_CODE_COVERAGE_RULES],
108+
[AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [true])],
109+
[AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [false])])
110+
AX_ADD_AM_MACRO_STATIC([])
111+
78112
AC_DEFINE(BUSNAME_LOGGING, "xyz.openbmc_project.Logging", [The log manager DBus busname to own.])
79113
AC_DEFINE(OBJ_LOGGING, "/xyz/openbmc_project/logging", [The log manager DBus object path.])
80114
AC_DEFINE(OBJ_INTERNAL, "/xyz/openbmc_project/logging/internal/manager", [The private log manager DBus object path.])

test/Makefile.am

+21-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
AM_CPPFLAGS = -I${top_srcdir}
1+
AM_CPPFLAGS = -I${top_srcdir} \
2+
$(CODE_COVERAGE_CPPFLAGS)
3+
AM_CFLAGS = \
4+
$(CODE_COVERAGE_CFLAGS)
5+
AM_CXXFLAGS = \
6+
$(CODE_COVERAGE_CXXFLAGS)
7+
AM_LDFLAGS = \
8+
$(CODE_COVERAGE_LIBS)
29

310
TESTS = $(check_PROGRAMS)
411

@@ -20,10 +27,12 @@ test_cppflags = \
2027
$(AM_CPPFLAGS) \
2128
$(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \
2229
$(SDBUSPLUS_CFLAGS) \
23-
$(SYSTEMD_CFLAGS)
30+
$(SYSTEMD_CFLAGS) \
31+
$(CODE_COVERAGE_CPPFLAGS)
2432

2533
test_cxxflags = \
26-
$(PTHREAD_CFLAGS)
34+
$(PTHREAD_CFLAGS) \
35+
$(CODE_COVERAGE_CXXFLAGS)
2736

2837
test_ldflags = \
2938
-lgtest_main -lgtest \
@@ -32,7 +41,8 @@ test_ldflags = \
3241
$(OESDK_TESTCASE_FLAGS) \
3342
$(PHOSPHOR_DBUS_INTERFACES_LIBS) \
3443
$(SDBUSPLUS_LIBS) \
35-
$(SYSTEMD_LIBS)
44+
$(SYSTEMD_LIBS) \
45+
$(CODE_COVERAGE_LIBS)
3646

3747
test_ldadd = \
3848
$(top_builddir)/elog_serialize.o \
@@ -43,18 +53,20 @@ test_ldadd = \
4353
$(top_builddir)/elog-lookup.o \
4454
$(top_builddir)/elog-process-metadata.o \
4555
$(top_builddir)/sdjournal.o \
46-
$(top_builddir)/extensions.o
56+
$(top_builddir)/extensions.o \
57+
$(CODE_COVERAGE_LIBS)
4758

4859
remote_logging_test_ldadd = \
4960
$(top_builddir)/phosphor-rsyslog-config/server-conf.o \
50-
$(top_builddir)/sdjournal.o
61+
$(top_builddir)/sdjournal.o \
62+
$(CODE_COVERAGE_LIBS)
5163

5264
elog_errorwrap_test_CPPFLAGS = $(test_cppflags)
5365
elog_errorwrap_test_CXXFLAGS = $(test_cxxflags)
5466
elog_errorwrap_test_SOURCES = elog_errorwrap_test.cpp
5567
elog_errorwrap_test_LDADD = $(test_ldadd)
5668
elog_errorwrap_test_LDFLAGS = \
57-
$(test_ldflags)
69+
$(test_ldflags)
5870

5971
serialization_test_path_CPPFLAGS = $(test_cppflags)
6072
serialization_test_path_CXXFLAGS = $(test_cxxflags)
@@ -94,7 +106,8 @@ remote_logging_test_config_LDFLAGS = \
94106
sdjournal_mock_test_CPPFLAGS = $(test_cppflags)
95107
sdjournal_mock_test_CXXFLAGS = $(test_cxxflags)
96108
sdjournal_mock_test_SOURCES = sdtest.cpp
97-
sdjournal_mock_test_LDADD = $(top_builddir)/sdjournal.o
109+
sdjournal_mock_test_LDADD = $(top_builddir)/sdjournal.o \
110+
$(CODE_COVERAGE_LIBS)
98111
sdjournal_mock_test_LDFLAGS = $(test_ldflags)
99112

100113
extensions_test_CPPFLAGS = $(test_cppflags)

0 commit comments

Comments
 (0)