/ test / functional / wallet_startup.py
wallet_startup.py
 1  #!/usr/bin/env python3
 2  # Copyright (c) 2017-2022 The Bitcoin Core developers
 3  # Distributed under the MIT software license, see the accompanying
 4  # file COPYING or http://www.opensource.org/licenses/mit-license.php.
 5  """Test wallet load on startup.
 6  
 7  Verify that a bitcoind node can maintain list of wallets loading on startup
 8  """
 9  from test_framework.test_framework import BitcoinTestFramework
10  from test_framework.util import (
11      assert_equal,
12  )
13  
14  
15  class WalletStartupTest(BitcoinTestFramework):
16      def add_options(self, parser):
17          self.add_wallet_options(parser)
18  
19      def set_test_params(self):
20          self.setup_clean_chain = True
21          self.num_nodes = 1
22          self.supports_cli = True
23  
24      def skip_test_if_missing_module(self):
25          self.skip_if_no_wallet()
26  
27      def setup_nodes(self):
28          self.add_nodes(self.num_nodes)
29          self.start_nodes()
30  
31      def run_test(self):
32          self.log.info('Should start without any wallets')
33          assert_equal(self.nodes[0].listwallets(), [])
34          assert_equal(self.nodes[0].listwalletdir(), {'wallets': []})
35  
36          self.log.info('New default wallet should load by default when there are no other wallets')
37          self.nodes[0].createwallet(wallet_name='', load_on_startup=False)
38          self.restart_node(0)
39          assert_equal(self.nodes[0].listwallets(), [''])
40  
41          self.log.info('Test load on startup behavior')
42          self.nodes[0].createwallet(wallet_name='w0', load_on_startup=True)
43          self.nodes[0].createwallet(wallet_name='w1', load_on_startup=False)
44          self.nodes[0].createwallet(wallet_name='w2', load_on_startup=True)
45          self.nodes[0].createwallet(wallet_name='w3', load_on_startup=False)
46          self.nodes[0].createwallet(wallet_name='w4', load_on_startup=False)
47          self.nodes[0].unloadwallet(wallet_name='w0', load_on_startup=False)
48          self.nodes[0].unloadwallet(wallet_name='w4', load_on_startup=False)
49          self.nodes[0].loadwallet(filename='w4', load_on_startup=True)
50          assert_equal(set(self.nodes[0].listwallets()), set(('', 'w1', 'w2', 'w3', 'w4')))
51          self.restart_node(0)
52          assert_equal(set(self.nodes[0].listwallets()), set(('', 'w2', 'w4')))
53          self.nodes[0].unloadwallet(wallet_name='', load_on_startup=False)
54          self.nodes[0].unloadwallet(wallet_name='w4', load_on_startup=False)
55          self.nodes[0].loadwallet(filename='w3', load_on_startup=True)
56          self.nodes[0].loadwallet(filename='')
57          self.restart_node(0)
58          assert_equal(set(self.nodes[0].listwallets()), set(('w2', 'w3')))
59  
60  if __name__ == '__main__':
61      WalletStartupTest().main()