diff --git a/autotests/testSAE/autoconnect_test.py b/autotests/testSAE/autoconnect_test.py new file mode 100644 index 00000000..98c0c3b3 --- /dev/null +++ b/autotests/testSAE/autoconnect_test.py @@ -0,0 +1,59 @@ +#!/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 + +class Test(unittest.TestCase): + + def test_connection_success(self): + wd = IWD(True) + + devices = wd.list_devices(1) + 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() + + network = [x for x in ordered_networks if x.name == "ssidSAE"][0] + + self.assertIsNotNone(network) + self.assertEqual(network.name, "ssidSAE") + self.assertEqual(network.type, NetworkType.psk) + + condition = 'obj.connected' + wd.wait_for_object_condition(network.network_object, condition) + + device.wait_for_connected() + + device.disconnect() + + condition = 'not obj.connected' + wd.wait_for_object_condition(network.network_object, condition) + + del wd + + @classmethod + def setUpClass(cls): + IWD.copy_to_storage('ssidSAE.psk') + pass + + @classmethod + def tearDownClass(cls): + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testSAE/clogging_test.py b/autotests/testSAE/clogging_test.py new file mode 100644 index 00000000..03b88940 --- /dev/null +++ b/autotests/testSAE/clogging_test.py @@ -0,0 +1,80 @@ +#!/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 + +class Test(unittest.TestCase): + + def test_connection_success(self): + networks = [] + + wd = IWD(True) + + psk_agent = PSKAgent(["secret123"] * 4) + wd.register_psk_agent(psk_agent) + + devices = wd.list_devices(4) + self.assertIsNotNone(devices) + + for d in devices: + condition = 'not obj.scanning' + wd.wait_for_object_condition(d, condition) + + d.scan() + + for d in devices: + condition = 'not obj.scanning' + wd.wait_for_object_condition(d, condition) + + for i in range(len(devices)): + ordered_networks = devices[i].get_ordered_networks() + + network = [x for x in ordered_networks + if x.name == "ssidSAE-Clogging"][0] + + self.assertIsNotNone(network) + self.assertEqual(network.name, "ssidSAE-Clogging") + self.assertEqual(network.type, NetworkType.psk) + + networks.append(network) + + condition = 'not obj.connected' + wd.wait_for_object_condition(network.network_object, condition) + + for n in networks: + n.network_object.connect(wait=False) + + for n in networks: + condition = 'obj.connected' + wd.wait_for_object_condition(n.network_object, condition) + + for d in devices: + d.wait_for_connected() + + for d in devices: + d.disconnect() + + for n in networks: + condition = 'not obj.connected' + wd.wait_for_object_condition(n.network_object, condition) + + wd.unregister_psk_agent(psk_agent) + + del wd + + @classmethod + def setUpClass(cls): + pass + + @classmethod + def tearDownClass(cls): + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testSAE/connection_test.py b/autotests/testSAE/connection_test.py new file mode 100644 index 00000000..fee48960 --- /dev/null +++ b/autotests/testSAE/connection_test.py @@ -0,0 +1,79 @@ +#!/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 hostapd_map +import testutil + +class Test(unittest.TestCase): + + def test_connection_success(self): + hostapd_if = None + + for hostapd in list(hostapd_map.values()): + if hostapd.config == 'ssidSAE.conf': + hostapd_if = hostapd.name + + wd = IWD(True) + + psk_agent = PSKAgent("secret123") + wd.register_psk_agent(psk_agent) + + devices = wd.list_devices(1) + 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() + + network = [x for x in ordered_networks if x.name == "ssidSAE"][0] + + self.assertIsNotNone(network) + self.assertEqual(network.name, "ssidSAE") + self.assertEqual(network.type, NetworkType.psk) + + condition = 'not obj.connected' + wd.wait_for_object_condition(network.network_object, condition) + + network.network_object.connect() + + condition = 'obj.connected' + wd.wait_for_object_condition(network.network_object, condition) + + wd.wait(2) + + testutil.test_iface_operstate(intf=device.name) + testutil.test_ifaces_connected(if0=device.name, if1=hostapd_if) + + device.disconnect() + + condition = 'not obj.connected' + wd.wait_for_object_condition(network.network_object, condition) + + wd.unregister_psk_agent(psk_agent) + + del wd + + @classmethod + def setUpClass(cls): + pass + + @classmethod + def tearDownClass(cls): + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testSAE/failure_test.py b/autotests/testSAE/failure_test.py new file mode 100644 index 00000000..714b9be4 --- /dev/null +++ b/autotests/testSAE/failure_test.py @@ -0,0 +1,59 @@ +#!/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 + +class Test(unittest.TestCase): + + def test_connection_success(self): + wd = IWD(True) + + psk_agent = PSKAgent("InvalidSecret") + wd.register_psk_agent(psk_agent) + + devices = wd.list_devices(1) + 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() + + network = [x for x in ordered_networks if x.name == "ssidSAE"][0] + + self.assertIsNotNone(network) + self.assertEqual(network.name, "ssidSAE") + self.assertEqual(network.type, NetworkType.psk) + + condition = 'not obj.connected' + wd.wait_for_object_condition(network.network_object, condition) + + with self.assertRaises(iwd.FailedEx): + network.network_object.connect() + + wd.unregister_psk_agent(psk_agent) + + del wd + + @classmethod + def setUpClass(cls): + pass + + @classmethod + def tearDownClass(cls): + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testSAE/hw.conf b/autotests/testSAE/hw.conf new file mode 100644 index 00000000..66604123 --- /dev/null +++ b/autotests/testSAE/hw.conf @@ -0,0 +1,8 @@ +[SETUP] +num_radios=6 +start_iwd=0 +max_test_exec_interval_sec=45 + +[HOSTAPD] +rad0=ssidSAE.conf +rad1=ssidSAE-Clogging.conf diff --git a/autotests/testSAE/ssidSAE-Clogging.conf b/autotests/testSAE/ssidSAE-Clogging.conf new file mode 100644 index 00000000..4298bed4 --- /dev/null +++ b/autotests/testSAE/ssidSAE-Clogging.conf @@ -0,0 +1,8 @@ +hw_mode=g +channel=1 +ssid=ssidSAE-Clogging + +wpa=2 +wpa_key_mgmt=SAE +sae_password=secret123|mac=ff:ff:ff:ff:ff:ff +sae_anti_clogging_threshold=2 diff --git a/autotests/testSAE/ssidSAE.conf b/autotests/testSAE/ssidSAE.conf new file mode 100644 index 00000000..1d11fe16 --- /dev/null +++ b/autotests/testSAE/ssidSAE.conf @@ -0,0 +1,7 @@ +hw_mode=g +channel=1 +ssid=ssidSAE + +wpa=2 +wpa_key_mgmt=SAE +sae_password=secret123|mac=ff:ff:ff:ff:ff:ff diff --git a/autotests/testSAE/ssidSAE.psk b/autotests/testSAE/ssidSAE.psk new file mode 100644 index 00000000..eb855abd --- /dev/null +++ b/autotests/testSAE/ssidSAE.psk @@ -0,0 +1,3 @@ +[Security] +PreSharedKey=6d44ed0e3a2e1de04c753d66369ece3b9534094ab7ec9ce76798641a9fa68b13 +Passphrase=secret123