Automate code coverage measurement - adjustment 05/243505/3
authorDariusz Michaluk <d.michaluk@samsung.com>
Mon, 7 Sep 2020 16:16:17 +0000 (18:16 +0200)
committerDariusz Michaluk <d.michaluk@samsung.com>
Fri, 30 Oct 2020 17:50:18 +0000 (18:50 +0100)
To gather unit tests coverage report:
- use COVERAGE build_type,
- instal key-manager-coverage rpm,
- run key-manager-coverage.sh script.

Change-Id: I6d2efd2bcec79a37a45ed56ca9efa148de13be4e

CMakeLists.txt
packaging/key-manager.spec
unit-tests/CMakeLists.txt
unit-tests/key-manager-coverage.sh.in

index ae63e83..3ae2a33 100644 (file)
@@ -34,6 +34,8 @@ SET(CMAKE_C_FLAGS_DEBUG        "-g -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
 SET(CMAKE_CXX_FLAGS_DEBUG      "-g -std=c++17 -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
 SET(CMAKE_C_FLAGS_RELEASE      "-g -O2")
 SET(CMAKE_CXX_FLAGS_RELEASE    "-g -std=c++17 -O2")
+SET(CMAKE_C_FLAGS_COVERAGE     "-g -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
+SET(CMAKE_CXX_FLAGS_COVERAGE   "-g -std=c++17 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
 
 # Force PIE
 SET(CMAKE_POSITION_INDEPENDENT_CODE "True")
@@ -67,6 +69,14 @@ ADD_DEFINITIONS("-DSYSTEMD_ENV_FILE=\"${SYSTEMD_ENV_FILE}\"")
 
 SET(KEY_MANAGER_PATH ${PROJECT_SOURCE_DIR}/src/manager)
 
+IF(NOT DEFINED COVERAGE_DIR)
+    SET(COVERAGE_DIR
+        "/opt/data/ckm-coverage"
+        CACHE PATH
+        "Read-only coverage data directory")
+ENDIF(NOT DEFINED COVERAGE_DIR)
+ADD_DEFINITIONS("-DCOVERAGE_DIR=\"${COVERAGE_DIR}\"")
+
 IF (TZ_BACKEND_ENABLED)
     ADD_DEFINITIONS("-DTZ_BACKEND_ENABLED")
     SET(EXTRA_KM_DEPS ${EXTRA_KM_DEPS} tef-libteec)
index d69de9e..a8b82ac 100644 (file)
@@ -5,7 +5,7 @@
 %{!?build_type:%global build_type RELEASE}
 %global coverage_only 0
 %if %{build_type} == COVERAGE_ONLY
-    %global build_type DEBUG
+    %global build_type COVERAGE
     %global coverage_only 1
 %endif
 
@@ -49,7 +49,9 @@ BuildRequires: key-manager-ta-serialization-devel
 BuildRequires: pkgconfig(tef-libteec)
 %endif
 Requires: libkey-manager-common = %{version}-%{release}
+%if "%{build_type}" == "COVERAGE"
 BuildRequires: lcov
+%endif
 
 %{?systemd_requires}
 
@@ -159,17 +161,22 @@ Requires(postun): %{sbin_dir}/ldconfig
 %description -n key-manager-initial-values
 Includes ckm_initial_values tool for initial values XML generation
 
+%if "%{build_type}" == "COVERAGE"
+
 %package -n key-manager-coverage
 Summary:    Central Key Manager code coverage data
 Group:      Security/Testing
 License:    Apache-2.0
-Requires:      key-manager-unit-tests
-Requires:      lcov
-Requires:      gcc
+Requires:   key-manager-unit-tests = %{version}-%{release}
+Requires:   key-manager-debugsource = %{version}-%{release}
+Requires:   lcov
+Requires:   gcc
 
 %description -n key-manager-coverage
 Central Key Manager code coverage data
 
+%endif
+
 %prep
 %setup -q
 
@@ -406,15 +413,14 @@ fi
 %unit_tests_dir
 
 ###############################################################################
-%if %{build_type} == DEBUG
+%if "%{build_type}" == "COVERAGE"
 ###############################################################################
 
 %files -n key-manager-coverage
 %license LICENSE
 %{bin_dir}/key-manager-coverage.sh
-%{_builddir}/%{name}-%{version}
 %coverage_dir
 
-#################### %{build_type} == DEBUG ###################################
+#################### %{build_type} == COVERAGE ################################
 %endif
 ###############################################################################
index bc3e2bb..149a1f2 100644 (file)
@@ -1,9 +1,4 @@
-# enable code coverage in debug build only
-IF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
-
-    # coverage build flags
-    SET(COVERAGE_LINK_OPTIONS --coverage)
-    SET(COVERAGE_COMPILE_OPTIONS --coverage)
+IF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
 
     # coverage data
     SET(COVERAGE_BUILD_DIR
@@ -17,18 +12,14 @@ IF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
         FILES_MATCHING PATTERN "*.gcno"
     )
 
-    # install all the source & header files just as in the buildir
-    INSTALL(
-        DIRECTORY ${PROJECT_SOURCE_DIR}/
-        DESTINATION ${CMAKE_BINARY_DIR}
-        FILES_MATCHING PATTERN "*.cpp" PATTERN "*.h"
-    )
-
     # install code coverage automation script
     CONFIGURE_FILE(key-manager-coverage.sh.in key-manager-coverage.sh @ONLY)
-    INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/key-manager-coverage.sh DESTINATION ${BIN_DIR})
+    INSTALL(
+        PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/key-manager-coverage.sh
+        DESTINATION ${BIN_DIR}
+    )
 
-ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
+ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
 
 
 FIND_PACKAGE(Threads REQUIRED)
@@ -140,8 +131,6 @@ ADD_EXECUTABLE(
     ${TZ_BACKEND_SOURCES}
 )
 
-TARGET_COMPILE_OPTIONS(${TARGET_UNIT_TESTS} PRIVATE ${COVERAGE_COMPILE_OPTIONS})
-
 TARGET_LINK_LIBRARIES(
     ${TARGET_UNIT_TESTS}
     ${KEY_MANAGER_DEP_LIBRARIES}
@@ -149,7 +138,6 @@ TARGET_LINK_LIBRARIES(
     ${CMAKE_THREAD_LIBS_INIT}
     boost_unit_test_framework
     -ldl
-    ${COVERAGE_LINK_OPTIONS}
 )
 
 INSTALL(TARGETS ${TARGET_UNIT_TESTS} DESTINATION bin)
index 9789feb..0870ac7 100644 (file)
@@ -2,9 +2,11 @@
 
 set -exuo pipefail
 
-REPORT="key-manager-coverage.info"
-STDERR="key-manager-coverage.stderr"
-HTML_DIR="key-manager-coverage"
+REPORT="@PROJECT_NAME@-coverage.info"
+STDERR="@PROJECT_NAME@-coverage.stderr"
+HTML_DIR="@PROJECT_NAME@-coverage"
+
+SRCS_DIR="/usr/src/debug/@PROJECT_NAME@-@VERSION@"
 
 # create dir for the report
 mkdir $HTML_DIR
@@ -15,6 +17,9 @@ find / -iname "*.gcda" -exec rm {} \;
 # launch unit tests
 ckm-unit-tests
 
+# copy source files
+cp -rp $SRCS_DIR/* "@CMAKE_BINARY_DIR@"
+
 # copy gcda files
 cp -r "@COVERAGE_BUILD_DIR@"/* "@COVERAGE_DIR@"