3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-05 03:29:24 +01:00
iwd/autotests/testBSSBlacklist/bad_pass_test.py
James Prestwood 3a9c401f63 auto-t: fix blacklist test timing issues
This test fails randomly, and it appears to be due to excessive
scanning. Historically most autotests start a dbus scan right
away. The problem is that most likely a periodic scan is already
ongoing, meaning the dbus scan gets queued. If a Connect() call
comes in (which it always does), the dbus scan gets delayed and will
trigger once connected, at a time the test is not expecting. This
can cause problems with any assumed timing as well as offchannel
frames.

This patch removes the explicit DBus scanning and instead uses
scan_if_needed with get_ordered_networks. The 'all_blacklisted_test'
was also modified to wait for scanning to complete after failing
to connect to all BSS's. This lets all the networks fully come
up (after being blocked by hwsim) and appear in scan results.
2021-02-11 20:32:26 -06:00

91 lines
2.4 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
from hwsim import Hwsim
class Test(unittest.TestCase):
def test_connection_success(self):
hwsim = Hwsim()
bss_hostapd = [ HostapdCLI(config='ssid1.conf'),
HostapdCLI(config='ssid2.conf'),
HostapdCLI(config='ssid3.conf') ]
bss_radio = [ hwsim.get_radio('rad0'),
hwsim.get_radio('rad1'),
hwsim.get_radio('rad2') ]
rule0 = hwsim.rules.create()
rule0.source = bss_radio[0].addresses[0]
rule0.bidirectional = True
rule0.signal = -2000
rule1 = hwsim.rules.create()
rule1.source = bss_radio[1].addresses[0]
rule1.bidirectional = True
rule1.signal = -3000
rule2 = hwsim.rules.create()
rule2.source = bss_radio[2].addresses[0]
rule2.bidirectional = True
rule2.signal = -4000
wd = IWD(True)
psk_agent = PSKAgent("wrong_password")
wd.register_psk_agent(psk_agent)
devices = wd.list_devices(1)
device = devices[0]
ordered_network = device.get_ordered_network("TestBlacklist", scan_if_needed=True)
self.assertEqual(ordered_network.type, NetworkType.psk)
condition = 'not obj.connected'
wd.wait_for_object_condition(ordered_network.network_object, condition)
with self.assertRaises(iwd.FailedEx):
ordered_network.network_object.connect()
wd.unregister_psk_agent(psk_agent)
psk_agent = PSKAgent("secret123")
wd.register_psk_agent(psk_agent)
ordered_network.network_object.connect()
# We failed to connect bss_hostapd[0], but with a bad password. Verify
# that this did not trigger a blacklist and that we did reconnect
# successfully to bss_hostapd[0]
self.assertIn(device.address, bss_hostapd[0].list_sta())
condition = 'obj.state == DeviceState.connected'
wd.wait_for_object_condition(device, condition)
wd.unregister_psk_agent(psk_agent)
rule0.remove()
rule1.remove()
rule2.remove()
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
IWD.clear_storage()
if __name__ == '__main__':
unittest.main(exit=True)