Skip to content

Commit a8a2e36

Browse files
committed
cmake: Add Python-based tests
1 parent 3d85379 commit a8a2e36

File tree

4 files changed

+77
-1
lines changed

4 files changed

+77
-1
lines changed

CMakeLists.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,15 @@ try_append_cxx_flags("-fno-extended-identifiers" TARGET core_interface SKIP_LINK
351351
# -fstack-reuse=none for all gcc builds. (Only gcc understands this flag).
352352
try_append_cxx_flags("-fstack-reuse=none" TARGET core_interface)
353353

354+
find_package(Python3 3.9 COMPONENTS Interpreter)
355+
if(Python3_EXECUTABLE)
356+
set(PYTHON_COMMAND ${Python3_EXECUTABLE})
357+
else()
358+
list(APPEND configure_warnings
359+
"Minimum required Python not found. Utils and rpcauth tests are disabled."
360+
)
361+
endif()
362+
354363
if(BUILD_TESTS)
355364
enable_testing()
356365
endif()
@@ -362,11 +371,15 @@ endif()
362371
# - https://github.com/bitcoin/bitcoin/pull/30312#issuecomment-2191235833
363372
set(CMAKE_SKIP_BUILD_RPATH TRUE)
364373
set(CMAKE_SKIP_INSTALL_RPATH TRUE)
374+
add_subdirectory(test)
375+
365376
include(cmake/crc32c.cmake)
366377
include(cmake/leveldb.cmake)
367378
include(cmake/minisketch.cmake)
368379
add_subdirectory(src)
369380

381+
include(cmake/tests.cmake)
382+
370383
message("\n")
371384
message("Configure summary")
372385
message("=================")

cmake/tests.cmake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Copyright (c) 2023-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+
if(TARGET bitcoin-util AND TARGET bitcoin-tx AND PYTHON_COMMAND)
6+
add_test(NAME util_test_runner
7+
COMMAND ${CMAKE_COMMAND} -E env BITCOINUTIL=$<TARGET_FILE:bitcoin-util> BITCOINTX=$<TARGET_FILE:bitcoin-tx> ${PYTHON_COMMAND} ${PROJECT_BINARY_DIR}/test/util/test_runner.py
8+
)
9+
endif()
10+
11+
if(PYTHON_COMMAND)
12+
add_test(NAME util_rpcauth_test
13+
COMMAND ${PYTHON_COMMAND} ${PROJECT_BINARY_DIR}/test/util/rpcauth-test.py
14+
)
15+
endif()

test/CMakeLists.txt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Copyright (c) 2023-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+
function(create_test_config)
6+
set(abs_top_srcdir ${PROJECT_SOURCE_DIR})
7+
set(abs_top_builddir ${PROJECT_BINARY_DIR})
8+
set(EXEEXT ${CMAKE_EXECUTABLE_SUFFIX})
9+
10+
macro(set_configure_variable var conf_var)
11+
if(${var})
12+
set(${conf_var}_TRUE "")
13+
else()
14+
set(${conf_var}_TRUE "#")
15+
endif()
16+
endmacro()
17+
18+
set_configure_variable(ENABLE_WALLET ENABLE_WALLET)
19+
set_configure_variable(WITH_SQLITE USE_SQLITE)
20+
set_configure_variable(WITH_BDB USE_BDB)
21+
set_configure_variable(BUILD_CLI BUILD_BITCOIN_CLI)
22+
set_configure_variable(BUILD_UTIL BUILD_BITCOIN_UTIL)
23+
set_configure_variable(BUILD_WALLET_TOOL BUILD_BITCOIN_WALLET)
24+
set_configure_variable(BUILD_DAEMON BUILD_BITCOIND)
25+
set_configure_variable(BUILD_FUZZ_BINARY ENABLE_FUZZ_BINARY)
26+
set_configure_variable(WITH_ZMQ ENABLE_ZMQ)
27+
set_configure_variable(ENABLE_EXTERNAL_SIGNER ENABLE_EXTERNAL_SIGNER)
28+
set_configure_variable(WITH_USDT ENABLE_USDT_TRACEPOINTS)
29+
30+
configure_file(config.ini.in config.ini @ONLY)
31+
endfunction()
32+
33+
create_test_config()
34+
35+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/functional)
36+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/fuzz)
37+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/util)
38+
39+
file(GLOB_RECURSE functional_tests RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} functional/*)
40+
foreach(script ${functional_tests} fuzz/test_runner.py util/rpcauth-test.py util/test_runner.py)
41+
if(CMAKE_HOST_WIN32)
42+
set(symlink)
43+
else()
44+
set(symlink SYMBOLIC)
45+
endif()
46+
file(CREATE_LINK ${CMAKE_CURRENT_SOURCE_DIR}/${script} ${CMAKE_CURRENT_BINARY_DIR}/${script} COPY_ON_ERROR ${symlink})
47+
endforeach()
48+
unset(functional_tests)

test/functional/test_runner.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ def run_tests(*, test_list, src_dir, build_dir, tmpdir, jobs=1, enable_coverage=
595595
print(f"{BOLD[1]}WARNING!{BOLD[0]} There may be insufficient free space in {tmpdir} to run the Bitcoin functional test suite. "
596596
f"Running the test suite with fewer than {min_space // (1024 * 1024)} MB of free space might cause tests to fail.")
597597

598-
tests_dir = src_dir + '/test/functional/'
598+
tests_dir = build_dir + '/test/functional/'
599599
# This allows `test_runner.py` to work from an out-of-source build directory using a symlink,
600600
# a hard link or a copy on any platform. See https://github.com/bitcoin/bitcoin/pull/27561.
601601
sys.path.append(tests_dir)

0 commit comments

Comments
 (0)