From 909bed6a30c124d78d78af7c81b130309e44ce21 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 27 Jul 2023 09:44:14 +0930 Subject: [PATCH] pytest: add test for db crash on conflicting invoice.id ``` 2023-07-26T14:26:37.504Z BROKEN lightningd: Error executing statement: wallet/invoices.c:282: INSERT INTO invoices ( id, payment_hash, payment_key, state , msatoshi, label, expiry_time , pay_index, msatoshi_received , paid_timestamp, bolt11, description, features, local_offer_id) VALUES ( ?, ?, ?, ? , ?, ?, ? , NULL, NULL , NULL, ?, ?, ?, ?);: UNIQUE constraint failed: invoices.id ``` Reported-by: https://github.com/hMsats Signed-off-by: Rusty Russell --- tests/data/invoices_pre_waitindex.sqlite3.xz | Bin 0 -> 10964 bytes tests/test_invoices.py | 14 ++++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 tests/data/invoices_pre_waitindex.sqlite3.xz diff --git a/tests/data/invoices_pre_waitindex.sqlite3.xz b/tests/data/invoices_pre_waitindex.sqlite3.xz new file mode 100644 index 0000000000000000000000000000000000000000..979368381a1f9e5f7ace41e9a6d5c03761cd2434 GIT binary patch literal 10964 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 CQYzd4 literal 0 HcmV?d00001 diff --git a/tests/test_invoices.py b/tests/test_invoices.py index c38571882..14e6a37e9 100644 --- a/tests/test_invoices.py +++ b/tests/test_invoices.py @@ -911,3 +911,17 @@ def test_listinvoices_index(node_factory, executor): # limit should work! for i in range(1, 10): assert only_one(l2.rpc.listinvoices(index='updated', start=i, limit=1)['invoices'])['label'] == str(70 + 1 - i) + + +@pytest.mark.xfail(strict=True) +@unittest.skipIf(TEST_NETWORK != 'regtest', "The DB migration is network specific due to the chain var.") +def test_invoices_wait_db_migration(node_factory, bitcoind): + """Canned db is from v23.02.2's test_invoice_routeboost_private l2""" + bitcoind.generate_block(28) + l2 = node_factory.get_node(node_id=2, + dbfile='invoices_pre_waitindex.sqlite3.xz', + options={'database-upgrade': True}) + + # And now we crash: + # Error executing statement: wallet/invoices.c:282: INSERT INTO invoices ( id, payment_hash, payment_key, state , msatoshi, label, expiry_time , pay_index, msatoshi_received , paid_timestamp, bolt11, description, features, local_offer_id) VALUES ( ?, ?, ?, ? , ?, ?, ? , NULL, NULL , NULL, ?, ?, ?, ?);: UNIQUE constraint failed: invoices.id + l2.rpc.invoice(1000, "test", "test")