@@ -170,5 +170,46 @@ def run_test(self):
170
170
assert_equal (w1 .getwalletinfo ()['paytxfee' ], 0 )
171
171
assert_equal (w2 .getwalletinfo ()['paytxfee' ], 4.0 )
172
172
173
+ self .log .info ("Test dynamic wallet loading" )
174
+
175
+ self .restart_node (0 , ['-nowallet' ])
176
+ assert_equal (node .listwallets (), [])
177
+ assert_raises_rpc_error (- 32601 , "Method not found" , node .getwalletinfo )
178
+
179
+ self .log .info ("Load first wallet" )
180
+ loadwallet_name = node .loadwallet (wallet_names [0 ])
181
+ assert_equal (loadwallet_name ['name' ], wallet_names [0 ])
182
+ assert_equal (node .listwallets (), wallet_names [0 :1 ])
183
+ node .getwalletinfo ()
184
+ w1 = node .get_wallet_rpc (wallet_names [0 ])
185
+ w1 .getwalletinfo ()
186
+
187
+ self .log .info ("Load second wallet" )
188
+ loadwallet_name = node .loadwallet (wallet_names [1 ])
189
+ assert_equal (loadwallet_name ['name' ], wallet_names [1 ])
190
+ assert_equal (node .listwallets (), wallet_names [0 :2 ])
191
+ assert_raises_rpc_error (- 19 , "Wallet file not specified" , node .getwalletinfo )
192
+ w2 = node .get_wallet_rpc (wallet_names [1 ])
193
+ w2 .getwalletinfo ()
194
+
195
+ self .log .info ("Load remaining wallets" )
196
+ for wallet_name in wallet_names [2 :]:
197
+ loadwallet_name = self .nodes [0 ].loadwallet (wallet_name )
198
+ assert_equal (loadwallet_name ['name' ], wallet_name )
199
+
200
+ assert_equal (set (self .nodes [0 ].listwallets ()), set (wallet_names ))
201
+
202
+ # Fail to load if wallet doesn't exist
203
+ assert_raises_rpc_error (- 18 , 'Wallet wallets not found.' , self .nodes [0 ].loadwallet , 'wallets' )
204
+
205
+ # Fail to load duplicate wallets
206
+ assert_raises_rpc_error (- 4 , 'Wallet file verification failed: Error loading wallet w1. Duplicate -wallet filename specified.' , self .nodes [0 ].loadwallet , wallet_names [0 ])
207
+
208
+ # Fail to load if one wallet is a copy of another
209
+ assert_raises_rpc_error (- 1 , "BerkeleyBatch: Can't open database w8_copy (duplicates fileid" , self .nodes [0 ].loadwallet , 'w8_copy' )
210
+
211
+ # Fail to load if wallet file is a symlink
212
+ assert_raises_rpc_error (- 4 , "Wallet file verification failed: Invalid -wallet path 'w8_symlink'" , self .nodes [0 ].loadwallet , 'w8_symlink' )
213
+
173
214
if __name__ == '__main__' :
174
215
MultiWalletTest ().main ()
0 commit comments