blob: fe224c07d70718e1cfa5e596934a35f06f23b528 [file] [log] [blame]
// 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.
#include "lib/fidl/cpp/interface_ptr.h"
#include <lib/fidl/cpp/message_buffer.h>
#include <thread>
#include "gtest/gtest.h"
#include "lib/fidl/cpp/binding.h"
#include "lib/fidl/cpp/test/async_loop_for_test.h"
#include "lib/fidl/cpp/test/frobinator_impl.h"
namespace fidl {
namespace {
TEST(SynchronousInterfacePtr, Trivial) {
fidl::test::frobinator::FrobinatorSyncPtr ptr;
}
TEST(SynchronousInterfacePtr, Control) {
fidl::test::frobinator::FrobinatorSyncPtr ptr;
auto request = ptr.NewRequest();
std::thread client([ptr = std::move(ptr)]() mutable {
ptr->Frob("one");
std::string result;
ptr->Grob("two", &result);
EXPECT_EQ("response", result);
});
fidl::test::AsyncLoopForTest loop;
test::FrobinatorImpl impl;
Binding<fidl::test::frobinator::Frobinator> binding(&impl);
EXPECT_EQ(ZX_OK, binding.Bind(std::move(request)));
binding.WaitForMessage();
binding.WaitForMessage();
client.join();
}
TEST(SynchronousInterfacePtr, Unbind) {
fidl::test::frobinator::FrobinatorSyncPtr ptr;
auto request = ptr.NewRequest();
fidl::test::AsyncLoopForTest loop;
test::FrobinatorImpl impl;
Binding<fidl::test::frobinator::Frobinator> binding(&impl);
EXPECT_EQ(ZX_OK, binding.Bind(std::move(request)));
auto handle = ptr.Unbind();
EXPECT_TRUE(handle.is_valid());
}
} // namespace
} // namespace fidl