/root/bitcoin/src/test/fuzz/checkqueue.cpp
| Line | Count | Source | 
| 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 | 0 |     explicit DumbCheck(const bool _result) : result(_result) | 
| 19 | 0 |     { | 
| 20 | 0 |     } | 
| 21 |  |  | 
| 22 |  |     std::optional<int> operator()() const | 
| 23 | 0 |     { | 
| 24 | 0 |         if (result) return std::nullopt; | 
| 25 | 0 |         return 1; | 
| 26 | 0 |     } | 
| 27 |  | }; | 
| 28 |  | } // namespace | 
| 29 |  |  | 
| 30 |  | FUZZ_TARGET(checkqueue) | 
| 31 | 0 | { | 
| 32 | 0 |     FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); | 
| 33 |  | 
 | 
| 34 | 0 |     const unsigned int batch_size = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, 1024); | 
| 35 | 0 |     CCheckQueue<DumbCheck> check_queue_1{batch_size, /*worker_threads_num=*/0}; | 
| 36 | 0 |     CCheckQueue<DumbCheck> check_queue_2{batch_size, /*worker_threads_num=*/0}; | 
| 37 | 0 |     std::vector<DumbCheck> checks_1; | 
| 38 | 0 |     std::vector<DumbCheck> checks_2; | 
| 39 | 0 |     const int size = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 1024); | 
| 40 | 0 |     for (int i = 0; i < size; ++i) { | 
| 41 | 0 |         const bool result = fuzzed_data_provider.ConsumeBool(); | 
| 42 | 0 |         checks_1.emplace_back(result); | 
| 43 | 0 |         checks_2.emplace_back(result); | 
| 44 | 0 |     } | 
| 45 | 0 |     if (fuzzed_data_provider.ConsumeBool()) { | 
| 46 | 0 |         check_queue_1.Add(std::move(checks_1)); | 
| 47 | 0 |     } | 
| 48 | 0 |     if (fuzzed_data_provider.ConsumeBool()) { | 
| 49 | 0 |         (void)check_queue_1.Complete(); | 
| 50 | 0 |     } | 
| 51 |  | 
 | 
| 52 | 0 |     CCheckQueueControl<DumbCheck> check_queue_control{check_queue_2}; | 
| 53 | 0 |     if (fuzzed_data_provider.ConsumeBool()) { | 
| 54 | 0 |         check_queue_control.Add(std::move(checks_2)); | 
| 55 | 0 |     } | 
| 56 | 0 |     if (fuzzed_data_provider.ConsumeBool()) { | 
| 57 | 0 |         (void)check_queue_control.Complete(); | 
| 58 | 0 |     } | 
| 59 | 0 | } |