From 85180dbfeeee2ce3f159551b340e481339fd0944 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 26 Jul 2022 13:53:50 +0930 Subject: [PATCH] pytest: fix flake in test_feerates As the comment in set_feerates says: "Technically, this waits until it's called, not until it's processed.". And the wait_for() line doesn't work, since that condition is already true. ``` @unittest.skipIf(TEST_NETWORK == 'liquid-regtest', "Fees on elements are different") @unittest.skipIf( not DEVELOPER or DEPRECATED_APIS, "Without DEVELOPER=1 we snap to " "FEERATE_FLOOR on testnets, and we test the new API." ) def test_feerates(node_factory): l1 = node_factory.get_node(options={'log-level': 'io', 'dev-no-fake-fees': True}, start=False) l1.daemon.rpcproxy.mock_rpc('estimatesmartfee', { 'error': {"errors": ["Insufficient data or no feerate found"], "blocks": 0} }) l1.start() # All estimation types types = ["opening", "mutual_close", "unilateral_close", "delayed_to_us", "htlc_resolution", "penalty"] # Try parsing the feerates, won't work because can't estimate for t in types: with pytest.raises(RpcError, match=r'Cannot estimate fees'): feerate = l1.rpc.parsefeerate(t) # Query feerates (shouldn't give any!) wait_for(lambda: len(l1.rpc.feerates('perkw')['perkw']) == 2) feerates = l1.rpc.feerates('perkw') assert feerates['warning_missing_feerates'] == 'Some fee estimates unavailable: bitcoind startup?' assert 'perkb' not in feerates assert feerates['perkw']['max_acceptable'] == 2**32 - 1 assert feerates['perkw']['min_acceptable'] == 253 for t in types: assert t not in feerates['perkw'] wait_for(lambda: len(l1.rpc.feerates('perkb')['perkb']) == 2) feerates = l1.rpc.feerates('perkb') assert feerates['warning_missing_feerates'] == 'Some fee estimates unavailable: bitcoind startup?' assert 'perkw' not in feerates assert feerates['perkb']['max_acceptable'] == (2**32 - 1) assert feerates['perkb']['min_acceptable'] == 253 * 4 for t in types: assert t not in feerates['perkb'] # Now try setting them, one at a time. # Set CONSERVATIVE/2 feerate, for max l1.set_feerates((15000, 0, 0, 0), True) wait_for(lambda: len(l1.rpc.feerates('perkw')['perkw']) == 2) feerates = l1.rpc.feerates('perkw') assert feerates['warning_missing_feerates'] == 'Some fee estimates unavailable: bitcoind startup?' assert 'perkb' not in feerates > assert feerates['perkw']['max_acceptable'] == 15000 * 10 E assert 4294967295 == (15000 * 10) tests/test_misc.py:1392: AssertionError ``` Signed-off-by: Rusty Russell --- tests/test_misc.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_misc.py b/tests/test_misc.py index 8607a6c9d..2f67ee17b 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -1384,11 +1384,10 @@ def test_feerates(node_factory): # Now try setting them, one at a time. # Set CONSERVATIVE/2 feerate, for max l1.set_feerates((15000, 0, 0, 0), True) - wait_for(lambda: len(l1.rpc.feerates('perkw')['perkw']) == 2) + wait_for(lambda: l1.rpc.feerates('perkw')['perkw']['max_acceptable'] == 15000 * 10) feerates = l1.rpc.feerates('perkw') assert feerates['warning_missing_feerates'] == 'Some fee estimates unavailable: bitcoind startup?' assert 'perkb' not in feerates - assert feerates['perkw']['max_acceptable'] == 15000 * 10 assert feerates['perkw']['min_acceptable'] == 253 # Set ECONOMICAL/6 feerate, for unilateral_close and htlc_resolution