diff options
author | James Prestwood <prestwoj@gmail.com> | 2024-02-27 10:34:03 -0800 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2024-02-27 13:55:37 -0600 |
commit | e296a61e3fb4f9f2a8183e272d3d00b64c2c4f88 (patch) | |
tree | 64a8f89c45d9a5ebd1d181503ea3f18bc4e8d6fb | |
parent | 82161909a1bb74c07d78eecc11dc0972efbe3cff (diff) |
auto-t: refactor/fix testSAE
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.
-rw-r--r-- | autotests/testSAE/autoconnect_test.py | 32 | ||||
-rw-r--r-- | autotests/testSAE/connection_test.py | 42 | ||||
-rw-r--r-- | autotests/testSAE/hw.conf | 3 | ||||
-rw-r--r-- | autotests/testSAE/profiles/ssidSAE-H2E.psk.default (renamed from autotests/testSAE/ssidSAE.psk.default) | 0 | ||||
-rw-r--r-- | autotests/testSAE/profiles/ssidSAE.psk.default | 2 | ||||
-rw-r--r-- | autotests/testSAE/profiles/ssidSAE.psk.identifier (renamed from autotests/testSAE/ssidSAE.psk.identifier) | 0 | ||||
-rw-r--r-- | autotests/testSAE/ssidSAE-H2E.conf | 12 | ||||
-rw-r--r-- | autotests/testSAE/ssidSAE.conf | 1 |
8 files changed, 52 insertions, 40 deletions
diff --git a/autotests/testSAE/autoconnect_test.py b/autotests/testSAE/autoconnect_test.py index 4ce3b845c..605de14d5 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 ecb464e2d..f77763851 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 72b161b82..cc0836b78 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 index abafdb665..abafdb665 100644 --- a/autotests/testSAE/ssidSAE.psk.default +++ b/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 000000000..abafdb665 --- /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 index 3664063a7..3664063a7 100644 --- a/autotests/testSAE/ssidSAE.psk.identifier +++ b/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 000000000..ea9631350 --- /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 f5ce537d3..4ec254aae 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 |