Skip to content

Commit

Permalink
tests: make test_lockup_drain a lot less flaky
Browse files Browse the repository at this point in the history
The feerate at which a 'forced feerate' causes capacity to be exceeded is
incredibly variable

FIXME: investigate why, but for now use a feerate that's high enough to
always trigger the capacity exceeded check
  • Loading branch information
niftynei committed Oct 4, 2021
1 parent c4505b7 commit 3e39179
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions tests/test_pay.py
Original file line number Diff line number Diff line change
Expand Up @@ -2410,27 +2410,28 @@ def test_channel_spendable_receivable_capped(node_factory, bitcoind):
assert l2.rpc.listpeers()['peers'][0]['channels'][0]['receivable_msat'] == Millisatoshi(0xFFFFFFFF)


@unittest.skipIf(True, "Test is extremely flaky")
@unittest.skipIf(not DEVELOPER and VALGRIND, "Doesn't raise exception, needs better sync")
def test_lockup_drain(node_factory, bitcoind):
"""Try to get channel into a state where opener can't afford fees on additional HTLC, so peer can't add HTLC"""
l1, l2 = node_factory.line_graph(2, opts={'may_reconnect': True})
l1, l2 = node_factory.line_graph(2, opts={'may_reconnect': True,
'feerates': (15000, 15000, 15000, 15000)})

# l1 sends all the money to l2 until even 1 msat can't get through.
total = l1.drain(l2)

# Even if feerate now increases 2x (30000), l2 should be able to send
# Even if feerate now increases, l2 should be able to send
# non-dust HTLC to l1.
l1.force_feerates(30000)
assert total != 0
l2.pay(l1, total // 2)

# reset fees and send all back again
l1.force_feerates(15000)
l1.drain(l2)

# But if feerate increase just a little more, l2 should not be able to send
# non-fust HTLC to l1
l1.force_feerates(30002) # TODO: Why does 30001 fail? off by one in C code?
# But if feerate increases, l2 should not be able to send
# non-dust HTLC to l1
l1.force_feerates(35000) # TODO: Why is this flaky af
wait_for(lambda: l1.rpc.listpeers()['peers'][0]['connected'])
with pytest.raises(RpcError, match=r".*Capacity exceeded.*"):
l2.pay(l1, total // 2)
Expand Down

0 comments on commit 3e39179

Please sign in to comment.