All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 2/2] auto-t: roam test to simulate reported crash
@ 2022-01-19 20:59 James Prestwood
  0 siblings, 0 replies; only message in thread
From: James Prestwood @ 2022-01-19 20:59 UTC (permalink / raw)
  To: iwd

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

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2022-01-19 20:59 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-19 20:59 [PATCH v2 2/2] auto-t: roam test to simulate reported crash James Prestwood

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.