mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-09-12 13:42:10 +02:00
The mocking functionality of MockableDatabase, MockableBatch, and MockableCursor was not really being used. These are changed to be subclasses of their respective SQLite* classes and will use in-memory SQLite databases so that the tests are more representative of actual database behavior. MockableCursor is removed as there are no overrides needed in SQLiteCursor for the tests.
82 lines
2.7 KiB
C++
82 lines
2.7 KiB
C++
// Copyright (c) 2021-present The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_WALLET_TEST_UTIL_H
|
|
#define BITCOIN_WALLET_TEST_UTIL_H
|
|
|
|
#include <addresstype.h>
|
|
#include <wallet/db.h>
|
|
#include <wallet/scriptpubkeyman.h>
|
|
#include <wallet/sqlite.h>
|
|
|
|
#include <memory>
|
|
|
|
class ArgsManager;
|
|
class CChain;
|
|
class CKey;
|
|
enum class OutputType;
|
|
namespace interfaces {
|
|
class Chain;
|
|
} // namespace interfaces
|
|
|
|
namespace wallet {
|
|
class CWallet;
|
|
class WalletDatabase;
|
|
struct WalletContext;
|
|
|
|
static const DatabaseFormat DATABASE_FORMATS[] = {
|
|
DatabaseFormat::SQLITE,
|
|
};
|
|
|
|
const std::string ADDRESS_BCRT1_UNSPENDABLE = "bcrt1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq3xueyj";
|
|
|
|
std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, CChain& cchain, const CKey& key);
|
|
|
|
std::shared_ptr<CWallet> TestCreateWallet(WalletContext& context);
|
|
std::shared_ptr<CWallet> TestCreateWallet(std::unique_ptr<WalletDatabase> database, WalletContext& context, uint64_t create_flags);
|
|
std::shared_ptr<CWallet> TestLoadWallet(WalletContext& context);
|
|
std::shared_ptr<CWallet> TestLoadWallet(std::unique_ptr<WalletDatabase> database, WalletContext& context);
|
|
void TestUnloadWallet(std::shared_ptr<CWallet>&& wallet);
|
|
|
|
// Creates a copy of the provided database
|
|
std::unique_ptr<WalletDatabase> DuplicateMockDatabase(WalletDatabase& database);
|
|
|
|
/** Returns a new encoded destination from the wallet (hardcoded to BECH32) */
|
|
std::string getnewaddress(CWallet& w);
|
|
/** Returns a new destination, of an specific type, from the wallet */
|
|
CTxDestination getNewDestination(CWallet& w, OutputType output_type);
|
|
|
|
using MockableData = std::map<SerializeData, SerializeData, std::less<>>;
|
|
|
|
|
|
class MockableSQLiteBatch : public SQLiteBatch
|
|
{
|
|
public:
|
|
using SQLiteBatch::SQLiteBatch;
|
|
using SQLiteBatch::WriteKey;
|
|
};
|
|
|
|
/** A WalletDatabase whose contents and return values can be modified as needed for testing
|
|
**/
|
|
class MockableSQLiteDatabase : public SQLiteDatabase
|
|
{
|
|
public:
|
|
MockableSQLiteDatabase();
|
|
|
|
bool Backup(const std::string& strDest) const override { return true; }
|
|
|
|
std::string Filename() override { return "mockable"; }
|
|
std::vector<fs::path> Files() override { return {}; }
|
|
std::string Format() override { return "sqlite-mock"; }
|
|
std::unique_ptr<DatabaseBatch> MakeBatch() override { return std::make_unique<MockableSQLiteBatch>(*this); }
|
|
};
|
|
|
|
std::unique_ptr<WalletDatabase> CreateMockableWalletDatabase();
|
|
MockableSQLiteDatabase& GetMockableDatabase(CWallet& wallet);
|
|
|
|
DescriptorScriptPubKeyMan* CreateDescriptor(CWallet& keystore, const std::string& desc_str, bool success);
|
|
} // namespace wallet
|
|
|
|
#endif // BITCOIN_WALLET_TEST_UTIL_H
|