blob: a6b19623ebaa52ddb2b799db664d6523f35cd839 [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 {
fidl::endpoints::Proxy,
fidl_fuchsia_io as fio, fuchsia_async as fasync,
test_utils_lib::{events::*, matcher::EventMatcher, opaque_test::*},
};
#[fasync::run_singlethreaded(test)]
/// This uses the root_component.rs implementation to make the test package's
/// contents appear at /pkgfs. This allows component manager's built-in base
/// package resolver to see the contents of the package. HOWEVER, the component
/// manager configuration here sets the built-in resolver to 'None', meaning we
/// expect the attempt to start `echo_server` to not resolve.
async fn base_resolver_appmgr_bridge_test() {
// Obtain access to this component's pkg directory
let pkg_proxy = io_util::open_directory_in_namespace(
"/pkg",
fio::OPEN_RIGHT_READABLE | fio::OPEN_RIGHT_EXECUTABLE,
)
.unwrap();
let pkg_channel = pkg_proxy.into_channel().unwrap().into_zx_channel();
// Create an OpaqueTest that uses the appmgr bridge config
let test = OpaqueTestBuilder::new("fuchsia-boot:///#meta/simple_root.cm")
.component_manager_url(
"fuchsia-pkg://fuchsia.com/base_resolver_test#meta/component_manager_appmgr_loader.cmx",
)
.config("/pkg/data/component_manager_config_appmgr_loader")
.add_dir_handle("/boot", pkg_channel.into())
.build()
.await
.unwrap();
let event_source = test.connect_to_event_source().await.unwrap();
// Subscribe to events and begin execution of component manager
let mut event_stream = event_source.subscribe(vec![Started::NAME]).await.unwrap();
// Begin component manager's execution
event_source.start_component_tree().await;
// Expect the root component to be bound to
let event = EventMatcher::ok().moniker(".").expect_match::<Started>(&mut event_stream).await;
event.resume().await.unwrap();
// // Expect start to succeed because we're using the appmgr loader
let event = EventMatcher::ok()
.moniker("./echo_server:0")
.expect_match::<Started>(&mut event_stream)
.await;
event.resume().await.unwrap();
}