Bitcoin Core 28.99.0
P2P Digital Currency
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 {
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
Definition: bitcoin-gui.cpp:42
Double ended buffer combining vector and stream-like interfaces.
Definition: streams.h:147
256-bit opaque blob.
Definition: uint256.h:190
A CWallet maintains a set of transactions and balances, and provides the ability to create new transa...
Definition: wallet.h:300
BOOST_FIXTURE_TEST_SUITE(cuckoocache_tests, BasicTestingSetup)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END()
std::unique_ptr< WalletDatabase > MakeDatabase(const fs::path &path, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error)
Definition: walletdb.cpp:1380
DatabaseFormat
Definition: db.h:184
static const DatabaseFormat DATABASE_FORMATS[]
Definition: util.h:28
BOOST_AUTO_TEST_CASE(bnb_search_test)
DatabaseStatus
Definition: db.h:205
#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.
Definition: setup_common.h:63
Bilingual messages:
Definition: translation.h:21
std::unique_ptr< interfaces::Chain > chain
Definition: context.h:76
std::optional< DatabaseFormat > require_format
Definition: db.h:194
#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...
Definition: tinyformat.h:1165