Coverage.cmake raw
1 # Copyright (c) 2024-present The Bitcoin Core developers
2 # Distributed under the MIT software license, see the accompanying
3 # file COPYING or https://opensource.org/license/mit/.
4
5 include(${CMAKE_CURRENT_LIST_DIR}/CoverageInclude.cmake)
6
7 set(functional_test_runner test/functional/test_runner.py)
8 if(EXTENDED_FUNCTIONAL_TESTS)
9 list(APPEND functional_test_runner --extended)
10 endif()
11 if(DEFINED JOBS)
12 list(APPEND CMAKE_CTEST_COMMAND -j ${JOBS})
13 list(APPEND functional_test_runner -j ${JOBS})
14 endif()
15
16 execute_process(
17 COMMAND ${CMAKE_CTEST_COMMAND} --build-config Coverage
18 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
19 COMMAND_ERROR_IS_FATAL ANY
20 )
21 execute_process(
22 COMMAND ${LCOV_COMMAND} --capture --directory src --test-name test_bitcoin --output-file test_bitcoin.info
23 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
24 COMMAND_ERROR_IS_FATAL ANY
25 )
26 execute_process(
27 COMMAND ${LCOV_COMMAND} --zerocounters --directory src
28 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
29 COMMAND_ERROR_IS_FATAL ANY
30 )
31 execute_process(
32 COMMAND ${LCOV_FILTER_COMMAND} test_bitcoin.info test_bitcoin_filtered.info
33 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
34 COMMAND_ERROR_IS_FATAL ANY
35 )
36 execute_process(
37 COMMAND ${LCOV_COMMAND} --add-tracefile test_bitcoin_filtered.info --output-file test_bitcoin_filtered.info
38 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
39 COMMAND_ERROR_IS_FATAL ANY
40 )
41 execute_process(
42 COMMAND ${LCOV_COMMAND} --add-tracefile baseline_filtered.info --add-tracefile test_bitcoin_filtered.info --output-file test_bitcoin_coverage.info
43 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
44 COMMAND_ERROR_IS_FATAL ANY
45 )
46 execute_process(
47 COMMAND ${GENHTML_COMMAND} test_bitcoin_coverage.info --output-directory test_bitcoin.coverage
48 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
49 COMMAND_ERROR_IS_FATAL ANY
50 )
51
52 execute_process(
53 COMMAND ${functional_test_runner}
54 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
55 COMMAND_ERROR_IS_FATAL ANY
56 )
57 execute_process(
58 COMMAND ${LCOV_COMMAND} --capture --directory src --test-name functional-tests --output-file functional_test.info
59 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
60 COMMAND_ERROR_IS_FATAL ANY
61 )
62 execute_process(
63 COMMAND ${LCOV_COMMAND} --zerocounters --directory src
64 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
65 COMMAND_ERROR_IS_FATAL ANY
66 )
67 execute_process(
68 COMMAND ${LCOV_FILTER_COMMAND} functional_test.info functional_test_filtered.info
69 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
70 COMMAND_ERROR_IS_FATAL ANY
71 )
72 execute_process(
73 COMMAND ${LCOV_COMMAND} --add-tracefile functional_test_filtered.info --output-file functional_test_filtered.info
74 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
75 COMMAND_ERROR_IS_FATAL ANY
76 )
77 execute_process(
78 COMMAND ${LCOV_COMMAND} --add-tracefile baseline_filtered.info --add-tracefile test_bitcoin_filtered.info --add-tracefile functional_test_filtered.info --output-file total_coverage.info
79 COMMAND ${GREP_EXECUTABLE} "%"
80 COMMAND ${AWK_EXECUTABLE} "{ print substr($3,2,50) \"/\" $5 }"
81 OUTPUT_FILE coverage_percent.txt
82 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
83 COMMAND_ERROR_IS_FATAL ANY
84 )
85 execute_process(
86 COMMAND ${GENHTML_COMMAND} total_coverage.info --output-directory total.coverage
87 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
88 COMMAND_ERROR_IS_FATAL ANY
89 )
90