diff --git a/autotests/testHiddenNetworks/exceptions_test.py b/autotests/testHiddenNetworks/exceptions_test.py new file mode 100644 index 00000000..852470e2 --- /dev/null +++ b/autotests/testHiddenNetworks/exceptions_test.py @@ -0,0 +1,42 @@ +#!/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 NotFoundEx raised + False True ServiceSetOverlapEx raised + False True NotHiddenEx raised + True True AlreadyProvisionedEx raised + ''' + + def test_wpa(self): + tca = TestConnectAutoconnect() + + tca.validate('UnExistingNetwork', False, iwd.NotFoundEx) + tca.validate('ssidOverlap', False, iwd.ServiceSetOverlapEx) + tca.validate('ssidOpen', False, iwd.NotHiddenEx, False, True) + tca.validate('ssidAlreadyKnown', False, iwd.AlreadyProvisionedEx) + + @classmethod + def setUpClass(cls): + IWD.copy_to_storage('ssidAlreadyKnown.open') + + @classmethod + def tearDownClass(cls): + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testHiddenNetworks/hw.conf b/autotests/testHiddenNetworks/hw.conf new file mode 100644 index 00000000..dafbdfc4 --- /dev/null +++ b/autotests/testHiddenNetworks/hw.conf @@ -0,0 +1,11 @@ +[SETUP] +num_radios=6 +start_iwd=0 +max_test_exec_interval_sec=160 + +[HOSTAPD] +rad0=ssidHiddenOpen.conf +rad1=ssidHiddenWPA.conf +rad2=ssidOverlap1.conf +rad3=ssidOverlap2.conf +rad4=ssidOpen.conf diff --git a/autotests/testHiddenNetworks/open_network_test.py b/autotests/testHiddenNetworks/open_network_test.py new file mode 100644 index 00000000..8e653233 --- /dev/null +++ b/autotests/testHiddenNetworks/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('ssidHiddenOpen', False) + tca.validate('ssidHiddenOpen', True) + + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testHiddenNetworks/ssidAlreadyKnown.open b/autotests/testHiddenNetworks/ssidAlreadyKnown.open new file mode 100644 index 00000000..e69de29b diff --git a/autotests/testHiddenNetworks/ssidHiddenOpen.conf b/autotests/testHiddenNetworks/ssidHiddenOpen.conf new file mode 100644 index 00000000..f82b065b --- /dev/null +++ b/autotests/testHiddenNetworks/ssidHiddenOpen.conf @@ -0,0 +1,5 @@ +hw_mode=g +channel=1 +ssid=ssidHiddenOpen + +ignore_broadcast_ssid=1 diff --git a/autotests/testHiddenNetworks/ssidHiddenWPA.conf b/autotests/testHiddenNetworks/ssidHiddenWPA.conf new file mode 100644 index 00000000..406d7530 --- /dev/null +++ b/autotests/testHiddenNetworks/ssidHiddenWPA.conf @@ -0,0 +1,9 @@ +hw_mode=g +channel=1 +ssid=ssidHiddenWPA + +wpa=1 +wpa_pairwise=TKIP +wpa_passphrase=secret123 + +ignore_broadcast_ssid=1 diff --git a/autotests/testHiddenNetworks/ssidOpen.conf b/autotests/testHiddenNetworks/ssidOpen.conf new file mode 100644 index 00000000..03efa0a3 --- /dev/null +++ b/autotests/testHiddenNetworks/ssidOpen.conf @@ -0,0 +1,3 @@ +hw_mode=g +channel=1 +ssid=ssidOpen diff --git a/autotests/testHiddenNetworks/ssidOverlap1.conf b/autotests/testHiddenNetworks/ssidOverlap1.conf new file mode 100644 index 00000000..9f593942 --- /dev/null +++ b/autotests/testHiddenNetworks/ssidOverlap1.conf @@ -0,0 +1,5 @@ +hw_mode=g +channel=1 +ssid=ssidOverlap + +ignore_broadcast_ssid=1 diff --git a/autotests/testHiddenNetworks/ssidOverlap2.conf b/autotests/testHiddenNetworks/ssidOverlap2.conf new file mode 100644 index 00000000..db48e570 --- /dev/null +++ b/autotests/testHiddenNetworks/ssidOverlap2.conf @@ -0,0 +1,9 @@ +hw_mode=g +channel=1 +ssid=ssidOverlap + +wpa=1 +wpa_pairwise=TKIP +wpa_passphrase=secret123 + +ignore_broadcast_ssid=1 diff --git a/autotests/testHiddenNetworks/validation.py b/autotests/testHiddenNetworks/validation.py new file mode 100644 index 00000000..d1c2ddbc --- /dev/null +++ b/autotests/testHiddenNetworks/validation.py @@ -0,0 +1,85 @@ +#!/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_hidden_network(self, wd, device, ssid, throws): + if not throws is None: + with self.assertRaises(throws): + device.connect_hidden_network(ssid) + return + else: + device.connect_hidden_network(ssid) + + condition = 'obj.state == DeviceState.connected' + wd.wait_for_object_condition(device, condition, 30) + + def check_autoconnect_hidden_network(self, wd, device, ssid, throws): + if throws is None: + condition = 'obj.state == DeviceState.connected' + wd.wait_for_object_condition(device, condition, 30) + + 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, 30) + + def validate_connection(self, wd, ssid, autoconnect, throws, use_agent, + wait_periodic_scan): + if use_agent: + psk_agent = PSKAgent(["secret123"], ('domain\\User', 'Password')) + wd.register_psk_agent(psk_agent) + + devices = wd.list_devices(1); + self.assertIsNotNone(devices) + device = devices[0] + + if autoconnect: + condition = 'obj.scanning' + wd.wait_for_object_condition(device, condition) + condition = 'not obj.scanning' + wd.wait_for_object_condition(device, condition) + + self.check_autoconnect_hidden_network(wd, device, ssid, throws) + else: + if wait_periodic_scan: + condition = 'obj.scanning' + wd.wait_for_object_condition(device, condition) + condition = 'not obj.scanning' + wd.wait_for_object_condition(device, condition) + + self.check_connect_hidden_network(wd, device, ssid, throws) + + if use_agent: + wd.unregister_psk_agent(psk_agent) + + + def validate(self, ssid, autoconnect, throws = None, use_agent = False, + wait_periodic_scan = False): + wd = IWD(True) + + try: + self.validate_connection(wd, ssid, autoconnect, throws, use_agent, + wait_periodic_scan) + except: + del wd + raise + + del wd diff --git a/autotests/testHiddenNetworks/wpa_network_test.py b/autotests/testHiddenNetworks/wpa_network_test.py new file mode 100644 index 00000000..454d708b --- /dev/null +++ b/autotests/testHiddenNetworks/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('ssidHiddenWPA', False, None, True) + tca.validate('ssidHiddenWPA', True, None, True) + + IWD.clear_storage() + +if __name__ == '__main__': + unittest.main(exit=True)