61class MockLogSink :
public component_testing::LocalComponentImpl,
62 public fidl::Server<fuchsia_logger::LogSink> {
64 MockLogSink(fit::closure quitLoop, async_dispatcher_t* dispatcher)
65 : quit_loop_(
std::move(quitLoop)), dispatcher_(dispatcher) {}
68 WaitForInterestChangeCompleter::Sync& completer)
override {
71 fuchsia_logger::LogSinkWaitForInterestChangeResponse response = {
72 {.data = {{.min_severity = Severity::kWarn}}}};
73 completer.Reply(fit::ok(response));
77 completer_.emplace(completer.ToAsync());
83 fuchsia_logger::LogSinkConnectStructuredRequest& request,
84 ConnectStructuredCompleter::Sync& completer)
override {}
87 ASSERT_EQ(outgoing()->AddProtocol<fuchsia_logger::LogSink>(
88 bindings_.CreateHandler(
this, dispatcher_,
89 fidl::kIgnoreBindingClosure)),
94 fidl::UnknownMethodMetadata<fuchsia_logger::LogSink> metadata,
95 fidl::UnknownMethodCompleter::Sync& completer)
override {}
98 bool first_call_ =
true;
99 fit::closure quit_loop_;
100 async_dispatcher_t* dispatcher_;
101 fidl::ServerBindingGroup<fuchsia_logger::LogSink> bindings_;
102 std::optional<WaitForInterestChangeCompleter::Async> completer_;
107 auto realm_builder = component_testing::RealmBuilder::Create();
108 realm_builder.AddLocalChild(
kLogSink, [&]() {
109 return std::make_unique<MockLogSink>(QuitLoopClosure(), dispatcher());
111 realm_builder.AddRoute(component_testing::Route{
112 .capabilities = {component_testing::Protocol{
113 fidl::DiscoverableProtocolName<fuchsia_logger::LogSink>}},
114 .source = component_testing::ChildRef{
kLogSink},
115 .targets = {component_testing::ParentRef()}});
117 auto realm = realm_builder.Build(dispatcher());
118 auto cleanup = fit::defer([&]() {
119 bool complete =
false;
120 realm.Teardown([&](
auto result) { complete =
true; });
121 RunLoopUntil([&]() {
return complete; });
123 auto client_end = realm.component().Connect<fuchsia_logger::LogSink>();
124 ASSERT_TRUE(client_end.is_ok());