text: // Copyright (c) 2020 The BitPal Core developers
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #include <key.h>
  #include <script/standard.h>
  #include <test/util/setup_common.h>
  #include <wallet/scriptpubkeyman.h>
  #include <wallet/wallet.h>
  
  #include <boost/test/unit_test.hpp>
  
  BOOST_FIXTURE_TEST_SUITE(scriptpubkeyman_tests, BasicTestingSetup)
  
  // Test LegacyScriptPubKeyMan::CanProvide behavior, making sure it returns true
  // for recognized scripts even when keys may not be available for signing.
  BOOST_AUTO_TEST_CASE(CanProvide)
  {
      // Set up wallet and keyman variables.
      NodeContext node;
      std::unique_ptr<interfaces::Chain> chain = interfaces::MakeChain(node);
      CWallet wallet(chain.get(), WalletLocation(), WalletDatabase::CreateDummy());
      LegacyScriptPubKeyMan& keyman = *wallet.GetOrCreateLegacyScriptPubKeyMan();
  
      // Make a 1 of 2 multisig script
      std::vector<CKey> keys(2);
      std::vector<CPubKey> pubkeys;
      for (CKey& key : keys) {
          key.MakeNewKey(true);
          pubkeys.emplace_back(key.GetPubKey());
      }
      CScript multisig_script = GetScriptForMultisig(1, pubkeys);
      CScript p2sh_script = GetScriptForDestination(ScriptHash(multisig_script));
      SignatureData data;
  
      // Verify the p2sh(multisig) script is not recognized until the multisig
      // script is added to the keystore to make it solvable
      BOOST_CHECK(!keyman.CanProvide(p2sh_script, data));
      keyman.AddCScript(multisig_script);
      BOOST_CHECK(keyman.CanProvide(p2sh_script, data));
  }
  
  BOOST_AUTO_TEST_SUITE_END()
  