mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-06 05:37:50 +02:00
`shutil.rmtree` is dangerous because it recursively deletes. There are not likely to be any issues with it's current uses, but it is possible that some of the assumptions being made now won't always be true, e.g. about what some of the variables being passed to `rmtree` represent. For some remaining uses of rmtree that can't be avoided for now, use `cleanup_dir` which asserts that the recursively deleted folder is a child of the the `tmpdir` of the test run. Otherwise, `tempfile.TemporaryDirectory` should be used which does it's own deleting on being garbage collected, or old fashioned unlinking and rmdir in the case of directories with known contents.
72 lines
3.0 KiB
Python
Executable File
72 lines
3.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright (c) 2017-present The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
"""Test wallet load on startup.
|
|
|
|
Verify that a bitcoind node can maintain list of wallets loading on startup
|
|
"""
|
|
import shutil
|
|
import uuid
|
|
|
|
from test_framework.test_framework import BitcoinTestFramework
|
|
from test_framework.util import (
|
|
assert_equal,
|
|
)
|
|
|
|
|
|
class WalletStartupTest(BitcoinTestFramework):
|
|
def set_test_params(self):
|
|
self.setup_clean_chain = True
|
|
self.num_nodes = 1
|
|
|
|
def skip_test_if_missing_module(self):
|
|
self.skip_if_no_wallet()
|
|
|
|
def setup_nodes(self):
|
|
self.add_nodes(self.num_nodes)
|
|
self.start_nodes()
|
|
|
|
def create_unnamed_wallet(self, **kwargs):
|
|
"""
|
|
createwallet disallows empty wallet names, so create a temporary named wallet
|
|
and move its wallet.dat to the unnamed wallet location
|
|
"""
|
|
wallet_name = uuid.uuid4().hex
|
|
self.nodes[0].createwallet(wallet_name=wallet_name, **kwargs)
|
|
self.nodes[0].unloadwallet(wallet_name)
|
|
shutil.move(self.nodes[0].wallets_path / wallet_name / "wallet.dat", self.nodes[0].wallets_path / "wallet.dat")
|
|
(self.nodes[0].wallets_path / wallet_name).rmdir()
|
|
|
|
def run_test(self):
|
|
self.log.info('Should start without any wallets')
|
|
assert_equal(self.nodes[0].listwallets(), [])
|
|
assert_equal(self.nodes[0].listwalletdir(), {'wallets': []})
|
|
|
|
self.log.info('New default wallet should load by default when there are no other wallets')
|
|
self.create_unnamed_wallet(load_on_startup=False)
|
|
self.restart_node(0)
|
|
assert_equal(self.nodes[0].listwallets(), [''])
|
|
|
|
self.log.info('Test load on startup behavior')
|
|
self.nodes[0].createwallet(wallet_name='w0', load_on_startup=True)
|
|
self.nodes[0].createwallet(wallet_name='w1', load_on_startup=False)
|
|
self.nodes[0].createwallet(wallet_name='w2', load_on_startup=True)
|
|
self.nodes[0].createwallet(wallet_name='w3', load_on_startup=False)
|
|
self.nodes[0].createwallet(wallet_name='w4', load_on_startup=False)
|
|
self.nodes[0].unloadwallet(wallet_name='w0', load_on_startup=False)
|
|
self.nodes[0].unloadwallet(wallet_name='w4', load_on_startup=False)
|
|
self.nodes[0].loadwallet(filename='w4', load_on_startup=True)
|
|
assert_equal(set(self.nodes[0].listwallets()), set(('', 'w1', 'w2', 'w3', 'w4')))
|
|
self.restart_node(0)
|
|
assert_equal(set(self.nodes[0].listwallets()), set(('', 'w2', 'w4')))
|
|
self.nodes[0].unloadwallet(wallet_name='', load_on_startup=False)
|
|
self.nodes[0].unloadwallet(wallet_name='w4', load_on_startup=False)
|
|
self.nodes[0].loadwallet(filename='w3', load_on_startup=True)
|
|
self.nodes[0].loadwallet(filename='')
|
|
self.restart_node(0)
|
|
assert_equal(set(self.nodes[0].listwallets()), set(('w2', 'w3')))
|
|
|
|
if __name__ == '__main__':
|
|
WalletStartupTest(__file__).main()
|