qa: Functional tests are intrinsically vulnerable to timeouts #19732

issue hebasto opened this issue on August 15, 2020
  1. hebasto commented at 8:44 PM on August 15, 2020: member

    On master (3ab2582c7fe76d2839ab493512758d5601903c86) with this patch:

    --- a/src/net.cpp
    +++ b/src/net.cpp
    @@ -2868,7 +2868,7 @@ int64_t CConnman::PoissonNextSendInbound(int64_t now, int average_interval_secon
     
     int64_t PoissonNextSend(int64_t now, int average_interval_seconds)
     {
    -    return now + (int64_t)(log1p(GetRand(1ULL << 48) * -0.0000000000000035527136788 /* -1/2^48 */) * average_interval_seconds * -1000000.0 + 0.5);
    +    return now + (int64_t)(log1p(((1ULL << 48) - 1) * -0.0000000000000035527136788 /* -1/2^48 */) * average_interval_seconds * -1000000.0 + 0.5);
     }
     
     CSipHasher CConnman::GetDeterministicRandomizer(uint64_t id) const
    

    a bunch of functional tests fail due to the timeout:

    feature_notifications.py                | ✖ Failed  | 62 s
    interface_rest.py                       | ✖ Failed  | 63 s
    interface_zmq.py                        | ✖ Failed  | 64 s
    mempool_persist.py                      | ✖ Failed  | 62 s
    mempool_unbroadcast.py                  | ✖ Failed  | 32 s
    p2p_blocksonly.py                       | ✖ Failed  | 61 s
    p2p_feefilter.py                        | ✖ Failed  | 63 s
    p2p_getaddr_caching.py                  | ✖ Failed  | 62 s
    p2p_permissions.py                      | ✖ Failed  | 63 s
    p2p_segwit.py                           | ✖ Failed  | 69 s
    p2p_tx_download.py                      | ✖ Failed  | 75 s
    rpc_deprecated.py                       | ✖ Failed  | 62 s
    rpc_psbt.py                             | ✖ Failed  | 65 s
    rpc_psbt.py --descriptors               | ✖ Failed  | 67 s
    rpc_rawtransaction.py                   | ✖ Failed  | 64 s
    wallet_abandonconflict.py               | ✖ Failed  | 63 s
    wallet_balance.py                       | ✖ Failed  | 63 s
    wallet_basic.py                         | ✖ Failed  | 68 s
    wallet_basic.py --descriptors           | ✖ Failed  | 72 s
    wallet_bumpfee.py                       | ✖ Failed  | 64 s
    wallet_groups.py                        | ✖ Failed  | 62 s
    wallet_implicitsegwit.py                | ✖ Failed  | 62 s
    wallet_listreceivedby.py                | ✖ Failed  | 62 s
    wallet_listtransactions.py              | ✖ Failed  | 62 s
    wallet_resendwallettransactions.py      | ✖ Failed  | 62 s
    

    Just bumping timeout values only decreases the probability of a new timeout failure occurrence.

    Suggested solution #19588 was ugly and controversial, and it has being closed for now.

    Related issues:

  2. hebasto renamed this:
    test: Functional tests are intrinsic vulnerable to timeouts
    qa: Functional tests are intrinsic vulnerable to timeouts
    on Nov 6, 2020
  3. rebroad commented at 10:11 AM on February 26, 2022: contributor

    https://github.com/bitcoin-core/gui/pull/559 - I'm also getting a test failing in this PR, probably due to a timeout.

  4. maflcko added the label Brainstorming on Jan 9, 2023
  5. maflcko added the label Tests on Jan 9, 2023
  6. Sjors commented at 9:52 AM on February 10, 2025: member

    Is #31833 a symptom of this?

  7. mzumsande commented at 6:44 PM on February 10, 2025: contributor

    Is #31833 a symptom of this?

    I don't think so, just a missing sync there.

  8. maflcko commented at 6:39 PM on May 19, 2026: member

    Just to give a status update on this: The issue still exists, however:

    • The CI normally has larger timeouts (due to slow runners+sanitizers+emulation), so the issue can't be seen there often, unless mocktime is used.
    • Many tests opt in to immediate tx relay, as they do not test the delay specifically.

    The current list of failing tests is smaller, probably:

    mempool_accept_wtxid.py                                                          | ✖ Failed  | 60 s
    mempool_limit.py                                                                 | ✖ Failed  | 64 s
    mempool_package_rbf.py                                                           | ✖ Failed  | 64 s
    mempool_persist.py                                                               | ✖ Failed  | 75 s
    mempool_reorg.py                                                                 | ✖ Failed  | 10 s
    p2p_blocksonly.py                                                                | ✖ Failed  | 61 s
    p2p_leak_tx.py --v1transport                                                     | ✖ Failed  | 61 s
    p2p_leak_tx.py --v2transport                                                     | ✖ Failed  | 61 s
    p2p_private_broadcast.py                                                         | ✖ Failed  | 65 s
    p2p_tx_download.py                                                               | ✖ Failed  | 29 s
    p2p_tx_privacy.py                                                                | ✖ Failed  | 61 s
    rpc_psbt.py                                                                      | ✖ Failed  | 84 s
    wallet_balance.py                                                                | ✖ Failed  | 68 s
    wallet_change_address.py                                                         | ✖ Failed  | 67 s
    wallet_conflicts.py                                                              | ✖ Failed  | 64 s
    

    The current diff to reproduce would be something like:

    diff --git a/src/net_processing.cpp b/src/net_processing.cpp
    index 631e968da7..0d3748f05c 100644
    --- a/src/net_processing.cpp
    +++ b/src/net_processing.cpp
    @@ -1177,3 +1177,3 @@ std::chrono::microseconds PeerManagerImpl::NextInvToInbounds(std::chrono::micros
         if (timer < now) {
    -        timer = now + m_rng.rand_exp_duration(average_interval);
    +        timer = now + 12min;
         }
    

    I wonder if a possible solution could be to:

    • use immediate tx relay in the tests that do not check the delay.
    • Use mocktime or a larger base-timeout for the other tests.
  9. Sjors commented at 6:36 AM on May 21, 2026: member

    use immediate tx relay in the tests that do not check the delay

    This seems like a good idea.

  10. hebasto renamed this:
    qa: Functional tests are intrinsic vulnerable to timeouts
    qa: Functional tests are intrinsically vulnerable to timeouts
    on May 21, 2026
  11. fanquake referenced this in commit e4f033789c on May 22, 2026
  12. Kino1994 referenced this in commit e09cc2d7e8 on Jun 28, 2026
  13. BigcoinBGC referenced this in commit 42f6446a91 on Jun 30, 2026
  14. Kino1994 referenced this in commit 1f7810ef3b on Aug 19, 2026
  15. maflcko removed the label Brainstorming on Sep 1, 2026

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-09-06 07:53 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me