checkqueue.cpp
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 explicit DumbCheck(const bool _result) : result(_result) 19 { 20 } 21 22 bool operator()() const 23 { 24 return result; 25 } 26 }; 27 } // namespace 28 29 FUZZ_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 }