diff --git a/src/test/blockencodings_tests.cpp b/src/test/blockencodings_tests.cpp --- a/src/test/blockencodings_tests.cpp +++ b/src/test/blockencodings_tests.cpp @@ -58,16 +58,16 @@ return block; } -// Number of shared use_counts we expect for a tx we havent touched -// == 2 (mempool + our copy from the GetSharedTx call) -#define SHARED_TX_OFFSET 2 +// Number of shared use_counts we expect for a tx we haven't touched +// (block + mempool + our copy from the GetSharedTx call) +constexpr long SHARED_TX_OFFSET{3}; BOOST_AUTO_TEST_CASE(SimpleRoundTripTest) { CTxMemPool pool; TestMemPoolEntryHelper entry; CBlock block(BuildBlockTestCase()); - pool.addUnchecked(block.vtx[2]->GetId(), entry.FromTx(*block.vtx[2])); + pool.addUnchecked(block.vtx[2]->GetId(), entry.FromTx(block.vtx[2])); LOCK(pool.cs); BOOST_CHECK_EQUAL( pool.mapTx.find(block.vtx[2]->GetId())->GetSharedTx().use_count(), @@ -178,7 +178,7 @@ TestMemPoolEntryHelper entry; CBlock block(BuildBlockTestCase()); - pool.addUnchecked(block.vtx[2]->GetId(), entry.FromTx(*block.vtx[2])); + pool.addUnchecked(block.vtx[2]->GetId(), entry.FromTx(block.vtx[2])); LOCK(pool.cs); BOOST_CHECK_EQUAL( pool.mapTx.find(block.vtx[2]->GetId())->GetSharedTx().use_count(), @@ -208,6 +208,7 @@ BOOST_CHECK(partialBlock.IsTxAvailable(1)); BOOST_CHECK(partialBlock.IsTxAvailable(2)); + // +1 because of partialBlock BOOST_CHECK_EQUAL( pool.mapTx.find(block.vtx[2]->GetId())->GetSharedTx().use_count(), SHARED_TX_OFFSET + 1); @@ -229,6 +230,11 @@ partialBlock.FillBlock(block2, {block.vtx[1]}); partialBlock = tmp; } + + // +2 because of partialBlock and block2 + BOOST_CHECK_EQUAL( + pool.mapTx.find(block.vtx[2]->GetId())->GetSharedTx().use_count(), + SHARED_TX_OFFSET + 2); bool mutated; BOOST_CHECK(block.hashMerkleRoot != BlockMerkleRoot(block2, &mutated)); @@ -242,17 +248,24 @@ BlockMerkleRoot(block3, &mutated).ToString()); BOOST_CHECK(!mutated); + // +3 because of partialBlock and block2 and block3 + BOOST_CHECK_EQUAL( + pool.mapTx.find(block.vtx[2]->GetId())->GetSharedTx().use_count(), + SHARED_TX_OFFSET + 3); + txhash = block.vtx[2]->GetId(); block.vtx.clear(); block2.vtx.clear(); block3.vtx.clear(); - // + 1 because of partialBlockCopy. + // + 1 because of partialBlock; -1 because of block. BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), - SHARED_TX_OFFSET + 1); + SHARED_TX_OFFSET + 1 - 1); } + + // -1 because of block BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), - SHARED_TX_OFFSET + 0); + SHARED_TX_OFFSET - 1); } BOOST_AUTO_TEST_CASE(SufficientPreforwardRTTest) { @@ -260,7 +273,7 @@ TestMemPoolEntryHelper entry; CBlock block(BuildBlockTestCase()); - pool.addUnchecked(block.vtx[1]->GetId(), entry.FromTx(*block.vtx[1])); + pool.addUnchecked(block.vtx[1]->GetId(), entry.FromTx(block.vtx[1])); LOCK(pool.cs); BOOST_CHECK_EQUAL( pool.mapTx.find(block.vtx[1]->GetId())->GetSharedTx().use_count(), @@ -309,12 +322,14 @@ block.vtx.clear(); block2.vtx.clear(); - // + 1 because of partialBlockCopy. + // + 1 because of partialBlock; -1 because of block. BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), - SHARED_TX_OFFSET + 1); + SHARED_TX_OFFSET + 1 - 1); } + + // -1 because of block BOOST_CHECK_EQUAL(pool.mapTx.find(txhash)->GetSharedTx().use_count(), - SHARED_TX_OFFSET + 0); + SHARED_TX_OFFSET - 1); } BOOST_AUTO_TEST_CASE(EmptyBlockRoundTripTest) { diff --git a/src/test/mempool_tests.cpp b/src/test/mempool_tests.cpp --- a/src/test/mempool_tests.cpp +++ b/src/test/mempool_tests.cpp @@ -47,7 +47,7 @@ // Generate 100 transactions for (size_t totalTransactions = 0; totalTransactions < 100; totalTransactions++) { - CMutableTransaction mtx; + CMutableTransaction tx; uint64_t minAncestors = std::numeric_limits::max(); uint64_t maxAncestors = 0; @@ -62,7 +62,7 @@ input > 0; input--) { std::swap(outpoints[InsecureRandRange(outpoints.size())], outpoints.back()); - mtx.vin.emplace_back(outpoints.back()); + tx.vin.emplace_back(outpoints.back()); outpoints.pop_back(); // We don't know exactly how many ancestors this transaction has @@ -70,7 +70,7 @@ // parents. CTxMemPoolEntry parent = - *testPool.mapTx.find(mtx.vin.back().prevout.GetTxId()); + *testPool.mapTx.find(tx.vin.back().prevout.GetTxId()); minAncestors = std::min(minAncestors, parent.GetCountWithAncestors()); @@ -84,10 +84,9 @@ // Produce random number of outputs for (size_t output = InsecureRandRange(maxOutputs) + 1; output > 0; output--) { - mtx.vout.emplace_back(10 * SATOSHI, CScript() << OP_TRUE); + tx.vout.emplace_back(10 * SATOSHI, CScript() << OP_TRUE); } - CTransaction tx(mtx); TxId curId = tx.GetId(); // Record the outputs diff --git a/src/test/test_bitcoin.h b/src/test/test_bitcoin.h --- a/src/test/test_bitcoin.h +++ b/src/test/test_bitcoin.h @@ -129,7 +129,8 @@ CTxMemPoolEntry FromTx(const CMutableTransaction &tx, CTxMemPool *pool = nullptr); - CTxMemPoolEntry FromTx(const CTransaction &tx, CTxMemPool *pool = nullptr); + CTxMemPoolEntry FromTx(const CTransactionRef &tx, + CTxMemPool *pool = nullptr); // Change the default value TestMemPoolEntryHelper &Fee(Amount _fee) { diff --git a/src/test/test_bitcoin.cpp b/src/test/test_bitcoin.cpp --- a/src/test/test_bitcoin.cpp +++ b/src/test/test_bitcoin.cpp @@ -206,20 +206,18 @@ CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(const CMutableTransaction &tx, CTxMemPool *pool) { - CTransaction txn(tx); - return FromTx(txn, pool); + return FromTx(MakeTransactionRef(tx), pool); } -CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(const CTransaction &txn, +CTxMemPoolEntry TestMemPoolEntryHelper::FromTx(const CTransactionRef &tx, CTxMemPool *pool) { // Hack to assume either it's completely dependent on other mempool txs or // not at all. Amount inChainValue = - pool && pool->HasNoInputsOf(txn) ? txn.GetValueOut() : Amount::zero(); + pool && pool->HasNoInputsOf(*tx) ? tx->GetValueOut() : Amount::zero(); - return CTxMemPoolEntry(MakeTransactionRef(txn), nFee, nTime, dPriority, - nHeight, inChainValue, spendsCoinbase, sigOpCost, - lp); + return CTxMemPoolEntry(tx, nFee, nTime, dPriority, nHeight, inChainValue, + spendsCoinbase, sigOpCost, lp); } namespace { diff --git a/src/wallet/test/wallet_tests.cpp b/src/wallet/test/wallet_tests.cpp --- a/src/wallet/test/wallet_tests.cpp +++ b/src/wallet/test/wallet_tests.cpp @@ -173,8 +173,8 @@ ::importwallet(GetConfig(), request); LOCK(wallet.cs_wallet); - BOOST_CHECK_EQUAL(wallet.mapWallet.size(), 3); - BOOST_CHECK_EQUAL(m_coinbase_txns.size(), 103); + BOOST_CHECK_EQUAL(wallet.mapWallet.size(), 3U); + BOOST_CHECK_EQUAL(m_coinbase_txns.size(), 103U); for (size_t i = 0; i < m_coinbase_txns.size(); ++i) { bool found = wallet.GetWalletTx(m_coinbase_txns[i]->GetId()); bool expected = i >= 100;