threadinterrupt.h raw

   1  // Copyright (c) 2024-present 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  #ifndef BITCOIN_TEST_FUZZ_UTIL_THREADINTERRUPT_H
   6  #define BITCOIN_TEST_FUZZ_UTIL_THREADINTERRUPT_H
   7  
   8  #include <test/fuzz/FuzzedDataProvider.h>
   9  #include <util/threadinterrupt.h>
  10  
  11  #include <memory>
  12  
  13  /**
  14   * Mocked CThreadInterrupt that returns "randomly" whether it is interrupted and never sleeps.
  15   */
  16  class FuzzedThreadInterrupt : public CThreadInterrupt
  17  {
  18  public:
  19      explicit FuzzedThreadInterrupt(FuzzedDataProvider& fuzzed_data_provider);
  20  
  21      virtual bool interrupted() const override;
  22      virtual bool sleep_for(Clock::duration) override;
  23  
  24  private:
  25      FuzzedDataProvider& m_fuzzed_data_provider;
  26  };
  27  
  28  [[nodiscard]] inline std::shared_ptr<CThreadInterrupt> ConsumeThreadInterrupt(FuzzedDataProvider& fuzzed_data_provider)
  29  {
  30      return std::make_shared<FuzzedThreadInterrupt>(fuzzed_data_provider);
  31  }
  32  
  33  #endif // BITCOIN_TEST_FUZZ_UTIL_THREADINTERRUPT_H
  34