Bitcoin Core 28.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
checkqueue.cpp
Go to the documentation of this file.
1// Copyright (c) 2020-2022 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#include <checkqueue.h>
7#include <test/fuzz/fuzz.h>
8#include <test/fuzz/util.h>
9
10#include <cstdint>
11#include <string>
12#include <vector>
13
14namespace {
15struct DumbCheck {
16 bool result = false;
17
18 explicit DumbCheck(const bool _result) : result(_result)
19 {
20 }
21
22 bool operator()() const
23 {
24 return result;
25 }
26};
27} // namespace
28
29FUZZ_TARGET(checkqueue)
30{
31 FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
32
33 const unsigned int batch_size = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, 1024);
34 CCheckQueue<DumbCheck> check_queue_1{batch_size, /*worker_threads_num=*/0};
35 CCheckQueue<DumbCheck> check_queue_2{batch_size, /*worker_threads_num=*/0};
36 std::vector<DumbCheck> checks_1;
37 std::vector<DumbCheck> checks_2;
38 const int size = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 1024);
39 for (int i = 0; i < size; ++i) {
40 const bool result = fuzzed_data_provider.ConsumeBool();
41 checks_1.emplace_back(result);
42 checks_2.emplace_back(result);
43 }
44 if (fuzzed_data_provider.ConsumeBool()) {
45 check_queue_1.Add(std::move(checks_1));
46 }
47 if (fuzzed_data_provider.ConsumeBool()) {
48 (void)check_queue_1.Wait();
49 }
50
51 CCheckQueueControl<DumbCheck> check_queue_control{&check_queue_2};
52 if (fuzzed_data_provider.ConsumeBool()) {
53 check_queue_control.Add(std::move(checks_2));
54 }
55 if (fuzzed_data_provider.ConsumeBool()) {
56 (void)check_queue_control.Wait();
57 }
58}
RAII-style controller object for a CCheckQueue that guarantees the passed queue is finished before co...
Definition checkqueue.h:193
Queue for verifications that have to be performed.
Definition checkqueue.h:28
T ConsumeIntegralInRange(T min, T max)
#define FUZZ_TARGET(...)
Definition fuzz.h:35