Call save_and_connect with FuchsiaSecurityType

Fix a bug where PolicyScanTest was calling save_and_connect with a
SecurityMode instead of a FuchsiaSecurityType. This was due to this file
containing incomplete typing. While here, add complete typing.

Fixed: b/292131866
Change-Id: Ia90f50d33d0d724d904b119db60106441089c0fc
Reviewed-on: https://fuchsia-review.googlesource.com/c/antlion/+/887873
Commit-Queue: Auto-Submit <auto-submit@fuchsia-infra.iam.gserviceaccount.com>
Fuchsia-Auto-Submit: Sam Balana <sbalana@google.com>
Reviewed-by: Jonathan Chang <jnchang@google.com>
diff --git a/tests/wlan_policy/PolicyScanTest.py b/tests/wlan_policy/PolicyScanTest.py
index 8739c33..969054f 100644
--- a/tests/wlan_policy/PolicyScanTest.py
+++ b/tests/wlan_policy/PolicyScanTest.py
@@ -18,8 +18,10 @@
 
 import logging
 from datetime import datetime
+from typing import Any, List
 
-from mobly import signals, test_runner
+from mobly import asserts, signals, test_runner
+from typing_extensions import TypeGuard
 
 from antlion.controllers.ap_lib import (
     hostapd_ap_preset,
@@ -27,9 +29,14 @@
     hostapd_constants,
     hostapd_security,
 )
+from antlion.controllers.fuchsia_device import FuchsiaDevice
 from antlion.test_utils.wifi import base_test
 
 
+def is_str_list(val: Any) -> TypeGuard[List[str]]:
+    return isinstance(val, list) and all(isinstance(x, str) for x in val)
+
+
 class PolicyScanTest(base_test.WifiBaseTest):
     """WLAN policy scan test class.
 
@@ -38,7 +45,7 @@
     * One Whirlwind Access Point
     """
 
-    def setup_class(self):
+    def setup_class(self) -> None:
         super().setup_class()
         self.log = logging.getLogger()
 
@@ -54,8 +61,8 @@
         self.access_point = self.access_points[0]
         self.access_point.stop_all_aps()
         # Generate network params.
-        bss_settings_2g = []
-        bss_settings_5g = []
+        bss_settings_2g: List[hostapd_bss_settings.BssSettings] = []
+        bss_settings_5g: List[hostapd_bss_settings.BssSettings] = []
         open_network = self.get_open_network(False, [])
         self.open_network_2g = open_network["2g"]
         self.open_network_5g = open_network["5g"]
@@ -107,15 +114,16 @@
             self.wpa2_network_5g["SSID"],
         ]
 
-    def setup_test(self):
+    def setup_test(self) -> None:
         super().setup_test()
         for fd in self.fuchsia_devices:
             # stub for setting up all the fuchsia devices in the testbed.
-            return (
-                fd.wlan_policy_controller.remove_all_networks_and_wait_for_no_connections()
+            asserts.assert_true(
+                fd.wlan_policy_controller.remove_all_networks_and_wait_for_no_connections(),
+                f"Failed to remove all networks on {fd.mdns_name}",
             )
 
-    def teardown_test(self):
+    def teardown_test(self) -> None:
         for fd in self.fuchsia_devices:
             # stub until policy layer has something useful to use here.
             pass
@@ -123,7 +131,7 @@
 
     """Helper Functions"""
 
-    def perform_scan(self, fd):
+    def perform_scan(self, fd: FuchsiaDevice) -> List[str]:
         """Initiates scan on a Fuchsia device and returns results
 
         Args:
@@ -150,6 +158,12 @@
         # the scan command did not get an error response - go ahead
         # and check for scan results
         scan_results = scan_response["result"]
+        if not is_str_list(scan_results):
+            raise TypeError(
+                "Expected wlan_policy.scan_networks to return a list of strings, "
+                f"got {type(scan_results)}"
+            )
+
         total_time_ms = (datetime.now() - start_time).total_seconds() * 1000
 
         self.log.info("scan contained %d results", len(scan_results))
@@ -157,7 +171,7 @@
 
         return scan_results
 
-    def connect_to_network(self, wlan_network_params, fd):
+    def connect_to_network(self, network: base_test.Network, fd: FuchsiaDevice) -> None:
         """Connects the Fuchsia device to the specified network
 
         Args:
@@ -167,19 +181,17 @@
         Raises:
             signals.TestFailure: if the device fails to connect
         """
-        target_ssid = wlan_network_params["SSID"]
-        target_pwd = wlan_network_params.get("password")
-        target_security = wlan_network_params.get("security")
-
         # TODO(mnck): use the Policy version of this call, when it is available.
         connection_response = fd.wlan_policy_controller.save_and_connect(
-            target_ssid, target_security, password=target_pwd
+            network["SSID"],
+            network["security"].fuchsia_security_type(),
+            network["password"],
         )
         if not connection_response:
             raise signals.TestFailure("Aborting test - Connect call failed")
         self.log.info("Network connection successful.")
 
-    def assert_network_is_in_results(self, scan_results, *, ssid):
+    def assert_network_is_in_results(self, scan_results: List[str], ssid: str) -> None:
         """Verified scan results contain a specified network
 
         Args:
@@ -190,53 +202,53 @@
             signals.TestFailure: if the network is not present in the scan
             results
         """
-        if ssid not in scan_results:
-            raise signals.TestFailure(
-                f'Network "{ssid}" was not found in scan results: {scan_results}'
-            )
+        asserts.assert_true(
+            ssid in scan_results,
+            f'Network "{ssid}" was not found in scan results: {scan_results}',
+        )
 
     """Tests"""
 
-    def test_basic_scan_request(self):
+    def test_basic_scan_request(self) -> None:
         """Verify a scan returns all expected networks"""
         for fd in self.fuchsia_devices:
             scan_results = self.perform_scan(fd)
             if len(scan_results) == 0:
                 raise signals.TestFailure("Scan failed or did not " "find any networks")
             for ssid in self.all_ssids:
-                self.assert_network_is_in_results(scan_results, ssid=ssid)
+                self.assert_network_is_in_results(scan_results, ssid)
 
-    def test_scan_while_connected_open_network_2g(self):
+    def test_scan_while_connected_open_network_2g(self) -> None:
         """Connect to an open 2g network and perform a scan"""
         for fd in self.fuchsia_devices:
             self.connect_to_network(self.open_network_2g, fd)
             scan_results = self.perform_scan(fd)
             for ssid in self.all_ssids:
-                self.assert_network_is_in_results(scan_results, ssid=ssid)
+                self.assert_network_is_in_results(scan_results, ssid)
 
-    def test_scan_while_connected_wpa2_network_2g(self):
+    def test_scan_while_connected_wpa2_network_2g(self) -> None:
         """Connect to a WPA2 2g network and perform a scan"""
         for fd in self.fuchsia_devices:
             self.connect_to_network(self.wpa2_network_2g, fd)
             scan_results = self.perform_scan(fd)
             for ssid in self.all_ssids:
-                self.assert_network_is_in_results(scan_results, ssid=ssid)
+                self.assert_network_is_in_results(scan_results, ssid)
 
-    def test_scan_while_connected_open_network_5g(self):
+    def test_scan_while_connected_open_network_5g(self) -> None:
         """Connect to an open 5g network and perform a scan"""
         for fd in self.fuchsia_devices:
             self.connect_to_network(self.open_network_5g, fd)
             scan_results = self.perform_scan(fd)
             for ssid in self.all_ssids:
-                self.assert_network_is_in_results(scan_results, ssid=ssid)
+                self.assert_network_is_in_results(scan_results, ssid)
 
-    def test_scan_while_connected_wpa2_network_5g(self):
+    def test_scan_while_connected_wpa2_network_5g(self) -> None:
         """Connect to a WPA2 5g network and perform a scan"""
         for fd in self.fuchsia_devices:
             self.connect_to_network(self.wpa2_network_5g, fd)
             scan_results = self.perform_scan(fd)
             for ssid in self.all_ssids:
-                self.assert_network_is_in_results(scan_results, ssid=ssid)
+                self.assert_network_is_in_results(scan_results, ssid)
 
 
 if __name__ == "__main__":