Skip to content

Commit 8dd24c2

Browse files
committed
[prep/test] modify test to not access TxOrphanage internals
These internals should and will be private.
1 parent 44f5327 commit 8dd24c2

File tree

1 file changed

+22
-30
lines changed

1 file changed

+22
-30
lines changed

src/test/orphanage_tests.cpp

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,6 @@ class TxOrphanageTest : public node::TxOrphanage
2626
public:
2727
TxOrphanageTest(FastRandomContext& rng) : m_rng{rng} {}
2828

29-
inline size_t CountOrphans() const
30-
{
31-
return m_orphans.size();
32-
}
33-
34-
CTransactionRef RandomOrphan()
35-
{
36-
std::map<Wtxid, OrphanTx>::iterator it;
37-
it = m_orphans.lower_bound(Wtxid::FromUint256(m_rng.rand256()));
38-
if (it == m_orphans.end())
39-
it = m_orphans.begin();
40-
return it->second.tx;
41-
}
42-
4329
FastRandomContext& m_rng;
4430
};
4531

@@ -114,6 +100,8 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans)
114100
auto now{GetTime<std::chrono::seconds>()};
115101
SetMockTime(now);
116102

103+
std::vector<CTransactionRef> orphans_added;
104+
117105
// 50 orphan transactions:
118106
for (int i = 0; i < 50; i++)
119107
{
@@ -126,13 +114,15 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans)
126114
tx.vout[0].nValue = i*CENT;
127115
tx.vout[0].scriptPubKey = GetScriptForDestination(PKHash(key.GetPubKey()));
128116

129-
orphanage.AddTx(MakeTransactionRef(tx), i);
117+
auto ptx = MakeTransactionRef(tx);
118+
orphanage.AddTx(ptx, i);
119+
orphans_added.emplace_back(ptx);
130120
}
131121

132122
// ... and 50 that depend on other orphans:
133123
for (int i = 0; i < 50; i++)
134124
{
135-
CTransactionRef txPrev = orphanage.RandomOrphan();
125+
const auto& txPrev = orphans_added[m_rng.randrange(orphans_added.size())];
136126

137127
CMutableTransaction tx;
138128
tx.vin.resize(1);
@@ -144,13 +134,15 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans)
144134
SignatureData empty;
145135
BOOST_CHECK(SignSignature(keystore, *txPrev, tx, 0, SIGHASH_ALL, empty));
146136

147-
orphanage.AddTx(MakeTransactionRef(tx), i);
137+
auto ptx = MakeTransactionRef(tx);
138+
orphanage.AddTx(ptx, i);
139+
orphans_added.emplace_back(ptx);
148140
}
149141

150142
// This really-big orphan should be ignored:
151143
for (int i = 0; i < 10; i++)
152144
{
153-
CTransactionRef txPrev = orphanage.RandomOrphan();
145+
const auto& txPrev = orphans_added[m_rng.randrange(orphans_added.size())];
154146

155147
CMutableTransaction tx;
156148
tx.vout.resize(1);
@@ -172,52 +164,52 @@ BOOST_AUTO_TEST_CASE(DoS_mapOrphans)
172164
BOOST_CHECK(!orphanage.AddTx(MakeTransactionRef(tx), i));
173165
}
174166

175-
size_t expected_num_orphans = orphanage.CountOrphans();
167+
size_t expected_num_orphans = orphanage.Size();
176168

177169
// Non-existent peer; nothing should be deleted
178170
orphanage.EraseForPeer(/*peer=*/-1);
179-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), expected_num_orphans);
171+
BOOST_CHECK_EQUAL(orphanage.Size(), expected_num_orphans);
180172

181173
// Each of first three peers stored
182174
// two transactions each.
183175
for (NodeId i = 0; i < 3; i++)
184176
{
185177
orphanage.EraseForPeer(i);
186178
expected_num_orphans -= 2;
187-
BOOST_CHECK(orphanage.CountOrphans() == expected_num_orphans);
179+
BOOST_CHECK(orphanage.Size() == expected_num_orphans);
188180
}
189181

190182
// Test LimitOrphanTxSize() function, nothing should timeout:
191183
FastRandomContext rng{/*fDeterministic=*/true};
192184
orphanage.LimitOrphans(/*max_orphans=*/expected_num_orphans, rng);
193-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), expected_num_orphans);
185+
BOOST_CHECK_EQUAL(orphanage.Size(), expected_num_orphans);
194186
expected_num_orphans -= 1;
195187
orphanage.LimitOrphans(/*max_orphans=*/expected_num_orphans, rng);
196-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), expected_num_orphans);
188+
BOOST_CHECK_EQUAL(orphanage.Size(), expected_num_orphans);
197189
assert(expected_num_orphans > 40);
198190
orphanage.LimitOrphans(40, rng);
199-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), 40);
191+
BOOST_CHECK_EQUAL(orphanage.Size(), 40);
200192
orphanage.LimitOrphans(10, rng);
201-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), 10);
193+
BOOST_CHECK_EQUAL(orphanage.Size(), 10);
202194
orphanage.LimitOrphans(0, rng);
203-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), 0);
195+
BOOST_CHECK_EQUAL(orphanage.Size(), 0);
204196

205197
// Add one more orphan, check timeout logic
206198
auto timeout_tx = MakeTransactionSpending(/*outpoints=*/{}, rng);
207199
orphanage.AddTx(timeout_tx, 0);
208200
orphanage.LimitOrphans(1, rng);
209-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), 1);
201+
BOOST_CHECK_EQUAL(orphanage.Size(), 1);
210202

211203
// One second shy of expiration
212204
SetMockTime(now + node::ORPHAN_TX_EXPIRE_TIME - 1s);
213205
orphanage.LimitOrphans(1, rng);
214-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), 1);
206+
BOOST_CHECK_EQUAL(orphanage.Size(), 1);
215207

216208
// Jump one more second, orphan should be timed out on limiting
217209
SetMockTime(now + node::ORPHAN_TX_EXPIRE_TIME);
218-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), 1);
210+
BOOST_CHECK_EQUAL(orphanage.Size(), 1);
219211
orphanage.LimitOrphans(1, rng);
220-
BOOST_CHECK_EQUAL(orphanage.CountOrphans(), 0);
212+
BOOST_CHECK_EQUAL(orphanage.Size(), 0);
221213
}
222214

223215
BOOST_AUTO_TEST_CASE(same_txid_diff_witness)

0 commit comments

Comments
 (0)