summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2022-03-11 18:29:38 +0100
committerToni Uhlig <matzeton@googlemail.com>2022-03-11 18:29:38 +0100
commitf884a538ce79f70d44bdaaa9cb5ad2801dc36196 (patch)
tree95711638fbd34265e65ddf1d17e7c40398a13996
parent41757ecf1cbcbcd890c1ab7e08995aaffe031752 (diff)
Code coverage generation using LCOV.
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
-rw-r--r--.github/workflows/build.yml5
-rw-r--r--.gitlab-ci.yml6
-rw-r--r--CMakeLists.txt16
-rwxr-xr-xscripts/code-coverage.sh8
4 files changed, 32 insertions, 3 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 786c30eb1..a2b05a73b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -36,7 +36,7 @@ jobs:
- name: Configure nDPI
run: |
mkdir build && cd build
- env CMAKE_C_FLAGS='-Werror' cmake .. -DBUILD_EXAMPLES=ON -DBUILD_NDPI=ON -DENABLE_SANITIZER=ON -DENABLE_ZLIB=ON ${{ matrix.ndpid_gcrypt }}
+ env CMAKE_C_FLAGS='-Werror' cmake .. -DENABLE_COVERAGE=ON -DBUILD_EXAMPLES=ON -DBUILD_NDPI=ON -DENABLE_SANITIZER=ON -DENABLE_ZLIB=ON ${{ matrix.ndpid_gcrypt }}
- name: Build nDPI
run: |
make -C build all VERBOSE=1
@@ -52,6 +52,9 @@ jobs:
run: |
make -C ./build daemon VERBOSE=1
make -C ./build daemon VERBOSE=1
+ - name: Coverage
+ run: |
+ make -C ./build coverage
- name: Dist
run: |
make -C ./build dist
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6d7e46aa0..cd6c014f4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,7 +23,7 @@ build_and_test:
# static linked build
- mkdir build-cmake-submodule
- cd build-cmake-submodule
- - env CMAKE_C_FLAGS='-Werror' cmake .. -DBUILD_EXAMPLES=ON -DBUILD_NDPI=ON -DENABLE_SANITIZER=ON -DENABLE_ZLIB=ON
+ - env CMAKE_C_FLAGS='-Werror' cmake .. -DENABLE_COVERAGE=ON -DBUILD_EXAMPLES=ON -DBUILD_NDPI=ON -DENABLE_SANITIZER=ON -DENABLE_ZLIB=ON
- make libnDPI
- tree libnDPI
- make install VERBOSE=1 DESTDIR="$(realpath ../_install)"
@@ -37,7 +37,7 @@ build_and_test:
- mkdir build
- cd build
- export PKG_CONFIG_PATH="$(realpath ../build-cmake-submodule/libnDPI/lib/pkgconfig)"
- - env CMAKE_C_FLAGS='-Werror' cmake .. -DBUILD_EXAMPLES=ON -DENABLE_SANITIZER=ON -DENABLE_MEMORY_PROFILING=ON -DENABLE_ZLIB=ON
+ - env CMAKE_C_FLAGS='-Werror' cmake .. -DENABLE_COVERAGE=ON -DBUILD_EXAMPLES=ON -DENABLE_SANITIZER=ON -DENABLE_MEMORY_PROFILING=ON -DENABLE_ZLIB=ON
- make all VERBOSE=1
- cd ..
- ./build/nDPId-test || test $? -eq 1
@@ -45,6 +45,8 @@ build_and_test:
# dameon start/stop test
- NUSER=nobody make -C ./build daemon VERBOSE=1
- NUSER=nobody make -C ./build daemon VERBOSE=1
+ # generate coverage report
+ - make -C ./build coverage
# make dist
- make -C ./build dist
artifacts:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9fadb2a95..56d3c2c4c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -40,6 +40,7 @@ else()
set(LIBM_LIB "")
endif()
+option(ENABLE_COVERAGE "Generate a code coverage report using lcov/genhtml." OFF)
option(ENABLE_SANITIZER "Enable ASAN/LSAN/UBSAN." OFF)
option(ENABLE_SANITIZER_THREAD "Enable TSAN (does not work together with ASAN)." OFF)
option(ENABLE_MEMORY_PROFILING "Enable dynamic memory tracking." OFF)
@@ -110,6 +111,16 @@ if(BUILD_NDPI AND NDPI_WITH_GCRYPT)
endif()
endif()
+if(ENABLE_COVERAGE)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
+ add_custom_target(coverage)
+ add_custom_command(
+ TARGET coverage
+ COMMAND "${CMAKE_SOURCE_DIR}/scripts/code-coverage.sh"
+ DEPENDS nDPId nDPIsrvd nDPId-test
+ )
+endif()
if(ENABLE_SANITIZER)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=undefined -fno-sanitize=alignment -fsanitize=enum -fsanitize=leak")
endif()
@@ -303,6 +314,10 @@ if(BUILD_EXAMPLES)
"${pkgcfg_lib_PCRE_pcre}" "${pkgcfg_lib_MAXMINDDB_maxminddb}"
"${GCRYPT_LIBRARY}" "${GCRYPT_ERROR_LIBRARY}" "${PCAP_LIBRARY}")
+ if(ENABLE_COVERAGE)
+ add_dependencies(coverage nDPIsrvd-collectd nDPIsrvd-captured nDPIsrvd-json-dump nDPIsrvd-simple)
+ endif()
+
install(TARGETS nDPIsrvd-collectd nDPIsrvd-captured nDPIsrvd-json-dump nDPIsrvd-simple DESTINATION bin)
endif()
@@ -337,6 +352,7 @@ message(STATUS "CROSS_COMPILE_TRIPLET....: ${CROSS_COMPILE_TRIPLET}")
message(STATUS "CMAKE_BUILD_TYPE.........: ${CMAKE_BUILD_TYPE}")
message(STATUS "CMAKE_C_FLAGS............: ${CMAKE_C_FLAGS}")
message(STATUS "NDPID_DEFS...............: ${NDPID_DEFS}")
+message(STATUS "ENABLE_COVERAGE..........: ${ENABLE_COVERAGE}")
message(STATUS "ENABLE_SANITIZER.........: ${ENABLE_SANITIZER}")
message(STATUS "ENABLE_SANITIZER_THREAD..: ${ENABLE_SANITIZER_THREAD}")
message(STATUS "ENABLE_MEMORY_PROFILING..: ${ENABLE_MEMORY_PROFILING}")
diff --git a/scripts/code-coverage.sh b/scripts/code-coverage.sh
new file mode 100755
index 000000000..37038bd2a
--- /dev/null
+++ b/scripts/code-coverage.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+set -e
+
+cd "$(dirname "${0}")/.."
+mkdir -p coverage_report
+lcov --directory . --capture --output-file lcov.info
+genhtml -o coverage_report lcov.info