mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-20 20:49:50 +01:00
Convert txdownloadman_impl to GenTxidVariant
Convert all of `txdownloadman_impl` to the new variant except for `GetRequestsToSend`, which will be easier to switch at the same time as `txrequest`.
This commit is contained in:
@@ -227,9 +227,9 @@ FUZZ_TARGET(txdownloadman, .init = initialize)
|
||||
Assert(first_time_failure || !todo.m_should_add_extra_compact_tx);
|
||||
},
|
||||
[&] {
|
||||
GenTxid gtxid = fuzzed_data_provider.ConsumeBool() ?
|
||||
GenTxid::Txid(rand_tx->GetHash()) :
|
||||
GenTxid::Wtxid(rand_tx->GetWitnessHash());
|
||||
auto gtxid = fuzzed_data_provider.ConsumeBool() ?
|
||||
GenTxidVariant{rand_tx->GetHash()} :
|
||||
GenTxidVariant{rand_tx->GetWitnessHash()};
|
||||
txdownloadman.AddTxAnnouncement(rand_peer, gtxid, time);
|
||||
},
|
||||
[&] {
|
||||
@@ -260,8 +260,7 @@ FUZZ_TARGET(txdownloadman, .init = initialize)
|
||||
// returned true.
|
||||
Assert(expect_work);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
// Jump forwards or backwards
|
||||
auto time_skip = fuzzed_data_provider.PickValueInArray(TIME_SKIPS);
|
||||
if (fuzzed_data_provider.ConsumeBool()) time_skip *= -1;
|
||||
@@ -373,9 +372,9 @@ FUZZ_TARGET(txdownloadman_impl, .init = initialize)
|
||||
if (!reject_contains_wtxid) Assert(todo.m_unique_parents.size() <= rand_tx->vin.size());
|
||||
},
|
||||
[&] {
|
||||
GenTxid gtxid = fuzzed_data_provider.ConsumeBool() ?
|
||||
GenTxid::Txid(rand_tx->GetHash()) :
|
||||
GenTxid::Wtxid(rand_tx->GetWitnessHash());
|
||||
auto gtxid = fuzzed_data_provider.ConsumeBool() ?
|
||||
GenTxidVariant{rand_tx->GetHash()} :
|
||||
GenTxidVariant{rand_tx->GetWitnessHash()};
|
||||
txdownload_impl.AddTxAnnouncement(rand_peer, gtxid, time);
|
||||
},
|
||||
[&] {
|
||||
@@ -383,7 +382,7 @@ FUZZ_TARGET(txdownloadman_impl, .init = initialize)
|
||||
// TxDownloadManager should not be telling us to request things we already have.
|
||||
// Exclude m_lazy_recent_rejects_reconsiderable because it may request low-feerate parent of orphan.
|
||||
for (const auto& gtxid : getdata_requests) {
|
||||
Assert(!txdownload_impl.AlreadyHaveTx(gtxid, /*include_reconsiderable=*/false));
|
||||
Assert(!txdownload_impl.AlreadyHaveTx(gtxid.ToVariant(), /*include_reconsiderable=*/false));
|
||||
}
|
||||
},
|
||||
[&] {
|
||||
@@ -395,7 +394,7 @@ FUZZ_TARGET(txdownloadman_impl, .init = initialize)
|
||||
// The only combination that doesn't make sense is validate both tx and package.
|
||||
Assert(!(should_validate && maybe_package.has_value()));
|
||||
if (should_validate) {
|
||||
Assert(!txdownload_impl.AlreadyHaveTx(GenTxid::Wtxid(rand_tx->GetWitnessHash()), /*include_reconsiderable=*/true));
|
||||
Assert(!txdownload_impl.AlreadyHaveTx(rand_tx->GetWitnessHash(), /*include_reconsiderable=*/true));
|
||||
}
|
||||
if (maybe_package.has_value()) {
|
||||
CheckPackageToValidate(*maybe_package, rand_peer);
|
||||
@@ -424,7 +423,7 @@ FUZZ_TARGET(txdownloadman_impl, .init = initialize)
|
||||
// However, if there was a non-null tx in the workset, HaveMoreWork should have
|
||||
// returned true.
|
||||
Assert(expect_work);
|
||||
Assert(txdownload_impl.AlreadyHaveTx(GenTxid::Wtxid(ptx->GetWitnessHash()), /*include_reconsiderable=*/false));
|
||||
Assert(txdownload_impl.AlreadyHaveTx(ptx->GetWitnessHash(), /*include_reconsiderable=*/false));
|
||||
// Presumably we have validated this tx. Use "missing inputs" to keep it in the
|
||||
// orphanage longer. Later iterations might call MempoolAcceptedTx or
|
||||
// MempoolRejectedTx with a different error.
|
||||
@@ -432,8 +431,7 @@ FUZZ_TARGET(txdownloadman_impl, .init = initialize)
|
||||
state_missing_inputs.Invalid(TxValidationResult::TX_MISSING_INPUTS, "");
|
||||
txdownload_impl.MempoolRejectedTx(ptx, state_missing_inputs, rand_peer, fuzzed_data_provider.ConsumeBool());
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
auto time_skip = fuzzed_data_provider.PickValueInArray(TIME_SKIPS);
|
||||
if (fuzzed_data_provider.ConsumeBool()) time_skip *= -1;
|
||||
|
||||
@@ -126,10 +126,10 @@ BOOST_FIXTURE_TEST_CASE(tx_rejection_types, TestChain100Setup)
|
||||
for (const auto segwit_child : {true, false}) {
|
||||
const auto ptx_parent = CreatePlaceholderTx(segwit_parent);
|
||||
const auto ptx_child = CreatePlaceholderTx(segwit_child);
|
||||
const auto& parent_txid = ptx_parent->GetHash().ToUint256();
|
||||
const auto& parent_wtxid = ptx_parent->GetWitnessHash().ToUint256();
|
||||
const auto& child_txid = ptx_child->GetHash().ToUint256();
|
||||
const auto& child_wtxid = ptx_child->GetWitnessHash().ToUint256();
|
||||
const auto& parent_txid = ptx_parent->GetHash();
|
||||
const auto& parent_wtxid = ptx_parent->GetWitnessHash();
|
||||
const auto& child_txid = ptx_child->GetHash();
|
||||
const auto& child_wtxid = ptx_child->GetWitnessHash();
|
||||
|
||||
for (const auto& [result, expected_behavior] : expected_behaviors) {
|
||||
node::TxDownloadManagerImpl txdownload_impl{DEFAULT_OPTS};
|
||||
@@ -141,13 +141,13 @@ BOOST_FIXTURE_TEST_CASE(tx_rejection_types, TestChain100Setup)
|
||||
// No distinction between txid and wtxid caching for nonsegwit transactions, so only test these specific
|
||||
// behaviors for segwit transactions.
|
||||
Behaviors actual_behavior{
|
||||
/*txid_rejects=*/txdownload_impl.RecentRejectsFilter().contains(parent_txid),
|
||||
/*wtxid_rejects=*/txdownload_impl.RecentRejectsFilter().contains(parent_wtxid),
|
||||
/*txid_recon=*/txdownload_impl.RecentRejectsReconsiderableFilter().contains(parent_txid),
|
||||
/*wtxid_recon=*/txdownload_impl.RecentRejectsReconsiderableFilter().contains(parent_wtxid),
|
||||
/*txid_rejects=*/txdownload_impl.RecentRejectsFilter().contains(parent_txid.ToUint256()),
|
||||
/*wtxid_rejects=*/txdownload_impl.RecentRejectsFilter().contains(parent_wtxid.ToUint256()),
|
||||
/*txid_recon=*/txdownload_impl.RecentRejectsReconsiderableFilter().contains(parent_txid.ToUint256()),
|
||||
/*wtxid_recon=*/txdownload_impl.RecentRejectsReconsiderableFilter().contains(parent_wtxid.ToUint256()),
|
||||
/*keep=*/keep,
|
||||
/*txid_inv=*/txdownload_impl.AddTxAnnouncement(nodeid, GenTxid::Txid(parent_txid), now),
|
||||
/*wtxid_inv=*/txdownload_impl.AddTxAnnouncement(nodeid, GenTxid::Wtxid(parent_wtxid), now),
|
||||
/*txid_inv=*/txdownload_impl.AddTxAnnouncement(nodeid, parent_txid, now),
|
||||
/*wtxid_inv=*/txdownload_impl.AddTxAnnouncement(nodeid, parent_wtxid, now),
|
||||
};
|
||||
BOOST_TEST_MESSAGE("Testing behavior for " << result << (segwit_parent ? " segwit " : " nonsegwit"));
|
||||
actual_behavior.CheckEqual(expected_behavior, /*segwit=*/segwit_parent);
|
||||
@@ -158,8 +158,8 @@ BOOST_FIXTURE_TEST_CASE(tx_rejection_types, TestChain100Setup)
|
||||
|
||||
// If parent (by txid) was rejected, child is too.
|
||||
const bool parent_txid_rejected{segwit_parent ? expected_behavior.m_txid_in_rejects : expected_behavior.m_wtxid_in_rejects};
|
||||
BOOST_CHECK_EQUAL(parent_txid_rejected, txdownload_impl.RecentRejectsFilter().contains(child_txid));
|
||||
BOOST_CHECK_EQUAL(parent_txid_rejected, txdownload_impl.RecentRejectsFilter().contains(child_wtxid));
|
||||
BOOST_CHECK_EQUAL(parent_txid_rejected, txdownload_impl.RecentRejectsFilter().contains(child_txid.ToUint256()));
|
||||
BOOST_CHECK_EQUAL(parent_txid_rejected, txdownload_impl.RecentRejectsFilter().contains(child_wtxid.ToUint256()));
|
||||
|
||||
// Unless rejected, the child should be in orphanage.
|
||||
BOOST_CHECK_EQUAL(!parent_txid_rejected, txdownload_impl.m_orphanage.HaveTx(ptx_child->GetWitnessHash()));
|
||||
|
||||
Reference in New Issue
Block a user