auto-t: remove sleep in testAgent

The test here is verifying that a DBus Connect() call will still
work with 'other' agents registered. In this case it uses iwctl to
set a password, then call Connect() manually.

The problem here is that we have no way of knowing when iwctl fully
starts and registers its agent. There was a sleep in there but that
is unreliable and we occationally were still getting past that without
iwctl having started fully.

To fix this properly we need to wait for iwctl's agent service to appear
on the bus. Since the bus name is unknown we must first find all names,
then cross reference their PID's against the iwctl PID. This is done
using ListNames, and GetConnectionUnixProcessID APIs.
This commit is contained in:
James Prestwood 2022-06-24 16:07:39 -07:00 committed by Denis Kenzior
parent 267feb94b0
commit cfb782cfff
1 changed files with 17 additions and 1 deletions

View File

@ -2,6 +2,7 @@
import unittest
import sys
import dbus
sys.path.append('../util')
import iwd
@ -56,11 +57,26 @@ class Test(unittest.TestCase):
IWD.clear_storage()
def test_connection_with_other_agent(self):
def wait_for_service_pid(pid):
dbus_object = ctx._bus.get_object('org.freedesktop.DBus',
'/org/freedesktop/DBus')
dbus_iface = dbus.Interface(dbus_object, 'org.freedesktop.DBus')
services = dbus_iface.ListNames()
for service in services:
bus_iface = dbus.Interface(dbus_object, "org.freedesktop.DBus")
if pid == int(bus_iface.GetConnectionUnixProcessID(service)):
return True
return False
wd = IWD()
iwctl = ctx.start_process(['iwctl', '-P', 'secret_ssid2'])
# Let iwctl to start and register its agent.
wd.wait(2)
ctx.non_block_wait(wait_for_service_pid, 10, iwctl.pid)
self.check_connection(wd, 'ssid2')