diff mbox series

[09/11] auto-t: refactor/fix testSAE

Message ID 20240227183405.257206-9-prestwoj@gmail.com (mailing list archive)
State Accepted, archived
Headers show
Series [01/11] doc: Document UseDefaultEccGroup | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
prestwoj/iwd-ci-gitlint fail [09/11] auto-t: refactor/fix testSAE 38: B1 Line exceeds max length (90>80): " rename autotests/testSAE/{ssidSAE.psk.default => profiles/ssidSAE-H2E.psk.default} (100%)"

Commit Message

James Prestwood Feb. 27, 2024, 6:34 p.m. UTC
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 mbox series

Patch

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