| // 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::{format_err, Context, Error}, |
| fidl::endpoints::Proxy, |
| fidl_test_componentmanager_stresstests as fstresstests, |
| fuchsia_component_test::ScopedInstance, |
| }; |
| pub struct Child { |
| pub instance: ScopedInstance, |
| pub realm: fstresstests::ChildRealmProxy, |
| } |
| |
| pub async fn create_child(collection: &str, url: &str) -> Result<Child, Error> { |
| let instance = ScopedInstance::new(collection.to_string(), url.to_string()) |
| .await |
| .context(format_err!("Cannot create child for '{}:{}'", collection, url))?; |
| let realm = |
| instance.connect_to_protocol_at_exposed_dir::<fstresstests::ChildRealmMarker>().context( |
| format_err!("Cannot connect to child realm service for '{}'", instance.child_name()), |
| )?; |
| Ok(Child { instance, realm }) |
| } |
| |
| pub async fn stop_child(child: Child) -> Result<(), Error> { |
| child |
| .realm |
| .stop() |
| .context(format_err!("Error calling stop for '{}'", child.instance.child_name()))?; |
| child.realm.on_closed().await.context(format_err!( |
| "Error waiting for child to stop '{}'", |
| child.instance.child_name() |
| ))?; |
| Ok(()) |
| } |