unit-test: Enable unit test coverage for certificate manager
Signed-off-by: Lakshminarayana R. Kammath <lkammath@in.ibm.com>
Change-Id: I198c7b98c394039da974574856a9318019de7f91
diff --git a/.gitignore b/.gitignore
index 8f3b58d..8e37126 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,12 @@
# http://www.gnu.org/software/automake
+# Code Coverage
+*.gcda
+*.gcno
+*.trs
+*-coverage*
+
Makefile.in
/ar-lib
/mdate-sh
@@ -14,6 +20,7 @@
/autom4te.cache
/aclocal.m4
+/aminclude_static.am
/compile
/config.guess
/config.h.in
diff --git a/.lcovrc b/.lcovrc
new file mode 100644
index 0000000..360a8b4
--- /dev/null
+++ b/.lcovrc
@@ -0,0 +1,3 @@
+geninfo_gcov_all_blocks = 1
+lcov_function_coverage = 1
+lcov_branch_coverage = 0
diff --git a/Makefile.am b/Makefile.am
index 49983bc..f179262 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,19 @@
+if AUTOCONF_CODE_COVERAGE_2019_01_06
+include $(top_srcdir)/Makefile.am.include
+include $(top_srcdir)/aminclude_static.am
+clean-local: code-coverage-clean
+distclean-local: code-coverage-dist-clean
+else
+@CODE_COVERAGE_RULES@
+endif
+
+AM_LIBS = $(CODE_COVERAGE_LIBS)
+AM_CPPFLAGS = $(CODE_COVERAGE_CPPFLAGS) -UNDEBUG $(GTEST_CPPFLAGS)
+AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
+AM_CXXFLAGS = $(CODE_COVERAGE_CXXFLAGS)
+AM_LDFLAGS = $(GMOCK_LIBS) -lgmock_main \
+ $(GTEST_LIBS) $(OESDK_TESTCASE_FLAGS) $(PTHREAD_LIBS)
+
AM_DEFAULT_SOURCE_EXT = .cpp
# Build these headers, don't install them
@@ -33,4 +49,9 @@
$(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \
$(PHOSPHOR_LOGGING_CFLAGS)
-SUBDIRS = . test
+SUBDIRS = test
+
+check_PROGRAMS =
+XFAIL_TESTS =
+
+TESTS = $(check_PROGRAMS)
diff --git a/Makefile.am.include b/Makefile.am.include
new file mode 100644
index 0000000..69567aa
--- /dev/null
+++ b/Makefile.am.include
@@ -0,0 +1,26 @@
+# Ignore system headers
+CODE_COVERAGE_IGNORE_PATTERN = '/include/*' '/usr/include/*' '$(includedir)/*'
+export CODE_COVERAGE_IGNORE_PATTERN
+
+CODE_COVERAGE_LCOV_SHOPTS = $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_SHOPTS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_SHOPTS
+#
+CODE_COVERAGE_LCOV_OPTIONS = $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_OPTIONS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_OPTIONS
+
+CODE_COVERAGE_LCOV_RMOPTS = $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+# Use our configuration file for lcov
+CODE_COVERAGE_LCOV_RMOPTS += --config-file $(abs_srcdir)/.lcovrc
+export CODE_COVERAGE_LCOV_RMOPTS
+
+CODE_COVERAGE_GENHTML_OPTIONS = $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+# Use our configuration file for genhtml
+CODE_COVERAGE_GENHTML_OPTIONS += --config-file $(abs_srcdir)/.lcovrc
+# Don't generate the absolute path for each file in the HTML output
+CODE_COVERAGE_GENHTML_OPTIONS += --prefix $(abs_srcdir) --prefix $(abs_builddir)
+export CODE_COVERAGE_GENHTML_OPTIONS
+
diff --git a/configure.ac b/configure.ac
index 8942815..afbdc8f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,8 @@
AC_INIT([phosphor-certificate-manager], [1.0], [https://github.com/openbmc/phosphor-certificate-manager/issues])
AC_LANG([C++])
AC_CONFIG_HEADERS([config.h])
-AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
+AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror -Wno-portability foreign dist-xz])
+
AM_SILENT_RULES([yes])
# Checks for programs.
@@ -28,14 +29,24 @@
PKG_CHECK_MODULES([SDEVENTPLUS], [sdeventplus])
PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging])
-# Code coverage
-AX_CODE_COVERAGE
-
# Make it possible for users to choose if they want test support
# explicitly or not at all
AC_ARG_ENABLE([tests], AC_HELP_STRING([--disable-tests],
[Build test cases]))
+# Make sure the default CFLAGS of `-O2 -g` don't override CODE_COVERAGE_CFLAGS
+# It is important that this comes before AC_PROG_C{C,XX}, as we are attempting
+# to stop them from populating default CFLAGS and CXXFLAGS.
+AS_IF([test "x$enable_tests" = "xno"], [enable_code_coverage=no])
+AS_IF([test "x$enable_code_coverage" != "xno"], [
+ AS_IF([test "x${CXXFLAGS+set}" != "xset"], [
+ AC_SUBST(CXXFLAGS, [""])
+ ])
+ AS_IF([test "x${CFLAGS+set}" != "xset"], [
+ AC_SUBST(CFLAGS, [""])
+ ])
+])
+
# Check/set gtest specific functions.
AS_IF([test "x$enable_tests" != "xno"], [
PKG_CHECK_MODULES([GTEST], [gtest], [], [true])
@@ -96,6 +107,23 @@
AX_RESTORE_FLAGS_WITH_PREFIX(OLD, [LDFLAGS])
])
+# Check for valgrind
+AS_IF([test "x$enable_tests" = "xno"], [enable_valgrind=no])
+m4_foreach([vgtool], [valgrind_tool_list],
+ [AX_VALGRIND_DFLT(vgtool, [off])])
+AX_VALGRIND_DFLT([memcheck], [on])
+AX_VALGRIND_CHECK
+AM_EXTRA_RECURSIVE_TARGETS([check-valgrind])
+m4_foreach([vgtool], [valgrind_tool_list],
+ [AM_EXTRA_RECURSIVE_TARGETS([check-valgrind-]vgtool)])
+
+# Code coverage
+AX_CODE_COVERAGE
+m4_ifdef([_AX_CODE_COVERAGE_RULES],
+ [AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [true])],
+ [AM_CONDITIONAL(AUTOCONF_CODE_COVERAGE_2019_01_06, [false])])
+AX_ADD_AM_MACRO_STATIC([])
+
AC_ARG_ENABLE([oe-sdk],
AS_HELP_STRING([--enable-oe-sdk], [Link testcases absolutely against OE SDK so they can be ran within it.])
)
diff --git a/test/Makefile.am b/test/Makefile.am
index ff20da0..08aeeee 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,13 +1,16 @@
AM_CPPFLAGS = \
- -I$(top_srcdir)
+ -I$(top_srcdir) \
+ $(CODE_COVERAGE_CPPFLAGS)
AM_CFLAGS = \
$(SDBUSPLUS_CFLAGS) \
$(SDEVENTPLUS_CFLAGS) \
$(PHOSPHOR_DBUS_INTERFACES_CFLAGS) \
- $(PHOSPHOR_LOGGING_CFLAGS)
+ $(PHOSPHOR_LOGGING_CFLAGS) \
+ $(CODE_COVERAGE_CPPFLAGS)
-AM_CXXFLAGS =
+AM_CXXFLAGS = \
+ $(CODE_COVERAGE_CXXFLAGS)
AM_LDFLAGS = \
-lstdc++fs \
@@ -17,7 +20,8 @@
$(PHOSPHOR_LOGGING_LIBS) \
$(OPENSSL_LIBS) \
$(GTEST_LIBS) -lgmock_main $(GMOCK_LIBS) \
- $(OESDK_TESTCASE_FLAGS)
+ $(OESDK_TESTCASE_FLAGS) \
+ $(CODE_COVERAGE_LIBS)
check_PROGRAMS =
@@ -33,3 +37,4 @@
certs_manager_test_LDADD += $(top_builddir)/certificate.o
certs_manager_test_LDADD += $(top_builddir)/csr.o
certs_manager_test_LDADD += $(top_builddir)/watch.o
+certs_manager_test_LDADD += $(CODE_COVERAGE_LIBS)