Browse Source

tests: Wait for AP-ENABLED

It takes some time for hostapd to complete AP startup. In some cases,
this could potentially result in station starting a scan before the AP
is beaconing or ready to reply to probes. To avoid such race conditions,
wait for AP-ENABLED before going ahead with the test cases.

Signed-hostap: Jouni Malinen <j@w1.fi>
Jouni Malinen 11 years ago
parent
commit
629dbdd36a
3 changed files with 8 additions and 4 deletions
  1. 5 1
      tests/hwsim/hostapd.py
  2. 1 1
      tests/hwsim/test_ap_acs.py
  3. 2 2
      tests/hwsim/test_ap_ht.py

+ 5 - 1
tests/hwsim/hostapd.py

@@ -179,7 +179,7 @@ class Hostapd:
         hdr = struct.pack('<HH6B6B6BH', *t)
         self.request("MGMT_TX " + binascii.hexlify(hdr + msg['payload']))
 
-def add_ap(ifname, params):
+def add_ap(ifname, params, wait_enabled=True):
         logger.info("Starting AP " + ifname)
         hapd_global = HostapdGlobal()
         hapd_global.remove(ifname)
@@ -203,6 +203,10 @@ def add_ap(ifname, params):
             else:
                 hapd.set(f, v)
         hapd.enable()
+        if wait_enabled:
+            ev = hapd.wait_event(["AP-ENABLED"], timeout=30)
+            if ev is None:
+                raise Exception("AP startup timed out")
         return hapd
 
 def add_bss(phy, ifname, confname, ignore_error=False):

+ 1 - 1
tests/hwsim/test_ap_acs.py

@@ -42,7 +42,7 @@ def test_ap_acs(dev, apdev):
     """Automatic channel selection"""
     params = hostapd.wpa2_params(ssid="test-acs", passphrase="12345678")
     params['channel'] = '0'
-    hapd = hostapd.add_ap(apdev[0]['ifname'], params)
+    hapd = hostapd.add_ap(apdev[0]['ifname'], params, wait_enabled=False)
     wait_acs(hapd)
 
     freq = hapd.get_status_field("freq")

+ 2 - 2
tests/hwsim/test_ap_ht.py

@@ -17,11 +17,11 @@ def test_ap_ht40_scan(dev, apdev):
     params = { "ssid": "test-ht40",
                "channel": "5",
                "ht_capab": "[HT40-]"}
-    hapd = hostapd.add_ap(apdev[0]['ifname'], params)
+    hapd = hostapd.add_ap(apdev[0]['ifname'], params, wait_enabled=False)
 
     state = hapd.get_status_field("state")
     if state != "HT_SCAN":
-        time.wait(0.1)
+        time.sleep(0.1)
         state = hapd.get_status_field("state")
         if state != "HT_SCAN":
             raise Exception("Unexpected interface state - expected HT_SCAN")