Automate code coverage measurement - adjustment 01/243501/6
authorDariusz Michaluk <d.michaluk@samsung.com>
Mon, 7 Sep 2020 14:12:56 +0000 (16:12 +0200)
committerDariusz Michaluk <d.michaluk@samsung.com>
Thu, 29 Oct 2020 17:01:03 +0000 (18:01 +0100)
To gather unit tests coverage report:
- use COVERAGE build_type,
- instal device-certificate-manager-coverage rpm,
- run device-certificate-manager-coverage.sh script.

Change-Id: Ia196db4dcfbcc0801b01301cbdd2f71d989e4dfc

CMakeLists.txt
packaging/device-certificate-manager.spec
tests/CMakeLists.txt
tests/device-certificate-manager-coverage.sh.in

index 74d154d..a39b589 100644 (file)
@@ -26,10 +26,20 @@ IF(NOT CMAKE_BUILD_TYPE)
        SET(CMAKE_BUILD_TYPE "RELEASE")
 ENDIF(NOT CMAKE_BUILD_TYPE)
 
+IF(NOT DEFINED COVERAGE_DIR)
+       SET(COVERAGE_DIR
+               "${SHARE_INSTALL_PREFIX}/${PROJECT_NAME}-coverage"
+               CACHE PATH
+               "Read-only coverage data directory")
+ENDIF(NOT DEFINED COVERAGE_DIR)
+ADD_DEFINITIONS("-DCOVERAGE_DIR=\"${COVERAGE_DIR}\"")
+
 SET(CMAKE_C_FLAGS_DEBUG        "-std=c11 -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
 SET(CMAKE_CXX_FLAGS_DEBUG      "-std=c++17 -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
 SET(CMAKE_C_FLAGS_RELEASE      "-std=c11 -O2 -DNDEBUG")
 SET(CMAKE_CXX_FLAGS_RELEASE    "-std=c++17 -O2 -DNDEBUG")
+SET(CMAKE_C_FLAGS_COVERAGE     "-std=c11 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
+SET(CMAKE_CXX_FLAGS_COVERAGE   "-std=c++17 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
 
 ADD_DEFINITIONS("-Werror")
 ADD_DEFINITIONS("-Wall")
index 7b5b311..1f87fb3 100644 (file)
@@ -16,7 +16,9 @@ BuildRequires: pkgconfig(cynara-client)
 BuildRequires: pkgconfig(cynara-creds-socket)
 BuildRequires: pkgconfig(cynara-session)
 BuildRequires: boost-devel
+%if "%{build_type}" == "COVERAGE"
 BuildRequires: lcov
+%endif
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
 Requires: boost-system
@@ -25,7 +27,7 @@ Requires: boost-system
 %global user_name              security_fw
 %global group_name             security_fw
 %global smack_domain_name      System
-%global coverage_dir           /opt/data/device-certificate-manager-coverage
+%global coverage_dir           %{_datadir}/device-certificate-manager-coverage
 
 %description
 Device Certificate Manager provides cryptography services for the Iotivity framework.
@@ -54,16 +56,21 @@ Requires:   boost-test
 %description -n device-certificate-manager-tests
 Internal tests for Device Certificate Manager
 
+%if "%{build_type}" == "COVERAGE"
+
 %package -n device-certificate-manager-coverage
 Summary:       Device Certificate Manager code coverage data
 Group:         Security/Testing
-Requires:      device-certificate-manager-tests
+Requires:      device-certificate-manager-tests = %{version}-%{release}
+Requires:      device-certificate-manager-debugsource = %{version}-%{release}
 Requires:      lcov
 Requires:      gcc
 
 %description -n device-certificate-manager-coverage
 Device Certificate Manager code coverage data
 
+%endif
+
 %prep
 %setup -q
 cp -a %{SOURCE1001} .
@@ -139,13 +146,12 @@ fi
 %license LICENSE
 %{_bindir}/device-certificate-manager-tests
 
-%if %{build_type} == DEBUG
+%if "%{build_type}" == "COVERAGE"
 
 %files coverage
 %manifest %{name}.manifest
 %license LICENSE
 %{_bindir}/device-certificate-manager-coverage.sh
-%{_builddir}/%{name}-%{version}
 %coverage_dir
 
 %endif
index bc41638..a3c9f8d 100644 (file)
 
 SET(TARGET_TESTS "device-certificate-manager-tests")
 
-# 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
@@ -37,18 +32,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" PATTERN "*.c" PATTERN "*.cc"
-       )
-
        # install code coverage automation script
        CONFIGURE_FILE(device-certificate-manager-coverage.sh.in device-certificate-manager-coverage.sh @ONLY)
-       INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/device-certificate-manager-coverage.sh DESTINATION ${CMAKE_INSTALL_BINDIR})
+       INSTALL(
+               PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/device-certificate-manager-coverage.sh
+               DESTINATION ${CMAKE_INSTALL_BINDIR}
+       )
 
-ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG")
+ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
 
 FIND_PACKAGE(Threads REQUIRED)
 FIND_PACKAGE(Protobuf REQUIRED)
@@ -77,14 +68,11 @@ ADD_EXECUTABLE(${TARGET_TESTS}
        ${PROTO_SRCS}
        ${PROTO_HDRS})
 
-TARGET_COMPILE_OPTIONS(${TARGET_TESTS} PRIVATE ${COVERAGE_COMPILE_OPTIONS})
-
 TARGET_LINK_LIBRARIES(${TARGET_TESTS}
        ${Boost_UNIT_TEST_FRAMEWORK_LIBRARIES}
        ${CMAKE_THREAD_LIBS_INIT}
        ${TEST_DEPS_LIBRARIES}
-       ${PROTOBUF_LITE_LIBRARIES}
-       ${COVERAGE_LINK_OPTIONS})
+       ${PROTOBUF_LITE_LIBRARIES})
 
 INSTALL(TARGETS
        ${TARGET_TESTS}
index 0be9525..85d6e13 100644 (file)
@@ -2,9 +2,11 @@
 
 set -exuo pipefail
 
-REPORT="device-certificate-manager-coverage.info"
-STDERR="device-certificate-manager-coverage.stderr"
-HTML_DIR="device-certificate-manager-coverage"
+REPORT="@PROJECT_NAME@-coverage.info"
+STDERR="@PROJECT_NAME@-coverage.stderr"
+HTML_DIR="@PROJECT_NAME@-coverage"
+
+SRCS_DIR="/usr/src/debug/@PROJECT_NAME@-@PROJECT_VERSION@"
 
 # create dir for the report
 mkdir $HTML_DIR
@@ -15,6 +17,9 @@ find / -iname "*.gcda" -exec rm {} \;
 # launch unit tests
 device-certificate-manager-tests
 
+# copy source files
+cp -rp $SRCS_DIR/* "@CMAKE_BINARY_DIR@"
+
 # copy gcda files
 cp -r "@COVERAGE_BUILD_DIR@"/* "@COVERAGE_DIR@"