@@ -55,17 +55,31 @@ class AvailableCoinsTestingSetup : public TestChain100Setup
55
55
std::unique_ptr<CWallet> wallet;
56
56
};
57
57
58
+ void TestCoinsResult (AvailableCoinsTestingSetup& context, OutputType out_type, CAmount amount,
59
+ std::map<OutputType, size_t >& expected_coins_sizes)
60
+ {
61
+ LOCK (context.wallet ->cs_wallet );
62
+ util::Result<CTxDestination> dest = Assert (context.wallet ->GetNewDestination (out_type, " " ));
63
+ CWalletTx& wtx = context.AddTx (CRecipient{{GetScriptForDestination (*dest)}, amount, /* fSubtractFeeFromAmount=*/ true });
64
+ CoinFilterParams filter;
65
+ filter.skip_locked = false ;
66
+ CoinsResult available_coins = AvailableCoins (*context.wallet , nullptr , std::nullopt, filter);
67
+ // Lock outputs so they are not spent in follow-up transactions
68
+ for (uint32_t i = 0 ; i < wtx.tx ->vout .size (); i++) context.wallet ->LockCoin ({wtx.GetHash (), i});
69
+ for (const auto & [type, size] : expected_coins_sizes) BOOST_CHECK_EQUAL (size, available_coins.coins [type].size ());
70
+ }
71
+
58
72
BOOST_FIXTURE_TEST_CASE (BasicOutputTypesTest, AvailableCoinsTestingSetup)
59
73
{
60
- CoinsResult available_coins;
61
- util::Result<CTxDestination> dest{util::Error{}};
62
- LOCK (wallet->cs_wallet );
74
+ std::map<OutputType, size_t > expected_coins_sizes;
75
+ for (const auto & out_type : OUTPUT_TYPES) { expected_coins_sizes[out_type] = 0U ; }
63
76
64
77
// Verify our wallet has one usable coinbase UTXO before starting
65
78
// This UTXO is a P2PK, so it should show up in the Other bucket
66
- available_coins = AvailableCoins (*wallet);
67
- BOOST_CHECK_EQUAL (available_coins.Size (), 1U );
68
- BOOST_CHECK_EQUAL (available_coins.coins [OutputType::UNKNOWN].size (), 1U );
79
+ expected_coins_sizes[OutputType::UNKNOWN] = 1U ;
80
+ CoinsResult available_coins = WITH_LOCK (wallet->cs_wallet , return AvailableCoins (*wallet));
81
+ BOOST_CHECK_EQUAL (available_coins.Size (), expected_coins_sizes[OutputType::UNKNOWN]);
82
+ BOOST_CHECK_EQUAL (available_coins.coins [OutputType::UNKNOWN].size (), expected_coins_sizes[OutputType::UNKNOWN]);
69
83
70
84
// We will create a self transfer for each of the OutputTypes and
71
85
// verify it is put in the correct bucket after running GetAvailablecoins
@@ -74,33 +88,11 @@ BOOST_FIXTURE_TEST_CASE(BasicOutputTypesTest, AvailableCoinsTestingSetup)
74
88
// 1. One UTXO as the recipient
75
89
// 2. One UTXO from the change, due to payment address matching logic
76
90
77
- // Bech32m
78
- dest = wallet->GetNewDestination (OutputType::BECH32M, " " );
79
- BOOST_ASSERT (dest);
80
- AddTx (CRecipient{{GetScriptForDestination (*dest)}, 1 * COIN, /* fSubtractFeeFromAmount=*/ true });
81
- available_coins = AvailableCoins (*wallet);
82
- BOOST_CHECK_EQUAL (available_coins.coins [OutputType::BECH32M].size (), 2U );
83
-
84
- // Bech32
85
- dest = wallet->GetNewDestination (OutputType::BECH32, " " );
86
- BOOST_ASSERT (dest);
87
- AddTx (CRecipient{{GetScriptForDestination (*dest)}, 2 * COIN, /* fSubtractFeeFromAmount=*/ true });
88
- available_coins = AvailableCoins (*wallet);
89
- BOOST_CHECK_EQUAL (available_coins.coins [OutputType::BECH32].size (), 2U );
90
-
91
- // P2SH-SEGWIT
92
- dest = wallet->GetNewDestination (OutputType::P2SH_SEGWIT, " " );
93
- BOOST_ASSERT (dest);
94
- AddTx (CRecipient{{GetScriptForDestination (*dest)}, 3 * COIN, /* fSubtractFeeFromAmount=*/ true });
95
- available_coins = AvailableCoins (*wallet);
96
- BOOST_CHECK_EQUAL (available_coins.coins [OutputType::P2SH_SEGWIT].size (), 2U );
97
-
98
- // Legacy (P2PKH)
99
- dest = wallet->GetNewDestination (OutputType::LEGACY, " " );
100
- BOOST_ASSERT (dest);
101
- AddTx (CRecipient{{GetScriptForDestination (*dest)}, 4 * COIN, /* fSubtractFeeFromAmount=*/ true });
102
- available_coins = AvailableCoins (*wallet);
103
- BOOST_CHECK_EQUAL (available_coins.coins [OutputType::LEGACY].size (), 2U );
91
+ for (const auto & out_type : OUTPUT_TYPES) {
92
+ if (out_type == OutputType::UNKNOWN) continue ;
93
+ expected_coins_sizes[out_type] = 2U ;
94
+ TestCoinsResult (*this , out_type, 1 * COIN, expected_coins_sizes);
95
+ }
104
96
}
105
97
106
98
BOOST_AUTO_TEST_SUITE_END ()
0 commit comments