mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-23 22:42:37 +01:00
06c8080664
testEncryptedProfiles: - This would occationally fail because the test is expecting to explicitly connect but after the first failed connection autoconnect takes over and its a race to connect. testPSK-roam: - Several rules were not being cleaned up which could cause tests afterwards to fail - The AP roam test started failing randomly because of the SNR ranking changes. It appears that with hwsim _sometimes_ the SNR is able to be determined which can effect the ranking. This test assumed the two BSS's would be the same ranking but the SNR sometimes causes this to not be true.
111 lines
3.4 KiB
Python
111 lines
3.4 KiB
Python
#! /usr/bin/python3
|
|
|
|
import unittest
|
|
import sys, os
|
|
|
|
sys.path.append('../util')
|
|
from iwd import IWD
|
|
from iwd import NetworkType
|
|
from hwsim import Hwsim
|
|
from hostapd import HostapdCLI
|
|
|
|
class Test(unittest.TestCase):
|
|
#
|
|
# Tests a crash reported where multiple roam scans combined with an AP
|
|
# disconnect result in a crash getting scan results.
|
|
#
|
|
def validate(self, wd):
|
|
device = wd.list_devices(1)[0]
|
|
|
|
ordered_network = device.get_ordered_network('TestFT', full_scan=True)
|
|
|
|
self.assertEqual(ordered_network.type, NetworkType.psk)
|
|
|
|
condition = 'not obj.connected'
|
|
wd.wait_for_object_condition(ordered_network.network_object, condition)
|
|
|
|
device.connect_bssid(self.bss_hostapd[0].bssid)
|
|
|
|
condition = 'obj.state == DeviceState.connected'
|
|
wd.wait_for_object_condition(device, condition)
|
|
|
|
# Since both BSS's have low signal, the roam should fail and trigger
|
|
# another roam scan.
|
|
device.wait_for_event('roam-scan-triggered', timeout=30)
|
|
device.wait_for_event('no-roam-candidates', timeout=60)
|
|
|
|
# Hostapd sends disconnect
|
|
self.bss_hostapd[0].disable()
|
|
|
|
# IWD should recover, and not crash
|
|
condition = 'obj.state == DeviceState.disconnected'
|
|
wd.wait_for_object_condition(device, condition)
|
|
|
|
def test_ap_disconnect_no_neighbors(self):
|
|
self.validate(self.wd)
|
|
|
|
def test_ap_disconnect_neighbors(self):
|
|
HostapdCLI.group_neighbors(*self.bss_hostapd)
|
|
|
|
self.validate(self.wd)
|
|
|
|
def setUp(self):
|
|
self.wd = IWD(True)
|
|
self.bss_hostapd[0].reload()
|
|
self.bss_hostapd[0].wait_for_event("AP-ENABLED")
|
|
|
|
def tearDown(self):
|
|
os.system('ip link set "' + self.bss_hostapd[0].ifname + '" down')
|
|
os.system('ip link set "' + self.bss_hostapd[1].ifname + '" down')
|
|
os.system('ip link set "' + self.bss_hostapd[0].ifname + '" up')
|
|
os.system('ip link set "' + self.bss_hostapd[1].ifname + '" up')
|
|
|
|
self.bss_hostapd[0].remove_neighbor(self.bss_hostapd[1].bssid)
|
|
self.bss_hostapd[1].remove_neighbor(self.bss_hostapd[0].bssid)
|
|
|
|
self.wd.stop()
|
|
self.wd = None
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
hwsim = Hwsim()
|
|
|
|
IWD.copy_to_storage('TestFT.psk')
|
|
|
|
cls.bss_hostapd = [ HostapdCLI(config='ft-psk-ccmp-1.conf'),
|
|
HostapdCLI(config='ft-psk-ccmp-2.conf'),
|
|
HostapdCLI(config='ft-psk-ccmp-3.conf') ]
|
|
cls.bss_hostapd[1].disable()
|
|
cls.bss_hostapd[2].disable()
|
|
|
|
cls.bss_hostapd[0].set_value('ocv', '0')
|
|
cls.bss_hostapd[0].set_value('ieee80211w', '0')
|
|
|
|
rad0 = hwsim.get_radio('rad0')
|
|
rad1 = hwsim.get_radio('rad1')
|
|
|
|
cls.rule0 = hwsim.rules.create()
|
|
cls.rule0.source = rad0.addresses[0]
|
|
cls.rule0.bidirectional = True
|
|
cls.rule0.signal = -8000
|
|
cls.rule0.enabled = True
|
|
|
|
cls.rule1 = hwsim.rules.create()
|
|
cls.rule1.source = rad1.addresses[0]
|
|
cls.rule1.bidirectional = True
|
|
cls.rule1.signal = -8500
|
|
cls.rule1.enabled = True
|
|
|
|
cls.bss_hostapd[0].set_address('12:00:00:00:00:01')
|
|
cls.bss_hostapd[1].set_address('12:00:00:00:00:02')
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
IWD.clear_storage()
|
|
cls.bss_hostapd = None
|
|
cls.rule0.remove()
|
|
cls.rule1.remove()
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(exit=True)
|