[wlan][hw-sim] Helper to remove all saved networks

Bug: 101141
Test: fx test wlan-hw-sim-test
Change-Id: If9c95395641040e7c0044c867670dd797b8fb0c3
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/684486
Fuchsia-Auto-Submit: Marc Khouri <mnck@google.com>
Reviewed-by: Charles Celerier <chcl@google.com>
Commit-Queue: Marc Khouri <mnck@google.com>
diff --git a/src/connectivity/wlan/testing/hw-sim/src/wlancfg_helper.rs b/src/connectivity/wlan/testing/hw-sim/src/wlancfg_helper.rs
index 20a5798..316b947 100644
--- a/src/connectivity/wlan/testing/hw-sim/src/wlancfg_helper.rs
+++ b/src/connectivity/wlan/testing/hw-sim/src/wlancfg_helper.rs
@@ -13,6 +13,7 @@
     futures::StreamExt,
     ieee80211::Ssid,
     log::info,
+    std::convert::TryInto,
 };
 
 fn create_network_config(
@@ -254,6 +255,37 @@
         .expect("client controller failed to remove network");
 }
 
+pub async fn remove_all_networks(client_controller: &fidl_policy::ClientControllerProxy) {
+    info!("Removing all saved networks");
+    let mut saved_networks = vec![];
+
+    // Read all saved networks on the device
+    let (iter, server) =
+        fidl::endpoints::create_proxy::<fidl_policy::NetworkConfigIteratorMarker>()
+            .expect("failed to create iterator");
+    client_controller.get_saved_networks(server).expect("Failed to call get saved networks");
+    loop {
+        let additional_saved_networks =
+            iter.get_next().await.expect("Failed to read saved networks");
+        if additional_saved_networks.len() == 0 {
+            break;
+        } else {
+            saved_networks.extend(additional_saved_networks);
+        }
+    }
+
+    // Remove each saved network
+    for network in saved_networks {
+        remove_network(
+            client_controller,
+            &network.id.clone().unwrap().ssid.try_into().unwrap(),
+            network.id.unwrap().type_.into(),
+            network.credential.unwrap(),
+        )
+        .await;
+    }
+}
+
 pub async fn await_failed(
     mut client_state_update_stream: &mut fidl_policy::ClientStateUpdatesRequestStream,
     network_identifier: fidl_policy::NetworkIdentifier,