blob: af5f92adba213b2afc6dd3edd5113c806806fb57 [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 {
test_utils_lib::{events::*, injectors::*, matcher::EventMatcher, opaque_test::*},
work_scheduler_dispatch_reporter::{DispatchedEvent, WorkSchedulerDispatchReporter},
};
#[fuchsia_async::run_singlethreaded(test)]
async fn basic_work_scheduler_test() {
let root_component_url =
"fuchsia-pkg://fuchsia.com/work_scheduler_integration_test#meta/bound_worker.cm";
let test = OpaqueTest::default(root_component_url).await.unwrap();
let event_source = test.connect_to_event_source().await.unwrap();
let mut event_stream = event_source.subscribe(vec![Started::NAME]).await.unwrap();
let work_scheduler_dispatch_reporter = WorkSchedulerDispatchReporter::new();
work_scheduler_dispatch_reporter.inject(&event_source, EventMatcher::ok()).await;
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();
let dispatched_event = work_scheduler_dispatch_reporter.wait_for_dispatched().await;
assert_eq!(DispatchedEvent::new("TEST".to_string()), dispatched_event);
}
#[fuchsia_async::run_singlethreaded(test)]
async fn unbound_work_scheduler_test() {
let root_component_url =
"fuchsia-pkg://fuchsia.com/work_scheduler_integration_test#meta/unbound_child_worker_parent.cm";
let test = OpaqueTest::default(root_component_url).await.unwrap();
let event_source = test.connect_to_event_source().await.unwrap();
let mut event_stream = event_source.subscribe(vec![Started::NAME]).await.unwrap();
let work_scheduler_dispatch_reporter = WorkSchedulerDispatchReporter::new();
work_scheduler_dispatch_reporter.inject(&event_source, EventMatcher::ok()).await;
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();
// `/worker_sibling:0` has started.
let event = EventMatcher::ok()
.moniker("./worker_sibling:0")
.expect_match::<Started>(&mut event_stream)
.await;
event.resume().await.unwrap();
// We no longer need to track `StartInstance` events.
drop(event_stream);
let dispatched_event = work_scheduler_dispatch_reporter.wait_for_dispatched().await;
assert_eq!(DispatchedEvent::new("TEST".to_string()), dispatched_event);
}