blob: 768c76fa7bc5fcdf887b5ed7e5f972324d9b8d4a [file] [log] [blame]
// Copyright 2020 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.
use component_events::events::*;
use component_events::matcher::*;
use fuchsia_component_test::*;
use {fidl_fuchsia_component as fcomponent, fuchsia_async as fasync};
#[fasync::run_singlethreaded(test)]
async fn component_manager_namespace() {
// Define the realm inside component manager.
let builder = RealmBuilder::new().await.unwrap();
let realm = builder
.add_child("realm", "#meta/integration-test-root.cm", ChildOptions::new().eager())
.await
.unwrap();
builder
.add_route(
Route::new()
.capability(Capability::protocol_by_name("fuchsia.logger.LogSink"))
.capability(Capability::protocol_by_name("fidl.examples.routing.echo.Echo"))
.capability(Capability::protocol_by_name("fuchsia.process.Launcher"))
.capability(Capability::directory("test-pkg"))
.from(Ref::parent())
.to(&realm),
)
.await
.unwrap();
let (component_manager_realm, _task) =
builder.with_nested_component_manager("#meta/component-manager.cm").await.unwrap();
let echo_server = component_manager_realm
.add_child("echo_server", "#meta/echo_server.cm", ChildOptions::new())
.await
.unwrap();
component_manager_realm
.add_route(
Route::new()
.capability(Capability::protocol_by_name("fidl.examples.routing.echo.Echo"))
.from(&echo_server)
.to(Ref::child("component_manager")),
)
.await
.unwrap();
let instance = component_manager_realm.build().await.unwrap();
let proxy = instance
.root
.connect_to_protocol_at_exposed_dir::<fcomponent::EventStreamMarker>()
.unwrap();
let mut event_stream = component_events::events::EventStream::new(proxy);
// Unblock the component_manager.
instance.start_component_tree().await.unwrap();
EventMatcher::ok()
.stop(Some(ExitStatusMatcher::Clean))
.moniker_regex("realm")
.wait::<Stopped>(&mut event_stream)
.await
.unwrap();
}