tests: Wait for scan to complete on all interfaces in reset()
authorAndrei Otcheretianski <andrei.otcheretianski@intel.com>
Thu, 2 Jul 2015 13:14:53 +0000 (16:14 +0300)
committerJouni Malinen <j@w1.fi>
Wed, 8 Jul 2015 13:52:42 +0000 (16:52 +0300)
When WpaSupplicant executes reset() it waits until all the ongoing scans
are completed. However, it checks the status of the wlanX interface
only. If a dedicated P2P device interface is used, scan may be still
running on the P2P Device interface, e.g., due to P2P_FIND. This might
affect subsequent tests.

Fix this by waiting until the scan is done both on wlanX and P2P
Device interfaces.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
Reviewed-by: Ilan Peer <ilan.peer@intel.com>
tests/hwsim/wpasupplicant.py

index 4323ff5..d097645 100644 (file)
@@ -138,8 +138,11 @@ class WpaSupplicant:
 
         iter = 0
         while iter < 60:
-            state = self.get_driver_status_field("scan_state")
-            if "SCAN_STARTED" in state or "SCAN_REQUESTED" in state:
+            state1 = self.get_driver_status_field("scan_state")
+            p2pdev = "p2p-dev-" + self.ifname
+            state2 = self.get_driver_status_field("scan_state", ifname=p2pdev)
+            states = str(state1) + " " + str(state2)
+            if "SCAN_STARTED" in states or "SCAN_REQUESTED" in states:
                 logger.info(self.ifname + ": Waiting for scan operation to complete before continuing")
                 time.sleep(1)
             else:
@@ -354,8 +357,11 @@ class WpaSupplicant:
             return vals[field]
         return None
 
-    def get_driver_status(self):
-        res = self.request("STATUS-DRIVER")
+    def get_driver_status(self, ifname=None):
+        if ifname is None:
+            res = self.request("STATUS-DRIVER")
+        else:
+            res = self.global_request("IFNAME=%s STATUS-DRIVER" % ifname)
         lines = res.splitlines()
         vals = dict()
         for l in lines:
@@ -367,8 +373,8 @@ class WpaSupplicant:
             vals[name] = value
         return vals
 
-    def get_driver_status_field(self, field):
-        vals = self.get_driver_status()
+    def get_driver_status_field(self, field, ifname=None):
+        vals = self.get_driver_status(ifname)
         if field in vals:
             return vals[field]
         return None