Skip to content

Commit d07eb80

Browse files
rustyrussellmadelinevibes
authored andcommitted
pytest: fix broken test_pay_bolt11_metadata
It uses a canned, but now expired invoice. Instead, use bolt11-cli to add metadata to an existing invoice. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
1 parent bfe5dd4 commit d07eb80

1 file changed

Lines changed: 28 additions & 15 deletions

File tree

tests/test_pay.py

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5327,24 +5327,37 @@ def test_pay_manual_exclude(node_factory, bitcoind):
53275327

53285328

53295329
@unittest.skipIf(TEST_NETWORK != 'regtest', "Invoice is network specific")
5330-
def test_pay_bolt11_metadata(node_factory, bitcoind):
5331-
l1, l2 = node_factory.line_graph(2, opts={'old_hsmsecret': True})
5332-
5333-
# BOLT #11:
5334-
# > ### Please send 0.01 BTC with payment metadata 0x01fafaf0
5335-
# > lnbc10m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdp9wpshjmt9de6zqmt9w3skgct5vysxjmnnd9jx2mq8q8a04uqsp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zygs9q2gqqqqqqsgq7hf8he7ecf7n4ffphs6awl9t6676rrclv9ckg3d3ncn7fct63p6s365duk5wrk202cfy3aj5xnnp5gs3vrdvruverwwq7yzhkf5a3xqpd05wjc
5336-
5337-
b11 = l1.rpc.decode('lnbc10m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdp9wpshjmt9de6zqmt9w3skgct5vysxjmnnd9jx2mq8q8a04uqsp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zygs9q2gqqqqqqsgq7hf8he7ecf7n4ffphs6awl9t6676rrclv9ckg3d3ncn7fct63p6s365duk5wrk202cfy3aj5xnnp5gs3vrdvruverwwq7yzhkf5a3xqpd05wjc')
5338-
assert b11['payment_metadata'] == '01fafaf0'
5330+
def test_pay_bolt11_metadata(node_factory, chainparams):
5331+
l1, l2 = node_factory.line_graph(2)
53395332

5340-
# I previously hacked lightningd to add "this is metadata" to metadata.
5341-
# After CI started failing, I *also* hacked it to set expiry to BIGNUM.
5342-
inv = "lnbcrt1230n1p3yzgcxsp5q8g040f9rl9mu2unkjuj0vn262s6nyrhz5hythk3ueu2lfzahmzspp5ve584t0cv27hwmy0cx9ca8uwyqyfw9y9dm3r8vus9fv36r2l9yjsdq8v3jhxccmq6w35xjueqd9ejqmt9w3skgct5vyxqxra2q2qcqp99q2sqqqqqysgqfw6efxpzk5x5vfj8se46yg667x5cvhyttnmuqyk0q7rmhx3gs249qhtdggnek8c5adm2pztkjddlwyn2art2zg9xap2ckczzl3fzz4qqsej6mf"
5343-
# Make l2 "know" about this invoice.
5344-
l2.rpc.invoice(amount_msat=123000, label='label1', description='desc', preimage='00' * 32)
5333+
# Generate a normal invoice on l2, then use bolt11-cli to re-encode it with
5334+
# payment metadata added. old_hsmsecret gives l2 a known private key.
5335+
inv = l2.rpc.invoice(amount_msat=123000, label='label1', description='desc', preimage='00' * 32)
5336+
inv_decoded = l1.rpc.decode(inv['bolt11'])
5337+
inv_with_metadata = subprocess.check_output(['devtools/bolt11-cli', 'encode',
5338+
# l2's private key (old_hsmsecret, WIF byte stripped)
5339+
'0c633a7c17c701a0980158f5483035e01fa8bd091b47fadf2e86e589a9f93fca',
5340+
f"currency={chainparams['bip173_prefix']}",
5341+
f"p={inv['payment_hash']}",
5342+
f"s={inv['payment_secret']}",
5343+
"d=desc",
5344+
"amount=123000msat",
5345+
f"x={inv_decoded['expiry']}",
5346+
f"c={inv_decoded['min_final_cltv_expiry']}",
5347+
f"9={inv_decoded['features']}",
5348+
"m=" + b'this is metadata'.hex()]).decode('utf-8').strip()
5349+
5350+
# They should be basically identical
5351+
post_decoded = l1.rpc.decode(inv_with_metadata)
5352+
del inv_decoded['signature']
5353+
del post_decoded['signature']
5354+
del post_decoded['payment_metadata']
5355+
del inv_decoded['created_at']
5356+
del post_decoded['created_at']
5357+
assert inv_decoded == post_decoded
53455358

53465359
with pytest.raises(RpcError, match=r'Unexpected error \(invalid_onion_payload\) from final node'):
5347-
l1.rpc.xpay(inv)
5360+
l1.rpc.xpay(inv_with_metadata)
53485361

53495362
l2.daemon.wait_for_log("Unexpected payment_metadata {}".format(b'this is metadata'.hex()))
53505363

0 commit comments

Comments
 (0)