bitcoin/test/functional
Greg Sanders 06df14ba75 test: add more TRUC reorg coverge 2025-09-29 16:25:54 -04:00
..
data test: add block 2016 to mock mainnet 2025-09-20 21:36:39 +02:00
mocks test: detect no external signer connected 2025-06-13 09:40:23 +02:00
test_framework Merge bitcoin/bitcoin#33230: cli: Handle arguments that can be either JSON or string 2025-09-25 15:50:56 -04:00
.gitignore build: Remove Autotools-based build system 2024-08-30 21:31:39 +01:00
README.md scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
combine_logs.py refactor test: Cleaner combine_logs.py logic 2024-12-06 15:34:37 +01:00
combined_log_template.html
create_cache.py test: fix RPC coverage check 2025-07-26 10:21:41 +01:00
example_test.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
feature_abortnode.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_addrman.py scripted-diff: Rename `PACKAGE_*` variables to `CLIENT_*` 2024-10-28 12:36:19 +00:00
feature_anchors.py test: Avoid F541 (f-string without any placeholders) 2024-12-05 08:39:09 +01:00
feature_asmap.py Fix nonsensical -noasmap behavior 2025-02-13 12:30:15 -05:00
feature_assumeutxo.py test: Remove convert_to_json_for_cli 2025-09-23 12:58:00 -07:00
feature_assumevalid.py assumevalid: log every script validation state change 2025-08-08 16:47:34 -07:00
feature_bind_extra.py net: Prevent node from binding to the same CService 2025-09-04 23:40:02 -07:00
feature_bind_port_discover.py test: create assert_not_equal util and add to where imports are needed 2025-04-01 08:39:24 -04:00
feature_bind_port_externalip.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_bip68_sequence.py test: rename CBlockHeader `.hash` -> `.hash_hex` for consistency 2025-07-17 12:45:35 +02:00
feature_block.py scripted-diff: validation: rename mandatory errors into block errors 2025-08-13 11:05:54 -04:00
feature_blocksdir.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_blocksxor.py test: remove unnecessary -datacarriersize args from tests 2025-05-30 10:14:18 -04:00
feature_cltv.py scripted-diff: validation: rename mandatory errors into block errors 2025-08-13 11:05:54 -04:00
feature_coinstatsindex.py test: Remove convert_to_json_for_cli 2025-09-23 12:58:00 -07:00
feature_coinstatsindex_compatibility.py test: Add coinstatsindex compatibility test 2025-09-07 17:21:19 +02:00
feature_config_args.py log: use std::source_location in place of __func__, __FILE__, __LINE__ 2025-07-09 09:12:59 -04:00
feature_csv_activation.py scripted-diff: validation: rename mandatory errors into block errors 2025-08-13 11:05:54 -04:00
feature_dbcrash.py Merge bitcoin/bitcoin#29500: test: create assert_not_equal util 2025-04-01 13:52:41 -04:00
feature_dersig.py scripted-diff: validation: rename mandatory errors into block errors 2025-08-13 11:05:54 -04:00
feature_dirsymlinks.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_discover.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_fastprune.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_fee_estimation.py Merge bitcoin/bitcoin#32463: test: fix an incorrect `feature_fee_estimation.py` subtest 2025-07-03 16:45:29 -07:00
feature_filelock.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
feature_framework_miniwallet.py Merge bitcoin/bitcoin#30226: test: add validation for gettxout RPC response 2025-02-05 13:30:51 +00:00
feature_framework_startup_failures.py qa: Improve suppressed errors output 2025-05-16 09:20:51 +02:00
feature_framework_unit_tests.py test: introduce output amount (de)compression routines 2025-03-04 12:50:17 -05:00
feature_help.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_includeconf.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_index_prune.py test: Remove convert_to_json_for_cli 2025-09-23 12:58:00 -07:00
feature_init.py index: Fix coinstatsindex overflow issue 2025-09-07 17:21:00 +02:00
feature_loadblock.py test: Avoid F541 (f-string without any placeholders) 2024-12-05 08:39:09 +01:00
feature_logging.py test: `-debug=0` and `-debug=none` behave similarly to `-nodebug` 2025-02-11 12:01:29 +01:00
feature_maxtipage.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_maxuploadtarget.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
feature_minchainwork.py test: create assert_not_equal util and add to where imports are needed 2025-04-01 08:39:24 -04:00
feature_notifications.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
feature_nulldummy.py scripted-diff: validation: rename mandatory errors into block errors 2025-08-13 11:05:54 -04:00
feature_port.py test: add functional test for -port behavior 2024-11-15 16:05:32 -05:00
feature_posix_fs_permissions.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_presegwit_node_upgrade.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_proxy.py config: allow setting -proxy per network 2025-05-13 12:09:40 +02:00
feature_pruning.py log: Remove function name from init logs 2025-07-25 09:50:24 +02:00
feature_rbf.py doc fixups for 33106 2025-08-15 13:36:47 -04:00
feature_reindex.py refactor: move read_xor_key() to TestNode 2024-08-25 08:42:38 -04:00
feature_reindex_init.py test: Check that the GUI interactive reindex works 2025-07-17 20:20:00 +02:00
feature_reindex_readonly.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_remove_pruned_files_on_startup.py test: Check that reindex with prune wipes blk files 2025-01-22 08:52:04 +01:00
feature_segwit.py validation: only check input scripts once 2025-08-09 05:06:01 +10:00
feature_settings.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
feature_shutdown.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_signet.py test: avoid disk space warning for non-regtest 2025-03-15 16:07:07 +01:00
feature_startupnotify.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_taproot.py rpc: Support version 3 transaction creation 2025-08-15 11:24:46 -04:00
feature_uacomment.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_unsupported_utxo_db.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
feature_utxo_set_hash.py test: avoid unneeded (w)txid hex -> integer conversions 2025-06-11 00:52:25 +02:00
feature_versionbits_warning.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
interface_bitcoin_cli.py test: add coverage for -netinfo header and local services 2025-08-04 15:33:25 -06:00
interface_http.py tests: Expand HTTP coverage to assert libevent behavior 2025-05-21 10:47:23 -04:00
interface_ipc.py test: Avoid interface_ipc.py Duplicate ID errors 2025-09-17 12:34:07 -04:00
interface_rest.py Merge bitcoin/bitcoin#32540: rest: fetch spent transaction outputs by blockhash 2025-06-27 14:44:41 -07:00
interface_rpc.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
interface_usdt_coinselection.py test: add skip_if_running_under_valgrind() 2025-05-14 10:55:26 +01:00
interface_usdt_mempool.py scripted-diff: validation: rename mandatory errors into block errors 2025-08-13 11:05:54 -04:00
interface_usdt_net.py test: add skip_if_running_under_valgrind() 2025-05-14 10:55:26 +01:00
interface_usdt_utxocache.py test: add skip_if_running_under_valgrind() 2025-05-14 10:55:26 +01:00
interface_usdt_validation.py test: add skip_if_running_under_valgrind() 2025-05-14 10:55:26 +01:00
interface_zmq.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
mempool_accept.py Merge bitcoin/bitcoin#33106: policy: lower the default blockmintxfee, incrementalrelayfee, minrelaytxfee 2025-08-15 10:39:16 +01:00
mempool_accept_wtxid.py test: refactor out same-txid-diff-wtxid tx to reuse in other tests 2025-06-16 14:48:17 +05:30
mempool_compatibility.py test: remove mempool.dat before copying 2025-06-25 21:06:10 +01:00
mempool_datacarrier.py doc: unify `datacarriersize` warning with release notes 2025-08-19 20:34:07 -07:00
mempool_dust.py func: cleanup test_dustrelay comments 2024-11-20 13:44:49 -05:00
mempool_ephemeral_dust.py [policy] lower default minrelaytxfee and incrementalrelayfee to 100sat/kvB 2025-08-11 17:07:43 -04:00
mempool_expiry.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
mempool_limit.py [policy] lower default minrelaytxfee and incrementalrelayfee to 100sat/kvB 2025-08-11 17:07:43 -04:00
mempool_package_limits.py test: remove unnecessary -datacarriersize args from tests 2025-05-30 10:14:18 -04:00
mempool_package_onemore.py scripted-diff: test: rename CTransaction `.getwtxid()` -> `wtxid_hex` for consistency 2025-06-11 00:52:25 +02:00
mempool_package_rbf.py test fixups 2025-08-15 13:36:47 -04:00
mempool_packages.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
mempool_persist.py scripted-diff: test: remove 'descriptors=True' argument for `createwallet` calls 2025-05-17 18:14:24 +02:00
mempool_reorg.py test: avoid unneeded (w)txid hex -> integer conversions 2025-06-11 00:52:25 +02:00
mempool_resurrect.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
mempool_sigoplimit.py qa: functional test a transaction running into the legacy sigop limit 2025-07-17 09:18:30 -04:00
mempool_spend_coinbase.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
mempool_truc.py test: add more TRUC reorg coverge 2025-09-29 16:25:54 -04:00
mempool_unbroadcast.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
mempool_updatefromblock.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
mining_basic.py test fixups 2025-08-15 13:36:47 -04:00
mining_getblocktemplate_longpoll.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
mining_mainnet.py rpc: fix getblock(header) returns target for tip 2025-09-20 21:36:39 +02:00
mining_prioritisetransaction.py test: remove unnecessary -datacarriersize args from tests 2025-05-30 10:14:18 -04:00
mining_template_verification.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
p2p_1p1c_network.py [policy] lower default minrelaytxfee and incrementalrelayfee to 100sat/kvB 2025-08-11 17:07:43 -04:00
p2p_add_connections.py Merge bitcoin/bitcoin#30463: qa: Functional test improvements 2024-07-22 12:08:32 +01:00
p2p_addr_relay.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_addrfetch.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_addrv2_relay.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_block_sync.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
p2p_blockfilters.py test: create assert_not_equal util and add to where imports are needed 2025-04-01 08:39:24 -04:00
p2p_blocksonly.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_compactblocks.py test: send duplicate blocktxn message in p2p_compactblocks.py 2025-09-08 17:03:24 -04:00
p2p_compactblocks_blocksonly.py test: avoid unneeded block header hash -> integer conversions 2025-07-17 12:45:39 +02:00
p2p_compactblocks_hb.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
p2p_disconnect_ban.py test: Enable various tests for usage with cli 2025-06-23 17:42:55 -04:00
p2p_dns_seeds.py test: avoid generating non-loopback traffic from p2p_dns_seeds.py 2025-01-14 09:21:24 +01:00
p2p_eviction.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_feefilter.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
p2p_filter.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_fingerprint.py test: rename CBlockHeader `.hash` -> `.hash_hex` for consistency 2025-07-17 12:45:35 +02:00
p2p_getaddr_caching.py test: create assert_not_equal util and add to where imports are needed 2025-04-01 08:39:24 -04:00
p2p_getdata.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
p2p_handshake.py test: create assert_not_equal util and add to where imports are needed 2025-04-01 08:39:24 -04:00
p2p_headers_sync_with_minchainwork.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
p2p_i2p_ports.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
p2p_i2p_sessions.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
p2p_ibd_stalling.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
p2p_ibd_txrelay.py [policy] lower default minrelaytxfee and incrementalrelayfee to 100sat/kvB 2025-08-11 17:07:43 -04:00
p2p_initial_headers_sync.py test: headers sync timeout 2025-07-14 16:48:23 +03:30
p2p_invalid_block.py test: avoid unneeded block header hash -> integer conversions 2025-07-17 12:45:39 +02:00
p2p_invalid_locator.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_invalid_messages.py test: rename CBlockHeader `.hash` -> `.hash_hex` for consistency 2025-07-17 12:45:35 +02:00
p2p_invalid_tx.py tests: drop expect_disconnect behaviour for tx relay 2025-08-09 05:10:27 +10:00
p2p_leak.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_leak_tx.py test: validate behaviour of getpeerinfo last_inv_sequence and inv_to_send 2025-09-23 14:58:01 +10:00
p2p_message_capture.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
p2p_mutated_blocks.py test: rename CBlockHeader `.hash` -> `.hash_hex` for consistency 2025-07-17 12:45:35 +02:00
p2p_net_deadlock.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
p2p_nobloomfilter_messages.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_node_network_limited.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_opportunistic_1p1c.py Merge bitcoin/bitcoin#33106: policy: lower the default blockmintxfee, incrementalrelayfee, minrelaytxfee 2025-08-15 10:39:16 +01:00
p2p_orphan_handling.py [config] emit warning for -maxorphantx, but allow it to be set 2025-08-01 11:52:32 -04:00
p2p_outbound_eviction.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
p2p_permissions.py scripted-diff: test: rename CTransaction `.getwtxid()` -> `wtxid_hex` for consistency 2025-06-11 00:52:25 +02:00
p2p_ping.py test: Use msg_generic in p2p_ping.py 2025-06-30 14:50:55 +02:00
p2p_seednode.py test: avoid generating non-loopback traffic from p2p_seednode.py 2025-01-14 09:20:58 +01:00
p2p_segwit.py scripted-diff: validation: rename mandatory errors into block errors 2025-08-13 11:05:54 -04:00
p2p_sendheaders.py test: avoid unneeded block header hash -> integer conversions 2025-07-17 12:45:39 +02:00
p2p_sendtxrcncl.py test: create assert_not_equal util and add to where imports are needed 2025-04-01 08:39:24 -04:00
p2p_timeouts.py scripted-diff: test: Rename send_message to send_without_ping 2025-03-14 12:45:20 +01:00
p2p_tx_download.py test: remove unnecessary -datacarriersize args from tests 2025-05-30 10:14:18 -04:00
p2p_tx_privacy.py test: introduce and use CTransaction `.wtxid_int` property 2025-06-09 17:28:28 +02:00
p2p_unrequested_blocks.py test: rename CBlockHeader `.hash` -> `.hash_hex` for consistency 2025-07-17 12:45:35 +02:00
p2p_v2_encrypted.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
p2p_v2_misbehaving.py net: additional disconnection logging 2024-11-26 13:22:55 +01:00
p2p_v2_transport.py test: create assert_not_equal util and add to where imports are needed 2025-04-01 08:39:24 -04:00
rpc_bind.py test: ensure -rpcallowip is compatible with RFC4193 2025-05-16 15:25:30 -04:00
rpc_blockchain.py Merge bitcoin/bitcoin#30635: rpc: add optional blockhash to waitfornewblock, unhide wait methods in help 2025-07-30 14:30:22 -04:00
rpc_createmultisig.py test: convert tuple to json for cli 2025-06-23 17:42:56 -04:00
rpc_decodescript.py test: add P2A coverage for decodescript 2024-07-30 14:06:58 -04:00
rpc_deprecated.py test: rename .rpc to ._rpc and remove unnecessary uses 2025-06-23 17:42:55 -04:00
rpc_deriveaddresses.py Merge bitcoin/bitcoin#22838: descriptors: Be able to specify change and receiving in a single descriptor string 2024-08-28 15:56:15 +01:00
rpc_dumptxoutset.py miner: timelock coinbase transactions 2025-04-25 12:44:08 -04:00
rpc_estimatefee.py test: skip subtests that check for wrong types with cli 2025-06-23 17:42:56 -04:00
rpc_generate.py test: skip subtests that check for wrong types with cli 2025-06-23 17:42:56 -04:00
rpc_getblockfilter.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
rpc_getblockfrompeer.py test: skip subtests that check for wrong types with cli 2025-06-23 17:42:56 -04:00
rpc_getblockstats.py test: Remove convert_to_json_for_cli 2025-09-23 12:58:00 -07:00
rpc_getchaintips.py test: rename CBlockHeader `.rehash()`/`.sha256` -> `.hash_int` for consistency 2025-07-17 11:59:10 +02:00
rpc_getdescriptoractivity.py test: Fix 'getdescriptoractivity' RPCHelpMan, add test to verify 'spend_vin' is the correct field 2025-08-02 10:26:32 -05:00
rpc_getdescriptorinfo.py test: skip subtests that check for wrong types with cli 2025-06-23 17:42:56 -04:00
rpc_help.py cli: Allow arguments to be both strings and json 2025-09-23 12:57:34 -07:00
rpc_invalid_address_message.py test: skip subtests that check for wrong types with cli 2025-06-23 17:42:56 -04:00
rpc_invalidateblock.py test: rename CBlockHeader `.hash` -> `.hash_hex` for consistency 2025-07-17 12:45:35 +02:00
rpc_mempool_info.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
rpc_misc.py test: Fix CLI_MAX_ARG_SIZE issues 2025-08-26 13:20:19 +02:00
rpc_named_arguments.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
rpc_net.py Merge bitcoin/bitcoin#33430: rpc: addpeeraddress: throw on invalid IP 2025-09-25 15:42:12 -07:00
rpc_orphans.py [prep/rpc] remove entry and expiry time from getorphantxs 2025-07-11 13:52:50 -04:00
rpc_packages.py rpc: Always return per-wtxid entries in submitpackage tx-results 2025-09-19 10:29:00 -04:00
rpc_preciousblock.py test: Enable various tests for usage with cli 2025-06-23 17:42:55 -04:00
rpc_psbt.py Merge bitcoin/bitcoin#32618: wallet: Remove ISMINE_WATCHONLY and watchonly from RPCs 2025-07-07 16:28:33 -04:00
rpc_rawtransaction.py rpc: Support version 3 transaction creation 2025-08-15 11:24:46 -04:00
rpc_scanblocks.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
rpc_scantxoutset.py Merge bitcoin/bitcoin#22838: descriptors: Be able to specify change and receiving in a single descriptor string 2024-08-28 15:56:15 +01:00
rpc_setban.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
rpc_signer.py qa: Use `sys.executable` when invoking other Python scripts 2024-12-19 17:10:20 +00:00
rpc_signmessagewithprivkey.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
rpc_signrawtransactionwithkey.py Remove second node since only 1 is needed for the test 2024-08-27 19:00:37 -03:00
rpc_txoutproof.py qa: Wait for txindex to avoid race condition 2025-03-10 15:24:16 +01:00
rpc_uptime.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
rpc_users.py test: Remove duplicate ConfigParser 2025-06-13 09:48:28 +02:00
rpc_validateaddress.py test: P2A is a destination type with an address 2024-08-02 13:03:06 -04:00
rpc_whitelist.py test: Disable several (sub)tests with cli 2025-06-23 17:42:56 -04:00
test-shell.md test: fix TestShell initialization and reset() 2025-02-20 15:25:43 +03:00
test_runner.py test: add tool_bitcoin to test bitcoin wrapper behavior 2025-09-17 04:57:09 -04:00
tool_bitcoin.py bitcoin: Make wrapper not require -m 2025-09-17 04:57:09 -04:00
tool_bitcoin_chainstate.py test: Add functional test for bitcoin-chainstate 2025-03-26 15:05:17 +01:00
tool_rpcauth.py Turn rpcauth.py test into functional test 2025-07-08 16:51:17 +02:00
tool_signet_miner.py test: signet tool genpsbt and solvepsbt commands 2025-05-19 09:45:37 +02:00
tool_utils.py test: Use self.log 2025-06-19 09:00:26 +02:00
tool_utxo_to_sqlite.py test: add test for utxo-to-sqlite conversion script 2024-12-28 02:38:57 +01:00
tool_wallet.py Remove create options from wallet tool 2025-05-09 15:07:04 +02:00
wallet_abandonconflict.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_address_types.py test: Don't send empty named args with cli 2025-06-23 17:42:56 -04:00
wallet_anchor.py test: Add a test for anchor outputs in the wallet 2025-09-03 13:02:06 -07:00
wallet_assumeutxo.py miner: timelock coinbase transactions 2025-04-25 12:44:08 -04:00
wallet_avoid_mixing_output_types.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_avoidreuse.py wallet, rpc: Output wallet flags in getwalletinfo 2025-05-22 17:37:41 -07:00
wallet_backup.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_backwards_compatibility.py tests: Check that the last hardened cache upgrade occurs 2025-07-31 10:29:32 -07:00
wallet_balance.py wallet, rpc: Remove watchonly from RPCs 2025-07-01 11:26:42 -07:00
wallet_basic.py Merge bitcoin/bitcoin#32618: wallet: Remove ISMINE_WATCHONLY and watchonly from RPCs 2025-07-07 16:28:33 -04:00
wallet_blank.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_bumpfee.py test fixups 2025-08-15 13:36:47 -04:00
wallet_change_address.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_coinbase_category.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_conflicts.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_create_tx.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_createwallet.py wallet: Remove `CWallet::nWalletVersion` and related functions 2025-07-25 14:49:47 -07:00
wallet_createwalletdescriptor.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_crosschain.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_descriptor.py test: Verify parent_desc in RPCs 2025-06-02 12:51:16 -07:00
wallet_disable.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 2024-07-16 22:06:47 +01:00
wallet_encryption.py test: Disable several (sub)tests with cli 2025-06-23 17:42:56 -04:00
wallet_fallbackfee.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_fast_rescan.py scripted-diff: test: remove 'descriptors=True' argument for `createwallet` calls 2025-05-17 18:14:24 +02:00
wallet_fundrawtransaction.py [prep/test] make wallet_fundrawtransaction's minrelaytxfee assumption explicit 2025-08-11 16:58:26 -04:00
wallet_gethdkeys.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_groups.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_hd.py test: Enable various tests for usage with cli 2025-06-23 17:42:55 -04:00
wallet_importdescriptors.py Merge bitcoin/bitcoin#32475: wallet: Use `util::Error` throughout `AddWalletDescriptor` instead of returning `nullptr` for some errors 2025-05-21 14:24:39 +01:00
wallet_importprunedfunds.py wallet, rpc: Remove watchonly from RPCs 2025-07-01 11:26:42 -07:00
wallet_keypool.py use WalletContext scheduler for walletpassphrase callback 2025-07-03 06:26:13 -04:00
wallet_keypool_topup.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_labels.py test: Replace importpubkey 2025-05-09 12:31:53 -07:00
wallet_listdescriptors.py scripted-diff: test: remove 'descriptors=True' argument for `createwallet` calls 2025-05-17 18:14:24 +02:00
wallet_listreceivedby.py wallet, rpc: Remove watchonly from RPCs 2025-07-01 11:26:42 -07:00
wallet_listsinceblock.py scripted-diff: test: remove 'descriptors=True' argument for `createwallet` calls 2025-05-17 18:14:24 +02:00
wallet_listtransactions.py test: Test wallet 'from me' status change 2025-09-03 12:55:50 -07:00
wallet_migration.py Merge bitcoin/bitcoin#33031: wallet: Set descriptor cache upgraded flag for migrated wallets 2025-09-23 15:27:17 -04:00
wallet_miniscript.py test: rename .rpc to ._rpc and remove unnecessary uses 2025-06-23 17:42:55 -04:00
wallet_miniscript_decaying_multisig_descriptor_psbt.py scripted-diff: test: remove 'descriptors=True' argument for `createwallet` calls 2025-05-17 18:14:24 +02:00
wallet_multisig_descriptor_psbt.py scripted-diff: test: remove 'descriptors=True' argument for `createwallet` calls 2025-05-17 18:14:24 +02:00
wallet_multiwallet.py Merge bitcoin/bitcoin#32944: wallet: Remove `upgradewallet` RPC 2025-07-25 12:59:52 -07:00
wallet_orphanedreward.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_reindex.py test: Replace usage of importaddress 2025-05-09 11:42:46 -07:00
wallet_reorgsrestore.py test: Remove convert_to_json_for_cli 2025-09-23 12:58:00 -07:00
wallet_rescan_unconfirmed.py wallet, rpc: add anti-fee-sniping to `send` and `sendall` 2025-06-25 11:55:46 -04:00
wallet_resendwallettransactions.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_send.py test: fix anti-fee-sniping off-by-one error 2025-08-01 15:50:12 -04:00
wallet_sendall.py test: fix anti-fee-sniping off-by-one error 2025-08-01 15:50:12 -04:00
wallet_sendmany.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_signer.py test: delete commented out tests 2025-07-22 16:16:50 +03:00
wallet_signmessagewithaddress.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_signrawtransactionwithwallet.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_simulaterawtx.py test: Replace importpubkey 2025-05-09 12:31:53 -07:00
wallet_spend_unconfirmed.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_startup.py test: Enable various tests for usage with cli 2025-06-23 17:42:55 -04:00
wallet_taproot.py test: enable functional tests with large rpc args for cli 2025-06-23 17:42:55 -04:00
wallet_timelock.py test: remove legacy wallet functional tests 2025-04-23 12:10:30 -07:00
wallet_transactiontime_rescan.py test: add abortrescan RPC test 2025-07-26 10:21:41 +01:00
wallet_txn_clone.py test: Enable various tests for usage with cli 2025-06-23 17:42:55 -04:00
wallet_txn_doublespend.py test: Enable various tests for usage with cli 2025-06-23 17:42:55 -04:00
wallet_v3_txs.py test: add truc wallet tests 2025-08-15 11:24:51 -04:00

README.md

Functional tests

Writing Functional Tests

Example test

The file test/functional/example_test.py is a heavily commented example of a test case that uses both the RPC and P2P interfaces. If you are writing your first test, copy that file and modify to fit your needs.

Coverage

Assuming the build directory is build, running build/test/functional/test_runner.py with the --coverage argument tracks which RPCs are called by the tests and prints a report of uncovered RPCs in the summary. This can be used (along with the --extended argument) to find out which RPCs we don't have test cases for.

Style guidelines

  • Where possible, try to adhere to PEP-8 guidelines
  • Use a python linter like flake8 before submitting PRs to catch common style nits (eg trailing whitespace, unused imports, etc)
  • The oldest supported Python version is specified in doc/dependencies.md. Consider using pyenv, which checks .python-version, to prevent accidentally introducing modern syntax from an unsupported Python version. The CI linter job also checks this, but possibly not in all cases.
  • See the python lint script that checks for violations that could lead to bugs and issues in the test code.
  • Use type hints in your code to improve code readability and to detect possible bugs earlier.
  • Avoid wildcard imports.
  • If more than one name from a module is needed, use lexicographically sorted multi-line imports in order to reduce the possibility of potential merge conflicts.
  • Use a module-level docstring to describe what the test is testing, and how it is testing it.
  • When subclassing the BitcoinTestFramework, place overrides for the set_test_params(), add_options() and setup_xxxx() methods at the top of the subclass, then locally-defined helper methods, then the run_test() method.
  • Use f'{x}' for string formatting in preference to '{}'.format(x) or '%s' % x.
  • Use platform.system() for detecting the running operating system and os.name to check whether it's a POSIX system (see also the skip_if_platform_not_{linux,posix} methods in the BitcoinTestFramework class, which can be used to skip a whole test depending on the platform).

Naming guidelines

  • Name the test <area>_test.py, where area can be one of the following:
    • feature for tests for full features that aren't wallet/mining/mempool, eg feature_rbf.py
    • interface for tests for other interfaces (REST, ZMQ, etc), eg interface_rest.py
    • mempool for tests for mempool behaviour, eg mempool_reorg.py
    • mining for tests for mining features, eg mining_prioritisetransaction.py
    • p2p for tests that explicitly test the p2p interface, eg p2p_disconnect_ban.py
    • rpc for tests for individual RPC methods or features, eg rpc_listtransactions.py
    • tool for tests for tools, eg tool_wallet.py
    • wallet for tests for wallet features, eg wallet_keypool.py
  • Use an underscore to separate words
    • exception: for tests for specific RPCs or command line options which don't include underscores, name the test after the exact RPC or argument name, eg rpc_decodescript.py, not rpc_decode_script.py
  • Don't use the redundant word test in the name, eg interface_zmq.py, not interface_zmq_test.py

General test-writing advice

  • Instead of inline comments or no test documentation at all, log the comments to the test log, e.g. self.log.info('Create enough transactions to fill a block'). Logs make the test code easier to read and the test logic easier to debug.
  • Set self.num_nodes to the minimum number of nodes necessary for the test. Having additional unrequired nodes adds to the execution time of the test as well as memory/CPU/disk requirements (which is important when running tests in parallel).
  • Avoid stop-starting the nodes multiple times during the test if possible. A stop-start takes several seconds, so doing it several times blows up the runtime of the test.
  • Set the self.setup_clean_chain variable in set_test_params() to True to initialize an empty blockchain and start from the Genesis block, rather than load a premined blockchain from cache with the default value of False. The cached data directories contain a 200-block pre-mined blockchain with the spendable mining rewards being split between four nodes. Each node has 25 mature block subsidies (25x50=1250 BTC) in its wallet. Using them is much more efficient than mining blocks in your test.
  • When calling RPCs with lots of arguments, consider using named keyword arguments instead of positional arguments to make the intent of the call clear to readers.
  • Many of the core test framework classes such as CBlock and CTransaction don't allow new attributes to be added to their objects at runtime like typical Python objects allow. This helps prevent unpredictable side effects from typographical errors or usage of the objects outside of their intended purpose.

RPC and P2P definitions

Test writers may find it helpful to refer to the definitions for the RPC and P2P messages. These can be found in the following source files:

  • /src/rpc/* for RPCs
  • /src/wallet/rpc* for wallet RPCs
  • ProcessMessage() in /src/net_processing.cpp for parsing P2P messages

Using the P2P interface

  • P2Ps can be used to test specific P2P protocol behavior. p2p.py contains test framework p2p objects and messages.py contains all the definitions for objects passed over the network (CBlock, CTransaction, etc, along with the network-level wrappers for them, msg_block, msg_tx, etc).

  • P2P tests have two threads. One thread handles all network communication with the bitcoind(s) being tested in a callback-based event loop; the other implements the test logic.

  • P2PConnection is the class used to connect to a bitcoind. P2PInterface contains the higher level logic for processing P2P payloads and connecting to the Bitcoin Core node application logic. For custom behaviour, subclass the P2PInterface object and override the callback methods.

P2PConnections can be used as such:

p2p_conn = node.add_p2p_connection(P2PInterface())
p2p_conn.send_and_ping(msg)

They can also be referenced by indexing into a TestNode's p2ps list, which contains the list of test framework p2p objects connected to itself (it does not include any TestNodes):

node.p2ps[0].sync_with_ping()

More examples can be found in p2p_unrequested_blocks.py, p2p_compactblocks.py.

Prototyping tests

The TestShell class exposes the BitcoinTestFramework functionality to interactive Python3 environments and can be used to prototype tests. This may be especially useful in a REPL environment with session logging utilities, such as IPython. The logs of such interactive sessions can later be adapted into permanent test cases.

Test framework modules

The following are useful modules for test developers. They are located in test/functional/test_framework/.

authproxy.py

Taken from the python-bitcoinrpc repository.

test_framework.py

Base class for functional tests.

util.py

Generally useful functions.

p2p.py

Test objects for interacting with a bitcoind node over the p2p interface.

script.py

Utilities for manipulating transaction scripts (originally from python-bitcoinlib)

key.py

Test-only secp256k1 elliptic curve implementation

blocktools.py

Helper functions for creating blocks and transactions.

Benchmarking with perf

An easy way to profile node performance during functional tests is provided for Linux platforms using perf.

Perf will sample the running node and will generate profile data in the node's datadir. The profile data can then be presented using perf report or a graphical tool like hotspot.

There are two ways of invoking perf: one is to use the --perf flag when running tests, which will profile each node during the entire test run: perf begins to profile when the node starts and ends when it shuts down. The other way is the use the profile_with_perf context manager, e.g.

with node.profile_with_perf("send-big-msgs"):
    # Perform activity on the node you're interested in profiling, e.g.:
    for _ in range(10000):
        node.p2ps[0].send_without_ping(some_large_message)

To see useful textual output, run

perf report -i /path/to/datadir/send-big-msgs.perf.data.xxxx --stdio | c++filt | less

See also: