test: Pass bench exe into test framework utils
What changed, and why it matters
This commit only adds plumbing so the Bitcoin Core test framework can locate and run the existing bench_bitcoin benchmark executable during tests. It does not change any network, wallet, consensus, or cryptographic code, and it introduces no user-facing behavior.
No security action needed; review the follow-up commit referenced in the message ('required for the next commit') to confirm the bench executable is only invoked for legitimate benchmark/validation tests.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff extends the functional test framework’s binary discovery and argv helpers to include bench_bitcoin. Changes are limited to CI environment variables, CMake config generation, config.ini.in templating, and two Python helpers (test_framework.py and util.py). No runtime logic of bench_bitcoin or any node binary is modified.
Changed components
test/functional/test_framework/test_framework.pytest/functional/test_framework/util.pytest/CMakeLists.txttest/config.ini.in.github/workflows/ci.ymlInspect captured patch +17 / −0
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d7caad9a..8d94b1d6 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -320,6 +320,7 @@ jobs:
BITCOIN_BIN: '${{ github.workspace }}\build\bin\Release\bitcoin.exe'
BITCOIND: '${{ github.workspace }}\build\bin\Release\bitcoind.exe'
BITCOINCLI: '${{ github.workspace }}\build\bin\Release\bitcoin-cli.exe'
+ BITCOIN_BENCH: '${{ github.workspace }}\build\bin\Release\bench_bitcoin.exe'
BITCOINTX: '${{ github.workspace }}\build\bin\Release\bitcoin-tx.exe'
BITCOINUTIL: '${{ github.workspace }}\build\bin\Release\bitcoin-util.exe'
BITCOINWALLET: '${{ github.workspace }}\build\bin\Release\bitcoin-wallet.exe'
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index e2075346..1603ac82 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -16,6 +16,7 @@ function(create_test_config)
endmacro()
set_configure_variable(ENABLE_WALLET ENABLE_WALLET)
+ set_configure_variable(BUILD_BENCH BUILD_BENCH)
set_configure_variable(BUILD_CLI BUILD_BITCOIN_CLI)
set_configure_variable(BUILD_TX BUILD_BITCOIN_TX)
set_configure_variable(BUILD_UTIL BUILD_BITCOIN_UTIL)
diff --git a/test/config.ini.in b/test/config.ini.in
index affa2508..40b9395b 100644
--- a/test/config.ini.in
+++ b/test/config.ini.in
@@ -16,6 +16,7 @@ RPCAUTH=@abs_top_srcdir@/share/rpcauth/rpcauth.py
[components]
# Which components are enabled. These are commented out by cmake if they were disabled during configuration.
@ENABLE_WALLET_TRUE@ENABLE_WALLET=true
+@BUILD_BENCH_TRUE@BUILD_BENCH=true
@BUILD_BITCOIN_CLI_TRUE@ENABLE_CLI=true
@BUILD_BITCOIN_TX_TRUE@BUILD_BITCOIN_TX=true
@BUILD_BITCOIN_UTIL_TRUE@ENABLE_BITCOIN_UTIL=true
diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py
index c93cc728..ecc9ffa2 100755
--- a/test/functional/test_framework/test_framework.py
+++ b/test/functional/test_framework/test_framework.py
@@ -943,6 +943,11 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
if not self.is_bitcoin_chainstate_compiled():
raise SkipTest("bitcoin-chainstate has not been compiled")
+ def skip_if_no_bitcoin_bench(self):
+ """Skip the running test if bench_bitcoin has not been compiled."""
+ if not self.is_bench_compiled():
+ raise SkipTest("bench_bitcoin has not been compiled")
+
def skip_if_no_cli(self):
"""Skip the running test if bitcoin-cli has not been compiled."""
if not self.is_cli_compiled():
@@ -976,6 +981,10 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
if self.options.valgrind:
raise SkipTest("This test is not compatible with Valgrind.")
+ def is_bench_compiled(self):
+ """Checks whether bench_bitcoin was compiled."""
+ return self.config["components"].getboolean("BUILD_BENCH")
+
def is_cli_compiled(self):
"""Checks whether bitcoin-cli was compiled."""
return self.config["components"].getboolean("ENABLE_CLI")
diff --git a/test/functional/test_framework/util.py b/test/functional/test_framework/util.py
index 46e54353..0c190ee9 100644
--- a/test/functional/test_framework/util.py
+++ b/test/functional/test_framework/util.py
@@ -261,6 +261,10 @@ class Binaries:
# Add -nonamed because "bitcoin rpc" enables -named by default, but bitcoin-cli doesn't
return self._argv("rpc", self.paths.bitcoincli) + ["-nonamed"]
+ def bench_argv(self):
+ "Return argv array that should be used to invoke bench_bitcoin"
+ return self._argv("bench", self.paths.bitcoin_bench)
+
def tx_argv(self):
"Return argv array that should be used to invoke bitcoin-tx"
return self._argv("tx", self.paths.bitcointx)
@@ -301,6 +305,7 @@ def get_binary_paths(config):
binaries = {
"bitcoin": "BITCOIN_BIN",
"bitcoind": "BITCOIND",
+ "bench_bitcoin": "BITCOIN_BENCH",
"bitcoin-cli": "BITCOINCLI",
"bitcoin-util": "BITCOINUTIL",
"bitcoin-tx": "BITCOINTX",
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.