diff --git a/autotests/testConnectAutoconnect/8021x_network_test.py b/autotests/testConnectAutoconnect/8021x_network_test.py new file mode 100644 index 00000000..b8aca799 --- /dev/null +++ b/autotests/testConnectAutoconnect/8021x_network_test.py @@ -0,0 +1,41 @@ +#!/usr/bin/python3 + +import unittest +import sys + +sys.path.append('../util') +import iwd +import validation +from validation import TestConnectAutoconnect +from iwd import IWD + +class Test8021xNetwork(unittest.TestCase): + ''' + The bellow test cases excesise the following connection scenarios: + + Network config is + present at start time: Connect: Autoconnect: Result: + -------------------------------------------------------------------------- + False True NotConfiguredEx is thrown + True True Connection succeeds + True - EAP method in True FailedEx is thrown + config file is not + supported by IWD + ''' + def test_8021x(self): + tca = TestConnectAutoconnect() + tca.validate('ssidEAP-TLS', True, iwd.NotConfiguredEx) + + IWD.copy_to_storage('ssidEAP-TLS.8021x') + + tca.validate('ssidEAP-TLS', True) + + IWD.clear_storage() + IWD.copy_to_storage('ssidEAP-Other.8021x') + + tca.validate('ssidEAP-Other', False, iwd.FailedEx) + + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testConnectAutoconnect/hw.conf b/autotests/testConnectAutoconnect/hw.conf new file mode 100644 index 00000000..437cc4c3 --- /dev/null +++ b/autotests/testConnectAutoconnect/hw.conf @@ -0,0 +1,11 @@ +[SETUP] +num_radios=5 +start_iwd=0 +max_test_exec_interval_sec=120 +tmpfs_extra_stuff=../misc/certs + +[HOSTAPD] +rad0=ssidOpen.conf +rad1=ssidWPA.conf +rad2=ssidEAP-TLS.conf +rad3=ssidEAP-Other.conf \ No newline at end of file diff --git a/autotests/testConnectAutoconnect/open_network_test.py b/autotests/testConnectAutoconnect/open_network_test.py new file mode 100644 index 00000000..57012460 --- /dev/null +++ b/autotests/testConnectAutoconnect/open_network_test.py @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import unittest +import sys + +sys.path.append('../util') +import iwd +import validation +from validation import TestConnectAutoconnect +from iwd import IWD + +class TestOpenNetwork(unittest.TestCase): + ''' + The bellow test cases excesise the following connection scenarios: + + Network config is + present at start time: Connect: Autoconnect: Result: + -------------------------------------------------------------------------- + False True Connection succeeds + True True Connection succeeds + ''' + def test_open(self): + tca = TestConnectAutoconnect() + tca.validate('ssidOpen', False) + tca.validate('ssidOpen', True) + + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testConnectAutoconnect/ssidEAP-Other.8021x b/autotests/testConnectAutoconnect/ssidEAP-Other.8021x new file mode 100644 index 00000000..13e87e21 --- /dev/null +++ b/autotests/testConnectAutoconnect/ssidEAP-Other.8021x @@ -0,0 +1,2 @@ +[Security] +EAP-Method=UNSUPPORTED diff --git a/autotests/testConnectAutoconnect/ssidEAP-Other.conf b/autotests/testConnectAutoconnect/ssidEAP-Other.conf new file mode 100644 index 00000000..5e327911 --- /dev/null +++ b/autotests/testConnectAutoconnect/ssidEAP-Other.conf @@ -0,0 +1,12 @@ +hw_mode=g +channel=1 +ssid=ssidEAP-Other + +wpa=3 +wpa_key_mgmt=WPA-EAP +ieee8021x=1 +eap_server=1 +eap_user_file=/tmp/certs/eap-user-ttls.text +ca_cert=/tmp/certs/cert-ca.pem +server_cert=/tmp/certs/cert-server.pem +private_key=/tmp/certs/cert-server-key.pem diff --git a/autotests/testConnectAutoconnect/ssidEAP-TLS.8021x b/autotests/testConnectAutoconnect/ssidEAP-TLS.8021x new file mode 100644 index 00000000..fe8a2e46 --- /dev/null +++ b/autotests/testConnectAutoconnect/ssidEAP-TLS.8021x @@ -0,0 +1,6 @@ +[Security] +EAP-Method=TLS +EAP-TLS-CACert=/tmp/certs/cert-ca.pem +EAP-TLS-ClientCert=/tmp/certs/cert-client.pem +EAP-TLS-ClientKey=/tmp/certs/cert-client-key-pkcs8.pem +EAP-Identity=abc@example.com diff --git a/autotests/testConnectAutoconnect/ssidEAP-TLS.conf b/autotests/testConnectAutoconnect/ssidEAP-TLS.conf new file mode 100644 index 00000000..e1d7c6b4 --- /dev/null +++ b/autotests/testConnectAutoconnect/ssidEAP-TLS.conf @@ -0,0 +1,12 @@ +hw_mode=g +channel=1 +ssid=ssidEAP-TLS + +wpa=3 +wpa_key_mgmt=WPA-EAP +ieee8021x=1 +eap_server=1 +eap_user_file=/tmp/certs/eap-user-tls.text +ca_cert=/tmp/certs/cert-ca.pem +server_cert=/tmp/certs/cert-server.pem +private_key=/tmp/certs/cert-server-key.pem diff --git a/autotests/testConnectAutoconnect/ssidOpen.conf b/autotests/testConnectAutoconnect/ssidOpen.conf new file mode 100644 index 00000000..03efa0a3 --- /dev/null +++ b/autotests/testConnectAutoconnect/ssidOpen.conf @@ -0,0 +1,3 @@ +hw_mode=g +channel=1 +ssid=ssidOpen diff --git a/autotests/testConnectAutoconnect/ssidWPA.conf b/autotests/testConnectAutoconnect/ssidWPA.conf new file mode 100644 index 00000000..495e522f --- /dev/null +++ b/autotests/testConnectAutoconnect/ssidWPA.conf @@ -0,0 +1,7 @@ +hw_mode=g +channel=1 +ssid=ssidWPA + +wpa=1 +wpa_pairwise=TKIP +wpa_passphrase=secret123 diff --git a/autotests/testConnectAutoconnect/validation.py b/autotests/testConnectAutoconnect/validation.py new file mode 100644 index 00000000..4b03b423 --- /dev/null +++ b/autotests/testConnectAutoconnect/validation.py @@ -0,0 +1,89 @@ +#!/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 TestConnectAutoconnect(unittest.TestCase): + + def check_connect(self, wd, device, ssid, throws): + wd.wait(3); + ordered_networks = device.get_ordered_networks() + ordered_network = None + + for o_n in ordered_networks: + if o_n.name == ssid: + ordered_network = o_n + break + + self.assertEqual(ordered_network.name, ssid) + + condition = 'not obj.connected' + wd.wait_for_object_condition(ordered_network.network_object, condition) + + if not throws is None: + with self.assertRaises(throws): + ordered_network.network_object.connect() + return + else: + ordered_network.network_object.connect() + + condition = 'obj.connected' + wd.wait_for_object_condition(ordered_network.network_object, condition) + + def check_autoconnect(self, wd, device, ssid, throws): + wd.wait(3); + + if throws is None: + condition = 'obj.state == DeviceState.connected' + wd.wait_for_object_condition(device, condition) + + condition = 'obj.connected_network is not None' + wd.wait_for_object_condition(device, condition) + + ordered_network = device.get_ordered_networks()[0] + + self.assertIsNotNone(ordered_network) + self.assertEqual(ordered_network.name, ssid) + self.assertTrue(ordered_network.network_object.connected) + + device.disconnect() + + condition = 'obj.state == DeviceState.disconnected' + wd.wait_for_object_condition(device, condition) + + def validate(self, ssid, autoconnect, throws = None, use_agent = False): + + wd = IWD(True) + wd.wait(1); + + if use_agent: + psk_agent = PSKAgent("secret123") + wd.register_psk_agent(psk_agent) + + devices = wd.list_devices(); + self.assertIsNotNone(devices) + device = devices[0] + + if autoconnect: + self.check_autoconnect(wd, device, ssid, throws) + else: + condition = 'not obj.scanning' + wd.wait_for_object_condition(device, condition) + + device.scan() + + condition = 'not obj.scanning' + wd.wait_for_object_condition(device, condition) + + self.check_connect(wd, device, ssid, throws) + + if use_agent: + wd.unregister_psk_agent(psk_agent) + + del wd diff --git a/autotests/testConnectAutoconnect/wpa_network_test.py b/autotests/testConnectAutoconnect/wpa_network_test.py new file mode 100644 index 00000000..d027a3e8 --- /dev/null +++ b/autotests/testConnectAutoconnect/wpa_network_test.py @@ -0,0 +1,31 @@ +#!/usr/bin/python3 + +import unittest +import sys + +sys.path.append('../util') +import iwd +import validation +from validation import TestConnectAutoconnect +from iwd import IWD + +class TestWpaNetwork(unittest.TestCase): + ''' + The bellow test cases excesise the following connection scenarios: + + Network config is + present at start time: Connect: Autoconnect: Result: + -------------------------------------------------------------------------- + False True Connection succeeds + True True Connection succeeds + ''' + + def test_wpa(self): + tca = TestConnectAutoconnect() + tca.validate('ssidWPA', False, None, True) + tca.validate('ssidWPA', True, None, True) + + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True)