// Copyright 2019 The Chromium 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 "remoting/base/grpc_support/grpc_test_util.h"

#include "base/run_loop.h"
#include "base/test/bind_test_util.h"

namespace remoting {
namespace test {

bool WaitForCompletion(const base::Location& from_here,
                       grpc::CompletionQueue* completion_queue,
                       void* expected_tag) {
  void* tag;
  bool ok;

  completion_queue->Next(&tag, &ok);
  DCHECK_EQ(expected_tag, tag)
      << "Unexpected tag. Location: " << from_here.ToString();
  return ok;
}

void WaitForCompletionAndAssertOk(const base::Location& from_here,
                                  grpc::CompletionQueue* completion_queue,
                                  void* expected_tag) {
  bool ok = WaitForCompletion(from_here, completion_queue, expected_tag);
  DCHECK(ok) << "Event is not ok. Location: " << from_here.ToString();
}

base::OnceCallback<void(const grpc::Status&)>
CheckStatusThenQuitRunLoopCallback(const base::Location& from_here,
                                   grpc::StatusCode expected_status_code,
                                   base::RunLoop* run_loop) {
  return base::BindLambdaForTesting([=](const grpc::Status& status) {
    DCHECK_EQ(expected_status_code, status.error_code())
        << "Status code mismatched. Location: " << from_here.ToString();
    run_loop->QuitWhenIdle();
  });
}

}  // namespace test
}  // namespace remoting
