Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d71d470a authored by Zach Johnson's avatar Zach Johnson
Browse files

Add FuzzTestModuleRegistry to clean up fuzz tests

Test: fuzz/run --host bluetooth_gd_hci_layer_fuzz_test
Test: fuzz/run --host bluetooth_gd_acl_manager_fuzz_test
Change-Id: I43c04b7272b3feb0548ffdffdc084f612aef57f1
parent 28c906b0
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -85,6 +85,8 @@ void FuzzHciHal::injectScoData(std::vector<uint8_t> data) {
  callbacks_->scoDataReceived(data);
}

const ModuleFactory FuzzHciHal::Factory = ModuleFactory([]() { return new FuzzHciHal(); });

}  // namespace fuzz
}  // namespace hal
}  // namespace bluetooth
+2 −0
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ class FuzzHciHal : public HciHal {
    return "HciHalFuzz";
  }

  static const ModuleFactory Factory;

 protected:
  void ListDependencies(ModuleList* list) override {}
  void Start() override {}
+5 −11
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@

#include <fuzzer/FuzzedDataProvider.h>

using bluetooth::TestModuleRegistry;
using bluetooth::FuzzTestModuleRegistry;
using bluetooth::fuzz::GetArbitraryBytes;
using bluetooth::hci::AclManager;
using bluetooth::hci::HciLayer;
@@ -38,12 +38,9 @@ using bluetooth::os::fuzz::fake_timerfd_reset;
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
  FuzzedDataProvider dataProvider(data, size);

  static TestModuleRegistry moduleRegistry = TestModuleRegistry();
  FuzzHciLayer* fuzzHci = new FuzzHciLayer();

  moduleRegistry.InjectTestModule(&HciLayer::Factory, fuzzHci);
  fuzzHci->Start();
  moduleRegistry.Start<AclManager>(&moduleRegistry.GetTestThread());
  static FuzzTestModuleRegistry moduleRegistry = FuzzTestModuleRegistry();
  FuzzHciLayer* fuzzHci = moduleRegistry.Inject<FuzzHciLayer>(&HciLayer::Factory);
  moduleRegistry.Start<AclManager>();

  while (dataProvider.remaining_bytes() > 0) {
    const uint8_t action = dataProvider.ConsumeIntegralInRange(0, 12);
@@ -57,10 +54,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
    }
  }

  if (!moduleRegistry.GetTestThread().GetReactor()->WaitForIdle(std::chrono::milliseconds(100))) {
    LOG_ERROR("idle timed out");
  }
  moduleRegistry.StopAll();
  moduleRegistry.WaitForIdleAndStopAll();
  fake_timerfd_reset();
  return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -77,6 +77,8 @@ void FuzzHciLayer::injectAclData(std::vector<uint8_t> data) {
  acl_inject_->Inject(std::make_unique<AclPacketView>(aclPacket));
}

const ModuleFactory FuzzHciLayer::Factory = ModuleFactory([]() { return new FuzzHciLayer(); });

}  // namespace fuzz
}  // namespace hci
}  // namespace bluetooth
+3 −0
Original line number Diff line number Diff line
@@ -83,6 +83,9 @@ class FuzzHciLayer : public HciLayer {
    return "FuzzHciLayer";
  }

  static const ModuleFactory Factory;

 protected:
  void ListDependencies(ModuleList* list) override {}
  void Start() override;
  void Stop() override;
Loading