auto-t: made waiting for network connection optional

The default behavior of NetworkObject.connect() is to wait for the
Connect dbus method to reply before returning back to the test. This
change makes it possible to connect, but not wait for a reply and
continue on with the test (by specifying wait=False). This is
specifically required to test SAE anti-clogging, where the AP needs
to have several simultaneous connections at once for the anti-clogging
logic to trigger. This change also adds Device.wait_for_connected()
which waits for the device interface State variable to be "connected".
This commit is contained in:
James Prestwood 2018-08-09 11:14:01 -07:00 committed by Denis Kenzior
parent 14693065d7
commit 4ddb95e147
1 changed files with 28 additions and 2 deletions

View File

@ -460,6 +460,31 @@ class Device(IWDDBusAbstract):
if self._adhoc_timed_out:
raise TimeoutError("Timed out waiting for peer %s" % addr)
def wait_for_connected(self):
if str(self.state) == "connected":
return
self._connected_success = False
self._connected_timed_out = False
def wait_timeout_cb():
self._connected_timed_out = True
return False
def connected_prop_changed(iface, changed, invalid):
if changed.get('State', None):
if changed['State'] == 'connected':
self._connected_success = True
self._prop_proxy.connect_to_signal('PropertiesChanged',
connected_prop_changed)
GLib.timeout_add(int(15 * 1000), wait_timeout_cb)
context = mainloop.get_context()
while not self._connected_success:
context.iteration(may_block=True)
if self._connected_timed_out:
raise TimeoutError("Timed out waiting for connected")
def __str__(self, prefix = ''):
return prefix + 'Device: ' + self.device_path + '\n'\
+ prefix + '\tName:\t\t' + self.name + '\n'\
@ -492,7 +517,7 @@ class Network(IWDDBusAbstract):
'''
return bool(self._properties['Connected'])
def connect(self):
def connect(self, wait=True):
'''
Connect to the network. Request the device implied by the object
path to connect to specified network.
@ -511,7 +536,8 @@ class Network(IWDDBusAbstract):
reply_handler=self._success,
error_handler=self._failure)
self._wait_for_async_op()
if wait:
self._wait_for_async_op()
def __str__(self, prefix = ''):
return prefix + 'Network:\n' \