mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-04 02:02:42 +02:00
test: wallet: Split create and load
This commit is contained in:
@@ -36,7 +36,7 @@ static void WalletIsMine(benchmark::Bench& bench, int num_combo = 0)
|
|||||||
// Loading the wallet will also create it
|
// Loading the wallet will also create it
|
||||||
uint64_t create_flags = WALLET_FLAG_DESCRIPTORS;
|
uint64_t create_flags = WALLET_FLAG_DESCRIPTORS;
|
||||||
auto database = CreateMockableWalletDatabase();
|
auto database = CreateMockableWalletDatabase();
|
||||||
auto wallet = TestLoadWallet(std::move(database), context, create_flags);
|
auto wallet = TestCreateWallet(std::move(database), context, create_flags);
|
||||||
|
|
||||||
// For a descriptor wallet, fill with num_combo combo descriptors with random keys
|
// For a descriptor wallet, fill with num_combo combo descriptors with random keys
|
||||||
// This benchmarks a non-HD wallet migrated to descriptors
|
// This benchmarks a non-HD wallet migrated to descriptors
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ static void WalletLoadingDescriptors(benchmark::Bench& bench)
|
|||||||
// Loading the wallet will also create it
|
// Loading the wallet will also create it
|
||||||
uint64_t create_flags = WALLET_FLAG_DESCRIPTORS;
|
uint64_t create_flags = WALLET_FLAG_DESCRIPTORS;
|
||||||
auto database = CreateMockableWalletDatabase();
|
auto database = CreateMockableWalletDatabase();
|
||||||
auto wallet = TestLoadWallet(std::move(database), context, create_flags);
|
auto wallet = TestCreateWallet(std::move(database), context, create_flags);
|
||||||
|
|
||||||
// Generate a bunch of transactions and addresses to put into the wallet
|
// Generate a bunch of transactions and addresses to put into the wallet
|
||||||
for (int i = 0; i < 1000; ++i) {
|
for (int i = 0; i < 1000; ++i) {
|
||||||
@@ -56,7 +56,7 @@ static void WalletLoadingDescriptors(benchmark::Bench& bench)
|
|||||||
TestUnloadWallet(std::move(wallet));
|
TestUnloadWallet(std::move(wallet));
|
||||||
|
|
||||||
bench.epochs(5).run([&] {
|
bench.epochs(5).run([&] {
|
||||||
wallet = TestLoadWallet(std::move(database), context, create_flags);
|
wallet = TestLoadWallet(std::move(database), context);
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
database = DuplicateMockDatabase(wallet->GetDatabase());
|
database = DuplicateMockDatabase(wallet->GetDatabase());
|
||||||
|
|||||||
@@ -47,11 +47,36 @@ std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, CChain& cc
|
|||||||
return wallet;
|
return wallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<CWallet> TestLoadWallet(std::unique_ptr<WalletDatabase> database, WalletContext& context, uint64_t create_flags)
|
std::shared_ptr<CWallet> TestCreateWallet(std::unique_ptr<WalletDatabase> database, WalletContext& context, uint64_t create_flags)
|
||||||
|
{
|
||||||
|
bilingual_str _error;
|
||||||
|
std::vector<bilingual_str> _warnings;
|
||||||
|
auto wallet = CWallet::Create(context, "", std::move(database), create_flags, _error, _warnings);
|
||||||
|
NotifyWalletLoaded(context, wallet);
|
||||||
|
if (context.chain) {
|
||||||
|
wallet->postInitProcess();
|
||||||
|
}
|
||||||
|
return wallet;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CWallet> TestCreateWallet(WalletContext& context)
|
||||||
|
{
|
||||||
|
DatabaseOptions options;
|
||||||
|
options.require_create = true;
|
||||||
|
options.create_flags = WALLET_FLAG_DESCRIPTORS;
|
||||||
|
DatabaseStatus status;
|
||||||
|
bilingual_str error;
|
||||||
|
std::vector<bilingual_str> warnings;
|
||||||
|
auto database = MakeWalletDatabase("", options, status, error);
|
||||||
|
return TestCreateWallet(std::move(database), context, options.create_flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::shared_ptr<CWallet> TestLoadWallet(std::unique_ptr<WalletDatabase> database, WalletContext& context)
|
||||||
{
|
{
|
||||||
bilingual_str error;
|
bilingual_str error;
|
||||||
std::vector<bilingual_str> warnings;
|
std::vector<bilingual_str> warnings;
|
||||||
auto wallet = CWallet::Create(context, "", std::move(database), create_flags, error, warnings);
|
auto wallet = CWallet::LoadExisting(context, "", std::move(database), error, warnings);
|
||||||
NotifyWalletLoaded(context, wallet);
|
NotifyWalletLoaded(context, wallet);
|
||||||
if (context.chain) {
|
if (context.chain) {
|
||||||
wallet->postInitProcess();
|
wallet->postInitProcess();
|
||||||
@@ -62,12 +87,12 @@ std::shared_ptr<CWallet> TestLoadWallet(std::unique_ptr<WalletDatabase> database
|
|||||||
std::shared_ptr<CWallet> TestLoadWallet(WalletContext& context)
|
std::shared_ptr<CWallet> TestLoadWallet(WalletContext& context)
|
||||||
{
|
{
|
||||||
DatabaseOptions options;
|
DatabaseOptions options;
|
||||||
options.create_flags = WALLET_FLAG_DESCRIPTORS;
|
options.require_existing = true;
|
||||||
DatabaseStatus status;
|
DatabaseStatus status;
|
||||||
bilingual_str error;
|
bilingual_str error;
|
||||||
std::vector<bilingual_str> warnings;
|
std::vector<bilingual_str> warnings;
|
||||||
auto database = MakeWalletDatabase("", options, status, error);
|
auto database = MakeWalletDatabase("", options, status, error);
|
||||||
return TestLoadWallet(std::move(database), context, options.create_flags);
|
return TestLoadWallet(std::move(database), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestUnloadWallet(std::shared_ptr<CWallet>&& wallet)
|
void TestUnloadWallet(std::shared_ptr<CWallet>&& wallet)
|
||||||
|
|||||||
@@ -32,8 +32,10 @@ const std::string ADDRESS_BCRT1_UNSPENDABLE = "bcrt1qqqqqqqqqqqqqqqqqqqqqqqqqqqq
|
|||||||
|
|
||||||
std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, CChain& cchain, const CKey& key);
|
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(WalletContext& context);
|
||||||
std::shared_ptr<CWallet> TestLoadWallet(std::unique_ptr<WalletDatabase> database, WalletContext& context, uint64_t create_flags);
|
std::shared_ptr<CWallet> TestLoadWallet(std::unique_ptr<WalletDatabase> database, WalletContext& context);
|
||||||
void TestUnloadWallet(std::shared_ptr<CWallet>&& wallet);
|
void TestUnloadWallet(std::shared_ptr<CWallet>&& wallet);
|
||||||
|
|
||||||
// Creates a copy of the provided database
|
// Creates a copy of the provided database
|
||||||
|
|||||||
@@ -584,7 +584,7 @@ BOOST_FIXTURE_TEST_CASE(CreateWallet, TestChain100Setup)
|
|||||||
WalletContext context;
|
WalletContext context;
|
||||||
context.args = &m_args;
|
context.args = &m_args;
|
||||||
context.chain = m_node.chain.get();
|
context.chain = m_node.chain.get();
|
||||||
auto wallet = TestLoadWallet(context);
|
auto wallet = TestCreateWallet(context);
|
||||||
CKey key = GenerateRandomKey();
|
CKey key = GenerateRandomKey();
|
||||||
AddKey(*wallet, key);
|
AddKey(*wallet, key);
|
||||||
TestUnloadWallet(std::move(wallet));
|
TestUnloadWallet(std::move(wallet));
|
||||||
@@ -681,7 +681,7 @@ BOOST_FIXTURE_TEST_CASE(CreateWalletWithoutChain, BasicTestingSetup)
|
|||||||
{
|
{
|
||||||
WalletContext context;
|
WalletContext context;
|
||||||
context.args = &m_args;
|
context.args = &m_args;
|
||||||
auto wallet = TestLoadWallet(context);
|
auto wallet = TestCreateWallet(context);
|
||||||
BOOST_CHECK(wallet);
|
BOOST_CHECK(wallet);
|
||||||
WaitForDeleteWallet(std::move(wallet));
|
WaitForDeleteWallet(std::move(wallet));
|
||||||
}
|
}
|
||||||
@@ -692,7 +692,7 @@ BOOST_FIXTURE_TEST_CASE(RemoveTxs, TestChain100Setup)
|
|||||||
WalletContext context;
|
WalletContext context;
|
||||||
context.args = &m_args;
|
context.args = &m_args;
|
||||||
context.chain = m_node.chain.get();
|
context.chain = m_node.chain.get();
|
||||||
auto wallet = TestLoadWallet(context);
|
auto wallet = TestCreateWallet(context);
|
||||||
CKey key = GenerateRandomKey();
|
CKey key = GenerateRandomKey();
|
||||||
AddKey(*wallet, key);
|
AddKey(*wallet, key);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user