Bitcoin ABC 0.26.3
P2P Digital Currency
Loading...
Searching...
No Matches
walletdb_tests.cpp
Go to the documentation of this file.
1// Copyright (c) 2017-2020 The Bitcoin 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 <wallet/walletdb.h>
6
7#include <chainparams.h>
8#include <interfaces/chain.h>
9#include <node/context.h>
10#include <wallet/wallet.h>
11
12#include <test/util/setup_common.h>
14
15#include <boost/test/unit_test.hpp>
16
17#include <memory>
18
19namespace {
20static std::unique_ptr<CWallet> LoadWallet(WalletBatch &batch) {
22 auto chain = interfaces::MakeChain(node, Params());
23 std::unique_ptr<CWallet> wallet =
24 std::make_unique<CWallet>(chain.get(), "", CreateDummyWalletDatabase());
25 DBErrors res = batch.LoadWallet(wallet.get());
27 return wallet;
28}
29} // namespace
30
32
34 WalletBatch batch(m_wallet.GetDBHandle());
35
38
39 BOOST_CHECK(batch.WriteName(dst1, "name1"));
40 BOOST_CHECK(batch.WriteName(dst2, "name2"));
41 {
42 auto w = LoadWallet(batch);
43 LOCK(w->cs_wallet);
44 BOOST_CHECK_EQUAL(1, w->m_address_book.count(dst1));
45 BOOST_CHECK_EQUAL("name1", w->m_address_book[dst1].GetLabel());
46 BOOST_CHECK_EQUAL("name2", w->m_address_book[dst2].GetLabel());
47 }
48
49 batch.EraseName(dst1);
50
51 {
52 auto w = LoadWallet(batch);
53 LOCK(w->cs_wallet);
54 BOOST_CHECK_EQUAL(0, w->m_address_book.count(dst1));
55 BOOST_CHECK_EQUAL(1, w->m_address_book.count(dst2));
56 }
57}
58
60 WalletBatch batch(m_wallet.GetDBHandle());
61
64
65 BOOST_CHECK(batch.WritePurpose(dst1, "purpose1"));
66 BOOST_CHECK(batch.WritePurpose(dst2, "purpose2"));
67 {
68 auto w = LoadWallet(batch);
69 LOCK(w->cs_wallet);
70 BOOST_CHECK_EQUAL(1, w->m_address_book.count(dst1));
71 BOOST_CHECK_EQUAL("purpose1", w->m_address_book[dst1].purpose);
72 BOOST_CHECK_EQUAL("purpose2", w->m_address_book[dst2].purpose);
73 }
74
75 batch.ErasePurpose(dst1);
76
77 {
78 auto w = LoadWallet(batch);
79 LOCK(w->cs_wallet);
80 BOOST_CHECK_EQUAL(0, w->m_address_book.count(dst1));
81 BOOST_CHECK_EQUAL(1, w->m_address_book.count(dst2));
82 }
83}
84
86 WalletBatch batch(m_wallet.GetDBHandle());
87
90
91 BOOST_CHECK(batch.WriteDestData(dst1, "key1", "value1"));
92 BOOST_CHECK(batch.WriteDestData(dst1, "key2", "value2"));
93 BOOST_CHECK(batch.WriteDestData(dst2, "key1", "value3"));
94 BOOST_CHECK(batch.WriteDestData(dst2, "key2", "value4"));
95 {
96 auto w = LoadWallet(batch);
97 LOCK(w->cs_wallet);
98 std::string val;
99 BOOST_CHECK(w->GetDestData(dst1, "key1", &val));
100 BOOST_CHECK_EQUAL("value1", val);
101 BOOST_CHECK(w->GetDestData(dst1, "key2", &val));
102 BOOST_CHECK_EQUAL("value2", val);
103 BOOST_CHECK(w->GetDestData(dst2, "key1", &val));
104 BOOST_CHECK_EQUAL("value3", val);
105 BOOST_CHECK(w->GetDestData(dst2, "key2", &val));
106 BOOST_CHECK_EQUAL("value4", val);
107 }
108
109 batch.EraseDestData(dst1, "key2");
110
111 {
112 auto w = LoadWallet(batch);
113 LOCK(w->cs_wallet);
114 std::string dummy;
115 BOOST_CHECK(w->GetDestData(dst1, "key1", &dummy));
116 BOOST_CHECK(!w->GetDestData(dst1, "key2", &dummy));
117 BOOST_CHECK(w->GetDestData(dst2, "key1", &dummy));
118 BOOST_CHECK(w->GetDestData(dst2, "key2", &dummy));
119 }
120}
121
123 WalletBatch batch(m_wallet.GetDBHandle(), "cr+");
124
126 BOOST_CHECK(!batch.WriteName(dst, "name"));
127 BOOST_CHECK(!batch.WritePurpose(dst, "purpose"));
128 BOOST_CHECK(!batch.WriteDestData(dst, "key", "value"));
129}
130
const CChainParams & Params()
Return the currently selected parameters.
Access to the wallet database.
Definition walletdb.h:175
bool WriteName(const CTxDestination &address, const std::string &strName)
Definition walletdb.cpp:60
bool WritePurpose(const CTxDestination &address, const std::string &purpose)
Definition walletdb.cpp:81
bool ErasePurpose(const CTxDestination &address)
Definition walletdb.cpp:91
bool EraseDestData(const CTxDestination &address, const std::string &key)
Erase destination data tuple from wallet database.
bool EraseName(const CTxDestination &address)
Definition walletdb.cpp:70
DBErrors LoadWallet(CWallet *pwallet)
Definition walletdb.cpp:774
bool WriteDestData(const CTxDestination &address, const std::string &key, const std::string &value)
Write destination data key,value tuple to database.
std::unique_ptr< Chain > MakeChain(node::NodeContext &node, const CChainParams &params)
Return implementation of Chain interface.
Definition init.h:28
#define BOOST_CHECK_EQUAL(v1, v2)
Definition object.cpp:18
#define BOOST_CHECK(expr)
Definition object.cpp:17
T GetRand(T nMax=std::numeric_limits< T >::max()) noexcept
Generate a uniform random integer of type T in the range [0..nMax) nMax defaults to std::numeric_limi...
Definition random.h:85
std::variant< CNoDestination, PKHash, ScriptHash > CTxDestination
A txout script template with a specific destination.
Definition standard.h:85
Testing setup and teardown for wallet.
NodeContext struct containing references to chain state and connection state.
Definition context.h:43
#define LOCK(cs)
Definition sync.h:306
uint160 uint160S(const char *str)
Definition uint256.h:161
std::shared_ptr< CWallet > m_wallet
std::shared_ptr< CWallet > LoadWallet(interfaces::Chain &chain, const std::string &name, std::optional< bool > load_on_start, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings)
Definition wallet.cpp:265
std::unique_ptr< WalletDatabase > CreateDummyWalletDatabase()
Return object for accessing dummy database with no read/write capabilities.
DBErrors
Error statuses for the wallet database.
Definition walletdb.h:45
BOOST_AUTO_TEST_CASE(write_erase_name)