Skip to content

Commit

Permalink
QA: wallet_multiwallet: Check that recursive symlink directory and wa…
Browse files Browse the repository at this point in the history
…llet.dat loops are ignored
  • Loading branch information
luke-jr committed Nov 6, 2020
1 parent 69f59af commit 24d2d33
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion test/functional/wallet_multiwallet.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from threading import Thread
import os
import shutil
import stat
import time

from test_framework.authproxy import JSONRPCException
Expand Down Expand Up @@ -78,6 +79,11 @@ def wallet_file(name):
os.mkdir(wallet_dir('w7'))
os.symlink('w7', wallet_dir('w7_symlink'))

os.symlink('..', wallet_dir('recursive_dir_symlink'))

os.mkdir(wallet_dir('self_walletdat_symlink'))
os.symlink('wallet.dat', wallet_dir('self_walletdat_symlink/wallet.dat'))

# rename wallet.dat to make sure plain wallet file paths (as opposed to
# directory paths) can be loaded
# create another dummy wallet for use in testing backups later
Expand Down Expand Up @@ -117,7 +123,16 @@ def wallet_file(name):
self.nodes[0].createwallet(wallet_name)
for wallet_name in to_load:
self.nodes[0].loadwallet(wallet_name)
assert_equal(sorted(map(lambda w: w['name'], self.nodes[0].listwalletdir()['wallets'])), sorted(in_wallet_dir))

os.mkdir(wallet_dir('no_access'))
os.chmod(wallet_dir('no_access'), 0)
try:
with self.nodes[0].assert_debug_log(expected_msgs=['Too many levels of symbolic links', 'Error scanning']):
walletlist = self.nodes[0].listwalletdir()['wallets']
finally:
# Need to ensure access is restored for cleanup
os.chmod(wallet_dir('no_access'), stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
assert_equal(sorted(map(lambda w: w['name'], walletlist)), sorted(in_wallet_dir))

assert_equal(set(node.listwallets()), set(wallet_names))

Expand Down

0 comments on commit 24d2d33

Please sign in to comment.