| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/sys/fuzzing/common/testing/monitor.h" |
| |
| #include <lib/syslog/cpp/macros.h> |
| #include <zircon/status.h> |
| |
| namespace fuzzing { |
| |
| FakeMonitor::FakeMonitor(ExecutorPtr executor) : binding_(this), executor_(std::move(executor)) {} |
| |
| fidl::InterfaceHandle<Monitor> FakeMonitor::NewBinding() { |
| return binding_.NewBinding(executor_->dispatcher()); |
| } |
| |
| void FakeMonitor::Update(UpdateReason reason, Status status, UpdateCallback callback) { |
| updates_.emplace_back(); |
| auto& back = updates_.back(); |
| back.reason = reason; |
| back.status = std::move(status); |
| task_.resume_task(); |
| callback(); |
| } |
| |
| Promise<> FakeMonitor::AwaitUpdate() { |
| return fpromise::make_promise([this](Context& context) -> Result<> { |
| if (updates_.empty()) { |
| task_ = context.suspend_task(); |
| return fpromise::pending(); |
| } |
| return fpromise::ok(); |
| }) |
| .wrap_with(scope_); |
| } |
| |
| } // namespace fuzzing |