mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-21 22:09:23 +01:00
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.
This commit is contained in:
parent
82161909a1
commit
e296a61e3f
@ -12,8 +12,7 @@ from hostapd import HostapdCLI
|
|||||||
|
|
||||||
class Test(unittest.TestCase):
|
class Test(unittest.TestCase):
|
||||||
|
|
||||||
def validate_connection(self, wd):
|
def validate_connection(self, wd, ssid):
|
||||||
|
|
||||||
devices = wd.list_devices(1)
|
devices = wd.list_devices(1)
|
||||||
self.assertIsNotNone(devices)
|
self.assertIsNotNone(devices)
|
||||||
device = devices[0]
|
device = devices[0]
|
||||||
@ -25,7 +24,7 @@ class Test(unittest.TestCase):
|
|||||||
condition = 'obj.connected_network is not None'
|
condition = 'obj.connected_network is not None'
|
||||||
wd.wait_for_object_condition(device, condition)
|
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)
|
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)
|
wd.wait_for_object_condition(ordered_network.network_object, condition)
|
||||||
|
|
||||||
def test_SAE(self):
|
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")
|
self.hostapd.wait_for_event("AP-ENABLED")
|
||||||
|
|
||||||
wd = IWD(True)
|
wd = IWD(True)
|
||||||
self.validate_connection(wd)
|
self.validate_connection(wd, "ssidSAE")
|
||||||
|
|
||||||
def test_SAE_H2E(self):
|
def test_SAE_H2E(self):
|
||||||
IWD.copy_to_storage("ssidSAE.psk.default", name="ssidSAE.psk")
|
IWD.copy_to_storage("profiles/ssidSAE.psk.default", name="ssidSAE-H2E.psk")
|
||||||
self.hostapd.set_value('sae_pwe', '1')
|
self.hostapd_h2e.set_value('sae_groups', '20')
|
||||||
self.hostapd.set_value('sae_groups', '20')
|
self.hostapd_h2e.reload()
|
||||||
self.hostapd.reload()
|
self.hostapd_h2e.wait_for_event("AP-ENABLED")
|
||||||
self.hostapd.wait_for_event("AP-ENABLED")
|
|
||||||
wd = IWD(True)
|
wd = IWD(True)
|
||||||
self.validate_connection(wd)
|
self.validate_connection(wd, "ssidSAE-H2E")
|
||||||
|
|
||||||
def test_SAE_H2E_password_identifier(self):
|
def test_SAE_H2E_password_identifier(self):
|
||||||
IWD.copy_to_storage("ssidSAE.psk.identifier", name="ssidSAE.psk")
|
IWD.copy_to_storage("profiles/ssidSAE.psk.identifier", name="ssidSAE-H2E.psk")
|
||||||
self.hostapd.set_value('sae_pwe', '1')
|
self.hostapd_h2e.set_value('sae_groups', '20')
|
||||||
self.hostapd.set_value('sae_groups', '20')
|
self.hostapd_h2e.reload()
|
||||||
self.hostapd.reload()
|
self.hostapd_h2e.wait_for_event("AP-ENABLED")
|
||||||
self.hostapd.wait_for_event("AP-ENABLED")
|
|
||||||
wd = IWD(True)
|
wd = IWD(True)
|
||||||
self.validate_connection(wd)
|
self.validate_connection(wd, "ssidSAE-H2E")
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.hostapd.default()
|
self.hostapd.default()
|
||||||
@ -68,6 +65,7 @@ class Test(unittest.TestCase):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
cls.hostapd = HostapdCLI(config='ssidSAE.conf')
|
cls.hostapd = HostapdCLI(config='ssidSAE.conf')
|
||||||
|
cls.hostapd_h2e = HostapdCLI(config='ssidSAE-H2E.conf')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main(exit=True)
|
unittest.main(exit=True)
|
||||||
|
@ -13,7 +13,7 @@ import testutil
|
|||||||
|
|
||||||
class Test(unittest.TestCase):
|
class Test(unittest.TestCase):
|
||||||
|
|
||||||
def validate_connection(self, wd):
|
def validate_connection(self, wd, ssid, hostapd, expected_group):
|
||||||
psk_agent = PSKAgent("secret123")
|
psk_agent = PSKAgent("secret123")
|
||||||
wd.register_psk_agent(psk_agent)
|
wd.register_psk_agent(psk_agent)
|
||||||
|
|
||||||
@ -23,11 +23,11 @@ class Test(unittest.TestCase):
|
|||||||
|
|
||||||
device.disconnect()
|
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)
|
self.assertEqual(network.type, NetworkType.psk)
|
||||||
|
|
||||||
network.network_object.connect()
|
network.network_object.connect(wait=False)
|
||||||
|
|
||||||
condition = 'obj.state == DeviceState.connected'
|
condition = 'obj.state == DeviceState.connected'
|
||||||
wd.wait_for_object_condition(device, condition)
|
wd.wait_for_object_condition(device, condition)
|
||||||
@ -35,7 +35,11 @@ class Test(unittest.TestCase):
|
|||||||
wd.wait(2)
|
wd.wait(2)
|
||||||
|
|
||||||
testutil.test_iface_operstate(intf=device.name)
|
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()
|
device.disconnect()
|
||||||
|
|
||||||
@ -46,37 +50,31 @@ class Test(unittest.TestCase):
|
|||||||
|
|
||||||
def test_SAE(self):
|
def test_SAE(self):
|
||||||
self.hostapd.wait_for_event("AP-ENABLED")
|
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):
|
def test_SAE_force_group_19(self):
|
||||||
# Vendor data from APs which require group 19 be used first
|
# 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.reload()
|
||||||
self.hostapd.wait_for_event("AP-ENABLED")
|
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):
|
def test_SAE_Group20(self):
|
||||||
self.hostapd.set_value('sae_groups', '20')
|
self.hostapd.set_value('sae_groups', '20')
|
||||||
self.hostapd.set_value('vendor_elements', '')
|
|
||||||
self.hostapd.reload()
|
self.hostapd.reload()
|
||||||
self.hostapd.wait_for_event("AP-ENABLED")
|
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):
|
def test_SAE_H2E(self):
|
||||||
self.hostapd.set_value('sae_pwe', '1')
|
self.hostapd_h2e.set_value('sae_groups', '19')
|
||||||
self.hostapd.set_value('vendor_elements', '')
|
self.hostapd_h2e.reload()
|
||||||
self.hostapd.reload()
|
self.hostapd_h2e.wait_for_event("AP-ENABLED")
|
||||||
self.hostapd.wait_for_event("AP-ENABLED")
|
self.validate_connection(self.wd, "ssidSAE-H2E", self.hostapd_h2e, 19)
|
||||||
self.validate_connection(self.wd)
|
|
||||||
|
|
||||||
def test_SAE_H2E_Group20(self):
|
def test_SAE_H2E_Group20(self):
|
||||||
self.hostapd.set_value('sae_pwe', '1')
|
self.hostapd_h2e.set_value('sae_groups', '20')
|
||||||
self.hostapd.set_value('sae_groups', '20')
|
self.hostapd_h2e.reload()
|
||||||
self.hostapd.set_value('vendor_elements', '')
|
self.hostapd_h2e.wait_for_event("AP-ENABLED")
|
||||||
self.hostapd.reload()
|
self.validate_connection(self.wd, "ssidSAE-H2E", self.hostapd_h2e, 20)
|
||||||
self.hostapd.wait_for_event("AP-ENABLED")
|
|
||||||
self.validate_connection(self.wd)
|
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.hostapd.default()
|
self.hostapd.default()
|
||||||
@ -89,6 +87,8 @@ class Test(unittest.TestCase):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
cls.hostapd = HostapdCLI(config='ssidSAE.conf')
|
cls.hostapd = HostapdCLI(config='ssidSAE.conf')
|
||||||
|
cls.hostapd_h2e = HostapdCLI(config='ssidSAE-H2E.conf')
|
||||||
|
cls.hostapd_defgroup = HostapdCLI(config='ssidSAE-default-group.conf')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
[SETUP]
|
[SETUP]
|
||||||
num_radios=2
|
num_radios=3
|
||||||
start_iwd=0
|
start_iwd=0
|
||||||
hwsim_medium=yes
|
hwsim_medium=yes
|
||||||
|
|
||||||
[HOSTAPD]
|
[HOSTAPD]
|
||||||
rad0=ssidSAE.conf
|
rad0=ssidSAE.conf
|
||||||
|
rad1=ssidSAE-H2E.conf
|
||||||
|
2
autotests/testSAE/profiles/ssidSAE.psk.default
Normal file
2
autotests/testSAE/profiles/ssidSAE.psk.default
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[Security]
|
||||||
|
Passphrase=secret123
|
12
autotests/testSAE/ssidSAE-H2E.conf
Normal file
12
autotests/testSAE/ssidSAE-H2E.conf
Normal file
@ -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
|
@ -6,7 +6,6 @@ wpa=2
|
|||||||
wpa_key_mgmt=SAE
|
wpa_key_mgmt=SAE
|
||||||
wpa_pairwise=CCMP
|
wpa_pairwise=CCMP
|
||||||
sae_password=secret123
|
sae_password=secret123
|
||||||
sae_password=withidentifier|id=myidentifier
|
|
||||||
sae_groups=19
|
sae_groups=19
|
||||||
ieee80211w=2
|
ieee80211w=2
|
||||||
sae_pwe=0
|
sae_pwe=0
|
||||||
|
Loading…
Reference in New Issue
Block a user