Branch data Line data Source code
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>
6 : : #include <test/fuzz/FuzzedDataProvider.h>
7 : : #include <test/fuzz/fuzz.h>
8 : : #include <test/fuzz/util.h>
9 : :
10 : : #include <cstdint>
11 : : #include <string>
12 : : #include <vector>
13 : :
14 : : namespace {
15 : : struct DumbCheck {
16 : : bool result = false;
17 : :
18 : 21828 : explicit DumbCheck(const bool _result) : result(_result)
19 : : {
20 : : }
21 : :
22 : 1922 : std::optional<int> operator()() const
23 : : {
24 [ + + ]: 1922 : if (result) return std::nullopt;
25 : 84 : return 1;
26 : : }
27 : : };
28 : : } // namespace
29 : :
30 [ + - ]: 488 : FUZZ_TARGET(checkqueue)
31 : : {
32 : 76 : FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
33 : :
34 : 76 : const unsigned int batch_size = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, 1024);
35 : 76 : CCheckQueue<DumbCheck> check_queue_1{batch_size, /*worker_threads_num=*/0};
36 [ + - ]: 76 : CCheckQueue<DumbCheck> check_queue_2{batch_size, /*worker_threads_num=*/0};
37 : 76 : std::vector<DumbCheck> checks_1;
38 : 76 : std::vector<DumbCheck> checks_2;
39 : 76 : const int size = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 1024);
40 [ + + ]: 10990 : for (int i = 0; i < size; ++i) {
41 : 10914 : const bool result = fuzzed_data_provider.ConsumeBool();
42 [ + - ]: 10914 : checks_1.emplace_back(result);
43 [ + - ]: 10914 : checks_2.emplace_back(result);
44 : : }
45 [ + + ]: 76 : if (fuzzed_data_provider.ConsumeBool()) {
46 [ + - ]: 60 : check_queue_1.Add(std::move(checks_1));
47 : : }
48 [ + + ]: 76 : if (fuzzed_data_provider.ConsumeBool()) {
49 [ + - ]: 57 : (void)check_queue_1.Complete();
50 : : }
51 : :
52 [ + - ]: 76 : CCheckQueueControl<DumbCheck> check_queue_control{&check_queue_2};
53 [ + + ]: 76 : if (fuzzed_data_provider.ConsumeBool()) {
54 [ + - ]: 40 : check_queue_control.Add(std::move(checks_2));
55 : : }
56 [ + + ]: 76 : if (fuzzed_data_provider.ConsumeBool()) {
57 [ + - ]: 10 : (void)check_queue_control.Complete();
58 : : }
59 : 76 : }
|