Browse Source

pytest: Reproduce ludicrous presplit issue

Huge payment + presplit modifier = too many HTLCs...
bump-pyln-proto
Christian Decker 4 years ago
committed by Rusty Russell
parent
commit
3f6809c934
  1. 33
      tests/test_pay.py

33
tests/test_pay.py

@ -3471,3 +3471,36 @@ def test_mpp_interference_2(node_factory, bitcoind, executor):
# Both payments should succeed.
p2.result(TIMEOUT)
p3.result(TIMEOUT)
@pytest.mark.xfail(strict=True)
def test_large_mpp_presplit(node_factory):
"""Make sure that ludicrous amounts don't saturate channels
We aim to have at most PRESPLIT_MAX_SPLITS HTLCs created directly from the
`presplit` modifier. The modifier will scale up its target size to
guarantee this, while still bucketizing payments that are in the following
range:
```
target_size = PRESPLIT_MAX_SPLITS^{n} + MPP_TARGET_SIZE
target_size < amount <= target_size * PRESPLIT_MAX_SPLITS
```
"""
PRESPLIT_MAX_SPLITS = 16
MPP_TARGET_SIZE = 10 ** 7
amt = 400 * MPP_TARGET_SIZE
l1, l2, l3 = node_factory.line_graph(
3, fundamount=10**8, wait_for_announce=True,
opts={'wumbo': None}
)
inv = l3.rpc.invoice(amt, 'lbl', 'desc')['bolt11']
p = l1.rpc.pay(inv)
assert(p['parts'] <= PRESPLIT_MAX_SPLITS)
inv = l3.rpc.listinvoices()['invoices'][0]
assert(inv['msatoshi'] == inv['msatoshi_received'])

Loading…
Cancel
Save