Wireless Daemon for Linux
 help / color / mirror / Atom feed
From: James Prestwood <prestwoj@gmail.com>
To: iwd@lists.01.org
Subject: [PATCH v2 2/2] auto-t: add static netconfig test
Date: Thu, 10 Dec 2020 13:22:10 -0800	[thread overview]
Message-ID: <20201210212210.880245-2-prestwoj@gmail.com> (raw)
In-Reply-To: <20201210212210.880245-1-prestwoj@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 6657 bytes --]

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.
---
 autotests/testNetconfig/connection_test.py   |  10 +-
 autotests/testNetconfig/hw.conf              |   7 +-
 autotests/testNetconfig/static_test.py       | 105 +++++++++++++++++++
 autotests/testNetconfig/storage/ssidTKIP.psk |   3 +
 4 files changed, 121 insertions(+), 4 deletions(-)
 create mode 100644 autotests/testNetconfig/static_test.py
 create mode 100644 autotests/testNetconfig/storage/ssidTKIP.psk

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

  reply	other threads:[~2020-12-10 21:22 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-10 21:22 [PATCH v2 1/2] netconfig: add ACD client for static configuration James Prestwood
2020-12-10 21:22 ` James Prestwood [this message]
2020-12-10 22:20 ` Denis Kenzior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201210212210.880245-2-prestwoj@gmail.com \
    --to=prestwoj@gmail.com \
    --cc=iwd@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox