From: James Prestwood <prestwoj at gmail.com>
To: iwd at lists.01.org
Subject: [PATCH v2 2/2] auto-t: roam test to simulate reported crash
Date: Wed, 19 Jan 2022 12:59:11 -0800 [thread overview]
Message-ID: <20220119205911.2281616-2-prestwoj@gmail.com> (raw)
In-Reply-To: 20220119205911.2281616-1-prestwoj@gmail.com
[-- Attachment #1: Type: text/plain, Size: 4444 bytes --]
The crash itself is caused by new roam scans overwriting the previous
scan ID. To simulate this both BSS's are set to very low signal strength
which will cause IWD to attempt a roam but find no better BSS candidates.
IWD will then attempt a roam scan again. During this we kill hostapd which
sends a disconnect and should trigger a crash without the fix.
---
autotests/testPSK-roam/connection_test.py | 2 +
autotests/testPSK-roam/main.conf | 3 +
.../testPSK-roam/roam_ap_disconnect_test.py | 80 +++++++++++++++++++
3 files changed, 85 insertions(+)
create mode 100644 autotests/testPSK-roam/roam_ap_disconnect_test.py
diff --git a/autotests/testPSK-roam/connection_test.py b/autotests/testPSK-roam/connection_test.py
index 8d9b22ad..92fdeb04 100644
--- a/autotests/testPSK-roam/connection_test.py
+++ b/autotests/testPSK-roam/connection_test.py
@@ -203,6 +203,8 @@ class Test(unittest.TestCase):
def tearDownClass(cls):
IWD.clear_storage()
cls.bss_hostapd = None
+ cls.rule0.enabled = False
+ cls.rule0.remove()
if __name__ == '__main__':
unittest.main(exit=True)
diff --git a/autotests/testPSK-roam/main.conf b/autotests/testPSK-roam/main.conf
index 9452fb6b..3d93ff57 100644
--- a/autotests/testPSK-roam/main.conf
+++ b/autotests/testPSK-roam/main.conf
@@ -1,2 +1,5 @@
[Scan]
DisableMacAddressRandomization=true
+
+[General]
+RoamRetryInterval=1
diff --git a/autotests/testPSK-roam/roam_ap_disconnect_test.py b/autotests/testPSK-roam/roam_ap_disconnect_test.py
new file mode 100644
index 00000000..eee7077e
--- /dev/null
+++ b/autotests/testPSK-roam/roam_ap_disconnect_test.py
@@ -0,0 +1,80 @@
+#! /usr/bin/python3
+
+import unittest
+import sys, os
+
+sys.path.append('../util')
+from iwd import IWD
+from iwd import NetworkType
+from hwsim import Hwsim
+from hostapd import HostapdCLI
+
+class Test(unittest.TestCase):
+ #
+ # Tests a crash reported where multiple roam scans combined with an AP
+ # disconnect result in a crash getting scan results.
+ #
+ def test_ap_disconnect(self):
+ wd = IWD(True)
+ device = wd.list_devices(1)[0]
+
+ ordered_network = device.get_ordered_network('TestFT', full_scan=True)
+
+ self.assertEqual(ordered_network.type, NetworkType.psk)
+
+ condition = 'not obj.connected'
+ wd.wait_for_object_condition(ordered_network.network_object, condition)
+
+ device.connect_bssid(self.bss_hostapd[0].bssid)
+
+ condition = 'obj.state == DeviceState.connected'
+ wd.wait_for_object_condition(device, condition)
+
+ # Since both BSS's have low signal, the roam should fail and trigger
+ # another roam scan.
+ device.wait_for_event('no-roam-candidates', timeout=30)
+ device.wait_for_event('roam-scan-triggered', timeout=30)
+
+ # Hostapd sends disconnect
+ self.bss_hostapd[0].deauthenticate(device.address)
+
+ # IWD should recover, and not crash
+ condition = 'obj.state == DeviceState.disconnected'
+ wd.wait_for_object_condition(device, condition)
+
+ def tearDown(self):
+ os.system('ip link set "' + self.bss_hostapd[0].ifname + '" down')
+ os.system('ip link set "' + self.bss_hostapd[1].ifname + '" down')
+ os.system('ip link set "' + self.bss_hostapd[0].ifname + '" up')
+ os.system('ip link set "' + self.bss_hostapd[1].ifname + '" up')
+
+ @classmethod
+ def setUpClass(cls):
+ hwsim = Hwsim()
+
+ IWD.copy_to_storage('TestFT.psk')
+
+ cls.bss_hostapd = [ HostapdCLI(config='ft-psk-ccmp-1.conf'),
+ HostapdCLI(config='ft-psk-ccmp-2.conf') ]
+ cls.bss_hostapd[1].disable()
+
+ cls.bss_hostapd[0].set_value('ocv', '0')
+ cls.bss_hostapd[0].set_value('ieee80211w', '0')
+
+ cls.rule0 = hwsim.rules.create()
+ cls.rule0.source = 'any'
+ cls.rule0.bidirectional = True
+ cls.rule0.signal = -8000
+ cls.rule0.enabled = True
+
+ cls.bss_hostapd[0].reload()
+ cls.bss_hostapd[0].wait_for_event("AP-ENABLED")
+
+ @classmethod
+ def tearDownClass(cls):
+ IWD.clear_storage()
+ cls.bss_hostapd = None
+ cls.rule0.remove()
+
+if __name__ == '__main__':
+ unittest.main(exit=True)
--
2.31.1
reply other threads:[~2022-01-19 20:59 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20220119205911.2281616-2-prestwoj@gmail.com \
--to=iwd@lists.linux.dev \
/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