LCOV - code coverage report
Current view: top level - src/wallet/test - scriptpubkeyman_tests.cpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 19 19 100.0 %
Date: 2026-06-25 07:23:43 Functions: 12 12 100.0 %

          Line data    Source code
       1             : // Copyright (c) 2020-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             : 
       5             : #include <key.h>
       6             : #include <script/standard.h>
       7             : #include <test/util/setup_common.h>
       8             : #include <wallet/scriptpubkeyman.h>
       9             : #include <wallet/wallet.h>
      10             : 
      11             : #include <boost/test/unit_test.hpp>
      12             : 
      13             : using node::NodeContext;
      14             : 
      15             : namespace wallet {
      16         146 : BOOST_FIXTURE_TEST_SUITE(scriptpubkeyman_tests, BasicTestingSetup)
      17             : 
      18             : // Test LegacyScriptPubKeyMan::CanProvide behavior, making sure it returns true
      19             : // for recognized scripts even when keys may not be available for signing.
      20         149 : BOOST_AUTO_TEST_CASE(CanProvide)
      21             : {
      22             :     // Set up wallet and keyman variables.
      23           1 :     NodeContext node;
      24           1 :     std::unique_ptr<interfaces::Chain> chain = interfaces::MakeChain(node);
      25           1 :     CWallet wallet(chain.get(), /*coinjoin_loader=*/nullptr, "", m_args, CreateDummyWalletDatabase());
      26           1 :     LegacyScriptPubKeyMan& keyman = *wallet.GetOrCreateLegacyScriptPubKeyMan();
      27             : 
      28             :     // Make a 1 of 2 multisig script
      29           1 :     std::vector<CKey> keys(2);
      30           1 :     std::vector<CPubKey> pubkeys;
      31           3 :     for (CKey& key : keys) {
      32           2 :         key.MakeNewKey(true);
      33           2 :         pubkeys.emplace_back(key.GetPubKey());
      34             :     }
      35           1 :     CScript multisig_script = GetScriptForMultisig(1, pubkeys);
      36           1 :     CScript p2sh_script = GetScriptForDestination(ScriptHash(multisig_script));
      37           1 :     SignatureData data;
      38             : 
      39             :     // Verify the p2sh(multisig) script is not recognized until the multisig
      40             :     // script is added to the keystore to make it solvable
      41           1 :     BOOST_CHECK(!keyman.CanProvide(p2sh_script, data));
      42           1 :     keyman.AddCScript(multisig_script);
      43           1 :     BOOST_CHECK(keyman.CanProvide(p2sh_script, data));
      44           1 : }
      45             : 
      46         146 : BOOST_AUTO_TEST_SUITE_END()
      47             : } // namespace wallet

Generated by: LCOV version 1.16