You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bitcoin/test/functional
Martin Zumsande 6cbf2e5f81
rpc: Improve gettxoutproof error when only header is available.
2 months ago
..
data test: Avoid CScript() as default function argument 3 months ago
mocks wallet: return and display signer error 7 months ago
test_framework Merge bitcoin/bitcoin#30723: lint: Speed up and fix flake8 checks 2 months ago
.gitignore build: Remove Autotools-based build system 2 months ago
README.md
combine_logs.py
combined_log_template.html
create_cache.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
example_test.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_abortnode.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_addrman.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_anchors.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_asmap.py qa: Do not assume running `feature_asmap.py` from source directory 4 months ago
feature_assumeutxo.py rpc: Improve getblock / getblockstats error when only header is available. 2 months ago
feature_assumevalid.py node: use uint256::FromUserHex for -assumevalid parsing 3 months ago
feature_bind_extra.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_bind_port_discover.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_bind_port_externalip.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_bip68_sequence.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_block.py test: Avoid CScript() as default function argument 3 months ago
feature_blocksdir.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_blocksxor.py test: check xor.dat recreated when missing 2 months ago
feature_cltv.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_coinstatsindex.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_config_args.py init: fix fatal error on '-wallet' negated option value 2 months ago
feature_csv_activation.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_dbcrash.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_dersig.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_dirsymlinks.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_discover.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_fastprune.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_fee_estimation.py Merge bitcoin/bitcoin#29566: test: update satoshi_round function 2 months ago
feature_filelock.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_framework_miniwallet.py Merge bitcoin/bitcoin#30076: test: fix MiniWallet script-path spend (missing parity bit in leaf version) 3 months ago
feature_framework_unit_tests.py test: add unit test for `keys_to_multisig_script` 5 months ago
feature_help.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_includeconf.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_index_prune.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_init.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_loadblock.py contrib: support reading XORed blocks in linearize-data.py script 3 months ago
feature_logging.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_maxtipage.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_maxuploadtarget.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_minchainwork.py node: use uint256::FromUserHex for -minimumchainwork parsing 3 months ago
feature_notifications.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_nulldummy.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_posix_fs_permissions.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_presegwit_node_upgrade.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_proxy.py test: fix intermittent failures in feature_proxy.py 3 months ago
feature_pruning.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_rbf.py Merge bitcoin/bitcoin#30493: policy: enable full-rbf by default 3 months ago
feature_reindex.py refactor: move read_xor_key() to TestNode 2 months ago
feature_reindex_readonly.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_remove_pruned_files_on_startup.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_segwit.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_settings.py init: fix fatal error on '-wallet' negated option value 2 months ago
feature_shutdown.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_signet.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_startupnotify.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_taproot.py test: Make leaf_script mandatory when scriptpath is set in TaprootSignatureMsg 3 months ago
feature_uacomment.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_unsupported_utxo_db.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_utxo_set_hash.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_versionbits_warning.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
interface_bitcoin_cli.py Merge bitcoin/bitcoin#30148: cli: restrict multiple exclusive argument usage in bitcoin-cli 2 months ago
interface_http.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
interface_rest.py rest: Reject truncated hex txid early in getutxos parsing 4 months ago
interface_rpc.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
interface_usdt_coinselection.py test: [refactor] Fix F841 flake8 2 months ago
interface_usdt_mempool.py test: Disable known broken USDT test for now 3 months ago
interface_usdt_net.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
interface_usdt_utxocache.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
interface_usdt_validation.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
interface_zmq.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_accept.py Merge bitcoin/bitcoin#30493: policy: enable full-rbf by default 3 months ago
mempool_accept_wtxid.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_compatibility.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_datacarrier.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_dust.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_expiry.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_limit.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_package_limits.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_package_onemore.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_package_rbf.py test: [refactor] Fix F841 flake8 2 months ago
mempool_packages.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_persist.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_reorg.py scripted-diff: Rename lazily initialized bloom filters 3 months ago
mempool_resurrect.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_sigoplimit.py test: [refactor] Fix F841 flake8 2 months ago
mempool_spend_coinbase.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_truc.py Merge bitcoin/bitcoin#30493: policy: enable full-rbf by default 3 months ago
mempool_unbroadcast.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_updatefromblock.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mining_basic.py test: Add time-timewarp-attack boundary cases 3 months ago
mining_getblocktemplate_longpoll.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mining_prioritisetransaction.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_1p1c_network.py test: [refactor] Fix F841 flake8 2 months ago
p2p_add_connections.py Merge bitcoin/bitcoin#30463: qa: Functional test improvements 4 months ago
p2p_addr_relay.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_addrfetch.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_addrv2_relay.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_block_sync.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_blockfilters.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_blocksonly.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_compactblocks.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_compactblocks_blocksonly.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_compactblocks_hb.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_disconnect_ban.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_dns_seeds.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_dos_header_tree.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_eviction.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_feefilter.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_filter.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_fingerprint.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_getaddr_caching.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_getdata.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_handshake.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_headers_sync_with_minchainwork.py test: Avoid intermittent timeout in p2p_headers_sync_with_minchainwork.py 2 months ago
p2p_i2p_ports.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_i2p_sessions.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_ibd_stalling.py test: Avoid intermittent block download timeout in p2p_ibd_stalling 3 months ago
p2p_ibd_txrelay.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_initial_headers_sync.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_invalid_block.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_invalid_locator.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_invalid_messages.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_invalid_tx.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_leak.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_leak_tx.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_message_capture.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_mutated_blocks.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_net_deadlock.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_nobloomfilter_messages.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_node_network_limited.py rpc: Improve getblock / getblockstats error when only header is available. 2 months ago
p2p_opportunistic_1p1c.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_orphan_handling.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_outbound_eviction.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_permissions.py test: Add explicit onion bind to p2p_permissions 2 months ago
p2p_ping.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_seednode.py test: adds seednode functional tests 4 months ago
p2p_segwit.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_sendheaders.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_sendtxrcncl.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_timeouts.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_tx_download.py test: [refactor] Fix F841 flake8 2 months ago
p2p_tx_privacy.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_unrequested_blocks.py rpc: Improve getblock / getblockstats error when only header is available. 2 months ago
p2p_v2_encrypted.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_v2_misbehaving.py test: Fix intermittent issue in p2p_v2_misbehaving.py 4 months ago
p2p_v2_transport.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_bind.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_blockchain.py test: add coverage to getblock and getblockstats 2 months ago
rpc_createmultisig.py test: [refactor] Fix F841 flake8 2 months ago
rpc_decodescript.py test: add P2A coverage for decodescript 3 months ago
rpc_deprecated.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_deriveaddresses.py Merge bitcoin/bitcoin#22838: descriptors: Be able to specify change and receiving in a single descriptor string 2 months ago
rpc_dumptxoutset.py test: Add coverage for failing dumptxoutset behavior 2 months ago
rpc_estimatefee.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_generate.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_getblockfilter.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_getblockfrompeer.py rpc: Improve getblock / getblockstats error when only header is available. 2 months ago
rpc_getblockstats.py test: add coverage to getblock and getblockstats 2 months ago
rpc_getchaintips.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_getdescriptorinfo.py Merge bitcoin/bitcoin#22838: descriptors: Be able to specify change and receiving in a single descriptor string 2 months ago
rpc_help.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_invalid_address_message.py Merge bitcoin/bitcoin#30463: qa: Functional test improvements 4 months ago
rpc_invalidateblock.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_mempool_info.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_misc.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_named_arguments.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_net.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_packages.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_preciousblock.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_psbt.py Merge bitcoin/bitcoin#30463: qa: Functional test improvements 4 months ago
rpc_rawtransaction.py rpc: clarify ALREADY_IN_CHAIN rpc errors 3 months ago
rpc_scanblocks.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_scantxoutset.py Merge bitcoin/bitcoin#22838: descriptors: Be able to specify change and receiving in a single descriptor string 2 months ago
rpc_setban.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_signer.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_signmessagewithprivkey.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_signrawtransactionwithkey.py Remove second node since only 1 is needed for the test 2 months ago
rpc_txoutproof.py rpc: Improve gettxoutproof error when only header is available. 2 months ago
rpc_uptime.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_users.py fix: increase consistency of rpcauth parsing 3 months ago
rpc_validateaddress.py test: P2A is a destination type with an address 3 months ago
rpc_whitelist.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
test-shell.md net: require P2P binds to succeed 4 months ago
test_runner.py Merge bitcoin/bitcoin#30872: test: fix exclude parsing for functional runner 2 months ago
tool_signet_miner.py Merge bitcoin/bitcoin#28417: contrib/signet/miner updates 2 months ago
tool_wallet.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_abandonconflict.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_address_types.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_assumeutxo.py RPC: Add type parameter to dumptxoutset 2 months ago
wallet_avoid_mixing_output_types.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_avoidreuse.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_backup.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_backwards_compatibility.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_balance.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_basic.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_blank.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_bumpfee.py Fix lint-spelling warnings 4 months ago
wallet_change_address.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_coinbase_category.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_conflicts.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_create_tx.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_createwallet.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_createwalletdescriptor.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_crosschain.py testnet: Introduce Testnet4 3 months ago
wallet_descriptor.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_disable.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_dump.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_encryption.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_fallbackfee.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_fast_rescan.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_fundrawtransaction.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_gethdkeys.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_groups.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_hd.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_implicitsegwit.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_import_rescan.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_import_with_label.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_importdescriptors.py Merge bitcoin/bitcoin#22838: descriptors: Be able to specify change and receiving in a single descriptor string 2 months ago
wallet_importmulti.py Merge bitcoin/bitcoin#22838: descriptors: Be able to specify change and receiving in a single descriptor string 2 months ago
wallet_importprunedfunds.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_inactive_hdchains.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_keypool.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_keypool_topup.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_labels.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_listdescriptors.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_listreceivedby.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_listsinceblock.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_listtransactions.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_migration.py Merge bitcoin/bitcoin#30265: wallet: Fix listwalletdir listing of migrated default wallets and generated backup files 3 months ago
wallet_miniscript.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_multisig_descriptor_psbt.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_multiwallet.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_orphanedreward.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_pruning.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_reindex.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_reorgsrestore.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_rescan_unconfirmed.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_resendwallettransactions.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_send.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_sendall.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_sendmany.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_signer.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_signmessagewithaddress.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_signrawtransactionwithwallet.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_simulaterawtx.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_spend_unconfirmed.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_startup.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_taproot.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_timelock.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_transactiontime_rescan.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_txn_clone.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_txn_doublespend.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_upgradewallet.py test: [refactor] Fix F841 flake8 2 months ago
wallet_watchonly.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago

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

Running 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_message(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: