autotest: move dut_sees_bss to wifi_client

BUG=None
TEST=run all affected tests

Change-Id: I20e5cb14bea629890f088645de992838f262bfa3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2274680
Reviewed-by: Brian Norris <briannorris@chromium.org>
Tested-by: Matthew Wang <matthewmwang@chromium.org>
Commit-Queue: Matthew Wang <matthewmwang@chromium.org>
diff --git a/server/cros/network/wifi_client.py b/server/cros/network/wifi_client.py
index 8b4e45e..69b8d09 100644
--- a/server/cros/network/wifi_client.py
+++ b/server/cros/network/wifi_client.py
@@ -608,6 +608,31 @@
             self.assert_bsses_include_ssids(bss_list, ssids)
 
 
+    def wait_for_bss(self, bssid, timeout_seconds=15):
+        """Wait for a specific BSS to appear in the scan results.
+
+        @param bssid: string bssid of AP we expect to see in scan results
+        @param timeout_seconds int seconds to wait for BSSes to be discovered
+
+        """
+        def dut_sees_bss():
+            """Check if a DUT can see a BSS in scan results.
+
+            @return True iff scan results from DUT include the specified BSS.
+
+            """
+            is_requested_bss = lambda iw_bss: iw_bss.bss == bssid
+            scan_results = self.iw_runner.scan(self.wifi_if)
+            return scan_results and filter(is_requested_bss, scan_results)
+        try:
+            utils.poll_for_condition(
+                condition=dut_sees_bss,
+                timeout=timeout_seconds,
+                sleep_interval=0.5)
+        except:
+            raise error.TestFail('Failed to discover BSS %s' % bssid)
+
+
     def wait_for_bsses(self, ssid, num_bss_expected, timeout_seconds=15):
       """Wait for all BSSes associated with given SSID to be discovered in the
       scan.
diff --git a/server/site_tests/network_WiFi_BSSTMReq/network_WiFi_BSSTMReq.py b/server/site_tests/network_WiFi_BSSTMReq/network_WiFi_BSSTMReq.py
index 03740ec..190f0ce 100644
--- a/server/site_tests/network_WiFi_BSSTMReq/network_WiFi_BSSTMReq.py
+++ b/server/site_tests/network_WiFi_BSSTMReq/network_WiFi_BSSTMReq.py
@@ -3,8 +3,6 @@
 # found in the LICENSE file.
 
 from autotest_lib.client.common_lib import error
-from autotest_lib.client.bin import utils
-from autotest_lib.client.common_lib.cros.network import iw_runner
 from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
 from autotest_lib.server.cros.network import hostap_config
 from autotest_lib.server.cros.network import wifi_cell_test_base
@@ -23,19 +21,6 @@
     version = 1
     TIMEOUT_SECONDS = 15
 
-    def dut_sees_bss(self, bssid):
-        """
-        Check if a DUT can see a BSS in scan results.
-
-        @param bssid: string bssid of AP we expect to see in scan results.
-        @return True iff scan results from DUT include the specified BSS.
-
-        """
-        runner = iw_runner.IwRunner(remote_host=self.context.client.host)
-        is_requested_bss = lambda iw_bss: iw_bss.bss == bssid
-        scan_results = runner.scan(self.context.client.wifi_if)
-        return scan_results and filter(is_requested_bss, scan_results)
-
     def run_once(self):
         """Test body."""
         self._router0_conf = hostap_config.HostapConfig(channel=1)
@@ -60,12 +45,7 @@
         bssid1 = self.context.router.get_hostapd_mac(1)
 
         # Wait for DUT to see the second AP
-        utils.poll_for_condition(
-            condition=lambda: self.dut_sees_bss(bssid1),
-            exception=error.TestFail('Timed out waiting for DUT'
-                                     'to see second AP'),
-            timeout=self.TIMEOUT_SECONDS,
-            sleep_interval=1)
+        self.context.client.wait_for_bss(bssid1)
 
         # Check which AP we are currently connected.
         # This is to include the case that wpa_supplicant
diff --git a/server/site_tests/network_WiFi_PMKSACaching/network_WiFi_PMKSACaching.py b/server/site_tests/network_WiFi_PMKSACaching/network_WiFi_PMKSACaching.py
index 1b66f1a..6e98571 100644
--- a/server/site_tests/network_WiFi_PMKSACaching/network_WiFi_PMKSACaching.py
+++ b/server/site_tests/network_WiFi_PMKSACaching/network_WiFi_PMKSACaching.py
@@ -5,7 +5,6 @@
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.common_lib import utils
 from autotest_lib.client.common_lib.cros import site_eap_certs
-from autotest_lib.client.common_lib.cros.network import iw_runner
 from autotest_lib.client.common_lib.cros.network import ping_runner
 from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
 from autotest_lib.client.common_lib.cros.network import xmlrpc_security_types
@@ -21,20 +20,6 @@
     TIMEOUT_SECONDS = 15
 
 
-    def dut_sees_bss(self, bssid):
-        """
-        Check if a DUT can see a BSS in scan results.
-
-        @param bssid: string bssid of AP we expect to see in scan results.
-        @return True iff scan results from DUT include the specified BSS.
-
-        """
-        runner = iw_runner.IwRunner(remote_host=self.context.client.host)
-        is_requested_bss = lambda iw_bss: iw_bss.bss == bssid
-        scan_results = runner.scan(self.context.client.wifi_if)
-        return scan_results and filter(is_requested_bss, scan_results)
-
-
     def run_once(self):
         """Body of the test."""
         mode_n = hostap_config.HostapConfig.MODE_11N_PURE
@@ -62,12 +47,7 @@
         self.context.configure(ap_config1, multi_interface=True)
         bssid0 = self.context.router.get_hostapd_mac(0)
         bssid1 = self.context.router.get_hostapd_mac(1)
-        utils.poll_for_condition(
-                condition=lambda: self.dut_sees_bss(bssid1),
-                exception=error.TestFail(
-                        'Timed out waiting for DUT to see second AP'),
-                timeout=self.TIMEOUT_SECONDS,
-                sleep_interval=1)
+        self.context.client.wait_for_bss(bssid1)
         self.context.client.request_roam(bssid1)
         if not self.context.client.wait_for_roam(
                 bssid1, timeout_seconds=self.TIMEOUT_SECONDS):
diff --git a/server/site_tests/network_WiFi_RoamDbus/network_WiFi_RoamDbus.py b/server/site_tests/network_WiFi_RoamDbus/network_WiFi_RoamDbus.py
index 62f3b63..2a03793 100644
--- a/server/site_tests/network_WiFi_RoamDbus/network_WiFi_RoamDbus.py
+++ b/server/site_tests/network_WiFi_RoamDbus/network_WiFi_RoamDbus.py
@@ -3,8 +3,6 @@
 # found in the LICENSE file.
 
 from autotest_lib.client.common_lib import error
-from autotest_lib.client.common_lib import utils
-from autotest_lib.client.common_lib.cros.network import iw_runner
 from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
 from autotest_lib.server.cros.network import hostap_config
 from autotest_lib.server.cros.network import wifi_cell_test_base
@@ -24,19 +22,6 @@
     version = 1
     TIMEOUT_SECONDS = 15
 
-    def dut_sees_bss(self, bssid):
-        """
-        Check if a DUT can see a BSS in scan results.
-
-        @param bssid: string bssid of AP we expect to see in scan results.
-        @return True iff scan results from DUT include the specified BSS.
-
-        """
-        runner = iw_runner.IwRunner(remote_host=self.context.client.host)
-        is_requested_bss = lambda iw_bss: iw_bss.bss == bssid
-        scan_results = runner.scan(self.context.client.wifi_if)
-        return scan_results and filter(is_requested_bss, scan_results)
-
     def run_once(self,host):
         """Test body."""
         self._router0_conf = hostap_config.HostapConfig(channel=48,
@@ -61,12 +46,7 @@
         bssid1 = self.context.router.get_hostapd_mac(1)
 
         # Wait for DUT to see the second AP
-        utils.poll_for_condition(
-                condition=lambda: self.dut_sees_bss(bssid1),
-                exception=error.TestFail(
-                        'Timed out waiting for DUT to see second AP'),
-                timeout=self.TIMEOUT_SECONDS,
-                sleep_interval=1)
+        self.context.client.wait_for_bss(bssid1)
 
         # Check which AP we are currently connected.
         # This is to include the case that wpa_supplicant