From 5c96e1e81e4ca22d1d2f826d631ae518d7874484 Mon Sep 17 00:00:00 2001 From: James Prestwood Date: Fri, 5 Feb 2021 10:09:11 -0800 Subject: [PATCH] auto-t: fix SAQuery-spoofing test This test occationally failed due to a badly timed DBus scan triggering right when hwsim tried sending out the spoofed frame. This caused mac80211_hwsim to reject CMD_FRAME when the timing was just right. Rather than always starting a DBus scan we can rely on periodic scans and only DBus scan if there are no networks in IWD's list. A scanning check was also added prior to sending out the frame and if true we wait for not scanning. This is more paranoia than anything. --- .../testSAQuery-spoofing/connection_test.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/autotests/testSAQuery-spoofing/connection_test.py b/autotests/testSAQuery-spoofing/connection_test.py index 7ad96d4f..a1e84de6 100644 --- a/autotests/testSAQuery-spoofing/connection_test.py +++ b/autotests/testSAQuery-spoofing/connection_test.py @@ -32,12 +32,7 @@ class Test(unittest.TestCase): condition = 'not obj.scanning' wd.wait_for_object_condition(device, condition) - device.scan() - - condition = 'not obj.scanning' - wd.wait_for_object_condition(device, condition) - - ordered_network = device.get_ordered_network('ssidCCMP') + ordered_network = device.get_ordered_network('ssidCCMP', scan_if_needed=True) self.assertEqual(ordered_network.type, NetworkType.psk) @@ -49,9 +44,12 @@ class Test(unittest.TestCase): condition = 'obj.state == DeviceState.connected' wd.wait_for_object_condition(device, condition) - # TODO: for some reason hostapd does not respond to SA query if done - # too soon after connection. - sleep(1) + # Ensure IWD is not scanning. This causes problems with mac80211_hwsim + # where CMD_FRAME will fail during a scan. This is due to the frame not + # having the same frequency as the radio (since hwsim is off-channel) + if device.scanning: + condition = 'not obj.scanning' + wd.wait_for_object_condition(device, condition) # Spoof a disassociate frame. This will kick off SA Query procedure. hwsim.spoof_disassociate(radio, hostapd.get_freq(), device.address)