mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-20 12:39:25 +01:00
6d76b3e21d
Break up the SAE tests into two parts: testSAE and testSAE-AntiClogging testSAE is simplified to only use two radios and a single phy managed by hostapd. hostapd configurations are changed via the new 'set_value' method added to hostapd utils. This allows forcing hostapd to use a particular sae group set, or force hostapd to use SAE H2E/Hunting and Pecking Loop for key derivation. A separate test for IKE Group 20 is no longer required and is folded into connection_test.py testSAE-AntiClogging is added with an environment for 5 radios instead of 7, again with hostapd running on a single phy. 'sae_pwe' is used to force hostapd to use SAE H2E or Hunting and Pecking for key derivation. Both Anti-Clogging protocol variants are thus tested. main.conf is added to both directories to force scan randomization off. This seems to be required for hostapd to work properly on hwsim.
84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
#!/usr/bin/python3
|
|
|
|
import unittest
|
|
import sys
|
|
|
|
sys.path.append('../util')
|
|
import iwd
|
|
from iwd import IWD
|
|
from iwd import PSKAgent
|
|
from iwd import NetworkType
|
|
from hostapd import HostapdCLI
|
|
|
|
class Test(unittest.TestCase):
|
|
|
|
def validate_connection(self, wd):
|
|
networks = []
|
|
|
|
psk_agent = PSKAgent(["secret123"] * 4)
|
|
wd.register_psk_agent(psk_agent)
|
|
|
|
devices = wd.list_devices(4)
|
|
self.assertIsNotNone(devices)
|
|
|
|
for d in devices:
|
|
d.disconnect()
|
|
d.scan()
|
|
wd.wait_for_object_condition(d, 'obj.scanning')
|
|
|
|
for d in devices:
|
|
wd.wait_for_object_condition(d, 'not obj.scanning')
|
|
|
|
for i in range(len(devices)):
|
|
network = devices[i].get_ordered_network('ssidSAE-Clogging')
|
|
self.assertEqual(network.type, NetworkType.psk)
|
|
networks.append(network)
|
|
|
|
condition = 'not obj.connected'
|
|
wd.wait_for_object_condition(network.network_object, condition)
|
|
|
|
for n in networks:
|
|
n.network_object.connect(wait=False)
|
|
|
|
for d in devices:
|
|
condition = 'obj.state == DeviceState.connected'
|
|
wd.wait_for_object_condition(d, condition)
|
|
|
|
for d in devices:
|
|
d.disconnect()
|
|
|
|
for n in networks:
|
|
condition = 'not obj.connected'
|
|
wd.wait_for_object_condition(n.network_object, condition)
|
|
|
|
wd.unregister_psk_agent(psk_agent)
|
|
|
|
def test_SAE_H2E_Group20(self):
|
|
self.hostapd.set_value('sae_pwe', '1');
|
|
self.hostapd.set_value('sae_groups', '20');
|
|
self.hostapd.reload()
|
|
self.hostapd.wait_for_event("AP-ENABLED")
|
|
wd = IWD(True)
|
|
self.validate_connection(wd)
|
|
wd.clear_storage()
|
|
|
|
def test_SAE(self):
|
|
self.hostapd.set_value('sae_pwe', '0');
|
|
self.hostapd.set_value('sae_groups', '19');
|
|
self.hostapd.reload()
|
|
self.hostapd.wait_for_event("AP-ENABLED")
|
|
wd = IWD(True)
|
|
self.validate_connection(wd)
|
|
wd.clear_storage()
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.hostapd = HostapdCLI(config='ssidSAE-Clogging.conf')
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
IWD.clear_storage()
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(exit=True)
|