blob: 91d1db0021c236328b87b49f7edd63c5e50c4c7a [file] [log] [blame]
// Copyright 2019 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 {
anyhow::Error,
breakpoint_system_client::*,
test_utils::*,
work_scheduler_dispatch_reporter::{DispatchedEvent, WorkSchedulerDispatchReporter},
};
#[fuchsia_async::run_singlethreaded(test)]
async fn basic_work_scheduler_test() -> Result<(), Error> {
let root_component_url =
"fuchsia-pkg://fuchsia.com/work_scheduler_integration_test#meta/bound_worker.cm";
let test = BlackBoxTest::default(root_component_url).await?;
let breakpoint_system =
test.connect_to_breakpoint_system().await.expect("breakpoint system is unavailable");
let receiver = breakpoint_system.set_breakpoints(vec![BeforeStartInstance::TYPE]).await?;
let work_scheduler_dispatch_reporter = WorkSchedulerDispatchReporter::new();
breakpoint_system.install_injector(work_scheduler_dispatch_reporter.clone()).await?;
breakpoint_system.start_component_tree().await?;
// Expect the root component to be bound to
let invocation = receiver.expect_exact::<BeforeStartInstance>(".").await?;
invocation.resume().await?;
let dispatched_event = work_scheduler_dispatch_reporter
.wait_for_dispatched(std::time::Duration::from_secs(10))
.await?;
assert_eq!(DispatchedEvent::new("TEST".to_string()), dispatched_event);
Ok(())
}
#[fuchsia_async::run_singlethreaded(test)]
async fn unbound_work_scheduler_test() -> Result<(), Error> {
let root_component_url =
"fuchsia-pkg://fuchsia.com/work_scheduler_integration_test#meta/unbound_child_worker_parent.cm";
let test = BlackBoxTest::default(root_component_url).await?;
let breakpoint_system =
test.connect_to_breakpoint_system().await.expect("breakpoint system is unavailable");
let receiver = breakpoint_system.set_breakpoints(vec![BeforeStartInstance::TYPE]).await?;
let work_scheduler_dispatch_reporter = WorkSchedulerDispatchReporter::new();
breakpoint_system.install_injector(work_scheduler_dispatch_reporter.clone()).await?;
breakpoint_system.start_component_tree().await?;
// Expect the root component to be bound to
let invocation = receiver.expect_exact::<BeforeStartInstance>(".").await?;
invocation.resume().await?;
// `/worker_sibling:0` has started.
let invocation = receiver.expect_exact::<BeforeStartInstance>("./worker_sibling:0").await?;
invocation.resume().await?;
// We no longer need to track `StartInstance` events.
drop(receiver);
let dispatched_event = work_scheduler_dispatch_reporter
.wait_for_dispatched(std::time::Duration::from_secs(10))
.await?;
assert_eq!(DispatchedEvent::new("TEST".to_string()), dispatched_event);
Ok(())
}