Changeset View
Changeset View
Standalone View
Standalone View
src/test/mempool_tests.cpp
Show First 20 Lines • Show All 107 Lines • ▼ Show 20 Lines | for (size_t totalTransactions = 0; totalTransactions < 100; | ||||
} | } | ||||
Amount randFee = int64_t(InsecureRandRange(300)) * SATOSHI; | Amount randFee = int64_t(InsecureRandRange(300)) * SATOSHI; | ||||
int randSigOpCount = InsecureRandRange(5); | int randSigOpCount = InsecureRandRange(5); | ||||
testPool.addUnchecked( | testPool.addUnchecked( | ||||
entry.Fee(randFee).SigOpCount(randSigOpCount).FromTx(tx)); | entry.Fee(randFee).SigOpCount(randSigOpCount).FromTx(tx)); | ||||
uint64_t txVirtualSize = GetVirtualTransactionSize( | |||||
CTransaction(tx).GetTotalSize(), randSigOpCount); | |||||
// Add this transaction to the totals. | // Add this transaction to the totals. | ||||
minAncestors += 1; | minAncestors += 1; | ||||
maxAncestors += 1; | maxAncestors += 1; | ||||
minFees += randFee; | minFees += randFee; | ||||
maxFees += randFee; | maxFees += randFee; | ||||
minSize += CTransaction(tx).GetTotalSize(); | minSize += CTransaction(tx).GetTotalSize(); | ||||
maxSize += CTransaction(tx).GetTotalSize(); | maxSize += CTransaction(tx).GetTotalSize(); | ||||
// virtualsize is a nonlinear function of its arguments, so we can't | // virtualsize is a nonlinear function of its arguments, so we can't | ||||
// make as strong guarantees about its range; but assuming virtualsize | // make as strong guarantees about its range; but assuming virtualsize | ||||
// is monotonically increasing in each argument, we can say the | // is monotonically increasing in each argument, we can say the | ||||
// following: | // following: | ||||
minVirtualSize += 0; | minVirtualSize += 0; | ||||
maxVirtualSize += GetVirtualTransactionSize( | maxVirtualSize += txVirtualSize; | ||||
CTransaction(tx).GetTotalSize(), randSigOpCount); | |||||
minSigOpCount += randSigOpCount; | minSigOpCount += randSigOpCount; | ||||
maxSigOpCount += randSigOpCount; | maxSigOpCount += randSigOpCount; | ||||
// Calculate overall values | // Calculate overall values | ||||
totalFee += randFee; | totalFee += randFee; | ||||
totalSize += CTransaction(tx).GetTotalSize(); | totalSize += CTransaction(tx).GetTotalSize(); | ||||
totalVirtualSize += GetVirtualTransactionSize( | totalVirtualSize += txVirtualSize; | ||||
CTransaction(tx).GetTotalSize(), randSigOpCount); | |||||
totalSigOpCount += randSigOpCount; | totalSigOpCount += randSigOpCount; | ||||
CTxMemPoolEntry parentEntry = *testPool.mapTx.find(parentOfAllId); | CTxMemPoolEntry parentEntry = *testPool.mapTx.find(parentOfAllId); | ||||
CTxMemPoolEntry latestEntry = *testPool.mapTx.find(curId); | CTxMemPoolEntry latestEntry = *testPool.mapTx.find(curId); | ||||
// Based on size/sigops ranges we can compute more strict bounds for the | // Based on size/sigops ranges we can compute more strict bounds for the | ||||
// virtual size ranges/totals, assuming virtualsize is monotonic in each | // virtual size ranges/totals, assuming virtualsize is monotonic in each | ||||
// argument. | // argument. | ||||
uint64_t minVirtualSize_strict = | uint64_t minVirtualSize_strict = | ||||
GetVirtualTransactionSize(minSize, minSigOpCount); | GetVirtualTransactionSize(minSize, minSigOpCount); | ||||
uint64_t maxVirtualSize_strict = | uint64_t maxVirtualSize_strict = | ||||
GetVirtualTransactionSize(maxSize, maxSigOpCount); | GetVirtualTransactionSize(maxSize, maxSigOpCount); | ||||
uint64_t totalVirtualSize_strict = | uint64_t totalVirtualSize_strict = | ||||
GetVirtualTransactionSize(totalSize, totalSigOpCount); | GetVirtualTransactionSize(totalSize, totalSigOpCount); | ||||
// these are as-good or better than the earlier estimations. | // these are as-good or better than the earlier estimations. | ||||
BOOST_CHECK(minVirtualSize_strict >= minVirtualSize); | BOOST_CHECK(minVirtualSize_strict >= minVirtualSize); | ||||
BOOST_CHECK(maxVirtualSize_strict <= maxVirtualSize); | BOOST_CHECK(maxVirtualSize_strict <= maxVirtualSize); | ||||
BOOST_CHECK(totalVirtualSize_strict <= totalVirtualSize); | BOOST_CHECK(totalVirtualSize_strict <= totalVirtualSize); | ||||
// Ensure values are within the expected ranges | // Ensure values are within the expected ranges | ||||
BOOST_CHECK(latestEntry.GetIncrementalVirtualSize() <= txVirtualSize); | |||||
BOOST_CHECK(latestEntry.GetCountWithAncestors() >= minAncestors); | BOOST_CHECK(latestEntry.GetCountWithAncestors() >= minAncestors); | ||||
BOOST_CHECK(latestEntry.GetCountWithAncestors() <= maxAncestors); | BOOST_CHECK(latestEntry.GetCountWithAncestors() <= maxAncestors); | ||||
BOOST_CHECK(latestEntry.GetSizeWithAncestors() >= minSize); | BOOST_CHECK(latestEntry.GetSizeWithAncestors() >= minSize); | ||||
BOOST_CHECK(latestEntry.GetSizeWithAncestors() <= maxSize); | BOOST_CHECK(latestEntry.GetSizeWithAncestors() <= maxSize); | ||||
BOOST_CHECK(latestEntry.GetVirtualSizeWithAncestors() >= | BOOST_CHECK(latestEntry.GetVirtualSizeWithAncestors() >= | ||||
minVirtualSize_strict); | minVirtualSize_strict); | ||||
BOOST_CHECK(latestEntry.GetVirtualSizeWithAncestors() <= | BOOST_CHECK(latestEntry.GetVirtualSizeWithAncestors() <= | ||||
maxVirtualSize_strict); | maxVirtualSize_strict); | ||||
BOOST_CHECK(latestEntry.GetSigOpCountWithAncestors() >= minSigOpCount); | BOOST_CHECK(latestEntry.GetSigOpCountWithAncestors() >= minSigOpCount); | ||||
BOOST_CHECK(latestEntry.GetSigOpCountWithAncestors() <= maxSigOpCount); | BOOST_CHECK(latestEntry.GetSigOpCountWithAncestors() <= maxSigOpCount); | ||||
BOOST_CHECK(latestEntry.GetModFeesWithAncestors() >= minFees); | BOOST_CHECK(latestEntry.GetModFeesWithAncestors() >= minFees); | ||||
BOOST_CHECK(latestEntry.GetModFeesWithAncestors() <= maxFees); | BOOST_CHECK(latestEntry.GetModFeesWithAncestors() <= maxFees); | ||||
BOOST_CHECK_EQUAL(parentEntry.GetCountWithDescendants(), | BOOST_CHECK_EQUAL(parentEntry.GetCountWithDescendants(), | ||||
testPool.mapTx.size()); | testPool.mapTx.size()); | ||||
BOOST_CHECK_EQUAL(parentEntry.GetSizeWithDescendants(), totalSize); | BOOST_CHECK_EQUAL(parentEntry.GetSizeWithDescendants(), totalSize); | ||||
BOOST_CHECK_EQUAL(parentEntry.GetVirtualSizeWithDescendants(), | BOOST_CHECK_EQUAL( | ||||
parentEntry.GetIncrementalVirtualSizeWithDescendants(), | |||||
totalVirtualSize_strict); | totalVirtualSize_strict); | ||||
BOOST_CHECK_EQUAL(parentEntry.GetModFeesWithDescendants(), totalFee); | BOOST_CHECK_EQUAL(parentEntry.GetModFeesWithDescendants(), totalFee); | ||||
BOOST_CHECK_EQUAL(parentEntry.GetSigOpCountWithDescendants(), | BOOST_CHECK_EQUAL(parentEntry.GetSigOpCountWithDescendants(), | ||||
totalSigOpCount); | totalSigOpCount); | ||||
} | } | ||||
} | } | ||||
BOOST_AUTO_TEST_CASE(MempoolRemoveTest) { | BOOST_AUTO_TEST_CASE(MempoolRemoveTest) { | ||||
// Test CTxMemPool::remove functionality | // Test CTxMemPool::remove functionality | ||||
▲ Show 20 Lines • Show All 954 Lines • Show Last 20 Lines |