/ cmake / script / Coverage.cmake
Coverage.cmake
 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  )