mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-16 17:09:24 +01:00
57ae02ab71
The test was rekeying in a loop which ends up confusing hostapd depending on the timing of when it gets the REKEY command and any responses from IWD. UML seemed to handle this fine but not QEMU. Instead delay the rekey a bit to allow it to fully complete before sending another.
115 lines
2.8 KiB
Python
115 lines
2.8 KiB
Python
#!/usr/bin/python3
|
|
|
|
import unittest
|
|
import sys
|
|
import os
|
|
|
|
sys.path.append('../util')
|
|
from iwd import IWD_CONFIG_DIR
|
|
from iwd import IWD
|
|
from iwd import PSKAgent
|
|
from iwd import NetworkType
|
|
from hwsim import Hwsim
|
|
from hostapd import HostapdCLI
|
|
import testutil
|
|
|
|
class Test(unittest.TestCase):
|
|
def validate(self, wd, resend_m3=False):
|
|
hapd = HostapdCLI('ssidCCMP.conf')
|
|
|
|
psk_agent = PSKAgent("secret123")
|
|
wd.register_psk_agent(psk_agent)
|
|
|
|
devices = wd.list_devices(1)
|
|
device = devices[0]
|
|
|
|
ordered_network = device.get_ordered_network('ssidCCMP')
|
|
|
|
self.assertEqual(ordered_network.type, NetworkType.psk)
|
|
|
|
condition = 'not obj.connected'
|
|
wd.wait_for_object_condition(ordered_network.network_object, condition)
|
|
|
|
ordered_network.network_object.connect()
|
|
|
|
condition = 'obj.state == DeviceState.connected'
|
|
wd.wait_for_object_condition(device, condition)
|
|
|
|
testutil.test_iface_operstate()
|
|
testutil.test_ifaces_connected()
|
|
|
|
|
|
# Rekey 5 times just to make sure the key ID can be toggled back and
|
|
# forth without causing problems.
|
|
for i in range(5):
|
|
hapd.rekey(device.address)
|
|
|
|
if resend_m3:
|
|
hapd.resend_m3(device.address)
|
|
|
|
testutil.test_iface_operstate()
|
|
testutil.test_ifaces_connected()
|
|
|
|
wd.wait(0.5)
|
|
|
|
device.disconnect()
|
|
|
|
condition = 'not obj.connected'
|
|
wd.wait_for_object_condition(ordered_network.network_object, condition)
|
|
|
|
wd.unregister_psk_agent(psk_agent)
|
|
|
|
def test_ext_key_control_port(self):
|
|
self.hapd.set_value('extended_key_id', '1')
|
|
self.hapd.reload()
|
|
|
|
self.wd = IWD(True)
|
|
|
|
self.validate(self.wd)
|
|
|
|
def test_ext_key_control_port_retransmit(self):
|
|
self.hapd.set_value('extended_key_id', '1')
|
|
self.hapd.reload()
|
|
|
|
self.wd = IWD(True)
|
|
|
|
self.validate(self.wd, resend_m3=True)
|
|
|
|
def test_ext_key_index_1(self):
|
|
self.hapd.set_value('extended_key_id', '2')
|
|
self.hapd.reload()
|
|
|
|
self.wd = IWD(True)
|
|
|
|
self.validate(self.wd)
|
|
|
|
def test_ext_key_pae(self):
|
|
self.hapd.set_value('extended_key_id', '1')
|
|
self.hapd.reload()
|
|
|
|
IWD.copy_to_storage('main_pae.conf', storage_dir=IWD_CONFIG_DIR, name='main.conf')
|
|
|
|
self.wd = IWD(True)
|
|
|
|
self.validate(self.wd)
|
|
|
|
def tearDown(self):
|
|
try:
|
|
os.system('rm -rf %s/main.conf' % IWD_CONFIG_DIR)
|
|
except:
|
|
pass
|
|
|
|
self.wd = None
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.hapd = HostapdCLI()
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
IWD.clear_storage()
|
|
cls.hapd = None
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(exit=True)
|