|  | // 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 { | 
|  | anyhow::Error, | 
|  | fuchsia_async as fasync, fuchsia_syslog as syslog, | 
|  | log::*, | 
|  | test_utils_lib::{ | 
|  | events::{Event, Stopped}, | 
|  | matcher::EventMatcher, | 
|  | opaque_test::OpaqueTest, | 
|  | sequence::{EventSequence, Ordering}, | 
|  | }, | 
|  | }; | 
|  |  | 
|  | #[fasync::run_singlethreaded(test)] | 
|  | async fn scoped_instances() -> Result<(), Error> { | 
|  | syslog::init_with_tags(&["fuchsia_component_v2_test"]).expect("could not initialize logging"); | 
|  | let test = | 
|  | OpaqueTest::default("fuchsia-pkg://fuchsia.com/fuchsia-component-tests#meta/realm.cm") | 
|  | .await?; | 
|  |  | 
|  | let mut event_source = test.connect_to_event_source().await?; | 
|  | let event = EventMatcher::ok().r#type(Stopped::TYPE).moniker("./coll:auto-*".to_string()); | 
|  | let expected_events: Vec<_> = (0..3).map(|_| event.clone()).collect(); | 
|  | let expectation = EventSequence::new() | 
|  | .all_of(expected_events, Ordering::Ordered) | 
|  | .subscribe_and_expect(&mut event_source) | 
|  | .await?; | 
|  |  | 
|  | event_source.start_component_tree().await; | 
|  | info!("Waiting for scoped instances to be destroyed"); | 
|  | expectation.await?; | 
|  | Ok(()) | 
|  | } |