From 84a40841779f3a606c3c4c09ee0d584059a7abcf Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Thu, 15 May 2014 01:02:03 +0300 Subject: [PATCH] tests: Make WPS test cases more robust Scan explicitly for the AP that may be started during the test case execution. This is needed to work around issues where under heavy CPU load, the single active scan round may miss the delayed Probe Response from the second AP. Signed-off-by: Jouni Malinen --- tests/hwsim/test_ap_wps.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/tests/hwsim/test_ap_wps.py b/tests/hwsim/test_ap_wps.py index 7e16e365d..0d29d9cb6 100644 --- a/tests/hwsim/test_ap_wps.py +++ b/tests/hwsim/test_ap_wps.py @@ -85,7 +85,8 @@ def test_ap_wps_init_2ap_pbc(dev, apdev): hapd = hostapd.Hostapd(apdev[0]['ifname']) logger.info("WPS provisioning step") hapd.request("WPS_PBC") - dev[0].scan(freq="2412") + dev[0].scan_for_bss(apdev[0]['bssid'], freq="2412", force_scan=True) + dev[0].scan_for_bss(apdev[1]['bssid'], freq="2412") bss = dev[0].get_bss(apdev[0]['bssid']) if "[WPS-PBC]" not in bss['flags']: raise Exception("WPS-PBC flag missing from AP1") @@ -105,12 +106,8 @@ def test_ap_wps_init_2ap_pbc(dev, apdev): if ev is None: raise Exception("Association with the AP timed out") - dev[1].scan(freq="2412") - for i in range(0, 10): - if 'flags' in dev[1].get_bss(apdev[0]['bssid']) and 'flags' in dev[1].get_bss(apdev[1]['bssid']): - break - logger.info("Scan again since scan did not include both BSSes") - dev[1].scan(freq="2412") + dev[1].scan_for_bss(apdev[0]['bssid'], freq="2412", force_scan=True) + dev[1].scan_for_bss(apdev[1]['bssid'], freq="2412") bss = dev[1].get_bss(apdev[0]['bssid']) if "[WPS-PBC]" in bss['flags']: raise Exception("WPS-PBC flag not cleared from AP1") @@ -128,7 +125,8 @@ def test_ap_wps_init_2ap_pin(dev, apdev): logger.info("WPS provisioning step") pin = dev[0].wps_read_pin() hapd.request("WPS_PIN any " + pin) - dev[0].scan(freq="2412") + dev[0].scan_for_bss(apdev[0]['bssid'], freq="2412", force_scan=True) + dev[0].scan_for_bss(apdev[1]['bssid'], freq="2412") bss = dev[0].get_bss(apdev[0]['bssid']) if "[WPS-AUTH]" not in bss['flags']: raise Exception("WPS-AUTH flag missing from AP1") @@ -141,12 +139,8 @@ def test_ap_wps_init_2ap_pin(dev, apdev): if ev is None: raise Exception("Association with the AP timed out") - dev[1].scan(freq="2412") - for i in range(0, 10): - if 'flags' in dev[1].get_bss(apdev[0]['bssid']) and 'flags' in dev[1].get_bss(apdev[1]['bssid']): - break - logger.info("Scan again since scan did not include both BSSes") - dev[1].scan(freq="2412") + dev[1].scan_for_bss(apdev[0]['bssid'], freq="2412", force_scan=True) + dev[1].scan_for_bss(apdev[1]['bssid'], freq="2412") bss = dev[1].get_bss(apdev[0]['bssid']) if "[WPS-AUTH]" in bss['flags']: raise Exception("WPS-AUTH flag not cleared from AP1") @@ -354,7 +348,7 @@ def test_ap_wps_conf_pin(dev, apdev): if status['key_mgmt'] != 'WPA2-PSK': raise Exception("Unexpected key_mgmt") - dev[1].scan(freq="2412") + dev[1].scan_for_bss(apdev[0]['bssid'], freq="2412", force_scan=True) bss = dev[1].get_bss(apdev[0]['bssid']) if "[WPS-AUTH]" in bss['flags']: raise Exception("WPS-AUTH flag not cleared") @@ -752,7 +746,8 @@ def test_ap_wps_pbc_overlap_2ap(dev, apdev): hapd2 = hostapd.Hostapd(apdev[1]['ifname']) hapd2.request("WPS_PBC") logger.info("WPS provisioning step") - dev[0].dump_monitor() + dev[0].scan_for_bss(apdev[0]['bssid'], freq="2412", force_scan=True) + dev[0].scan_for_bss(apdev[1]['bssid'], freq="2412") dev[0].request("WPS_PBC") ev = dev[0].wait_event(["WPS-OVERLAP-DETECTED"], timeout=15) if ev is None: @@ -800,12 +795,14 @@ def test_ap_wps_cancel(dev, apdev): logger.info("Verify PBC enable/cancel") hapd.request("WPS_PBC") dev[0].scan(freq="2412") + dev[0].scan(freq="2412") bss = dev[0].get_bss(apdev[0]['bssid']) if "[WPS-PBC]" not in bss['flags']: raise Exception("WPS-PBC flag missing") if "FAIL" in hapd.request("WPS_CANCEL"): raise Exception("WPS_CANCEL failed") dev[0].scan(freq="2412") + dev[0].scan(freq="2412") bss = dev[0].get_bss(apdev[0]['bssid']) if "[WPS-PBC]" in bss['flags']: raise Exception("WPS-PBC flag not cleared") @@ -813,12 +810,14 @@ def test_ap_wps_cancel(dev, apdev): logger.info("Verify PIN enable/cancel") hapd.request("WPS_PIN any 12345670") dev[0].scan(freq="2412") + dev[0].scan(freq="2412") bss = dev[0].get_bss(apdev[0]['bssid']) if "[WPS-AUTH]" not in bss['flags']: raise Exception("WPS-AUTH flag missing") if "FAIL" in hapd.request("WPS_CANCEL"): raise Exception("WPS_CANCEL failed") dev[0].scan(freq="2412") + dev[0].scan(freq="2412") bss = dev[0].get_bss(apdev[0]['bssid']) if "[WPS-AUTH]" in bss['flags']: raise Exception("WPS-AUTH flag not cleared") @@ -912,6 +911,7 @@ def test_ap_wps_er_add_enrollee(dev, apdev): dev[0].request("WPS_ER_PIN any " + pin + " " + dev[1].p2p_interface_addr()) dev[1].request("DISCONNECT") dev[1].wait_event(["CTRL-EVENT-DISCONNECTED"]) + dev[1].scan_for_bss(apdev[0]['bssid'], freq="2412") dev[1].scan(freq="2412") bss = dev[1].get_bss(apdev[0]['bssid']) if "[WPS-AUTH]" not in bss['flags']: @@ -1275,7 +1275,7 @@ def test_ap_wps_ie_fragmentation(dev, apdev): # workaround by runnign another scan. dev[0].scan(freq="2412", only_new=True) bss = dev[0].get_bss(apdev[0]['bssid']) - if "wps_device_name" not in bss or bss['wps_device_name'] != "1234567890abcdef1234567890abcdef": + if not bss or "wps_device_name" not in bss or bss['wps_device_name'] != "1234567890abcdef1234567890abcdef": logger.info(bss) raise Exception("Device Name not received correctly") if len(re.findall("dd..0050f204", bss['ie'])) != 2: