Page MenuHomePhabricator

No OneTemporary

diff --git a/cmake/modules/TestSuite.cmake b/cmake/modules/TestSuite.cmake
index 9e08031309..2e9c8d567b 100644
--- a/cmake/modules/TestSuite.cmake
+++ b/cmake/modules/TestSuite.cmake
@@ -1,39 +1,80 @@
# Allow to easily build test suites
macro(create_test_suite NAME)
- enable_testing()
set(TARGET "check-${NAME}")
- add_custom_target(${TARGET} COMMAND ${CMAKE_CTEST_COMMAND})
+ add_custom_target(${TARGET}
+ COMMENT "Running ${NAME} test suite"
+ COMMAND cmake -E echo "PASSED: ${NAME} test suite"
+ )
# If the magic target check-all exists, attach to it.
if(TARGET check-all)
add_dependencies(check-all ${TARGET})
endif()
endmacro(create_test_suite)
+set(TEST_RUNNER_TEMPLATE "${CMAKE_CURRENT_LIST_DIR}/../templates/TestRunner.cmake.in")
+function(_add_test_runner SUITE NAME COMMAND)
+ set(TARGET "test-${NAME}")
+ set(LOG "${NAME}.log")
+ set(RUNNER "${CMAKE_CURRENT_BINARY_DIR}/run-${NAME}.sh")
+ list(JOIN ARGN " " ARGS)
+
+ configure_file(
+ "${TEST_RUNNER_TEMPLATE}"
+ "${RUNNER}"
+ )
+
+ add_custom_target(${TARGET}
+ COMMAND ${RUNNER}
+ COMMENT "${SUITE}: testing ${NAME}"
+ DEPENDS
+ ${COMMAND}
+ ${RUNNER}
+ )
+ add_dependencies("check-${SUITE}" ${TARGET})
+endfunction()
+
function(add_test_to_suite SUITE NAME)
add_executable(${NAME} EXCLUDE_FROM_ALL ${ARGN})
- add_test(${NAME} ${NAME})
- add_dependencies("check-${SUITE}" ${NAME})
+ _add_test_runner(${SUITE} ${NAME} ${NAME})
endfunction(add_test_to_suite)
function(add_boost_unit_tests_to_suite SUITE NAME)
- add_test_to_suite(${SUITE} ${NAME} ${ARGN})
+ cmake_parse_arguments(ARG
+ ""
+ ""
+ "TESTS"
+ ${ARGN}
+ )
+
+ add_executable(${NAME} EXCLUDE_FROM_ALL ${ARG_UNPARSED_ARGUMENTS})
+ add_dependencies("check-${SUITE}" ${NAME})
+
+ foreach(_test_source ${ARG_TESTS})
+ target_sources(${NAME} PRIVATE "${_test_source}")
+ get_filename_component(_test_name "${_test_source}" NAME_WE)
+ _add_test_runner(
+ ${SUITE}
+ ${_test_name}
+ ${NAME} -t "${_test_name}"
+ )
+ endforeach()
find_package(Boost 1.58 REQUIRED unit_test_framework)
target_link_libraries(${NAME} Boost::unit_test_framework)
# We need to detect if the BOOST_TEST_DYN_LINK flag is required
include(CheckCXXSourceCompiles)
set(CMAKE_REQUIRED_LIBRARIES Boost::unit_test_framework)
check_cxx_source_compiles("
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
" BOOST_TEST_DYN_LINK)
if(BOOST_TEST_DYN_LINK)
target_compile_definitions(${NAME} PRIVATE BOOST_TEST_DYN_LINK)
endif(BOOST_TEST_DYN_LINK)
endfunction(add_boost_unit_tests_to_suite)
diff --git a/cmake/templates/TestRunner.cmake.in b/cmake/templates/TestRunner.cmake.in
new file mode 100755
index 0000000000..6da59dceee
--- /dev/null
+++ b/cmake/templates/TestRunner.cmake.in
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+"./${COMMAND}" ${ARGS} > "${LOG}" 2>&1 || (cat "${LOG}" && exit 1)
diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt
index c118982bae..d5eec8eaa4 100644
--- a/src/test/CMakeLists.txt
+++ b/src/test/CMakeLists.txt
@@ -1,191 +1,193 @@
# Copyright (c) 2018 The Bitcoin developers
project(bitcoin-test)
option(TEST_WITH_UPGRADE_ACTIVATED "Run unit tests with the next upgrade activated in addition to regular tests" OFF)
# Process json files.
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/data")
function(gen_json_header NAME)
set(HEADERS "")
foreach(f ${ARGN})
set(h "${CMAKE_CURRENT_BINARY_DIR}/${f}.h")
# Get the proper name for the test variable.
get_filename_component(TEST_NAME ${f} NAME_WE)
add_custom_command(OUTPUT ${h}
COMMAND
"${PYTHON_EXECUTABLE}"
"${CMAKE_CURRENT_SOURCE_DIR}/data/generate_header.py"
"${TEST_NAME}"
"${CMAKE_CURRENT_SOURCE_DIR}/${f}" > ${h}
MAIN_DEPENDENCY ${f}
DEPENDS
"data/generate_header.py"
VERBATIM
)
list(APPEND HEADERS ${h})
endforeach(f)
set(${NAME} "${HEADERS}" PARENT_SCOPE)
endfunction()
gen_json_header(JSON_HEADERS
data/base58_encode_decode.json
data/blockfilters.json
data/key_io_valid.json
data/key_io_invalid.json
data/script_tests.json
data/sighash.json
data/tx_invalid.json
data/tx_valid.json
)
include(TestSuite)
create_test_suite(bitcoin)
add_dependencies(check check-bitcoin)
add_boost_unit_tests_to_suite(bitcoin test_bitcoin
- activation_tests.cpp
- addrman_tests.cpp
- allocator_tests.cpp
- amount_tests.cpp
- arith_uint256_tests.cpp
- avalanche_tests.cpp
- base32_tests.cpp
- base58_tests.cpp
- base64_tests.cpp
- bip32_tests.cpp
- bitmanip_tests.cpp
- blockchain_tests.cpp
- blockcheck_tests.cpp
- blockencodings_tests.cpp
- blockfilter_tests.cpp
- blockindex_tests.cpp
- blockstatus_tests.cpp
- bloom_tests.cpp
- bswap_tests.cpp
- cashaddr_tests.cpp
- cashaddrenc_tests.cpp
- checkdatasig_tests.cpp
- checkpoints_tests.cpp
- checkqueue_tests.cpp
- coins_tests.cpp
- compress_tests.cpp
- config_tests.cpp
- core_io_tests.cpp
- crypto_tests.cpp
- cuckoocache_tests.cpp
- dbwrapper_tests.cpp
- denialofservice_tests.cpp
- descriptor_tests.cpp
- dstencode_tests.cpp
- excessiveblock_tests.cpp
- feerate_tests.cpp
- finalization_tests.cpp
- flatfile_tests.cpp
- getarg_tests.cpp
- hash_tests.cpp
- inv_tests.cpp
jsonutil.cpp
- key_io_tests.cpp
- key_tests.cpp
- lcg_tests.cpp
- limitedmap_tests.cpp
- mempool_tests.cpp
- merkle_tests.cpp
- merkleblock_tests.cpp
- miner_tests.cpp
- monolith_opcodes_tests.cpp
- multisig_tests.cpp
- net_tests.cpp
- netbase_tests.cpp
- pmt_tests.cpp
- policyestimator_tests.cpp
- pow_tests.cpp
- prevector_tests.cpp
- radix_tests.cpp
- raii_event_tests.cpp
- random_tests.cpp
- rcu_tests.cpp
- reverselock_tests.cpp
- rpc_tests.cpp
- rpc_server_tests.cpp
- rwcollection_tests.cpp
- sanity_tests.cpp
- scheduler_tests.cpp
- schnorr_tests.cpp
- script_bitfield_tests.cpp
- script_commitment_tests.cpp
- script_p2sh_tests.cpp
- script_standard_tests.cpp
- script_tests.cpp
scriptflags.cpp
- scriptnum_tests.cpp
- serialize_tests.cpp
- sigcache_tests.cpp
- sigencoding_tests.cpp
- sighash_tests.cpp
- sighashtype_tests.cpp
- sigopcount_tests.cpp
sigutil.cpp
- skiplist_tests.cpp
- streams_tests.cpp
- sync_tests.cpp
test_bitcoin.cpp
test_bitcoin_main.cpp
- timedata_tests.cpp
- torcontrol_tests.cpp
- transaction_tests.cpp
- txindex_tests.cpp
- txvalidation_tests.cpp
- txvalidationcache_tests.cpp
- uint256_tests.cpp
- undo_tests.cpp
- util_tests.cpp
- validation_block_tests.cpp
- validation_tests.cpp
- work_comparator_tests.cpp
-
- # RPC Tests
- ../rpc/test/server_tests.cpp
# Tests generated from JSON
${JSON_HEADERS}
+
+ TESTS
+ activation_tests.cpp
+ addrman_tests.cpp
+ allocator_tests.cpp
+ amount_tests.cpp
+ arith_uint256_tests.cpp
+ avalanche_tests.cpp
+ base32_tests.cpp
+ base58_tests.cpp
+ base64_tests.cpp
+ bip32_tests.cpp
+ bitmanip_tests.cpp
+ blockchain_tests.cpp
+ blockcheck_tests.cpp
+ blockencodings_tests.cpp
+ blockfilter_tests.cpp
+ blockindex_tests.cpp
+ blockstatus_tests.cpp
+ bloom_tests.cpp
+ bswap_tests.cpp
+ cashaddr_tests.cpp
+ cashaddrenc_tests.cpp
+ checkdatasig_tests.cpp
+ checkpoints_tests.cpp
+ checkqueue_tests.cpp
+ coins_tests.cpp
+ compress_tests.cpp
+ config_tests.cpp
+ core_io_tests.cpp
+ crypto_tests.cpp
+ cuckoocache_tests.cpp
+ dbwrapper_tests.cpp
+ denialofservice_tests.cpp
+ descriptor_tests.cpp
+ dstencode_tests.cpp
+ excessiveblock_tests.cpp
+ feerate_tests.cpp
+ finalization_tests.cpp
+ flatfile_tests.cpp
+ getarg_tests.cpp
+ hash_tests.cpp
+ inv_tests.cpp
+ key_io_tests.cpp
+ key_tests.cpp
+ lcg_tests.cpp
+ limitedmap_tests.cpp
+ mempool_tests.cpp
+ merkle_tests.cpp
+ merkleblock_tests.cpp
+ miner_tests.cpp
+ monolith_opcodes_tests.cpp
+ multisig_tests.cpp
+ net_tests.cpp
+ netbase_tests.cpp
+ pmt_tests.cpp
+ policyestimator_tests.cpp
+ pow_tests.cpp
+ prevector_tests.cpp
+ radix_tests.cpp
+ raii_event_tests.cpp
+ random_tests.cpp
+ rcu_tests.cpp
+ reverselock_tests.cpp
+ rpc_tests.cpp
+ rpc_server_tests.cpp
+ rwcollection_tests.cpp
+ sanity_tests.cpp
+ scheduler_tests.cpp
+ schnorr_tests.cpp
+ script_bitfield_tests.cpp
+ script_commitment_tests.cpp
+ script_p2sh_tests.cpp
+ script_standard_tests.cpp
+ script_tests.cpp
+ scriptnum_tests.cpp
+ serialize_tests.cpp
+ sigcache_tests.cpp
+ sigencoding_tests.cpp
+ sighash_tests.cpp
+ sighashtype_tests.cpp
+ sigopcount_tests.cpp
+ skiplist_tests.cpp
+ streams_tests.cpp
+ sync_tests.cpp
+ timedata_tests.cpp
+ torcontrol_tests.cpp
+ transaction_tests.cpp
+ txindex_tests.cpp
+ txvalidation_tests.cpp
+ txvalidationcache_tests.cpp
+ uint256_tests.cpp
+ undo_tests.cpp
+ util_tests.cpp
+ validation_block_tests.cpp
+ validation_tests.cpp
+ work_comparator_tests.cpp
+
+ # RPC Tests
+ ../rpc/test/server_tests.cpp
)
if (TEST_WITH_UPGRADE_ACTIVATED)
add_test(
NAME
"bitcoin-upgrade-activated"
COMMAND
"test_bitcoin"
"--"
"-gravitonactivationtime=1573819200"
)
endif()
target_link_libraries(test_bitcoin rpcclient server)
if(TARGET bitcoinconsensus-shared)
target_link_libraries(test_bitcoin bitcoinconsensus-shared)
else()
target_link_libraries(test_bitcoin bitcoinconsensus)
endif()
if(BUILD_BITCOIN_WALLET)
target_sources(test_bitcoin
PRIVATE
../wallet/test/accounting_tests.cpp
../wallet/test/coinselector_tests.cpp
../wallet/test/psbt_wallet_tests.cpp
../wallet/test/wallet_test_fixture.cpp
../wallet/test/wallet_tests.cpp
../wallet/test/walletdb_tests.cpp
../wallet/test/wallet_crypto_tests.cpp
)
endif()
add_executable(test_bitcoin_fuzzy EXCLUDE_FROM_ALL
test_bitcoin_fuzzy.cpp
)
target_link_libraries(test_bitcoin_fuzzy server)

File Metadata

Mime Type
text/x-diff
Expires
Thu, May 22, 03:24 (15 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5866372
Default Alt Text
(9 KB)

Event Timeline