mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-22 06:29:23 +01:00
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:
parent
267feb94b0
commit
cfb782cfff
@ -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')
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user