diff --git a/autotests/testNetconfig/connection_test.py b/autotests/testNetconfig/connection_test.py index 5fc7a88e..caab090c 100644 --- a/autotests/testNetconfig/connection_test.py +++ b/autotests/testNetconfig/connection_test.py @@ -11,11 +11,12 @@ from iwd import NetworkType from hostapd import HostapdCLI import testutil from config import ctx +import os class Test(unittest.TestCase): def test_connection_success(self): - wd = IWD() + wd = IWD(True) psk_agent = PSKAgent("secret123") wd.register_psk_agent(psk_agent) @@ -62,12 +63,15 @@ class Test(unittest.TestCase): ctx.start_process(['ifconfig', hapd.ifname, '192.168.1.1', 'netmask', '255.255.255.0'], wait=True) ctx.start_process(['touch', '/tmp/dhcpd.leases'], wait=True) - ctx.start_process(['dhcpd', '-cf', '/tmp/dhcpd.conf', '-lf', '/tmp/dhcpd.leases', - hapd.ifname]) + cls.dhcpd_pid = ctx.start_process(['dhcpd', '-f', '-cf', '/tmp/dhcpd.conf', + '-lf', '/tmp/dhcpd.leases', + hapd.ifname]) @classmethod def tearDownClass(cls): IWD.clear_storage() + cls.dhcpd_pid.kill() + os.system('rm -rf /tmp/dhcpd.leases') if __name__ == '__main__': unittest.main(exit=True) diff --git a/autotests/testNetconfig/hw.conf b/autotests/testNetconfig/hw.conf index 75c5ac6e..323f1fb2 100644 --- a/autotests/testNetconfig/hw.conf +++ b/autotests/testNetconfig/hw.conf @@ -1,6 +1,11 @@ [SETUP] -num_radios=2 +num_radios=3 max_test_exec_interval_sec=40 +start_iwd=0 +hwsim_medium=no [HOSTAPD] rad0=ssidTKIP.conf + +[NameSpaces] +ns0=rad2 diff --git a/autotests/testNetconfig/static_test.py b/autotests/testNetconfig/static_test.py new file mode 100644 index 00000000..b304f06d --- /dev/null +++ b/autotests/testNetconfig/static_test.py @@ -0,0 +1,105 @@ +#!/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 config import ctx +import os + +class Test(unittest.TestCase): + + def test_connection_success(self): + wd = IWD(True, iwd_storage_dir='/tmp/storage') + + ns0 = ctx.get_namespace('ns0') + + wd_ns0 = IWD(True, namespace=ns0) + + psk_agent = PSKAgent("secret123") + psk_agent_ns0 = PSKAgent("secret123", namespace=ns0) + wd.register_psk_agent(psk_agent) + wd_ns0.register_psk_agent(psk_agent_ns0) + + dev1 = wd.list_devices(1)[0] + dev2 = wd_ns0.list_devices(1)[0] + + condition = 'not obj.scanning' + wd.wait_for_object_condition(dev1, condition) + + dev1.scan() + + condition = 'not obj.scanning' + wd.wait_for_object_condition(dev1, condition) + + ordered_network = dev1.get_ordered_network('ssidTKIP') + + 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.state == DeviceState.connected' + wd.wait_for_object_condition(dev1, condition) + + testutil.test_iface_operstate() + testutil.test_ifaces_connected() + + testutil.test_ip_address_match(dev1.name, '192.168.1.10') + + dev2.scan() + + condition = 'not obj.scanning' + wd_ns0.wait_for_object_condition(dev2, condition) + + ordered_network = dev2.get_ordered_network('ssidTKIP', scan_if_needed=True) + + condition = 'not obj.connected' + wd_ns0.wait_for_object_condition(ordered_network.network_object, condition) + + ordered_network.network_object.connect() + + condition = 'obj.state == DeviceState.connected' + wd_ns0.wait_for_object_condition(dev2, condition) + + wd.wait(1) + testutil.test_ip_address_match(dev1.name, None) + + dev1.disconnect() + dev2.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): + hapd = HostapdCLI() + # TODO: This could be moved into test-runner itself if other tests ever + # require this functionality (p2p, FILS, etc.). Since its simple + # enough it can stay here for now. + ctx.start_process(['ifconfig', hapd.ifname, '192.168.1.1', 'netmask', '255.255.255.0'], + wait=True) + ctx.start_process(['touch', '/tmp/dhcpd.leases'], wait=True) + cls.dhcpd_pid = ctx.start_process(['dhcpd', '-f', '-cf', '/tmp/dhcpd.conf', + '-lf', '/tmp/dhcpd.leases', + hapd.ifname]) + IWD.copy_to_storage('ssidTKIP.psk', '/tmp/storage') + + @classmethod + def tearDownClass(cls): + IWD.clear_storage() + cls.dhcpd_pid.kill() + os.system('rm -rf /tmp/dhcpd.leases') + +if __name__ == '__main__': + unittest.main(exit=True) diff --git a/autotests/testNetconfig/storage/ssidTKIP.psk b/autotests/testNetconfig/storage/ssidTKIP.psk new file mode 100644 index 00000000..f15724a3 --- /dev/null +++ b/autotests/testNetconfig/storage/ssidTKIP.psk @@ -0,0 +1,3 @@ +[IPv4] +Address=192.168.1.10 +Gateway=192.168.1.1