Skip to content

Commit ad0ae85

Browse files
committed
xpay: test payment with blocks out of sync
Changelog-None Signed-off-by: Lagrang3 <lagrang3@protonmail.com>
1 parent e60fd02 commit ad0ae85

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

tests/test_xpay.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def test_pay_fakenet(node_factory):
2424
hash2 = sha256(bytes.fromhex('01' + '00' * 31)).hexdigest()
2525
failhash = '00' * 32
2626

27-
# Create gossip map of channels from l2 (aka nodemap[0])
27+
# Create gossip map of channels from l2 (aka nodemap[0])
2828
gsfile, nodemap = generate_gossip_store([GenChannel(0, 1, capacity_sats=100_000),
2929
GenChannel(1, 2, capacity_sats=100_000),
3030
GenChannel(2, 3, capacity_sats=200_000)],
@@ -1018,3 +1018,37 @@ def test_xpay_bip353(node_factory):
10181018

10191019
node_factory.join_nodes([l2, l1])
10201020
l2.rpc.xpay('fake@fake.com', 100)
1021+
1022+
1023+
def test_blockheight_mismatch(node_factory, bitcoind):
1024+
"""Test that we can send a payment even if not caught up with the chain.
1025+
1026+
Since CLTV computations are based on headers and not our own sync height, the
1027+
recipient should still be happy with the parameters we chose.
1028+
1029+
Stolen from pay
1030+
"""
1031+
1032+
send, direct, recv = node_factory.line_graph(3, wait_for_announce=True)
1033+
sync_blockheight(bitcoind, [send, recv])
1034+
1035+
# Pin `send` at the current height. by not returning the next
1036+
# block. This error is special-cased not to count as the
1037+
# backend failing since it is used to poll for the next block.
1038+
def mock_getblock(req):
1039+
return {
1040+
"id": req["id"],
1041+
"error": {"code": -8, "message": "Block height out of range"},
1042+
}
1043+
1044+
send.daemon.rpcproxy.mock_rpc("getblock", mock_getblock)
1045+
bitcoind.generate_block(100)
1046+
1047+
sync_blockheight(bitcoind, [recv])
1048+
1049+
inv = recv.rpc.invoice(42, "lbl", "desc")["bolt11"]
1050+
send.rpc.xpay(inv)
1051+
1052+
# Test a direct payment as well.
1053+
inv = direct.rpc.invoice(13, "lbl", "desc")["bolt11"]
1054+
send.rpc.xpay(inv)

0 commit comments

Comments
 (0)