Issue Details

Number
31812
Title
Networking tests fail on emulated big-endian systems
Description
Running the test with an emulated big-endian system (via `docker run --platform linux/s390x -it ubuntu:24.10 /bin/bash`, as described in https://github.com/bitcoin/bitcoin/issues/31344#issuecomment-2493612110), I'm seeing mismatched byte orders in IP address representations. I've noticed this in https://github.com/bitcoin/bitcoin/pull/29852#issuecomment-2614010124, but it reproduces on master as well. The problems seems to be that the kernel file `/proc/net/tcp` always stores addresses in little-endian order, regardless of the system's architecture, so we should likely adjust the `addr_to_hex` or `_convert_ip_port` methods: ```bash TEST | STATUS | DURATION example_test.py | ✓ Passed | 6 s feature_abortnode.py | ✓ Passed | 3 s feature_addrman.py | ✓ Passed | 10 s feature_anchors.py | ✓ Passed | 6 s feature_asmap.py | ✓ Passed | 11 s feature_assumeutxo.py | ✓ Passed | 77 s feature_assumevalid.py | ✓ Passed | 63 s feature_bip68_sequence.py | ✓ Passed | 62 s feature_block.py | ✓ Passed | 662 s feature_blocksdir.py | ✓ Passed | 3 s feature_blocksxor.py | ✓ Passed | 8 s feature_cltv.py | ✓ Passed | 3 s feature_coinstatsindex.py | ✓ Passed | 13 s feature_config_args.py | ✓ Passed | 38 s feature_csv_activation.py | ✓ Passed | 53 s feature_dersig.py | ✓ Passed | 3 s feature_dirsymlinks.py | ✓ Passed | 3 s feature_discover.py | ✓ Passed | 6 s feature_fastprune.py | ✓ Passed | 3 s feature_fee_estimation.py | ✓ Passed | 176 s feature_filelock.py | ✓ Passed | 5 s feature_framework_miniwallet.py | ✓ Passed | 51 s feature_framework_unit_tests.py | ✓ Passed | 86 s feature_help.py | ✓ Passed | 2 s feature_includeconf.py | ✓ Passed | 6 s feature_init.py | ✓ Passed | 29 s feature_loadblock.py | ✓ Passed | 6 s feature_logging.py | ✓ Passed | 9 s feature_maxtipage.py | ✓ Passed | 25 s feature_maxuploadtarget.py | ✓ Passed | 214 s feature_minchainwork.py | ✓ Passed | 13 s feature_notifications.py | ✓ Passed | 11 s feature_nulldummy.py | ✓ Passed | 5 s feature_port.py | ✓ Passed | 7 s feature_posix_fs_permissions.py | ✓ Passed | 2 s feature_presegwit_node_upgrade.py | ✓ Passed | 4 s feature_proxy.py | ✓ Passed | 12 s feature_rbf.py | ✓ Passed | 38 s feature_reindex.py | ✓ Passed | 27 s feature_reindex_readonly.py | ✓ Passed | 3 s feature_remove_pruned_files_on_startup.py | ✓ Passed | 11 s feature_segwit.py --descriptors --v1transport | ✓ Passed | 17 s feature_segwit.py --descriptors --v2transport | ✓ Passed | 16 s feature_segwit.py --legacy-wallet | ✓ Passed | 39 s feature_settings.py | ✓ Passed | 11 s feature_shutdown.py | ✓ Passed | 3 s feature_signet.py | ✓ Passed | 14 s feature_startupnotify.py | ✓ Passed | 3 s feature_taproot.py | ✓ Passed | 542 s feature_uacomment.py | ✓ Passed | 7 s feature_utxo_set_hash.py | ✓ Passed | 4 s feature_versionbits_warning.py | ✓ Passed | 8 s interface_http.py | ✓ Passed | 3 s interface_rest.py | ✓ Passed | 7 s interface_rpc.py | ✓ Passed | 5 s interface_zmq.py | ✓ Passed | 29 s mempool_accept.py | ✓ Passed | 16 s mempool_accept_wtxid.py | ✓ Passed | 16 s mempool_datacarrier.py | ✓ Passed | 4 s mempool_dust.py | ✓ Passed | 14 s mempool_ephemeral_dust.py | ✓ Passed | 67 s mempool_expiry.py | ✓ Passed | 5 s mempool_limit.py | ✓ Passed | 89 s mempool_package_limits.py | ✓ Passed | 11 s mempool_package_onemore.py | ✓ Passed | 4 s mempool_package_rbf.py | ✓ Passed | 43 s mempool_packages.py | ✓ Passed | 8 s mempool_persist.py --descriptors | ✓ Passed | 26 s mempool_reorg.py | ✓ Passed | 7 s mempool_resurrect.py | ✓ Passed | 3 s mempool_sigoplimit.py | ✓ Passed | 11 s mempool_spend_coinbase.py | ✓ Passed | 3 s mempool_truc.py | ✓ Passed | 22 s mempool_unbroadcast.py | ✓ Passed | 20 s mempool_updatefromblock.py | ✓ Passed | 156 s mining_basic.py | ✓ Passed | 38 s mining_getblocktemplate_longpoll.py | ✓ Passed | 70 s mining_mainnet.py | ✓ Passed | 24 s mining_prioritisetransaction.py | ✓ Passed | 19 s p2p_1p1c_network.py | ✓ Passed | 37 s p2p_add_connections.py | ✓ Passed | 10 s p2p_addr_relay.py | ✓ Passed | 24 s p2p_addrfetch.py | ✓ Passed | 2 s p2p_addrv2_relay.py | ✓ Passed | 3 s p2p_block_sync.py --v1transport | ✓ Passed | 5 s p2p_block_sync.py --v2transport | ✓ Passed | 4 s p2p_blockfilters.py | ✓ Passed | 65 s p2p_blocksonly.py | ✓ Passed | 16 s p2p_compactblocks.py | ✓ Passed | 16 s p2p_compactblocks_blocksonly.py | ✓ Passed | 4 s p2p_compactblocks_hb.py --v1transport | ✓ Passed | 21 s p2p_compactblocks_hb.py --v2transport | ✓ Passed | 25 s p2p_disconnect_ban.py --v1transport | ✓ Passed | 5 s p2p_disconnect_ban.py --v2transport | ✓ Passed | 5 s p2p_dns_seeds.py | ✓ Passed | 39 s p2p_dos_header_tree.py | ✓ Passed | 5 s p2p_eviction.py | ✓ Passed | 6 s p2p_feefilter.py | ✓ Passed | 9 s p2p_filter.py | ✓ Passed | 8 s p2p_fingerprint.py | ✓ Passed | 3 s p2p_getaddr_caching.py | ✓ Passed | 34 s p2p_getdata.py | ✓ Passed | 2 s p2p_handshake.py | ✓ Passed | 5 s p2p_handshake.py --v2transport | ✓ Passed | 9 s p2p_headers_sync_with_minchainwork.py | ✓ Passed | 127 s p2p_i2p_ports.py | ✓ Passed | 2 s p2p_i2p_sessions.py | ✓ Passed | 2 s p2p_ibd_stalling.py --v1transport | ✓ Passed | 26 s p2p_ibd_stalling.py --v2transport | ✓ Passed | 46 s p2p_ibd_txrelay.py | ✓ Passed | 4 s p2p_initial_headers_sync.py | ✓ Passed | 3 s p2p_invalid_block.py --v1transport | ✓ Passed | 4 s p2p_invalid_block.py --v2transport | ✓ Passed | 5 s p2p_invalid_locator.py | ✓ Passed | 4 s p2p_invalid_messages.py | ✓ Passed | 47 s p2p_invalid_tx.py --v1transport | ✓ Passed | 10 s p2p_invalid_tx.py --v2transport | ✓ Passed | 19 s p2p_leak.py | ✓ Passed | 8 s p2p_leak_tx.py --v1transport | ✓ Passed | 11 s p2p_leak_tx.py --v2transport | ✓ Passed | 12 s p2p_message_capture.py | ✓ Passed | 2 s p2p_mutated_blocks.py | ✓ Passed | 4 s p2p_net_deadlock.py --v1transport | ✓ Passed | 6 s p2p_net_deadlock.py --v2transport | ✓ Passed | 6 s p2p_nobloomfilter_messages.py | ✓ Passed | 3 s p2p_node_network_limited.py --v1transport | ✓ Passed | 23 s p2p_node_network_limited.py --v2transport | ✓ Passed | 24 s p2p_opportunistic_1p1c.py | ✓ Passed | 87 s p2p_orphan_handling.py | ✓ Passed | 29 s p2p_outbound_eviction.py | ✓ Passed | 8 s p2p_permissions.py | ✓ Passed | 21 s p2p_ping.py | ✓ Passed | 3 s p2p_seednode.py | ✓ Passed | 5 s p2p_segwit.py | ✓ Passed | 242 s p2p_sendheaders.py | ✓ Passed | 39 s p2p_sendtxrcncl.py | ✓ Passed | 10 s p2p_timeouts.py --v1transport | ✓ Passed | 3 s p2p_timeouts.py --v2transport | ✓ Passed | 4 s p2p_tx_download.py | ✓ Passed | 139 s p2p_tx_privacy.py | ✓ Passed | 3 s p2p_unrequested_blocks.py | ✓ Passed | 9 s p2p_v2_encrypted.py | ✓ Passed | 23 s p2p_v2_misbehaving.py | ✓ Passed | 5 s p2p_v2_transport.py | ✓ Passed | 11 s rpc_blockchain.py --v1transport | ✓ Passed | 30 s rpc_blockchain.py --v2transport | ✓ Passed | 30 s rpc_createmultisig.py | ✓ Passed | 35 s rpc_decodescript.py | ✓ Passed | 2 s rpc_deprecated.py | ✓ Passed | 3 s rpc_deriveaddresses.py | ✓ Passed | 2 s rpc_deriveaddresses.py --usecli | ✓ Passed | 4 s rpc_dumptxoutset.py | ✓ Passed | 2 s rpc_estimatefee.py | ✓ Passed | 2 s rpc_generate.py | ✓ Passed | 12 s rpc_getblockfilter.py | ✓ Passed | 4 s rpc_getblockfrompeer.py | ✓ Passed | 19 s rpc_getblockstats.py | ✓ Passed | 3 s rpc_getchaintips.py | ✓ Passed | 7 s rpc_getdescriptoractivity.py | ✓ Passed | 6 s rpc_getdescriptorinfo.py | ✓ Passed | 3 s rpc_help.py | ✓ Passed | 4 s rpc_invalid_address_message.py | ✓ Passed | 3 s rpc_invalidateblock.py | ✓ Passed | 3 s rpc_mempool_info.py | ✓ Passed | 3 s rpc_misc.py | ✓ Passed | 4 s rpc_named_arguments.py | ✓ Passed | 3 s rpc_net.py --v1transport | ✓ Passed | 55 s rpc_net.py --v2transport | ✓ Passed | 54 s rpc_orphans.py | ✓ Passed | 4 s rpc_packages.py | ✓ Passed | 31 s rpc_preciousblock.py | ✓ Passed | 4 s rpc_psbt.py --descriptors | ✓ Passed | 34 s rpc_psbt.py --legacy-wallet | ✓ Passed | 33 s rpc_rawtransaction.py --legacy-wallet | ✓ Passed | 22 s rpc_scanblocks.py | ✓ Passed | 4 s rpc_scantxoutset.py | ✓ Passed | 103 s rpc_setban.py --v1transport | ✓ Passed | 7 s rpc_setban.py --v2transport | ✓ Passed | 7 s rpc_signer.py | ✓ Passed | 6 s rpc_signmessagewithprivkey.py | ✓ Passed | 2 s rpc_signrawtransactionwithkey.py | ✓ Passed | 3 s rpc_txoutproof.py | ✓ Passed | 8 s rpc_uptime.py | ✓ Passed | 2 s rpc_users.py | ✓ Passed | 24 s rpc_validateaddress.py | ✓ Passed | 3 s rpc_whitelist.py | ✓ Passed | 4 s tool_signet_miner.py --descriptors | ✓ Passed | 9 s tool_signet_miner.py --legacy-wallet | ✓ Passed | 6 s tool_wallet.py --descriptors | ✓ Passed | 100 s tool_wallet.py --legacy-wallet | ✓ Passed | 140 s tool_wallet.py --legacy-wallet --bdbro | ✓ Passed | 142 s tool_wallet.py --legacy-wallet --bdbro --swap-bdb-endian | ✓ Passed | 102 s wallet_abandonconflict.py --descriptors | ✓ Passed | 13 s wallet_abandonconflict.py --legacy-wallet | ✓ Passed | 14 s wallet_address_types.py --descriptors | ✓ Passed | 33 s wallet_address_types.py --legacy-wallet | ✓ Passed | 56 s wallet_assumeutxo.py --descriptors | ✓ Passed | 21 s wallet_avoid_mixing_output_types.py --descriptors | ✓ Passed | 8 s wallet_avoidreuse.py --descriptors | ✓ Passed | 84 s wallet_avoidreuse.py --legacy-wallet | ✓ Passed | 379 s wallet_backup.py --descriptors | ✓ Passed | 46 s wallet_backup.py --legacy-wallet | ✓ Passed | 71 s wallet_balance.py --descriptors | ✓ Passed | 15 s wallet_balance.py --legacy-wallet | ✓ Passed | 15 s wallet_basic.py --descriptors | ✓ Passed | 53 s wallet_basic.py --legacy-wallet | ✓ Passed | 59 s wallet_blank.py --descriptors | ✓ Passed | 3 s wallet_blank.py --legacy-wallet | ✓ Passed | 4 s wallet_bumpfee.py --descriptors | ✓ Passed | 66 s wallet_bumpfee.py --legacy-wallet | ✓ Passed | 66 s wallet_change_address.py --descriptors | ✓ Passed | 17 s wallet_change_address.py --legacy-wallet | ✓ Passed | 23 s wallet_coinbase_category.py --descriptors | ✓ Passed | 4 s wallet_coinbase_category.py --legacy-wallet | ✓ Passed | 4 s wallet_conflicts.py --descriptors | ✓ Passed | 54 s wallet_conflicts.py --legacy-wallet | ✓ Passed | 78 s wallet_create_tx.py --descriptors | ✓ Passed | 22 s wallet_create_tx.py --legacy-wallet | ✓ Passed | 31 s wallet_createwallet.py --descriptors | ✓ Passed | 7 s wallet_createwallet.py --legacy-wallet | ✓ Passed | 6 s wallet_createwallet.py --usecli | ✓ Passed | 15 s wallet_createwalletdescriptor.py --descriptors | ✓ Passed | 4 s wallet_crosschain.py | ✓ Passed | 4 s wallet_descriptor.py --descriptors | ✓ Passed | 46 s wallet_disable.py | ✓ Passed | 2 s wallet_dump.py --legacy-wallet | ✓ Passed | 43 s wallet_encryption.py --descriptors | ✓ Passed | 10 s wallet_encryption.py --legacy-wallet | ✓ Passed | 9 s wallet_fallbackfee.py --descriptors | ✓ Passed | 6 s wallet_fallbackfee.py --legacy-wallet | ✓ Passed | 4 s wallet_fundrawtransaction.py --descriptors | ✓ Passed | 137 s wallet_gethdkeys.py --descriptors | ✓ Passed | 5 s wallet_groups.py --descriptors | ✓ Passed | 37 s wallet_groups.py --legacy-wallet | ✓ Passed | 82 s wallet_hd.py --descriptors | ✓ Passed | 13 s wallet_hd.py --legacy-wallet | ✓ Passed | 20 s wallet_implicitsegwit.py --legacy-wallet | ✓ Passed | 16 s wallet_import_rescan.py --legacy-wallet | ✓ Passed | 147 s wallet_import_with_label.py --legacy-wallet | ✓ Passed | 4 s wallet_importmulti.py --legacy-wallet | ✓ Passed | 29 s wallet_importprunedfunds.py --descriptors | ✓ Passed | 5 s wallet_importprunedfunds.py --legacy-wallet | ✓ Passed | 6 s wallet_keypool.py --descriptors | ✓ Passed | 12 s wallet_keypool.py --legacy-wallet | ✓ Passed | 15 s wallet_keypool_topup.py --descriptors | ✓ Passed | 48 s wallet_keypool_topup.py --legacy-wallet | ✓ Passed | 43 s wallet_labels.py --descriptors | ✓ Passed | 10 s wallet_labels.py --legacy-wallet | ✓ Passed | 16 s wallet_listdescriptors.py --descriptors | ✓ Passed | 4 s wallet_listreceivedby.py --descriptors | ✓ Passed | 12 s wallet_listreceivedby.py --legacy-wallet | ✓ Passed | 10 s wallet_listsinceblock.py --descriptors | ✓ Passed | 17 s wallet_listsinceblock.py --legacy-wallet | ✓ Passed | 17 s wallet_listtransactions.py --descriptors | ✓ Passed | 73 s wallet_multisig_descriptor_psbt.py --descriptors | ✓ Passed | 19 s wallet_multiwallet.py --descriptors | ✓ Passed | 29 s wallet_multiwallet.py --legacy-wallet | ✓ Passed | 28 s wallet_multiwallet.py --usecli | ✓ Passed | 55 s wallet_orphanedreward.py | ✓ Passed | 20 s wallet_reindex.py --descriptors | ✓ Passed | 9 s wallet_reindex.py --legacy-wallet | ✓ Passed | 9 s wallet_reorgsrestore.py | ✓ Passed | 11 s wallet_rescan_unconfirmed.py --descriptors | ✓ Passed | 3 s wallet_resendwallettransactions.py --descriptors | ✓ Passed | 4 s wallet_resendwallettransactions.py --legacy-wallet | ✓ Passed | 5 s wallet_send.py --descriptors | ✓ Passed | 49 s wallet_send.py --legacy-wallet | ✓ Passed | 87 s wallet_sendmany.py --descriptors | ✓ Passed | 4 s wallet_sendmany.py --legacy-wallet | ✓ Passed | 3 s wallet_signer.py --descriptors | ✓ Passed | 19 s wallet_signmessagewithaddress.py | ✓ Passed | 3 s wallet_signrawtransactionwithwallet.py --descriptors | ✓ Passed | 10 s wallet_signrawtransactionwithwallet.py --legacy-wallet | ✓ Passed | 6 s wallet_simulaterawtx.py --descriptors | ✓ Passed | 5 s wallet_simulaterawtx.py --legacy-wallet | ✓ Passed | 5 s wallet_spend_unconfirmed.py | ✓ Passed | 12 s wallet_startup.py | ✓ Passed | 7 s wallet_taproot.py --descriptors | ✓ Passed | 410 s wallet_timelock.py | ✓ Passed | 3 s wallet_transactiontime_rescan.py --descriptors | ✓ Passed | 49 s wallet_transactiontime_rescan.py --legacy-wallet | ✓ Passed | 136 s wallet_txn_clone.py | ✓ Passed | 8 s wallet_txn_clone.py --mineblock | ✓ Passed | 8 s wallet_txn_clone.py --segwit | ✓ Passed | 6 s wallet_txn_doublespend.py --descriptors | ✓ Passed | 7 s wallet_txn_doublespend.py --legacy-wallet | ✓ Passed | 8 s wallet_txn_doublespend.py --mineblock | ✓ Passed | 7 s wallet_watchonly.py --legacy-wallet | ✓ Passed | 4 s wallet_watchonly.py --usecli --legacy-wallet | ✓ Passed | 9 s feature_bind_port_discover.py | ○ Skipped | 1 s feature_bind_port_externalip.py | ○ Skipped | 1 s feature_unsupported_utxo_db.py | ○ Skipped | 1 s interface_usdt_coinselection.py | ○ Skipped | 1 s interface_usdt_mempool.py | ○ Skipped | 2 s interface_usdt_net.py | ○ Skipped | 2 s interface_usdt_utxocache.py | ○ Skipped | 1 s interface_usdt_validation.py | ○ Skipped | 2 s mempool_compatibility.py | ○ Skipped | 1 s wallet_backwards_compatibility.py --descriptors | ○ Skipped | 1 s wallet_backwards_compatibility.py --legacy-wallet | ○ Skipped | 1 s wallet_inactive_hdchains.py --legacy-wallet | ○ Skipped | 1 s wallet_migration.py | ○ Skipped | 1 s wallet_upgradewallet.py --legacy-wallet | ○ Skipped | 1 s feature_bind_extra.py | ✖ Failed | 2 s interface_bitcoin_cli.py --descriptors | ✖ Failed | 6 s interface_bitcoin_cli.py --legacy-wallet | ✖ Failed | 6 s rpc_bind.py --ipv4 | ✖ Failed | 2 s rpc_bind.py --ipv6 | ✖ Failed | 2 s rpc_bind.py --nonloopback | ✖ Failed | 2 s wallet_fast_rescan.py --descriptors | ✖ Failed | 69 s wallet_fundrawtransaction.py --legacy-wallet | ✖ Failed | 155 s wallet_importdescriptors.py --descriptors | ✖ Failed | 105 s wallet_listtransactions.py --legacy-wallet | ✖ Failed | 45 s wallet_miniscript.py --descriptors | ✖ Failed | 116 s wallet_sendall.py --descriptors | ✖ Failed | 42 s wallet_sendall.py --legacy-wallet | ✖ Failed | 48 s ALL | ✖ Failed | 9500 s (accumulated) Runtime: 1028 s ``` ### Operating system and version macOS 15.3
URL
https://github.com/bitcoin/bitcoin/issue/31812
Closed by
Back to List