Bitcoin Core 29.99.0
P2P Digital Currency
util.h
Go to the documentation of this file.
1// Copyright (c) 2021-present 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_UTIL_H
6#define BITCOIN_WALLET_TEST_UTIL_H
7
8#include <addresstype.h>
9#include <wallet/db.h>
11
12#include <memory>
13
14class ArgsManager;
15class CChain;
16class CKey;
17enum class OutputType;
18namespace interfaces {
19class Chain;
20} // namespace interfaces
21
22namespace wallet {
23class CWallet;
24class WalletDatabase;
25struct WalletContext;
26
29};
30
31const std::string ADDRESS_BCRT1_UNSPENDABLE = "bcrt1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3xueyj";
32
33std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, CChain& cchain, const CKey& key);
34
35std::shared_ptr<CWallet> TestLoadWallet(WalletContext& context);
36std::shared_ptr<CWallet> TestLoadWallet(std::unique_ptr<WalletDatabase> database, WalletContext& context, uint64_t create_flags);
37void TestUnloadWallet(std::shared_ptr<CWallet>&& wallet);
38
39// Creates a copy of the provided database
40std::unique_ptr<WalletDatabase> DuplicateMockDatabase(WalletDatabase& database);
41
43std::string getnewaddress(CWallet& w);
46
47using MockableData = std::map<SerializeData, SerializeData, std::less<>>;
48
50{
51public:
52 MockableData::const_iterator m_cursor;
53 MockableData::const_iterator m_cursor_end;
54 bool m_pass;
55
56 explicit MockableCursor(const MockableData& records, bool pass) : m_cursor(records.begin()), m_cursor_end(records.end()), m_pass(pass) {}
57 MockableCursor(const MockableData& records, bool pass, std::span<const std::byte> prefix);
58 ~MockableCursor() = default;
59
60 Status Next(DataStream& key, DataStream& value) override;
61};
62
64{
65private:
67 bool m_pass;
68
69 bool ReadKey(DataStream&& key, DataStream& value) override;
70 bool WriteKey(DataStream&& key, DataStream&& value, bool overwrite=true) override;
71 bool EraseKey(DataStream&& key) override;
72 bool HasKey(DataStream&& key) override;
73 bool ErasePrefix(std::span<const std::byte> prefix) override;
74
75public:
76 explicit MockableBatch(MockableData& records, bool pass) : m_records(records), m_pass(pass) {}
77 ~MockableBatch() = default;
78
79 void Close() override {}
80
81 std::unique_ptr<DatabaseCursor> GetNewCursor() override
82 {
83 return std::make_unique<MockableCursor>(m_records, m_pass);
84 }
85 std::unique_ptr<DatabaseCursor> GetNewPrefixCursor(std::span<const std::byte> prefix) override {
86 return std::make_unique<MockableCursor>(m_records, m_pass, prefix);
87 }
88 bool TxnBegin() override { return m_pass; }
89 bool TxnCommit() override { return m_pass; }
90 bool TxnAbort() override { return m_pass; }
91 bool HasActiveTxn() override { return false; }
92};
93
97{
98public:
100 bool m_pass{true};
101
103 ~MockableDatabase() = default;
104
105 void Open() override {}
106
107 bool Rewrite(const char* pszSkip=nullptr) override { return m_pass; }
108 bool Backup(const std::string& strDest) const override { return m_pass; }
109 void Close() override {}
110
111 std::string Filename() override { return "mockable"; }
112 std::string Format() override { return "mock"; }
113 std::unique_ptr<DatabaseBatch> MakeBatch() override { return std::make_unique<MockableBatch>(m_records, m_pass); }
114};
115
116std::unique_ptr<WalletDatabase> CreateMockableWalletDatabase(MockableData records = {});
117MockableDatabase& GetMockableDatabase(CWallet& wallet);
118
119ScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string& desc_str, const bool success);
120} // namespace wallet
121
122#endif // BITCOIN_WALLET_TEST_UTIL_H
std::variant< CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown > CTxDestination
A txout script categorized into standard templates.
Definition: addresstype.h:143
An in-memory indexed chain of blocks.
Definition: chain.h:417
An encapsulated private key.
Definition: key.h:35
Double ended buffer combining vector and stream-like interfaces.
Definition: streams.h:147
Interface giving clients (wallet processes, maybe other analysis tools in the future) ability to acce...
Definition: chain.h:129
A CWallet maintains a set of transactions and balances, and provides the ability to create new transa...
Definition: wallet.h:300
RAII class that provides access to a WalletDatabase.
Definition: db.h:51
bool TxnAbort() override
Definition: util.h:90
bool ReadKey(DataStream &&key, DataStream &value) override
Definition: util.cpp:121
bool TxnBegin() override
Definition: util.h:88
void Close() override
Definition: util.h:79
std::unique_ptr< DatabaseCursor > GetNewCursor() override
Definition: util.h:81
std::unique_ptr< DatabaseCursor > GetNewPrefixCursor(std::span< const std::byte > prefix) override
Definition: util.h:85
bool HasActiveTxn() override
Definition: util.h:91
bool EraseKey(DataStream &&key) override
Definition: util.cpp:151
bool TxnCommit() override
Definition: util.h:89
bool ErasePrefix(std::span< const std::byte > prefix) override
Definition: util.cpp:170
bool HasKey(DataStream &&key) override
Definition: util.cpp:161
MockableData & m_records
Definition: util.h:66
MockableBatch(MockableData &records, bool pass)
Definition: util.h:76
bool WriteKey(DataStream &&key, DataStream &&value, bool overwrite=true) override
Definition: util.cpp:136
MockableCursor(const MockableData &records, bool pass)
Definition: util.h:56
MockableData::const_iterator m_cursor_end
Definition: util.h:53
MockableData::const_iterator m_cursor
Definition: util.h:52
Status Next(DataStream &key, DataStream &value) override
Definition: util.cpp:104
A WalletDatabase whose contents and return values can be modified as needed for testing.
Definition: util.h:97
MockableDatabase(MockableData records={})
Definition: util.h:102
void Open() override
Open the database if it is not already opened.
Definition: util.h:105
bool Rewrite(const char *pszSkip=nullptr) override
Rewrite the entire database on disk, with the exception of key pszSkip if non-zero.
Definition: util.h:107
bool Backup(const std::string &strDest) const override
Back up the entire database to a file.
Definition: util.h:108
void Close() override
Flush to the database file and close the database.
Definition: util.h:109
std::string Format() override
Definition: util.h:112
std::unique_ptr< DatabaseBatch > MakeBatch() override
Make a DatabaseBatch connected to this database.
Definition: util.h:113
std::string Filename() override
Return path to main database file for logs and error messages.
Definition: util.h:111
MockableData m_records
Definition: util.h:99
An instance of this class represents one database.
Definition: db.h:130
WalletDatabase()=default
Create dummy DB handle.
const std::string ADDRESS_BCRT1_UNSPENDABLE
Definition: util.h:31
std::shared_ptr< CWallet > TestLoadWallet(std::unique_ptr< WalletDatabase > database, WalletContext &context, uint64_t create_flags)
Definition: util.cpp:51
DatabaseFormat
Definition: db.h:164
static const DatabaseFormat DATABASE_FORMATS[]
Definition: util.h:27
std::unique_ptr< CWallet > CreateSyncedWallet(interfaces::Chain &chain, CChain &cchain, const CKey &key)
Definition: util.cpp:20
void TestUnloadWallet(std::shared_ptr< CWallet > &&wallet)
Definition: util.cpp:74
MockableDatabase & GetMockableDatabase(CWallet &wallet)
Definition: util.cpp:192
wallet::ScriptPubKeyMan * CreateDescriptor(CWallet &keystore, const std::string &desc_str, const bool success)
Definition: util.cpp:197
std::unique_ptr< WalletDatabase > CreateMockableWalletDatabase(MockableData records)
Definition: util.cpp:187
std::unique_ptr< WalletDatabase > DuplicateMockDatabase(WalletDatabase &database)
Definition: util.cpp:82
RPCHelpMan getnewaddress()
Definition: addresses.cpp:21
std::map< SerializeData, SerializeData, std::less<> > MockableData
Definition: util.h:47
CTxDestination getNewDestination(CWallet &w, OutputType output_type)
Returns a new destination, of an specific type, from the wallet.
Definition: util.cpp:93
OutputType
Definition: outputtype.h:17
const char * prefix
Definition: rest.cpp:1009
WalletContext struct containing references to state shared between CWallet instances,...
Definition: context.h:36