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_CCOV "-std=c11 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
-SET(CMAKE_CXX_FLAGS_CCOV "-std=c++17 -O0 -ggdb --coverage -Wp,-U_FORTIFY_SOURCE")
+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")
SET(CMAKE_POSITION_INDEPENDENT_CODE "True")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie")
SET(PRJ_SRC_PATH ${PROJECT_SOURCE_DIR}/srcs)
SET(PRJ_TEST_PATH ${PROJECT_SOURCE_DIR}/tests)
+IF(NOT DEFINED COVERAGE_DIR)
+ SET(COVERAGE_DIR "${SHARE_INSTALL_PREFIX}/${PROJECT_NAME}-coverage")
+ENDIF(NOT DEFINED COVERAGE_DIR)
+
################# common configurations for srcs and test #####################
PKG_CHECK_MODULES(PROJECT_DEPS
REQUIRED
BuildRequires: pkgconfig(libwebsockets)
BuildRequires: pkgconfig(capi-network-bluetooth)
BuildRequires: pkgconfig(glib-2.0)
+
%if 0%{?force_openssl11}
BuildRequires: pkgconfig(openssl1.1)
%else
%description manual-tests
Adaptation Layer of Web Authentication Service for BLE Authenticator (manual test)
+%if "%build_type" == "COVERAGE"
+%package coverage
+Summary: Adaptation Layer of Web Authentication Service for BLE Authenticator (code coverage data)
+License: Apache-2.0
+Group: Security/Development
+BuildRequires: lcov
+Requires: %{name}-unit-tests = %{version}-%{release}
+Requires: %{name}-debugsource = %{version}-%{release}
+Requires: lcov
+Requires: gcc
+
+%description coverage
+Adaptation Layer of Web Authentication Service for BLE Authenticator (code coverage data)
+%endif
+
%prep
%setup -q
+%global coverage_dir %{_datadir}/%{name}-coverage
+
%build
%cmake . -DCMAKE_BUILD_TYPE=%{build_type} \
-DPROJECT_NAME=%name \
-DVERSION_MAJOR=%version_major \
-DVERSION_MINOR=%version_minor \
-DVERSION_PATCH=%version_patch \
- -DBIN_DIR=%{_bindir}
+ -DBIN_DIR=%{_bindir} \
+ -DCOVERAGE_DIR=%{coverage_dir}
make %{?jobs:-j%jobs}
%{_bindir}/%{name}-manual-tests
%{_bindir}/%{name}-manual-tunnel-tests
%{_bindir}/%{name}-manual-tunnel-tests.sh
+
+%if "%build_type" == "COVERAGE"
+%files -n %{name}-coverage
+%{_bindir}/%{name}-coverage.sh
+%coverage_dir
+%endif
${OPENSSL_DEP}
)
+IF(CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+ # coverage data
+ SET(COVERAGE_BUILD_DIR
+ ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${TARGET_WEBAUTHN_BLE_UNIT_TESTS}.dir/
+ )
+
+ # install gcno files
+ INSTALL(
+ DIRECTORY ${COVERAGE_BUILD_DIR}/
+ DESTINATION ${COVERAGE_DIR}
+ FILES_MATCHING PATTERN "*.gcno"
+ )
+
+ # install code coverage automation script
+ CONFIGURE_FILE(${PROJECT_NAME}-coverage.sh.in ${PROJECT_NAME}-coverage.sh @ONLY)
+ INSTALL(
+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-coverage.sh
+ DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+ENDIF(CMAKE_BUILD_TYPE MATCHES "COVERAGE")
+
INCLUDE_DIRECTORIES(SYSTEM ${TESTS_DEPS_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${TINYCBOR_DIR}/src/)
--- /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
+webauthn-ble-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
+
+# Due to mismatch in the version of gcc/gcov and lcov, we need to ignore few errors
+IGNORE_ERRORS=" --ignore-errors unused,unused \
+ --ignore-errors empty,empty \
+ --ignore-errors mismatch,mismatch \
+ --ignore-errors gcov,gcov "
+
+lcov $IGNORE_ERRORS --no-external -c -d "@COVERAGE_DIR@" -b "@CMAKE_BINARY_DIR@" -o $REPORT 2>$STDERR
+lcov $IGNORE_ERRORS -r $REPORT "@CMAKE_BINARY_DIR@/tests/*" -o $REPORT
+lcov $IGNORE_ERRORS -r $REPORT "@CMAKE_BINARY_DIR@/srcs/tinycbor/*" -o $REPORT
+
+# Let's skip lcov warning
+# geninfo: WARNING: using JSON module "JSON::PP" - which is much slower than some alternatives.
+# Consider installing one of JSON::XS or Cpanel::JSON::XS
+sed -i '/WARNING/d' $STDERR
+
+# check errors
+if [ -s $STDERR ]
+then
+ echo "Errors detected (see $STDERR). Aborting."
+ exit 1
+fi
+
+# html
+genhtml $REPORT --output-directory $HTML_DIR/