From: Dariusz Michaluk Date: Tue, 19 May 2020 14:50:46 +0000 (+0200) Subject: Automate code coverage measurement X-Git-Tag: submit/tizen/20200728.071123~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c75ab16f6ec763406f29e6378bab8dfb6a5cc760;p=platform%2Fcore%2Fsecurity%2Fdevice-certificate-manager.git Automate code coverage measurement Change-Id: Iedf2495b640d4f703f9b63dad934af7d42f9adc2 --- diff --git a/packaging/device-certificate-manager.spec b/packaging/device-certificate-manager.spec index 3ee7f7e..7b5b311 100644 --- a/packaging/device-certificate-manager.spec +++ b/packaging/device-certificate-manager.spec @@ -1,3 +1,5 @@ +%{!?build_type:%global build_type RELEASE} + Name: device-certificate-manager Summary: Device Certificate Manager daemon and libraries Version: 2.0 @@ -14,6 +16,7 @@ BuildRequires: pkgconfig(cynara-client) BuildRequires: pkgconfig(cynara-creds-socket) BuildRequires: pkgconfig(cynara-session) BuildRequires: boost-devel +BuildRequires: lcov Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig Requires: boost-system @@ -22,6 +25,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 %description Device Certificate Manager provides cryptography services for the Iotivity framework. @@ -50,17 +54,28 @@ Requires: boost-test %description -n device-certificate-manager-tests Internal tests for Device Certificate Manager +%package -n device-certificate-manager-coverage +Summary: Device Certificate Manager code coverage data +Group: Security/Testing +Requires: device-certificate-manager-tests +Requires: lcov +Requires: gcc + +%description -n device-certificate-manager-coverage +Device Certificate Manager code coverage data + %prep %setup -q cp -a %{SOURCE1001} . %build -%cmake . -DCMAKE_BUILD_TYPE=%{?build_type:%build_type}%{!?build_type:Release} \ +%cmake . -DCMAKE_BUILD_TYPE=%{build_type} \ -DSYSTEMD_UNIT_DIR=%{_unitdir} \ -DUSER_NAME=%{user_name} \ -DGROUP_NAME=%{group_name} \ -DSMACK_DOMAIN_NAME=%{smack_domain_name} \ - -DRPM_DIR=%{_sysconfdir}/rpm + -DRPM_DIR=%{_sysconfdir}/rpm \ + -DCOVERAGE_DIR=%{coverage_dir} make %{?jobs:-j%jobs} @@ -123,3 +138,14 @@ fi %manifest %{name}.manifest %license LICENSE %{_bindir}/device-certificate-manager-tests + +%if %{build_type} == DEBUG + +%files coverage +%manifest %{name}.manifest +%license LICENSE +%{_bindir}/device-certificate-manager-coverage.sh +%{_builddir}/%{name}-%{version} +%coverage_dir + +%endif diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 67a48fd..27bfebb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -16,6 +16,40 @@ # @author Dariusz Michaluk # @author Jaroslaw Pelczar +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) + + # coverage data + SET(COVERAGE_BUILD_DIR + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET_TESTS}.dir/ + ) + + # install gcno files + INSTALL( + DIRECTORY ${COVERAGE_BUILD_DIR}/ + DESTINATION ${COVERAGE_DIR} + 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}) + +ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG") + FIND_PACKAGE(Boost REQUIRED COMPONENTS unit_test_framework) @@ -26,13 +60,15 @@ INCLUDE_DIRECTORIES(../src/dcm-client) ADD_DEFINITIONS(-DBOOST_TEST_DYN_LINK) -SET(TARGET_TESTS "device-certificate-manager-tests") ADD_EXECUTABLE(${TARGET_TESTS} device_certificate_manager_tests.cpp api_test.cpp) +TARGET_COMPILE_OPTIONS(${TARGET_TESTS} PRIVATE ${COVERAGE_COMPILE_OPTIONS}) + TARGET_LINK_LIBRARIES(${TARGET_TESTS} ${Boost_UNIT_TEST_FRAMEWORK_LIBRARIES} + ${COVERAGE_LINK_OPTIONS} device-certificate-manager) INSTALL(TARGETS diff --git a/tests/device-certificate-manager-coverage.sh.in b/tests/device-certificate-manager-coverage.sh.in new file mode 100644 index 0000000..0be9525 --- /dev/null +++ b/tests/device-certificate-manager-coverage.sh.in @@ -0,0 +1,34 @@ +#!/bin/bash + +set -exuo pipefail + +REPORT="device-certificate-manager-coverage.info" +STDERR="device-certificate-manager-coverage.stderr" +HTML_DIR="device-certificate-manager-coverage" + +# create dir for the report +mkdir $HTML_DIR + +# remove old gcda files +find / -iname "*.gcda" -exec rm {} \; + +# launch unit tests +device-certificate-manager-tests + +# copy gcda files +cp -r "@COVERAGE_BUILD_DIR@"/* "@COVERAGE_DIR@" + +# prepare report +rm -f $STDERR +lcov --no-external -c -d "@COVERAGE_DIR@" -b "@CMAKE_BINARY_DIR@" -o $REPORT 2>$STDERR +lcov -r $REPORT "@CMAKE_BINARY_DIR@/tests/*" -o $REPORT + +# check warnings +if [ -s $STDERR ] +then + echo "Warnings detected (see $STDERR). Aborting." + exit 1 +fi + +# html +genhtml $REPORT --output-directory $HTML_DIR/