MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / TestDbWrapper

Function TestDbWrapper

src/test/fuzz/dbwrapper.cpp:200–333  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

198
199template <typename DrainWorkFn, typename RunOneFn>
200void TestDbWrapper(FuzzedDataProvider& provider,
201 leveldb::Env* testing_env,
202 DrainWorkFn drain_work,
203 RunOneFn run_one,
204 bool allow_force_compact)
205{
206 SeedRandomStateForTest(SeedRand::ZEROS);
207
208 const bool obfuscate{provider.ConsumeBool()};
209
210 const auto make_db{[&](DBOptions options = {}) {
211 return std::make_unique<CDBWrapper>(ConsumeDBParams(provider, testing_env, obfuscate, options));
212 }};
213 std::unique_ptr<CDBWrapper> dbw{make_db()};
214
215 // Oracle: key → value size. Content is reconstructed via MakeValue().
216 Oracle oracle;
217
218 LIMITED_WHILE(provider.ConsumeBool(), 1'000)
219 {
220 CallOneOf(
221 provider,
222 // --- Mutations ---
223 [&] {
224 const auto key{ConsumeKey(provider)};
225 const auto size{ConsumeValueSize(provider)};
226 drain_work();
227 dbw->Write(key, MakeValue(key, size), /*fSync=*/provider.ConsumeBool());
228 oracle[key] = size;
229 },
230 [&] {
231 const auto key{ConsumeKey(provider)};
232 drain_work();
233 dbw->Erase(key, /*fSync=*/provider.ConsumeBool());
234 oracle.erase(key);
235 },
236 [&] {
237 CDBBatch batch{*dbw};
238 std::map<uint16_t, uint32_t> batch_writes;
239 std::set<uint16_t> batch_erases;
240 const auto fill{[&] {
241 LIMITED_WHILE(provider.ConsumeBool(), 20)
242 {
243 const auto key{ConsumeKey(provider)};
244 if (provider.ConsumeBool()) {
245 const auto size{ConsumeValueSize(provider)};
246 batch.Write(key, MakeValue(key, size));
247 batch_writes[key] = size;
248 batch_erases.erase(key);
249 } else {
250 batch.Erase(key);
251 batch_erases.insert(key);
252 batch_writes.erase(key);
253 }
254 }
255 }};
256 fill();
257 if (provider.ConsumeBool()) {

Callers 1

dbwrapper.cppFile · 0.85

Calls 15

SeedRandomStateForTestFunction · 0.85
ConsumeDBParamsFunction · 0.85
CallOneOfFunction · 0.85
ConsumeKeyFunction · 0.85
ConsumeValueSizeFunction · 0.85
MakeValueFunction · 0.85
VerifyIteratorFunction · 0.85
ConsumeBoolMethod · 0.80
findMethod · 0.80
WriteMethod · 0.45
EraseMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected