From: James Prestwood <prestwoj@gmail.com>
To: iwd@lists.linux.dev
Cc: James Prestwood <prestwoj@gmail.com>
Subject: [PATCH 09/11] auto-t: refactor/fix testSAE
Date: Tue, 27 Feb 2024 10:34:03 -0800 [thread overview]
Message-ID: <20240227183405.257206-9-prestwoj@gmail.com> (raw)
In-Reply-To: <20240227183405.257206-1-prestwoj@gmail.com>
The SAE test made some assumptions on certain conditions due to
there being no way of checking if those conditions were met
Mainly the use of H2E/hunt-and-peck.
We assumed that when we told hostapd to use H2E or hunt/peck it
would but in reality it was not. Hostapd is apparently not very
good at swapping between the two with a simple "reload" command.
Once H2E is enabled it appears that it cannot be undone.
Similarly the vendor elements seem to carry over from test to
test, and sometimes not which causes unintended behavior.
To fix this create separate APs for the specific scenario being
tested:
- Hunt and peck
- H2E
- Special vendor_element simulating buggy APs
Another issue found was that if password identifies are used
hostapd automatically chooses H2E which was not intented, at
least based on the test names (in reality it wasn't causing any
problems).
The tests have also been improved to use hostapds "sta_status"
command which contains the group number used when authenticating,
so now that at least can be verified.
---
autotests/testSAE/autoconnect_test.py | 32 +++++++-------
autotests/testSAE/connection_test.py | 42 +++++++++----------
autotests/testSAE/hw.conf | 3 +-
.../ssidSAE-H2E.psk.default} | 0
.../testSAE/profiles/ssidSAE.psk.default | 2 +
.../{ => profiles}/ssidSAE.psk.identifier | 0
autotests/testSAE/ssidSAE-H2E.conf | 12 ++++++
autotests/testSAE/ssidSAE.conf | 1 -
8 files changed, 52 insertions(+), 40 deletions(-)
rename autotests/testSAE/{ssidSAE.psk.default => profiles/ssidSAE-H2E.psk.default} (100%)
create mode 100644 autotests/testSAE/profiles/ssidSAE.psk.default
rename autotests/testSAE/{ => profiles}/ssidSAE.psk.identifier (100%)
create mode 100644 autotests/testSAE/ssidSAE-H2E.conf
diff --git a/autotests/testSAE/autoconnect_test.py b/autotests/testSAE/autoconnect_test.py
index 4ce3b845..605de14d 100644
--- a/autotests/testSAE/autoconnect_test.py
+++ b/autotests/testSAE/autoconnect_test.py
@@ -12,8 +12,7 @@ from hostapd import HostapdCLI
class Test(unittest.TestCase):
- def validate_connection(self, wd):
-
+ def validate_connection(self, wd, ssid):
devices = wd.list_devices(1)
self.assertIsNotNone(devices)
device = devices[0]
@@ -25,7 +24,7 @@ class Test(unittest.TestCase):
condition = 'obj.connected_network is not None'
wd.wait_for_object_condition(device, condition)
- ordered_network = device.get_ordered_network('ssidSAE')
+ ordered_network = device.get_ordered_network(ssid)
self.assertTrue(ordered_network.network_object.connected)
@@ -35,29 +34,27 @@ class Test(unittest.TestCase):
wd.wait_for_object_condition(ordered_network.network_object, condition)
def test_SAE(self):
- IWD.copy_to_storage("ssidSAE.psk.default", name="ssidSAE.psk")
+ IWD.copy_to_storage("profiles/ssidSAE.psk.default", name="ssidSAE.psk")
self.hostapd.wait_for_event("AP-ENABLED")
wd = IWD(True)
- self.validate_connection(wd)
+ self.validate_connection(wd, "ssidSAE")
def test_SAE_H2E(self):
- IWD.copy_to_storage("ssidSAE.psk.default", name="ssidSAE.psk")
- self.hostapd.set_value('sae_pwe', '1')
- self.hostapd.set_value('sae_groups', '20')
- self.hostapd.reload()
- self.hostapd.wait_for_event("AP-ENABLED")
+ IWD.copy_to_storage("profiles/ssidSAE.psk.default", name="ssidSAE-H2E.psk")
+ self.hostapd_h2e.set_value('sae_groups', '20')
+ self.hostapd_h2e.reload()
+ self.hostapd_h2e.wait_for_event("AP-ENABLED")
wd = IWD(True)
- self.validate_connection(wd)
+ self.validate_connection(wd, "ssidSAE-H2E")
def test_SAE_H2E_password_identifier(self):
- IWD.copy_to_storage("ssidSAE.psk.identifier", name="ssidSAE.psk")
- self.hostapd.set_value('sae_pwe', '1')
- self.hostapd.set_value('sae_groups', '20')
- self.hostapd.reload()
- self.hostapd.wait_for_event("AP-ENABLED")
+ IWD.copy_to_storage("profiles/ssidSAE.psk.identifier", name="ssidSAE-H2E.psk")
+ self.hostapd_h2e.set_value('sae_groups', '20')
+ self.hostapd_h2e.reload()
+ self.hostapd_h2e.wait_for_event("AP-ENABLED")
wd = IWD(True)
- self.validate_connection(wd)
+ self.validate_connection(wd, "ssidSAE-H2E")
def setUp(self):
self.hostapd.default()
@@ -68,6 +65,7 @@ class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.hostapd = HostapdCLI(config='ssidSAE.conf')
+ cls.hostapd_h2e = HostapdCLI(config='ssidSAE-H2E.conf')
if __name__ == '__main__':
unittest.main(exit=True)
diff --git a/autotests/testSAE/connection_test.py b/autotests/testSAE/connection_test.py
index ecb464e2..f7776385 100644
--- a/autotests/testSAE/connection_test.py
+++ b/autotests/testSAE/connection_test.py
@@ -13,7 +13,7 @@ import testutil
class Test(unittest.TestCase):
- def validate_connection(self, wd):
+ def validate_connection(self, wd, ssid, hostapd, expected_group):
psk_agent = PSKAgent("secret123")
wd.register_psk_agent(psk_agent)
@@ -23,11 +23,11 @@ class Test(unittest.TestCase):
device.disconnect()
- network = device.get_ordered_network('ssidSAE', full_scan=True)
+ network = device.get_ordered_network(ssid, full_scan=True)
self.assertEqual(network.type, NetworkType.psk)
- network.network_object.connect()
+ network.network_object.connect(wait=False)
condition = 'obj.state == DeviceState.connected'
wd.wait_for_object_condition(device, condition)
@@ -35,7 +35,11 @@ class Test(unittest.TestCase):
wd.wait(2)
testutil.test_iface_operstate(intf=device.name)
- testutil.test_ifaces_connected(if0=device.name, if1=self.hostapd.ifname)
+ testutil.test_ifaces_connected(if0=device.name, if1=hostapd.ifname)
+
+ sta_status = hostapd.sta_status(device.address)
+
+ self.assertEqual(int(sta_status["sae_group"]), expected_group)
device.disconnect()
@@ -46,37 +50,31 @@ class Test(unittest.TestCase):
def test_SAE(self):
self.hostapd.wait_for_event("AP-ENABLED")
- self.validate_connection(self.wd)
+ self.validate_connection(self.wd, "ssidSAE", self.hostapd, 19)
def test_SAE_force_group_19(self):
# Vendor data from APs which require group 19 be used first
- # TODO: (for all tests) verify the expected group was used
- self.hostapd.set_value('vendor_elements', 'dd0cf4f5e8050500000000000000')
self.hostapd.reload()
self.hostapd.wait_for_event("AP-ENABLED")
- self.validate_connection(self.wd)
+ self.validate_connection(self.wd, "ssidSAE-default-group", self.hostapd_defgroup, 19)
def test_SAE_Group20(self):
self.hostapd.set_value('sae_groups', '20')
- self.hostapd.set_value('vendor_elements', '')
self.hostapd.reload()
self.hostapd.wait_for_event("AP-ENABLED")
- self.validate_connection(self.wd)
+ self.validate_connection(self.wd, "ssidSAE", self.hostapd, 20)
def test_SAE_H2E(self):
- self.hostapd.set_value('sae_pwe', '1')
- self.hostapd.set_value('vendor_elements', '')
- self.hostapd.reload()
- self.hostapd.wait_for_event("AP-ENABLED")
- self.validate_connection(self.wd)
+ self.hostapd_h2e.set_value('sae_groups', '19')
+ self.hostapd_h2e.reload()
+ self.hostapd_h2e.wait_for_event("AP-ENABLED")
+ self.validate_connection(self.wd, "ssidSAE-H2E", self.hostapd_h2e, 19)
def test_SAE_H2E_Group20(self):
- self.hostapd.set_value('sae_pwe', '1')
- self.hostapd.set_value('sae_groups', '20')
- self.hostapd.set_value('vendor_elements', '')
- self.hostapd.reload()
- self.hostapd.wait_for_event("AP-ENABLED")
- self.validate_connection(self.wd)
+ self.hostapd_h2e.set_value('sae_groups', '20')
+ self.hostapd_h2e.reload()
+ self.hostapd_h2e.wait_for_event("AP-ENABLED")
+ self.validate_connection(self.wd, "ssidSAE-H2E", self.hostapd_h2e, 20)
def setUp(self):
self.hostapd.default()
@@ -89,6 +87,8 @@ class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.hostapd = HostapdCLI(config='ssidSAE.conf')
+ cls.hostapd_h2e = HostapdCLI(config='ssidSAE-H2E.conf')
+ cls.hostapd_defgroup = HostapdCLI(config='ssidSAE-default-group.conf')
@classmethod
def tearDownClass(cls):
diff --git a/autotests/testSAE/hw.conf b/autotests/testSAE/hw.conf
index 72b161b8..cc0836b7 100644
--- a/autotests/testSAE/hw.conf
+++ b/autotests/testSAE/hw.conf
@@ -1,7 +1,8 @@
[SETUP]
-num_radios=2
+num_radios=3
start_iwd=0
hwsim_medium=yes
[HOSTAPD]
rad0=ssidSAE.conf
+rad1=ssidSAE-H2E.conf
diff --git a/autotests/testSAE/ssidSAE.psk.default b/autotests/testSAE/profiles/ssidSAE-H2E.psk.default
similarity index 100%
rename from autotests/testSAE/ssidSAE.psk.default
rename to autotests/testSAE/profiles/ssidSAE-H2E.psk.default
diff --git a/autotests/testSAE/profiles/ssidSAE.psk.default b/autotests/testSAE/profiles/ssidSAE.psk.default
new file mode 100644
index 00000000..abafdb66
--- /dev/null
+++ b/autotests/testSAE/profiles/ssidSAE.psk.default
@@ -0,0 +1,2 @@
+[Security]
+Passphrase=secret123
diff --git a/autotests/testSAE/ssidSAE.psk.identifier b/autotests/testSAE/profiles/ssidSAE.psk.identifier
similarity index 100%
rename from autotests/testSAE/ssidSAE.psk.identifier
rename to autotests/testSAE/profiles/ssidSAE.psk.identifier
diff --git a/autotests/testSAE/ssidSAE-H2E.conf b/autotests/testSAE/ssidSAE-H2E.conf
new file mode 100644
index 00000000..ea963135
--- /dev/null
+++ b/autotests/testSAE/ssidSAE-H2E.conf
@@ -0,0 +1,12 @@
+hw_mode=g
+channel=1
+ssid=ssidSAE-H2E
+
+wpa=2
+wpa_key_mgmt=SAE
+wpa_pairwise=CCMP
+sae_password=secret123
+sae_password=withidentifier|id=myidentifier
+sae_groups=19
+ieee80211w=2
+sae_pwe=1
diff --git a/autotests/testSAE/ssidSAE.conf b/autotests/testSAE/ssidSAE.conf
index f5ce537d..4ec254aa 100644
--- a/autotests/testSAE/ssidSAE.conf
+++ b/autotests/testSAE/ssidSAE.conf
@@ -6,7 +6,6 @@ wpa=2
wpa_key_mgmt=SAE
wpa_pairwise=CCMP
sae_password=secret123
-sae_password=withidentifier|id=myidentifier
sae_groups=19
ieee80211w=2
sae_pwe=0
--
2.34.1
next prev parent reply other threads:[~2024-02-27 18:34 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-27 18:33 [PATCH 01/11] doc: Document UseDefaultEccGroup James Prestwood
2024-02-27 18:33 ` [PATCH 02/11] knownnetworks: add option to force a default ECC group James Prestwood
2024-02-27 18:33 ` [PATCH 03/11] network: retain default ECC group for OWE after setting James Prestwood
2024-02-27 18:33 ` [PATCH 04/11] network: set use default ECC group in handshake setup James Prestwood
2024-02-27 18:33 ` [PATCH 05/11] sae: remove sae_sm_set_force_group_19, use handshake James Prestwood
2024-02-27 18:34 ` [PATCH 06/11] netdev: add NETDEV_EVENT_ECC_GROUP_RETRY, handle in station James Prestwood
2024-02-27 18:34 ` [PATCH 07/11] auto-t: add Device.event_ocurred James Prestwood
2024-02-27 18:34 ` [PATCH 08/11] auto-t: add HostapdCLI.sta_status James Prestwood
2024-02-27 18:34 ` James Prestwood [this message]
2024-02-27 18:34 ` [PATCH 10/11] auto-t: Add test for new SAE default group behavior James Prestwood
2024-02-27 18:34 ` [PATCH 11/11] auto-t: add OWE test for auto default group James Prestwood
2024-02-27 19:56 ` [PATCH 01/11] doc: Document UseDefaultEccGroup 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=20240227183405.257206-9-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox