mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-05 14:06:27 -05:00
wallet: coverage for loading an unknown descriptor
Previously, this was crashing the wallet.
This commit is contained in:
parent
d26c3cc444
commit
e06676377d
2 changed files with 56 additions and 1 deletions
|
@ -174,7 +174,8 @@ BITCOIN_TESTS += \
|
|||
wallet/test/availablecoins_tests.cpp \
|
||||
wallet/test/init_tests.cpp \
|
||||
wallet/test/ismine_tests.cpp \
|
||||
wallet/test/scriptpubkeyman_tests.cpp
|
||||
wallet/test/scriptpubkeyman_tests.cpp \
|
||||
wallet/test/walletload_tests.cpp
|
||||
|
||||
FUZZ_SUITE_LD_COMMON +=\
|
||||
$(SQLITE_LIBS) \
|
||||
|
|
54
src/wallet/test/walletload_tests.cpp
Normal file
54
src/wallet/test/walletload_tests.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
// Copyright (c) 2022 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or https://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#include <wallet/wallet.h>
|
||||
#include <test/util/setup_common.h>
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
namespace wallet {
|
||||
|
||||
BOOST_AUTO_TEST_SUITE(walletload_tests)
|
||||
|
||||
class DummyDescriptor final : public Descriptor {
|
||||
private:
|
||||
std::string desc;
|
||||
public:
|
||||
explicit DummyDescriptor(const std::string& descriptor) : desc(descriptor) {};
|
||||
~DummyDescriptor() = default;
|
||||
|
||||
std::string ToString() const override { return desc; }
|
||||
std::optional<OutputType> GetOutputType() const override { return OutputType::UNKNOWN; }
|
||||
|
||||
bool IsRange() const override { return false; }
|
||||
bool IsSolvable() const override { return false; }
|
||||
bool IsSingleType() const override { return true; }
|
||||
bool ToPrivateString(const SigningProvider& provider, std::string& out) const override { return false; }
|
||||
bool ToNormalizedString(const SigningProvider& provider, std::string& out, const DescriptorCache* cache = nullptr) const override { return false; }
|
||||
bool Expand(int pos, const SigningProvider& provider, std::vector<CScript>& output_scripts, FlatSigningProvider& out, DescriptorCache* write_cache = nullptr) const override { return false; };
|
||||
bool ExpandFromCache(int pos, const DescriptorCache& read_cache, std::vector<CScript>& output_scripts, FlatSigningProvider& out) const override { return false; }
|
||||
void ExpandPrivate(int pos, const SigningProvider& provider, FlatSigningProvider& out) const override {}
|
||||
};
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE(wallet_load_unknown_descriptor, TestingSetup)
|
||||
{
|
||||
std::unique_ptr<WalletDatabase> database = CreateMockWalletDatabase();
|
||||
{
|
||||
// Write unknown active descriptor
|
||||
WalletBatch batch(*database, false);
|
||||
std::string unknown_desc = "trx(tpubD6NzVbkrYhZ4Y4S7m6Y5s9GD8FqEMBy56AGphZXuagajudVZEnYyBahZMgHNCTJc2at82YX6s8JiL1Lohu5A3v1Ur76qguNH4QVQ7qYrBQx/86'/1'/0'/0/*)#8pn8tzdt";
|
||||
WalletDescriptor wallet_descriptor(std::make_shared<DummyDescriptor>(unknown_desc), 0, 0, 0, 0);
|
||||
BOOST_CHECK(batch.WriteDescriptor(uint256(), wallet_descriptor));
|
||||
BOOST_CHECK(batch.WriteActiveScriptPubKeyMan(static_cast<uint8_t>(OutputType::UNKNOWN), uint256(), false));
|
||||
}
|
||||
|
||||
{
|
||||
// Now try to load the wallet and verify the error.
|
||||
const std::shared_ptr<CWallet> wallet(new CWallet(m_node.chain.get(), "", m_args, std::move(database)));
|
||||
BOOST_CHECK_EQUAL(wallet->LoadWallet(), DBErrors::UNKNOWN_DESCRIPTOR);
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
} // namespace wallet
|
Loading…
Add table
Reference in a new issue