blob: 0ff5b038136df806f879ace2e3ca03869b5ea230 [file] [log] [blame]
// Copyright 2023 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 component_events::sequence::*;
use fidl_fuchsia_component as fcomponent;
use fuchsia_component_test::{Capability, ChildOptions, RealmBuilder, Ref, Route};
/// An integration test that runs a simple ELF component that uses a runner from
/// an ELF runner component instantiated as a child.
async fn run_test(url: &str) {
let builder = RealmBuilder::new().await.unwrap();
let program =
builder.add_child("simple_elf_program", url, ChildOptions::new().eager()).await.unwrap();
builder
.add_route(
Route::new()
.capability(Capability::protocol_by_name("fuchsia.process.Launcher"))
.from(Ref::parent())
.to(&program),
)
.await
.unwrap();
let instance =
builder.build_in_nested_component_manager("#meta/component_manager.cm").await.unwrap();
let proxy = instance
.root
.connect_to_protocol_at_exposed_dir::<fcomponent::EventStreamMarker>()
.unwrap();
proxy.wait_for_ready().await.unwrap();
let event_stream = EventStream::new(proxy);
instance.start_component_tree().await.unwrap();
let elf_runner_start =
EventMatcher::ok().r#type(Started::TYPE).moniker("./simple_elf_program/elf_runner");
let simple_elf_program_start =
EventMatcher::ok().r#type(Started::TYPE).moniker("./simple_elf_program");
let simple_elf_program_stop =
EventMatcher::ok().stop(Some(ExitStatusMatcher::Clean)).moniker("./simple_elf_program");
EventSequence::new()
.has_subset(
vec![elf_runner_start, simple_elf_program_start, simple_elf_program_stop],
Ordering::Ordered,
)
.expect(event_stream)
.await
.unwrap();
}
#[fuchsia::test]
async fn run_elf_component_with_elf_runner_component_from_package() {
let url = "#meta/simple_elf_program_packaged_elf_runner.cm";
run_test(url).await;
}
#[fuchsia::test]
async fn run_elf_component_with_elf_runner_component_from_builtin_resolver() {
let url = "#meta/simple_elf_program_builtin_elf_runner.cm";
run_test(url).await;
}