Skip to content

Commit 769a1ef

Browse files
fjahrjamesob
authored andcommitted
test: Add tests with maleated snapshot data
1 parent 4d8de04 commit 769a1ef

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/test/validation_chainstatemanager_tests.cpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,11 @@ BOOST_AUTO_TEST_CASE(chainstatemanager_rebalance_caches)
169169
BOOST_CHECK_CLOSE(c2.m_coinsdb_cache_size_bytes, max_cache * 0.95, 1);
170170
}
171171

172+
auto NoMalleation = [](CAutoFile& file, SnapshotMetadata& meta){};
173+
174+
template<typename F = decltype(NoMalleation)>
172175
static bool
173-
CreateAndActivateUTXOSnapshot(NodeContext& node, const fs::path root)
176+
CreateAndActivateUTXOSnapshot(NodeContext& node, const fs::path root, F malleation = NoMalleation)
174177
{
175178
// Write out a snapshot to the test's tempdir.
176179
//
@@ -191,6 +194,8 @@ CreateAndActivateUTXOSnapshot(NodeContext& node, const fs::path root)
191194
SnapshotMetadata metadata;
192195
auto_infile >> metadata;
193196

197+
malleation(auto_infile, metadata);
198+
194199
return node.chainman->ActivateSnapshot(auto_infile, metadata, /*in_memory*/ true);
195200
}
196201

@@ -232,6 +237,29 @@ BOOST_FIXTURE_TEST_CASE(chainstatemanager_activate_snapshot, TestChain100Determi
232237
initial_size += 10;
233238
initial_total_coins += 10;
234239

240+
// Should not load malleated snapshots
241+
BOOST_REQUIRE(!CreateAndActivateUTXOSnapshot(
242+
m_node, m_path_root, [](CAutoFile& auto_infile, SnapshotMetadata& metadata) {
243+
// A UTXO is missing but count is correct
244+
metadata.m_coins_count -= 1;
245+
246+
COutPoint outpoint;
247+
Coin coin;
248+
249+
auto_infile >> outpoint;
250+
auto_infile >> coin;
251+
}));
252+
BOOST_REQUIRE(!CreateAndActivateUTXOSnapshot(
253+
m_node, m_path_root, [](CAutoFile& auto_infile, SnapshotMetadata& metadata) {
254+
// Coins count is larger than coins in file
255+
metadata.m_coins_count += 1;
256+
}));
257+
BOOST_REQUIRE(!CreateAndActivateUTXOSnapshot(
258+
m_node, m_path_root, [](CAutoFile& auto_infile, SnapshotMetadata& metadata) {
259+
// Coins count is smaller than coins in file
260+
metadata.m_coins_count -= 1;
261+
}));
262+
235263
BOOST_REQUIRE(CreateAndActivateUTXOSnapshot(m_node, m_path_root));
236264

237265
// Ensure our active chain is the snapshot chainstate.

0 commit comments

Comments
 (0)