CACHE PATH
"Read-only privilege Smack mapping directory")
+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("-DDB_INSTALL_DIR=\"${DB_INSTALL_DIR}\"")
ADD_DEFINITIONS("-DLOCAL_STATE_INSTALL_DIR=\"${LOCAL_STATE_INSTALL_DIR}\"")
ADD_DEFINITIONS("-DDATA_INSTALL_DIR=\"${DATA_INSTALL_DIR}\"")
ADD_DEFINITIONS("-DPOLICY_INSTALL_DIR=\"${POLICY_INSTALL_DIR}\"")
ADD_DEFINITIONS("-DDB_TEST_INSTALL_DIR=\"${DB_TEST_INSTALL_DIR}\"")
ADD_DEFINITIONS("-DPRIV_MAPPING_INSTALL_SUBDIR=\"${PRIV_MAPPING_INSTALL_SUBDIR}\"")
+ADD_DEFINITIONS("-DCOVERAGE_DIR=\"${COVERAGE_DIR}\"")
############################# compiler flags ##################################
SET(CMAKE_CXX_FLAGS_PROFILING "-g -std=c++17 -O0 -pg -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_CXX_FLAGS_DEBUG "-g -std=c++17 -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_CXX_FLAGS_RELEASE "-g -std=c++17 -O2 -DNDEBUG=1")
-SET(CMAKE_CXX_FLAGS_CCOV "-g -std=c++17 -O2 --coverage")
+SET(CMAKE_CXX_FLAGS_COVERAGE "-g -std=c++17 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
SET(CMAKE_CXX_FLAGS_VALGRIND "-ggdb -std=c++17 -O0 -fno-inline -Wp,-U_FORTIFY_SOURCE")
# Force PIE
+%{!?build_type:%global build_type RELEASE}
+
Name: security-manager
Summary: Security manager and utilities
Version: 1.6.13
BuildRequires: pkgconfig(openssl1.1)
BuildRequires: pkgconfig(mount)
BuildRequires: boost-devel
+%if "%{build_type}" == "COVERAGE"
+BuildRequires: lcov
+%endif
%{?systemd_requires}
%description
%description -n security-license-manager
Package with plugins for cynara.
+%if "%{build_type}" == "COVERAGE"
+
+%package -n security-manager-coverage
+Summary: Security Manager code coverage data
+Group: Security/Testing
+Requires: security-manager-tests = %{version}-%{release}
+Requires: security-manager-debugsource = %{version}-%{release}
+Requires: lcov
+Requires: gcc
+
+%description -n security-manager-coverage
+Security Manager code coverage data
+
+%endif
+
%prep
%setup -q
export LDFLAGS+="-Wl,--rpath=%{_libdir}"
%global db_test_dir %{_datadir}/sm-db-test
+%global coverage_dir %{_datadir}/security-manager-coverage
%cmake . \
-DVERSION=%{version} \
-DDB_INSTALL_DIR=%{TZ_SYS_DB} \
-DDB_TEST_INSTALL_DIR=%{db_test_dir} \
-DDB_LOGS=OFF \
- -DCMAKE_BUILD_TYPE=%{?build_type:%build_type}%{!?build_type:RELEASE} \
- -DCMAKE_VERBOSE_MAKEFILE=ON
+ -DCMAKE_BUILD_TYPE=%{build_type} \
+ -DCMAKE_VERBOSE_MAKEFILE=ON \
+ -DCOVERAGE_DIR=%{coverage_dir}
make %{?jobs:-j%jobs}
%install
%{_bindir}/license-manager-agent
%attr(-,root,root) %{_unitdir}/cynara.service.wants/license-manager-agent.service
%attr(-,root,root) %{_unitdir}/license-manager-agent.service
+
+%if "%{build_type}" == "COVERAGE"
+
+%files -n security-manager-coverage
+%manifest %{_datadir}/security-manager-tests.manifest
+%license LICENSE
+%{_bindir}/security-manager-coverage.sh
+%coverage_dir
+
+%endif
SET(TARGET_SM_TESTS "security-manager-unit-tests")
SET(TARGET_SM_PERFORMANCE_TESTS "security-manager-performance-tests")
+IF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
+ # coverage data
+ SET(COVERAGE_BUILD_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET_SM_TESTS}.dir/
+ )
+
+ # install gcno files
+ INSTALL(
+ DIRECTORY ${COVERAGE_BUILD_DIR}/
+ DESTINATION ${COVERAGE_DIR}
+ FILES_MATCHING PATTERN "*.gcno"
+ )
+
+ # install code coverage automation script
+ CONFIGURE_FILE(security-manager-coverage.sh.in security-manager-coverage.sh @ONLY)
+ INSTALL(
+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/security-manager-coverage.sh
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+
+ENDIF (CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
SET(SM_TESTS_SOURCES
${SM_TEST_SRC}/colour_log_formatter.cpp
${SM_TEST_SRC}/privilege_db_fixture.cpp
--- /dev/null
+#!/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@-@VERSION@"
+
+# create dir for the report
+mkdir $HTML_DIR
+
+# remove old gcda files
+find / -iname "*.gcda" -exec rm {} \;
+
+# launch unit tests
+security-manager-unit-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/