From: Dariusz Michaluk Date: Fri, 15 Jan 2021 08:19:30 +0000 (+0100) Subject: Automate code coverage measurement X-Git-Tag: submit/tizen/20210323.045229~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a5bf14c92f6f771cc04fee64eb044650d963eae7;p=platform%2Fcore%2Fsecurity%2Fprivilege-checker.git Automate code coverage measurement To gather unit tests coverage report: - use COVERAGE build_type, - install security-privilege-manager-coverage rpm, - run privilege-checker-coverage.sh script. Change-Id: I79142f2b87e7ecdc8fae3efad903dfebd3f3a654 --- diff --git a/CMakeLists.txt b/CMakeLists.txt index e1943e3..8da6018 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,8 +8,17 @@ 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 "-O0 -ggdb -Wp,-U_FORTIFY_SOURCE") SET(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG") +SET(CMAKE_C_FLAGS_COVERAGE "-O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE") ADD_DEFINITIONS("-Werror") ADD_DEFINITIONS("-Wall") diff --git a/packaging/privilege-checker.spec b/packaging/privilege-checker.spec index fb5253b..7e8d011 100644 --- a/packaging/privilege-checker.spec +++ b/packaging/privilege-checker.spec @@ -22,6 +22,9 @@ BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(sqlite3) BuildRequires: pkgconfig(libtzplatform-config) +%if "%{build_type}" == "COVERAGE" +BuildRequires: lcov +%endif Requires: security-config Requires: tizen-platform-config Requires: pkgmgr @@ -99,6 +102,20 @@ Summary: Internal TC for privilege-checker %description -n security-privilege-manager-tests Internal TC for privilege-checker APIs +%if "%{build_type}" == "COVERAGE" + +%package -n security-privilege-manager-coverage +Summary: Privilege Checker code coverage data +Requires: security-privilege-manager-tests = %{version}-%{release} +Requires: privilege-checker-debugsource = %{version}-%{release} +Requires: lcov +Requires: gcc + +%description -n security-privilege-manager-coverage +Privilege Checker code coverage data + +%endif + %package -n privilege-verifier Summary: Privilege Verification Utility BuildRequires: pkgconfig(sqlite3) @@ -113,9 +130,13 @@ The Privilege Verifier Utility provides functions to verify privilege informatio cp %{SOURCE1000} . %build + +%global coverage_dir %{_datadir}/privilege-checker-coverage + %cmake . -DCMAKE_BUILD_TYPE=%{build_type} \ -DTZ_SYS_DB=%TZ_SYS_DB \ - -DTZ_SYS_SHARE=%TZ_SYS_SHARE + -DTZ_SYS_SHARE=%TZ_SYS_SHARE \ + -DCOVERAGE_DIR=%{coverage_dir} make %{?jobs:-j%jobs} @@ -207,6 +228,14 @@ mv %{_sysconfdir}/privilege-checker.ini.iot %{_sysconfdir}/privilege-checker.ini %files -n security-privilege-manager-tests %{_bindir}/privilege-checker-tests +%if "%{build_type}" == "COVERAGE" + +%files -n security-privilege-manager-coverage +%{_bindir}/privilege-checker-coverage.sh +%coverage_dir + +%endif + %files -n privilege-verifier %license LICENSE.APLv2 %{_bindir}/privilege-verifier diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8b1d903..e8a59c2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -4,6 +4,29 @@ ADD_DEFINITIONS(-D__TIZEN__) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/test) +IF (CMAKE_BUILD_TYPE MATCHES "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 code coverage automation script + CONFIGURE_FILE(privilege-checker-coverage.sh.in privilege-checker-coverage.sh @ONLY) + INSTALL( + PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/privilege-checker-coverage.sh + DESTINATION ${CMAKE_INSTALL_BINDIR} + ) + +ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE") + SET(TEST_SRCS privilege-checker.c tc-common.c diff --git a/test/privilege-checker-coverage.sh.in b/test/privilege-checker-coverage.sh.in new file mode 100644 index 0000000..bab3511 --- /dev/null +++ b/test/privilege-checker-coverage.sh.in @@ -0,0 +1,39 @@ +#!/bin/bash + +set -exuo pipefail + +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 + +# remove old gcda files +find / -iname "*.gcda" -exec rm {} \; + +# launch unit tests +privilege-checker-tests + +# copy source files +cp -rp $SRCS_DIR/* "@CMAKE_BINARY_DIR@" + +# 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@/test/*" -o $REPORT + +# check warnings +if [ -s $STDERR ] +then + echo "Warnings detected (see $STDERR). Aborting." + exit 1 +fi + +# html +genhtml $REPORT --output-directory $HTML_DIR/