Skip to content

Commit a21691a

Browse files
committed
partial bitcoin#22155: Add test for subtract fee from recipient behavior
excludes: - fe6dc76
1 parent 829510c commit a21691a

File tree

4 files changed

+64
-14
lines changed

4 files changed

+64
-14
lines changed

src/Makefile.test.include

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,8 @@ endif
213213

214214

215215
BITCOIN_TEST_SUITE += \
216+
wallet/test/util.cpp \
217+
wallet/test/util.h \
216218
wallet/test/wallet_test_fixture.cpp \
217219
wallet/test/wallet_test_fixture.h \
218220
wallet/test/init_test_fixture.cpp \

src/wallet/test/util.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright (c) 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 <wallet/test/util.h>
6+
7+
#include <chain.h>
8+
#include <key.h>
9+
#include <test/util/setup_common.h>
10+
#include <wallet/wallet.h>
11+
#include <wallet/walletdb.h>
12+
13+
#include <boost/test/unit_test.hpp>
14+
15+
#include <memory>
16+
17+
std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, interfaces::CoinJoin::Loader& coinjoin_loader, CChain& cchain, const CKey& key)
18+
{
19+
auto wallet = std::make_unique<CWallet>(&chain, &coinjoin_loader, "", CreateMockWalletDatabase());
20+
{
21+
LOCK(wallet->cs_wallet);
22+
wallet->SetLastBlockProcessed(cchain.Height(), cchain.Tip()->GetBlockHash());
23+
}
24+
wallet->LoadWallet();
25+
{
26+
auto spk_man = wallet->GetOrCreateLegacyScriptPubKeyMan();
27+
LOCK2(wallet->cs_wallet, spk_man->cs_KeyStore);
28+
spk_man->AddKeyPubKey(key, key.GetPubKey());
29+
}
30+
WalletRescanReserver reserver(*wallet);
31+
reserver.reserve();
32+
CWallet::ScanResult result = wallet->ScanForWalletTransactions(cchain.Genesis()->GetBlockHash(), 0 /* start_height */, {} /* max_height */, reserver, false /* update */);
33+
BOOST_CHECK_EQUAL(result.status, CWallet::ScanResult::SUCCESS);
34+
BOOST_CHECK_EQUAL(result.last_scanned_block, cchain.Tip()->GetBlockHash());
35+
BOOST_CHECK_EQUAL(*result.last_scanned_height, cchain.Height());
36+
BOOST_CHECK(result.last_failed_block.IsNull());
37+
return wallet;
38+
}

src/wallet/test/util.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright (c) 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+
#ifndef BITCOIN_WALLET_TEST_UTIL_H
6+
#define BITCOIN_WALLET_TEST_UTIL_H
7+
8+
#include <memory>
9+
10+
class CChain;
11+
class CKey;
12+
class CWallet;
13+
namespace interfaces {
14+
class Chain;
15+
namespace CoinJoin {
16+
class Loader;
17+
} // namespace CoinJoin
18+
} // namespace interfaces
19+
20+
std::unique_ptr<CWallet> CreateSyncedWallet(interfaces::Chain& chain, interfaces::CoinJoin::Loader& coinjoin_loader, CChain& cchain, const CKey& key);
21+
22+
#endif // BITCOIN_WALLET_TEST_UTIL_H

src/wallet/test/wallet_tests.cpp

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <policy/settings.h>
2727
#include <validation.h>
2828
#include <wallet/coincontrol.h>
29+
#include <wallet/test/util.h>
2930
#include <wallet/test/wallet_test_fixture.h>
3031

3132
#include <boost/test/unit_test.hpp>
@@ -585,20 +586,7 @@ class ListCoinsTestingSetup : public TestChain100Setup
585586
ListCoinsTestingSetup()
586587
{
587588
CreateAndProcessBlock({}, GetScriptForRawPubKey(coinbaseKey.GetPubKey()));
588-
wallet = std::make_unique<CWallet>(m_node.chain.get(), m_node.coinjoin_loader.get(), "", CreateMockWalletDatabase());
589-
{
590-
LOCK(wallet->cs_wallet);
591-
wallet->SetLastBlockProcessed(m_node.chainman->ActiveChain().Height(), m_node.chainman->ActiveChain().Tip()->GetBlockHash());
592-
}
593-
wallet->LoadWallet();
594-
AddKey(*wallet, coinbaseKey);
595-
WalletRescanReserver reserver(*wallet);
596-
reserver.reserve();
597-
CWallet::ScanResult result = wallet->ScanForWalletTransactions(m_node.chainman->ActiveChain().Genesis()->GetBlockHash(), 0 /* start_height */, {} /* max_height */, reserver, false /* update */);
598-
BOOST_CHECK_EQUAL(result.status, CWallet::ScanResult::SUCCESS);
599-
BOOST_CHECK_EQUAL(result.last_scanned_block, m_node.chainman->ActiveChain().Tip()->GetBlockHash());
600-
BOOST_CHECK_EQUAL(*result.last_scanned_height, m_node.chainman->ActiveChain().Height());
601-
BOOST_CHECK(result.last_failed_block.IsNull());
589+
wallet = CreateSyncedWallet(*m_node.chain, *m_node.coinjoin_loader, m_node.chainman->ActiveChain(), coinbaseKey);
602590
}
603591

604592
~ListCoinsTestingSetup()

0 commit comments

Comments
 (0)