diff --git a/autotests/testAPRoam/connection_test.py b/autotests/testAPRoam/connection_test.py new file mode 100644 index 00000000..48fea170 --- /dev/null +++ b/autotests/testAPRoam/connection_test.py @@ -0,0 +1,108 @@ +#!/usr/bin/python3 + +import unittest +import sys + +sys.path.append('../util') +import iwd +from iwd import IWD +from iwd import PSKAgent +from iwd import NetworkType + +from hostapd import HostapdCLI +from hostapd import hostapd_map + +from wiphy import wiphy_map +from hwsim import Hwsim + +class Test(unittest.TestCase): + + def test_connection_success(self): + hwsim = Hwsim() + + bss_hostapd = [None, None, None] + bss_radio = [None, None, None] + + for wname in wiphy_map: + wiphy = wiphy_map[wname] + intf = list(wiphy.values())[0] + if intf.config and '1' in intf.config: + bss_idx = 0 + elif intf.config and '2' in intf.config: + bss_idx = 1 + elif intf.config and '3' in intf.config: + bss_idx = 2 + else: + continue + + for path in hwsim.radios: + radio = hwsim.radios[path] + if radio.name == wname: + break + + bss_hostapd[bss_idx] = HostapdCLI(intf) + bss_radio[bss_idx] = radio + + wd = IWD() + + psk_agent = PSKAgent("secret123") + wd.register_psk_agent(psk_agent) + + devices = wd.list_devices(); + self.assertIsNotNone(devices) + device = devices[0] + + 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_networks = device.get_ordered_networks() + ordered_network = ordered_networks[0] + + self.assertEqual(ordered_network.name, "TestAPRoam") + self.assertEqual(ordered_network.type, NetworkType.psk) + + condition = 'not obj.connected' + wd.wait_for_object_condition(ordered_network.network_object, condition) + + ordered_network.network_object.connect() + + condition = 'obj.connected' + wd.wait_for_object_condition(ordered_network.network_object, condition) + + self.assertTrue(bss_hostapd[0].list_sta()) + self.assertFalse(bss_hostapd[1].list_sta()) + + bss_hostapd[0].send_bss_transition(device.address, + [(bss_radio[1].addresses[0], '8f0000005102060603000000'), + (bss_radio[2].addresses[0], '8f0000005103060603000000')]) + + condition = 'obj.state == DeviceState.roaming' + wd.wait_for_object_condition(device, condition, 15) + + condition = 'obj.state != DeviceState.roaming' + wd.wait_for_object_condition(device, condition, 5) + + self.assertEqual(device.state, iwd.DeviceState.connected) + self.assertTrue(bss_hostapd[1].list_sta()) + device.disconnect() + + condition = 'not obj.connected' + wd.wait_for_object_condition(ordered_network.network_object, condition) + + wd.unregister_psk_agent(psk_agent) + + @classmethod + def setUpClass(cls): + pass + + @classmethod + def tearDownClass(cls): + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testAPRoam/hw.conf b/autotests/testAPRoam/hw.conf new file mode 100644 index 00000000..00a31063 --- /dev/null +++ b/autotests/testAPRoam/hw.conf @@ -0,0 +1,7 @@ +[SETUP] +num_radios=4 + +[HOSTAPD] +rad0=ssid1.conf +rad1=ssid2.conf +rad2=ssid3.conf diff --git a/autotests/testAPRoam/ssid1.conf b/autotests/testAPRoam/ssid1.conf new file mode 100644 index 00000000..ac720d56 --- /dev/null +++ b/autotests/testAPRoam/ssid1.conf @@ -0,0 +1,11 @@ +hw_mode=g +channel=1 +ssid=TestAPRoam + +wpa=2 +wpa_pairwise=CCMP +wpa_passphrase=secret123 + +ctrl_interface=/var/run/hostapd + +rrm_neighbor_report=1 diff --git a/autotests/testAPRoam/ssid2.conf b/autotests/testAPRoam/ssid2.conf new file mode 100644 index 00000000..3e633bb5 --- /dev/null +++ b/autotests/testAPRoam/ssid2.conf @@ -0,0 +1,11 @@ +hw_mode=g +channel=2 +ssid=TestAPRoam + +wpa=2 +wpa_pairwise=CCMP +wpa_passphrase=secret123 + +ctrl_interface=/var/run/hostapd + +rrm_neighbor_report=1 \ No newline at end of file diff --git a/autotests/testAPRoam/ssid3.conf b/autotests/testAPRoam/ssid3.conf new file mode 100644 index 00000000..45382761 --- /dev/null +++ b/autotests/testAPRoam/ssid3.conf @@ -0,0 +1,11 @@ +hw_mode=g +channel=3 +ssid=TestAPRoam + +wpa=2 +wpa_pairwise=CCMP +wpa_passphrase=secret123 + +ctrl_interface=/var/run/hostapd + +rrm_neighbor_report=1 \ No newline at end of file