tests: walletdb: add failing test case for persistence with jsonpatch
add reproducer for https://github.com/spesmilo/electrum/issues/8842
This commit is contained in:
@@ -17,7 +17,11 @@ from electrum.util import TxMinedInfo, InvalidPassword
|
||||
from electrum.bitcoin import COIN
|
||||
from electrum.wallet_db import WalletDB, JsonDB
|
||||
from electrum.simple_config import SimpleConfig
|
||||
from electrum import util
|
||||
from electrum.daemon import Daemon
|
||||
from electrum.invoices import PR_UNPAID, PR_PAID, PR_UNCONFIRMED
|
||||
from electrum.transaction import tx_from_any
|
||||
from electrum.address_synchronizer import TX_HEIGHT_UNCONFIRMED
|
||||
|
||||
from . import ElectrumTestCase
|
||||
|
||||
@@ -112,6 +116,32 @@ class TestWalletStorage(WalletTestCase):
|
||||
self.assertTrue('030dac677b9484e23db6f9255eddf433f4f12c02f9b35e0100f2f103ffbccf540f' in wallet.keystore.keypairs)
|
||||
self.assertTrue('02f11d5f222a728fd08226cb5a1e85a74d58fc257bd3764bf1234346f91defed72' in wallet.keystore.keypairs)
|
||||
|
||||
async def test_storage_prevouts_by_scripthash_persistence(self):
|
||||
text = 'cycle rocket west magnet parrot shuffle foot correct salt library feed song'
|
||||
d = restore_wallet_from_text(text, path=self.wallet_path, gap_limit=2, config=self.config)
|
||||
wallet1 = d['wallet'] # type: Standard_Wallet
|
||||
# create payreq
|
||||
addr = wallet1.get_unused_address()
|
||||
self.assertEqual("1NNkttn1YvVGdqBW4PR6zvc3Zx3H5owKRf", addr)
|
||||
pr_key = wallet1.create_request(amount_sat=10000, message="msg", address=addr, exp_delay=86400)
|
||||
pr = wallet1.get_request(pr_key)
|
||||
self.assertIsNotNone(pr)
|
||||
self.assertEqual(PR_UNPAID, wallet1.get_invoice_status(pr))
|
||||
await wallet1.stop()
|
||||
|
||||
# open the wallet anew again, and get paid onchain
|
||||
del wallet1
|
||||
wallet1 = Daemon._load_wallet(self.wallet_path, password=None, config=self.config)
|
||||
tx = tx_from_any("02000000000101a97a9ae7fb1a9220fdd170a974987ac24631dcff89b60fa4907c78c3639994db0000000000fdffffff0210270000000000001976a914ea7804a2c266063572cc009a63dc25dcc0e9d9b588ac20491e0000000000160014b8e4fdc91593b67de2bf214694ef47e38dc2ee8e02473044022005326882904906cfa9c1de75333ace1019596f2ab25d21118220d037dfc0e48b02207d0b3f075cfe5e1e0247ff3cdd7155dc05e7459daf1bfa0ea02e9112b9151ec90121026cc6a74c2b0e38661d341ffae48fe7dde5196ca4afe95d28b496673fa4cf646700000000")
|
||||
wallet1.adb.receive_tx_callback(tx, TX_HEIGHT_UNCONFIRMED)
|
||||
self.assertEqual(PR_UNCONFIRMED, wallet1.get_invoice_status(pr))
|
||||
await wallet1.stop()
|
||||
|
||||
# open the wallet anew again, and verify payreq is still paid
|
||||
del wallet1
|
||||
wallet1 = Daemon._load_wallet(self.wallet_path, password=None, config=self.config)
|
||||
self.assertEqual(PR_UNCONFIRMED, wallet1.get_invoice_status(pr))
|
||||
|
||||
|
||||
class FakeExchange(ExchangeBase):
|
||||
def __init__(self, rate):
|
||||
|
||||
Reference in New Issue
Block a user