Skip to content

Commit ea3009e

Browse files
committed
wallet: Add walletdir arg unit tests
1 parent 8f46454 commit ea3009e

File tree

5 files changed

+127
-3
lines changed

5 files changed

+127
-3
lines changed

build_msvc/test_bitcoin/test_bitcoin.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<ClCompile Include="..\..\src\wallet\test\*_tests.cpp" />
2525
<ClCompile Include="..\..\src\test\test_bitcoin.cpp" />
2626
<ClCompile Include="..\..\src\test\test_bitcoin_main.cpp" />
27-
<ClCompile Include="..\..\src\wallet\test\wallet_test_fixture.cpp" />
27+
<ClCompile Include="..\..\src\wallet\test\*_fixture.cpp" />
2828
</ItemGroup>
2929
<ItemGroup>
3030
<ProjectReference Include="..\libbitcoinconsensus\libbitcoinconsensus.vcxproj">

src/Makefile.test.include

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,14 @@ BITCOIN_TESTS += \
110110
wallet/test/psbt_wallet_tests.cpp \
111111
wallet/test/wallet_tests.cpp \
112112
wallet/test/wallet_crypto_tests.cpp \
113-
wallet/test/coinselector_tests.cpp
113+
wallet/test/coinselector_tests.cpp \
114+
wallet/test/init_tests.cpp
114115

115116
BITCOIN_TEST_SUITE += \
116117
wallet/test/wallet_test_fixture.cpp \
117-
wallet/test/wallet_test_fixture.h
118+
wallet/test/wallet_test_fixture.h \
119+
wallet/test/init_test_fixture.cpp \
120+
wallet/test/init_test_fixture.h
118121
endif
119122

120123
test_test_bitcoin_SOURCES = $(BITCOIN_TEST_SUITE) $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES)

src/wallet/test/init_test_fixture.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright (c) 2018 The Bitcoin Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#include <fs.h>
6+
7+
#include <wallet/test/init_test_fixture.h>
8+
9+
InitWalletDirTestingSetup::InitWalletDirTestingSetup(const std::string& chainName): BasicTestingSetup(chainName)
10+
{
11+
std::string sep;
12+
sep += fs::path::preferred_separator;
13+
14+
m_datadir = SetDataDir("tempdir");
15+
m_cwd = fs::current_path();
16+
17+
m_walletdir_path_cases["default"] = m_datadir / "wallets";
18+
m_walletdir_path_cases["custom"] = m_datadir / "my_wallets";
19+
m_walletdir_path_cases["nonexistent"] = m_datadir / "path_does_not_exist";
20+
m_walletdir_path_cases["file"] = m_datadir / "not_a_directory.dat";
21+
m_walletdir_path_cases["trailing"] = m_datadir / "wallets" / sep;
22+
m_walletdir_path_cases["trailing2"] = m_datadir / "wallets" / sep / sep;
23+
24+
fs::current_path(m_datadir);
25+
m_walletdir_path_cases["relative"] = "wallets";
26+
27+
fs::create_directories(m_walletdir_path_cases["default"]);
28+
fs::create_directories(m_walletdir_path_cases["custom"]);
29+
fs::create_directories(m_walletdir_path_cases["relative"]);
30+
std::ofstream f(m_walletdir_path_cases["file"].BOOST_FILESYSTEM_C_STR);
31+
f.close();
32+
}
33+
34+
InitWalletDirTestingSetup::~InitWalletDirTestingSetup()
35+
{
36+
fs::current_path(m_cwd);
37+
}
38+
39+
void InitWalletDirTestingSetup::SetWalletDir(const fs::path& walletdir_path)
40+
{
41+
gArgs.ForceSetArg("-walletdir", walletdir_path.string());
42+
}

src/wallet/test/init_test_fixture.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// Copyright (c) 2018 The Bitcoin Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#ifndef BITCOIN_WALLET_TEST_INIT_TEST_FIXTURE_H
6+
#define BITCOIN_WALLET_TEST_INIT_TEST_FIXTURE_H
7+
8+
#include <test/test_bitcoin.h>
9+
10+
11+
struct InitWalletDirTestingSetup: public BasicTestingSetup {
12+
explicit InitWalletDirTestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
13+
~InitWalletDirTestingSetup();
14+
void SetWalletDir(const fs::path& walletdir_path);
15+
16+
fs::path m_datadir;
17+
fs::path m_cwd;
18+
std::map<std::string, fs::path> m_walletdir_path_cases;
19+
};
20+
21+
#endif // BITCOIN_WALLET_TEST_INIT_TEST_FIXTURE_H

src/wallet/test/init_tests.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// Copyright (c) 2018 The Bitcoin Core developers
2+
// Distributed under the MIT software license, see the accompanying
3+
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4+
5+
#include <boost/test/unit_test.hpp>
6+
7+
#include <test/test_bitcoin.h>
8+
#include <wallet/test/init_test_fixture.h>
9+
10+
#include <init.h>
11+
#include <walletinitinterface.h>
12+
#include <wallet/wallet.h>
13+
14+
15+
BOOST_FIXTURE_TEST_SUITE(init_tests, InitWalletDirTestingSetup)
16+
17+
BOOST_AUTO_TEST_CASE(walletinit_verify_walletdir_default)
18+
{
19+
SetWalletDir(m_walletdir_path_cases["default"]);
20+
bool result = g_wallet_init_interface.Verify();
21+
BOOST_CHECK(result == true);
22+
fs::path walletdir = gArgs.GetArg("-walletdir", "");
23+
fs::path expected_path = fs::canonical(m_walletdir_path_cases["default"]);
24+
BOOST_CHECK(walletdir == expected_path);
25+
}
26+
27+
BOOST_AUTO_TEST_CASE(walletinit_verify_walletdir_custom)
28+
{
29+
SetWalletDir(m_walletdir_path_cases["custom"]);
30+
bool result = g_wallet_init_interface.Verify();
31+
BOOST_CHECK(result == true);
32+
fs::path walletdir = gArgs.GetArg("-walletdir", "");
33+
fs::path expected_path = fs::canonical(m_walletdir_path_cases["custom"]);
34+
BOOST_CHECK(walletdir == expected_path);
35+
}
36+
37+
BOOST_AUTO_TEST_CASE(walletinit_verify_walletdir_does_not_exist)
38+
{
39+
SetWalletDir(m_walletdir_path_cases["nonexistent"]);
40+
bool result = g_wallet_init_interface.Verify();
41+
BOOST_CHECK(result == false);
42+
}
43+
44+
BOOST_AUTO_TEST_CASE(walletinit_verify_walletdir_is_not_directory)
45+
{
46+
SetWalletDir(m_walletdir_path_cases["file"]);
47+
bool result = g_wallet_init_interface.Verify();
48+
BOOST_CHECK(result == false);
49+
}
50+
51+
BOOST_AUTO_TEST_CASE(walletinit_verify_walletdir_is_not_relative)
52+
{
53+
SetWalletDir(m_walletdir_path_cases["relative"]);
54+
bool result = g_wallet_init_interface.Verify();
55+
BOOST_CHECK(result == false);
56+
}
57+
58+
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)