diff --git a/autotests/testAPRoam/connection_test.py b/autotests/testAPRoam/connection_test.py index 41d70f3a..a419f4aa 100644 --- a/autotests/testAPRoam/connection_test.py +++ b/autotests/testAPRoam/connection_test.py @@ -12,11 +12,7 @@ from hostapd import HostapdCLI class Test(unittest.TestCase): - def test_connection_success(self): - bss_hostapd = [ HostapdCLI(config='ssid1.conf'), - HostapdCLI(config='ssid2.conf'), - HostapdCLI(config='ssid3.conf') ] - + def validate(self, expect_roam=True): wd = IWD() devices = wd.list_devices(1) @@ -29,38 +25,47 @@ class Test(unittest.TestCase): condition = 'not obj.connected' wd.wait_for_object_condition(ordered_network.network_object, condition) - device.connect_bssid(bss_hostapd[0].bssid) + device.connect_bssid(self.bss_hostapd[0].bssid) condition = 'obj.state == DeviceState.connected' wd.wait_for_object_condition(device, condition) - bss_hostapd[0].wait_for_event('AP-STA-CONNECTED') + self.bss_hostapd[0].wait_for_event('AP-STA-CONNECTED') - self.assertFalse(bss_hostapd[1].list_sta()) + self.assertFalse(self.bss_hostapd[1].list_sta()) - bss_hostapd[0].send_bss_transition(device.address, - [(bss_hostapd[1].bssid, '8f0000005102060603000000')]) + self.bss_hostapd[0].send_bss_transition(device.address, + [(self.bss_hostapd[1].bssid, '8f0000005102060603000000')], + disassoc_imminent=expect_roam) - condition = 'obj.state == DeviceState.roaming' - wd.wait_for_object_condition(device, condition) + if expect_roam: + from_condition = 'obj.state == DeviceState.roaming' + to_condition = 'obj.state == DeviceState.connected' + wd.wait_for_object_change(device, from_condition, to_condition) - condition = 'obj.state != DeviceState.roaming' - wd.wait_for_object_condition(device, condition) - - condition = 'obj.state == DeviceState.connected' - wd.wait_for_object_condition(device, condition) - - bss_hostapd[1].wait_for_event('AP-STA-CONNECTED %s' % device.address) + self.bss_hostapd[1].wait_for_event('AP-STA-CONNECTED %s' % device.address) + else: + device.wait_for_event("no-roam-candidates") device.disconnect() condition = 'not obj.connected' wd.wait_for_object_condition(ordered_network.network_object, condition) + def test_disassoc_imminent(self): + self.validate(expect_roam=True) + + def test_no_candidates(self): + self.validate(expect_roam=False) + @classmethod def setUpClass(cls): IWD.copy_to_storage('TestAPRoam.psk') + cls.bss_hostapd = [ HostapdCLI(config='ssid1.conf'), + HostapdCLI(config='ssid2.conf'), + HostapdCLI(config='ssid3.conf') ] + @classmethod def tearDownClass(cls): IWD.clear_storage()