auto-t: add sae test for non-acked commit

This test simulates the scenario where IWDs commit is not acked which
exposes a hostapd bug that ultimately fails the connection. This behavior
can be seen by reverting the commit which works around this issue:

"sae: don't send commit in confirmed state"

With the above patch applied this test should pass.

Note: The existing timeout test was reused as it was not of much use
anyways. All it did was block auth/assoc frames and expect a failure
which didn't exercise any SAE logic anyways.
This commit is contained in:
James Prestwood 2021-09-08 14:32:01 -07:00 committed by Denis Kenzior
parent 3d82ab167f
commit eeb42c56f0
1 changed files with 21 additions and 20 deletions

View File

@ -9,13 +9,12 @@ from iwd import IWD
from iwd import PSKAgent from iwd import PSKAgent
from iwd import NetworkType from iwd import NetworkType
from hwsim import Hwsim from hwsim import Hwsim
from hostapd import HostapdCLI
from config import ctx
class Test(unittest.TestCase): class Test(unittest.TestCase):
def validate_connection(self, wd): def validate_connection(self, wd):
hwsim = Hwsim()
bss_radio = hwsim.get_radio('rad0')
psk_agent = PSKAgent(["secret123", "secret123"]) psk_agent = PSKAgent(["secret123", "secret123"])
wd.register_psk_agent(psk_agent) wd.register_psk_agent(psk_agent)
@ -30,29 +29,31 @@ class Test(unittest.TestCase):
condition = 'not obj.connected' condition = 'not obj.connected'
wd.wait_for_object_condition(network.network_object, condition) wd.wait_for_object_condition(network.network_object, condition)
network.network_object.connect()
condition = 'obj.state == DeviceState.connected'
wd.wait_for_object_condition(device, condition)
def test_not_acked_commit(self):
#
# TODO: This merely forces group 19 by acting as a 'buggy' AP. This is
# needed because the hwsim rule only matches once and must be matched
# on the first commit, not during group negotiation.
#
hostapd = HostapdCLI(config='ssidSAE.conf')
hostapd.set_value('vendor_elements', 'dd0cf4f5e8050500000000000000')
hwsim = Hwsim()
bss_radio = hwsim.get_radio('rad0')
rule0 = hwsim.rules.create() rule0 = hwsim.rules.create()
rule0.source = bss_radio.addresses[0] rule0.source = bss_radio.addresses[0]
rule0.bidirectional = True
rule0.drop = True rule0.drop = True
rule0.prefix = 'b0' rule0.prefix = 'b0'
rule0.match_times = 1
rule0.drop_ack = True
rule0.enabled = True rule0.enabled = True
wd.wait(1)
print(rule0)
with self.assertRaises(iwd.FailedEx):
network.network_object.connect()
condition = 'not obj.connected'
wd.wait_for_object_condition(network.network_object, condition)
rule0.prefix = '00'
with self.assertRaises(iwd.FailedEx):
network.network_object.connect()
wd.unregister_psk_agent(psk_agent)
def test_connection_success(self):
wd = IWD(True) wd = IWD(True)
self.validate_connection(wd) self.validate_connection(wd)