From: James Prestwood <prestwoj@gmail.com>
To: iwd@lists.linux.dev
Cc: James Prestwood <prestwoj@gmail.com>
Subject: [PATCH v3 02/13] auto-t: add association timeout test
Date: Wed, 6 Dec 2023 12:17:51 -0800 [thread overview]
Message-ID: <20231206201802.2139649-2-prestwoj@gmail.com> (raw)
In-Reply-To: <20231206201802.2139649-1-prestwoj@gmail.com>
This tests ensures IWD disconnects after receiving an association
timeout event. This exposes a current bug where IWD does not
transition to disconnected after an association timeout when
FT-roaming.
---
autotests/testPSK-roam/failed_roam_test.py | 56 +++++++++++++++-------
1 file changed, 38 insertions(+), 18 deletions(-)
diff --git a/autotests/testPSK-roam/failed_roam_test.py b/autotests/testPSK-roam/failed_roam_test.py
index 90f07f6b..d42002d4 100644
--- a/autotests/testPSK-roam/failed_roam_test.py
+++ b/autotests/testPSK-roam/failed_roam_test.py
@@ -46,11 +46,9 @@ class Test(unittest.TestCase):
self.rule2.enabled = True
self.rule3.enabled = True
- wd = IWD(True)
+ device = self.wd.list_devices(1)[0]
- device = wd.list_devices(1)[0]
-
- self.connect(wd, device, self.bss_hostapd[0])
+ self.connect(self.wd, device, self.bss_hostapd[0])
self.rule0.enabled = True
@@ -63,10 +61,25 @@ class Test(unittest.TestCase):
# IWD should then try BSS 2, and succeed
device.wait_for_event('ft-roam', timeout=60)
- self.verify_roam(wd, device, self.bss_hostapd[0], self.bss_hostapd[2])
+ self.verify_roam(self.wd, device, self.bss_hostapd[0], self.bss_hostapd[2])
self.bss_hostapd[2].deauthenticate(device.address)
+ # Tests that an associate even should cause a disconnect
+ def test_ft_over_air_assoc_timeout(self):
+ self.rule2.enabled = True
+ self.rule3.enabled = True
+ self.assoc_rule.enabled = True
+
+ device = self.wd.list_devices(1)[0]
+
+ self.connect(self.wd, device, self.bss_hostapd[0])
+
+ device.wait_for_event('ft-roam', timeout=60)
+
+ condition = 'obj.state == DeviceState.disconnected'
+ self.wd.wait_for_object_condition(device, condition)
+
# FT-over-Air failure with Invalid PMKID, should reassociate
def test_ft_over_air_fallback(self):
self.rule_bss0.signal = -8000
@@ -81,18 +94,16 @@ class Test(unittest.TestCase):
self.bss_hostapd[2].set_value('ft_psk_generate_local', '0')
self.bss_hostapd[2].reload()
- wd = IWD(True)
+ device = self.wd.list_devices(1)[0]
- device = wd.list_devices(1)[0]
-
- self.connect(wd, device, self.bss_hostapd[0])
+ self.connect(self.wd, device, self.bss_hostapd[0])
# IWD should connect, then attempt a roam to BSS 1, which should
# fail and cause a fallback to reassociation
device.wait_for_event('ft-fallback-to-reassoc', timeout=60)
device.wait_for_event('reassoc-roam', timeout=60)
- self.verify_roam(wd, device, self.bss_hostapd[0], self.bss_hostapd[2])
+ self.verify_roam(self.wd, device, self.bss_hostapd[0], self.bss_hostapd[2])
# Trigger another roam
self.rule_bss2.signal = -8000
@@ -100,11 +111,11 @@ class Test(unittest.TestCase):
device.wait_for_event('ft-roam', timeout=60)
# Ensure an FT roam back to a properly configured AP works.
- self.verify_roam(wd, device, self.bss_hostapd[2], self.bss_hostapd[1])
+ self.verify_roam(self.wd, device, self.bss_hostapd[2], self.bss_hostapd[1])
self.bss_hostapd[1].deauthenticate(device.address)
condition = 'obj.state == DeviceState.disconnected'
- wd.wait_for_object_condition(device, condition)
+ self.wd.wait_for_object_condition(device, condition)
# FT-over-Air failure with Invalid PMKID. The ranking is such that other
# FT candidates are available so it should FT elsewhere rather than
@@ -122,11 +133,9 @@ class Test(unittest.TestCase):
self.bss_hostapd[2].set_value('ft_psk_generate_local', '0')
self.bss_hostapd[2].reload()
- wd = IWD(True)
+ device = self.wd.list_devices(1)[0]
- device = wd.list_devices(1)[0]
-
- self.connect(wd, device, self.bss_hostapd[0])
+ self.connect(self.wd, device, self.bss_hostapd[0])
# IWD should connect, then attempt a roam to BSS 1, which should
# fail and cause the rank to be re-computed. This should then put
@@ -134,12 +143,14 @@ class Test(unittest.TestCase):
device.wait_for_event('ft-fallback-to-reassoc', timeout=60)
device.wait_for_event('ft-roam', timeout=60)
- self.verify_roam(wd, device, self.bss_hostapd[0], self.bss_hostapd[1])
+ self.verify_roam(self.wd, device, self.bss_hostapd[0], self.bss_hostapd[1])
self.bss_hostapd[1].deauthenticate(device.address)
condition = 'obj.state == DeviceState.disconnected'
- wd.wait_for_object_condition(device, condition)
+ self.wd.wait_for_object_condition(device, condition)
+ def setUp(self):
+ self.wd = IWD(True)
def tearDown(self):
os.system('ip link set "' + self.bss_hostapd[0].ifname + '" down')
@@ -154,10 +165,14 @@ class Test(unittest.TestCase):
self.rule_bss0.enabled = False
self.rule_bss1.enabled = False
self.rule_bss2.enabled = False
+ self.assoc_rule.enabled = False
for hapd in self.bss_hostapd:
hapd.default()
+ self.wd.stop()
+ self.wd = None
+
@classmethod
def setUpClass(cls):
hwsim = Hwsim()
@@ -178,6 +193,11 @@ class Test(unittest.TestCase):
cls.rule0.prefix = 'b0'
cls.rule0.drop = True
+ # Drop Associate frames
+ cls.assoc_rule = hwsim.rules.create()
+ cls.assoc_rule.prefix = '20'
+ cls.assoc_rule.drop = True
+
# Drop Action frames
cls.rule1 = hwsim.rules.create()
cls.rule1.bidirectional = True
--
2.34.1
next prev parent reply other threads:[~2023-12-06 20:18 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-06 20:17 [PATCH v3 01/13] auto-t: add explicit stop() to IWD class James Prestwood
2023-12-06 20:17 ` James Prestwood [this message]
2023-12-06 20:17 ` [PATCH v3 03/13] auto-t: only call set_value for changed values in default() James Prestwood
2023-12-06 20:17 ` [PATCH v3 04/13] handshake: add setters for authenticator/supplicant_fte James Prestwood
2023-12-06 20:17 ` [PATCH v3 05/13] handshake: use authenticator_fte instead of 'fte' James Prestwood
2023-12-06 20:17 ` [PATCH v3 06/13] unit: use authenticator_fte James Prestwood
2023-12-06 20:17 ` [PATCH v3 07/13] handshake: remove handshake_state_set_fte James Prestwood
2023-12-06 20:17 ` [PATCH v3 08/13] ft: add FTE/RSNE building to ft_prepare_handshake James Prestwood
2023-12-06 20:17 ` [PATCH v3 09/13] ft: add ft_handshake_setup James Prestwood
2023-12-06 20:17 ` [PATCH v3 10/13] netdev: add netdev_ft_reassociate James Prestwood
2023-12-06 20:18 ` [PATCH v3 11/13] station: use netdev_ft_reassociate James Prestwood
2023-12-06 20:18 ` [PATCH v3 12/13] ft: remove ft_associate and helpers James Prestwood
2023-12-06 20:18 ` [PATCH v3 13/13] netdev: station: remove NETDEV_EVENT_FT_ROAMED James Prestwood
2023-12-13 16:14 ` [PATCH v3 01/13] auto-t: add explicit stop() to IWD class 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=20231206201802.2139649-2-prestwoj@gmail.com \
--to=prestwoj@gmail.com \
--cc=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 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.