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
merge-script 38c30a4b50
Merge bitcoin/bitcoin#30515: rpc: add utxo's blockhash and number of confirmations to scantxoutset output
3 months ago
..
data psbt: Check non witness utxo outpoint early 7 months ago
mocks wallet: return and display signer error 7 months ago
test_framework Merge bitcoin/bitcoin#30076: test: fix MiniWallet script-path spend (missing parity bit in leaf version) 3 months ago
.gitignore
README.md doc: test: mention OS detection preferences in style guideline 11 months ago
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 Merge bitcoin/bitcoin#30403: test, assumeutxo: Remove resolved todo comments and add new test 4 months ago
feature_assumevalid.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_blocksdir.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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#30275: Fee Estimation: change `estimatesmartfee` default mode to `economical` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_pruning.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_rbf.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
feature_reindex.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
interface_usdt_mempool.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_resurrect.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_sigoplimit.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_spend_coinbase.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
mempool_truc.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_ping.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_tx_privacy.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_unrequested_blocks.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_v2_encrypted.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
p2p_v2_misbehaving.py Merge bitcoin/bitcoin#30463: qa: Functional test improvements 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_createmultisig.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_decodescript.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_deprecated.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_deriveaddresses.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_dumptxoutset.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_getblockstats.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_getchaintips.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_getdescriptorinfo.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_scanblocks.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_scantxoutset.py rpc: add utxo's blockhash and number of confirmations to scantxoutset output 3 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_txoutproof.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_uptime.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_users.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
rpc_validateaddress.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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#29431: test/BIP324: disconnection scenarios during v2 handshake 4 months ago
tool_signet_miner.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 months ago
wallet_importmulti.py scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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 scripted-diff: Add `__file__` argument to `BitcoinTestFramework.init()` 4 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: