+%{!?build_type:%global build_type RELEASE}
+
Name: device-certificate-manager
Summary: Device Certificate Manager daemon and libraries
Version: 2.0
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
%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.
%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}
%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
# @author Dariusz Michaluk <d.michaluk@samsung.com>
# @author Jaroslaw Pelczar <j.pelczar@samsung.com>
+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)
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
--- /dev/null
+#!/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/