remotevol_fuchsia_test_util/
fuchsia.rs
1use diagnostics_reader::ArchiveReader;
6use fidl::endpoints::create_proxy;
7use fuchsia_async::DurationExt;
8use fuchsia_component_test::RealmInstance;
9use log::info;
10use {fidl_fuchsia_io as fio, fuchsia_async as fasync};
11
12pub const PROGRAM_COLLECTION: &str = "debian_programs";
13
14pub async fn open_sysrq_trigger(realm: &RealmInstance) -> fio::FileProxy {
15 info!("opening sysrq trigger");
16 fuchsia_fs::directory::open_file(
17 realm.root.get_exposed_dir(),
18 "/fs_root/proc/sysrq-trigger",
19 fuchsia_fs::PERM_WRITABLE,
20 )
21 .await
22 .unwrap()
23}
24
25pub async fn wait_for_starnix_volume_to_be_mounted() {
26 loop {
27 fasync::Timer::new(fasync::MonotonicDuration::from_millis(100).after_now()).await;
28 let test_fxfs_inspect = ArchiveReader::inspect()
29 .select_all_for_component("test-fxfs")
30 .snapshot()
31 .await
32 .unwrap();
33 if test_fxfs_inspect.len() == 0 {
34 continue;
35 }
36 let payload = test_fxfs_inspect[0].payload.as_ref().unwrap();
37 if let Some(child) = payload.get_child("starnix_volume") {
38 if child.get_property("mounted").and_then(|p| p.boolean()) == Some(true) {
39 break;
40 }
41 } else {
42 continue;
43 }
44 }
45}
46
47pub async fn get_storage_for_component_instance(
48 moniker_prefix: &str,
49 storage_admin: fidl_fuchsia_sys2::StorageAdminProxy,
50) -> fio::DirectoryProxy {
51 let (storage_user_iterator, storage_user_iterator_server_end) =
52 create_proxy::<fidl_fuchsia_sys2::StorageIteratorMarker>();
53 storage_admin
54 .list_storage_in_realm(".", storage_user_iterator_server_end)
55 .await
56 .unwrap()
57 .unwrap();
58 let mut matching_storage_users = vec![];
59 loop {
60 let chunk = storage_user_iterator.next().await.unwrap();
61 if chunk.is_empty() {
62 break;
63 }
64 let mut matches: Vec<String> = chunk
65 .into_iter()
66 .filter(|moniker| {
67 info!("moniker is {moniker}");
68 moniker.starts_with(moniker_prefix)
69 })
70 .collect();
71 matching_storage_users.append(&mut matches);
72 }
73 assert!(!matching_storage_users.is_empty());
74 let (proxy, server_end) = create_proxy::<fio::DirectoryMarker>();
75 storage_admin
76 .open_storage(matching_storage_users.first().unwrap(), server_end.into_channel().into())
77 .await
78 .unwrap()
79 .unwrap();
80 proxy
81}