Bitcoin Core 28.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
walletdb_tests.cpp
Go to the documentation of this file.
1// Copyright (c) 2012-2021 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
6#include <clientversion.h>
7#include <streams.h>
8#include <uint256.h>
9#include <wallet/test/util.h>
10#include <wallet/wallet.h>
11
12#include <boost/test/unit_test.hpp>
13
14namespace wallet {
15BOOST_FIXTURE_TEST_SUITE(walletdb_tests, BasicTestingSetup)
16
17BOOST_AUTO_TEST_CASE(walletdb_readkeyvalue)
18{
27 DataStream ssValue{};
28 uint256 dummy;
29 BOOST_CHECK_THROW(ssValue >> dummy, std::ios_base::failure);
30}
31
32BOOST_AUTO_TEST_CASE(walletdb_read_write_deadlock)
33{
34 // Exercises a db read write operation that shouldn't deadlock.
35 for (const DatabaseFormat& db_format : DATABASE_FORMATS) {
36 // Context setup
37 DatabaseOptions options;
38 options.require_format = db_format;
39 DatabaseStatus status;
40 bilingual_str error_string;
41 std::unique_ptr<WalletDatabase> db = MakeDatabase(m_path_root / strprintf("wallet_%d_.dat", db_format).c_str(), options, status, error_string);
43
44 std::shared_ptr<CWallet> wallet(new CWallet(m_node.chain.get(), "", std::move(db)));
45 wallet->m_keypool_size = 4;
46
47 // Create legacy spkm
48 LOCK(wallet->cs_wallet);
49 auto legacy_spkm = wallet->GetOrCreateLegacyScriptPubKeyMan();
50 BOOST_CHECK(legacy_spkm->SetupGeneration(true));
51 wallet->Flush();
52
53 // Now delete all records, which performs a read write operation.
54 BOOST_CHECK(wallet->GetLegacyScriptPubKeyMan()->DeleteRecords());
55 }
56}
57
59} // namespace wallet
node::NodeContext m_node
Double ended buffer combining vector and stream-like interfaces.
Definition streams.h:147
256-bit opaque blob.
Definition uint256.h:178
A CWallet maintains a set of transactions and balances, and provides the ability to create new transa...
Definition wallet.h:300
BOOST_AUTO_TEST_SUITE_END()
std::unique_ptr< WalletDatabase > MakeDatabase(const fs::path &path, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
DatabaseFormat
Definition db.h:183
static const DatabaseFormat DATABASE_FORMATS[]
Definition util.h:28
BOOST_AUTO_TEST_CASE(bnb_search_test)
DatabaseStatus
Definition db.h:204
#define BOOST_CHECK_THROW(stmt, excMatch)
Definition object.cpp:19
#define BOOST_CHECK_EQUAL(v1, v2)
Definition object.cpp:18
#define BOOST_CHECK(expr)
Definition object.cpp:17
Basic testing setup.
Bilingual messages:
Definition translation.h:18
std::unique_ptr< interfaces::Chain > chain
Definition context.h:73
std::optional< DatabaseFormat > require_format
Definition db.h:193
#define LOCK(cs)
Definition sync.h:257
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...