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