From 15236f30db830469d8090c700c05798840b0ecbe Mon Sep 17 00:00:00 2001 From: James Prestwood Date: Thu, 12 Aug 2021 13:21:57 -0700 Subject: [PATCH] auto-t: add reassociate test to FT-SAE-roam This refactors to test both FT and reassociation. --- autotests/testFT-SAE-roam/TestFT.psk | 5 + autotests/testFT-SAE-roam/connection_test.py | 109 ++++++++----------- 2 files changed, 48 insertions(+), 66 deletions(-) create mode 100644 autotests/testFT-SAE-roam/TestFT.psk diff --git a/autotests/testFT-SAE-roam/TestFT.psk b/autotests/testFT-SAE-roam/TestFT.psk new file mode 100644 index 00000000..acadaab9 --- /dev/null +++ b/autotests/testFT-SAE-roam/TestFT.psk @@ -0,0 +1,5 @@ +[Security] +Passphrase=EasilyGuessedPassword + +[Settings] +AutoConnect=False diff --git a/autotests/testFT-SAE-roam/connection_test.py b/autotests/testFT-SAE-roam/connection_test.py index bea42856..da7413f9 100644 --- a/autotests/testFT-SAE-roam/connection_test.py +++ b/autotests/testFT-SAE-roam/connection_test.py @@ -8,37 +8,12 @@ import iwd from iwd import IWD from iwd import PSKAgent from iwd import NetworkType -from hwsim import Hwsim from hostapd import HostapdCLI import testutil from config import ctx class Test(unittest.TestCase): - def test_roam_success(self): - hwsim = Hwsim() - - rule0 = hwsim.rules.create() - rule0.source = self.bss_radio[0].addresses[0] - rule0.bidirectional = True - - rule1 = hwsim.rules.create() - rule1.source = self.bss_radio[1].addresses[0] - rule1.bidirectional = True - - rule2 = hwsim.rules.create() - rule2.source = self.bss_radio[2].addresses[0] - rule2.bidirectional = True - - # Check that iwd selects BSS 0 first - rule0.signal = -2000 - rule1.signal = -6900 - rule2.signal = -7200 - - wd = IWD(True) - - psk_agent = PSKAgent("EasilyGuessedPassword") - wd.register_psk_agent(psk_agent) - + def validate_connection(self, wd, ft=True): device = wd.list_devices(1)[0] condition = 'not obj.scanning' @@ -52,18 +27,10 @@ class Test(unittest.TestCase): condition = 'not obj.scanning' wd.wait_for_object_condition(device, condition) - ordered_network = device.get_ordered_network('TestFT') - - self.assertEqual(ordered_network.type, NetworkType.psk) - self.assertEqual(ordered_network.signal_strength, -2000) - - condition = 'not obj.connected' - wd.wait_for_object_condition(ordered_network.network_object, condition) - self.assertFalse(self.bss_hostapd[0].list_sta()) self.assertFalse(self.bss_hostapd[1].list_sta()) - ordered_network.network_object.connect() + device.connect_bssid(self.bss_hostapd[0].bssid) condition = 'obj.state == DeviceState.connected' wd.wait_for_object_condition(device, condition) @@ -71,20 +38,12 @@ class Test(unittest.TestCase): self.assertTrue(self.bss_hostapd[0].list_sta()) self.assertFalse(self.bss_hostapd[1].list_sta()) - wd.unregister_psk_agent(psk_agent) - testutil.test_iface_operstate(device.name) testutil.test_ifaces_connected(self.bss_hostapd[0].ifname, device.name) self.assertRaises(Exception, testutil.test_ifaces_connected, - (self.bss_hostapd[1].ifname, device.name)) + (self.bss_hostapd[1].ifname, device.name, True, True)) - # Check that iwd starts transition to BSS 1 in less than 10 seconds. - # The 10 seconds is longer than needed to scan on just two channels - # but short enough that a full scan on the 2.4 + 5.8 bands supported - # by mac80211_hwsim will not finish. If this times out then, but - # device_roam_trigger_cb has happened, it probably means that - # Neighbor Reports are broken. - rule0.signal = -8000 + device.roam(self.bss_hostapd[1].bssid) condition = 'obj.state == DeviceState.roaming' wd.wait_for_object_condition(device, condition) @@ -95,22 +54,17 @@ class Test(unittest.TestCase): to_condition = 'obj.state == DeviceState.connected' wd.wait_for_object_change(device, from_condition, to_condition) - rule1.signal = -2000 - - # wait for IWD's signal levels to recover - wd.wait(5) - self.assertTrue(self.bss_hostapd[1].list_sta()) testutil.test_iface_operstate(device.name) testutil.test_ifaces_connected(self.bss_hostapd[1].ifname, device.name) self.assertRaises(Exception, testutil.test_ifaces_connected, - (self.bss_hostapd[0].ifname, device.name)) + (self.bss_hostapd[0].ifname, device.name, True, True)) - # test FT-PSK after FT-SAE - rule1.signal = -8000 - rule0.signal = -8000 - rule2.signal = -1000 + if not ft: + return + + device.roam(self.bss_hostapd[2].bssid) condition = 'obj.state == DeviceState.roaming' wd.wait_for_object_condition(device, condition) @@ -124,7 +78,37 @@ class Test(unittest.TestCase): testutil.test_iface_operstate(device.name) testutil.test_ifaces_connected(self.bss_hostapd[2].ifname, device.name) self.assertRaises(Exception, testutil.test_ifaces_connected, - (self.bss_hostapd[1].ifname, device.name)) + (self.bss_hostapd[1].ifname, device.name, True, True)) + + def test_ft_roam_success(self): + wd = IWD(True) + + self.bss_hostapd[0].set_value('wpa_key_mgmt', 'FT-SAE SAE') + self.bss_hostapd[0].reload() + self.bss_hostapd[0].wait_for_event("AP-ENABLED") + self.bss_hostapd[1].set_value('wpa_key_mgmt', 'FT-SAE SAE') + self.bss_hostapd[1].reload() + self.bss_hostapd[1].wait_for_event("AP-ENABLED") + self.bss_hostapd[2].set_value('wpa_key_mgmt', 'FT-PSK') + self.bss_hostapd[2].reload() + self.bss_hostapd[2].wait_for_event("AP-ENABLED") + + self.validate_connection(wd, True) + + def test_reassociate_roam_success(self): + wd = IWD(True) + + self.bss_hostapd[0].set_value('wpa_key_mgmt', 'SAE') + self.bss_hostapd[0].reload() + self.bss_hostapd[0].wait_for_event("AP-ENABLED") + self.bss_hostapd[1].set_value('wpa_key_mgmt', 'SAE') + self.bss_hostapd[1].reload() + self.bss_hostapd[1].wait_for_event("AP-ENABLED") + self.bss_hostapd[2].set_value('wpa_key_mgmt', 'WPA-PSK') + self.bss_hostapd[2].reload() + self.bss_hostapd[2].wait_for_event("AP-ENABLED") + + self.validate_connection(wd, False) def tearDown(self): os.system('ifconfig "' + self.bss_hostapd[0].ifname + '" down') @@ -134,20 +118,11 @@ class Test(unittest.TestCase): os.system('ifconfig "' + self.bss_hostapd[1].ifname + '" up') os.system('ifconfig "' + self.bss_hostapd[2].ifname + '" up') - hwsim = Hwsim() - for rule in list(hwsim.rules.keys()): - del hwsim.rules[rule] - @classmethod def setUpClass(cls): - hwsim = Hwsim() - cls.bss_hostapd = [ HostapdCLI(config='ft-sae-1.conf'), HostapdCLI(config='ft-sae-2.conf'), HostapdCLI(config='ft-psk-3.conf') ] - cls.bss_radio = [ hwsim.get_radio('rad0'), - hwsim.get_radio('rad1'), - hwsim.get_radio('rad2') ] ctx.start_process(['ifconfig', cls.bss_hostapd[0].ifname, 'down', 'hw', \ 'ether', '12:00:00:00:00:01', 'up'], wait=True) @@ -184,11 +159,13 @@ class Test(unittest.TestCase): cls.bss_hostapd[2].set_neighbor('12:00:00:00:00:02', 'TestFT', '1200000000028f0000005101060603000000') + IWD.copy_to_storage('TestFT.psk') + @classmethod def tearDownClass(cls): IWD.clear_storage() + cls.bss_hostapd = None - cls.bss_radio = None if __name__ == '__main__': unittest.main(exit=True)