diff --git a/autotests/testRRM/connection_test.py b/autotests/testRRM/connection_test.py new file mode 100644 index 00000000..93fd6cb8 --- /dev/null +++ b/autotests/testRRM/connection_test.py @@ -0,0 +1,114 @@ +#!/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 +import testutil + +from time import sleep + +# Table beacon with wildcard BSSID +basic_beacon = '51000000000002ffffffffffff020100' +# Table beacon with wildcard BSSID and SSID filter +beacon_with_ssid = '51000000000002ffffffffffff02010000077373696452524d' +# Passive beacon with wildcard BSSID +beacon_passive = '510b0000000000ffffffffffff020100' +# Active beacon with wildcard BSSID +beacon_active = '510b0000000001ffffffffffff020100' + +class Test(unittest.TestCase): + + def test_connection_success(self): + hapd = HostapdCLI(config='ssidRRM.conf') + wd = IWD() + + psk_agent = PSKAgent("secret123") + wd.register_psk_agent(psk_agent) + + devices = wd.list_devices(1) + 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_network = device.get_ordered_network('ssidRRM') + + 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) + + testutil.test_iface_operstate() + testutil.test_ifaces_connected() + + hapd.wait_for_event('AP-STA-CONNECTED') + + # This should return both APs + hapd.req_beacon(device.address, basic_beacon) + + for e in ['BEACON-RESP-RX', 'BEACON-RESP-RX']: + event = hapd.wait_for_event(e) + if event: + print(event) + + sleep(0.5) + + # This should return just ssidRRM + hapd.req_beacon(device.address, beacon_with_ssid) + event = hapd.wait_for_event('BEACON-RESP-RX') + if event: + print(event) + + sleep(0.5) + + # This should passive scan on channel 11, returning otherSSID + hapd.req_beacon(device.address, beacon_passive) + # TODO: See if we are scanning here (scan not initiated from station) + + event = hapd.wait_for_event('BEACON-RESP-RX') + if event: + print(event) + + sleep(0.5) + + # This should active scan on channel 11, returning otherSSID + hapd.req_beacon(device.address, beacon_active) + # TODO: See if we are scanning here (scan not initiated from station) + + event = hapd.wait_for_event('BEACON-RESP-RX') + if event: + print(event) + + 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/testRRM/hw.conf b/autotests/testRRM/hw.conf new file mode 100644 index 00000000..91c757ce --- /dev/null +++ b/autotests/testRRM/hw.conf @@ -0,0 +1,8 @@ +[SETUP] +num_radios=3 +max_test_exec_interval_sec=40 +reg_domain=US + +[HOSTAPD] +rad0=ssidRRM.conf +rad1=ssidOther.conf diff --git a/autotests/testRRM/ssidOther.conf b/autotests/testRRM/ssidOther.conf new file mode 100644 index 00000000..e0f0fd40 --- /dev/null +++ b/autotests/testRRM/ssidOther.conf @@ -0,0 +1,10 @@ +ctrl_interface=/var/run/hostapd + +hw_mode=g +channel=11 +ssid=ssidOther + +wpa=2 +wpa_pairwise=CCMP +wpa_passphrase=secret123 +rrm_beacon_report=1 diff --git a/autotests/testRRM/ssidRRM.conf b/autotests/testRRM/ssidRRM.conf new file mode 100644 index 00000000..233392f9 --- /dev/null +++ b/autotests/testRRM/ssidRRM.conf @@ -0,0 +1,13 @@ +ctrl_interface=/var/run/hostapd + +hw_mode=a +ssid=ssidRRM + +wpa=2 +wpa_pairwise=CCMP +wpa_passphrase=secret123 +rrm_beacon_report=1 +ht_capab=[HT40+] + +ieee80211n=1 +channel=36