3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-27 03:09:38 +01:00
iwd/autotests/testHiddenNetworks/connect_after_hidden_connect_test.py
James Prestwood 2bd2462968 auto-t: fix hidden network test
This test was never 100% reliable, and after the test-runner re-write
it became extremely unreliable. The issue came down to the very common
block of code thats present in many tests where we wait for obj.scanning
then not obj.scanning. This is fine when a dbus scan() is explicitly
done before, otherwise it could lead to problems. Without a dbus scan
explicitly called we are assuming a periodic scan will happen. If it
already happen the initial wait for obj.scanning will never return and
time out.

This probably needs to be changed in several tests, but for this specific
case we can remove the waits completely. Since
check_autoconnect_hidden_network has a 30 second wait on
DeviceState.connected this will ultimately time out if anything goes
wrong. There isn't any great reason to wait for scanning (for this test
specifically).

A minor style change was also made when initializing IWD. The values
passed in this test are now the default, so no arguments need to be
passed.
2020-09-10 17:59:49 -05:00

79 lines
2.0 KiB
Python

#!/usr/bin/python3
import unittest
import sys
sys.path.append('../util')
import iwd
from iwd import IWD
from iwd import PSKAgent
import testutil
import time
class TestConnectionAfterHiddenNetwork(unittest.TestCase):
'''
Tries to reproduce a memory leak caused by the consecutive calls to
ConnectHiddenNetwork and Connect one after another.
'''
_ex = None
_done = False
def _success(self):
self._done = True
def _failure(self, ex):
self._done = True
self._ex = ex
def test_connection(self):
wd = IWD(True)
psk_agent = PSKAgent("secret123")
wd.register_psk_agent(psk_agent)
device = wd.list_devices(1)[0]
ordered_network = device.get_ordered_network('ssidOpen',
scan_if_needed=True)
device.connect_hidden_network_async(name='ssidSomeHidden',
reply_handler = self._success,
error_handler = self._failure)
ordered_network.network_object.connect()
condition = 'obj.state == DeviceState.connected'
wd.wait_for_object_condition(device, condition)
condition = 'obj.connected_network is not None'
wd.wait_for_object_condition(device, condition)
testutil.test_iface_operstate(device.name)
device.disconnect()
condition = 'obj.state == DeviceState.disconnected'
wd.wait_for_object_condition(device, condition)
wd.unregister_psk_agent(psk_agent)
IWD.clear_storage()
while not self._done:
time.sleep(.300)
if self._ex is not None:
if self._ex.get_dbus_name() != 'net.connman.iwd.Failed':
raise self._ex
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
IWD.clear_storage()
if __name__ == '__main__':
unittest.main(exit=True)