auto-t: add static netconfig test

Tests netconfig with a static configuration, as well as tests ACD
functionality.

The test has two IWD radios which will eventually use the same IP.
One is configured statically, one will receive the IP via DHCP.
The static client sets its IP first and begins using it. Then the
DHCP client is started. Since ACD in a DHCP client is configured
to use its address indefinitely, the static client *should* give
up its address.
This commit is contained in:
James Prestwood 2020-12-10 13:22:10 -08:00 committed by Denis Kenzior
parent f39d1b4ac2
commit fde1012f5d
4 changed files with 121 additions and 4 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -0,0 +1,3 @@
[IPv4]
Address=192.168.1.10
Gateway=192.168.1.1