| // 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(); |
| } |