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