Skip to content

Commit

Permalink
pytest: test parsing of bolt12 invoice strings in runes.
Browse files Browse the repository at this point in the history
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
  • Loading branch information
rustyrussell committed Mar 22, 2024
1 parent 4fdc256 commit 6f1bd95
Showing 1 changed file with 74 additions and 0 deletions.
74 changes: 74 additions & 0 deletions tests/test_runes.py
Original file line number Diff line number Diff line change
Expand Up @@ -837,3 +837,77 @@ def test_rune_bolt11_parse(node_factory):
rune=rune_node_l1,
method='pay',
params={'bolt11': other_inv})

def test_rune_bolt12_parse(node_factory):
l1, l2 = node_factory.line_graph(2, opts={'experimental-offers': None})

# Two invoices.
l1inv_1msat = l2.rpc.fetchinvoice(l1.rpc.offer(1, "inv_1msat")['bolt12'])['invoice']
l1inv_2msat = l2.rpc.fetchinvoice(l1.rpc.offer(2, "inv_2msat")['bolt12'])['invoice']

rune_amount_1 = l1.rpc.createrune(restrictions=[['pinvbolt11_amount=1']])['rune']
rune_no_amount = l1.rpc.createrune(restrictions=[['pinvbolt11_amount!']])['rune']
rune_desc_inv = l1.rpc.createrune(restrictions=[['pinvbolt11_description=inv_1msat']])['rune']
rune_no_desc = l1.rpc.createrune(restrictions=[['pinvbolt11_description!']])['rune']
rune_node_l1 = l1.rpc.createrune(restrictions=[['pinvbolt11_node=' + l1.info['id']]])['rune']

# parameter must be valid invoice
for r in [rune_amount_1, rune_no_amount, rune_desc_inv, rune_no_desc, rune_node_l1]:
with pytest.raises(RpcError, match='Not permitted: Invalid invoice: '):
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=r,
method='pay',
params={'bolt11': 'lnixxx'})

# Rune amount_1 success:
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=rune_amount_1,
method='pay',
params={'bolt11': l1inv_1msat})

# Rune amount_1 fail (wrong amount)
with pytest.raises(RpcError, match='Not permitted: invoice parameter bolt11_amount is not equal to 1'):
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=rune_amount_1,
method='pay',
params={'bolt11': l1inv_2msat})

# Rune no_amount fail (bolt12 invoice always has amount)
with pytest.raises(RpcError, match='Not permitted: invoice parameter bolt11_amount is present'):
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=rune_no_amount,
method='pay',
params={'bolt11': l1inv_1msat})

# Rune desc success:
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=rune_desc_inv,
method='pay',
params={'bolt11': l1inv_1msat})

# Rune desc fail (wrong description)
with pytest.raises(RpcError, match='Not permitted: invoice parameter bolt11_description is not equal to inv_1msat'):
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=rune_desc_inv,
method='pay',
params={'bolt11': l1inv_2msat})

# Rune no_desc fail (has description)
with pytest.raises(RpcError, match='Not permitted: invoice parameter bolt11_description is present'):
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=rune_no_desc,
method='pay',
params={'bolt11': l1inv_1msat})

# Node comparison success.
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=rune_node_l1,
method='pay',
params={'bolt11': l1inv_1msat})
# Node comparison failure
l2inv = l1.rpc.fetchinvoice(l2.rpc.offer(1, "inv_1msat")['bolt12'])['invoice']
with pytest.raises(RpcError, match='Not permitted: invoice parameter bolt11_node is not equal to ' + l1.info['id']):
l1.rpc.checkrune(nodeid=l1.info['id'],
rune=rune_node_l1,
method='pay',
params={'bolt11': l2inv})

0 comments on commit 6f1bd95

Please sign in to comment.