// Copyright 2018 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.

#ifndef PERIDOT_LIB_TESTING_WAIT_UNTIL_IDLE_H_
#define PERIDOT_LIB_TESTING_WAIT_UNTIL_IDLE_H_

#include <lib/async-loop/cpp/loop.h>
#include <lib/async/cpp/task.h>
#include <lib/fidl/cpp/interface_ptr.h>

#include "gtest/gtest.h"

namespace util {

// Convenience invocation of a debug FIDL interface's |WaitUntilIdle() => ()|
// function. This wrapper includes the necessary logic to run the message loop
// while waiting and drain any coincident messages afterwards. It also adds an
// error handler on the debug interface pointer provided, and clears it
// afterwards.
template <class Interface>
void WaitUntilIdle(fidl::InterfacePtr<Interface>* debug_interface_ptr, async::Loop* loop) {
  debug_interface_ptr->set_error_handler([loop](zx_status_t status) {
    loop->Quit();
    ADD_FAILURE() << Interface::Name_ << " disconnected (check app logs for crash)";
  });

  // We can't just use a synchronous ptr or
  // |fidl::InterfacePtr::WaitForResponse| because those don't run the message
  // loop while they wait.
  (*debug_interface_ptr)->WaitUntilIdle([loop] { loop->Quit(); });
  loop->Run();
  loop->ResetQuit();
  // Finish processing any remaining messages.
  loop->RunUntilIdle();
  loop->ResetQuit();

  debug_interface_ptr->set_error_handler(nullptr);
}

}  // namespace util

#endif  // PERIDOT_LIB_TESTING_WAIT_UNTIL_IDLE_H_
