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