[PATCH] test: dbus: Unregister timeout source at end of test
Benjamin Berg
benjamin at sipsolutions.net
Tue Jul 22 00:30:45 PDT 2025
From: Benjamin Berg <benjamin.berg at intel.com>
Using timeout_add registers the GSource with the default GMainContext.
This GMainContext will remain the same between tests, and the registered
sources will therefore not be destroyed at the end of the test and will
only be removed after they have triggered and returned False.
Change the test timeout code to use a helper and ensure the GSource is
unregistered again when the test exits. While this is not an actual
problem, it does mean that python can garbage collect the TestDbus
instance earlier as it is otherwise kept alive until the GSource is
free'ed and the reference to the timeout method has been dropped.
Signed-off-by: Benjamin Berg <benjamin.berg at intel.com>
Reviewed-by: Andrei Otcheretianski <andrei.otcheretianski at intel.com>
---
tests/hwsim/test_dbus.py | 115 +++++++++++++++++++++------------------
1 file changed, 63 insertions(+), 52 deletions(-)
diff --git a/tests/hwsim/test_dbus.py b/tests/hwsim/test_dbus.py
index dfc20db3a5..cf0ed674ce 100644
--- a/tests/hwsim/test_dbus.py
+++ b/tests/hwsim/test_dbus.py
@@ -67,11 +67,15 @@ class TestDbus(object):
self.loop = gobject.MainLoop()
self.signals = []
self.bus = bus
+ self._timeout_id = 0
def __exit__(self, type, value, traceback):
for s in self.signals:
s.remove()
+ if self._timeout_id:
+ gobject.source_remove(self._timeout_id)
+
def add_signal(self, handler, interface, name, byte_arrays=False):
# Insert sleep to ensure WPA_DBUS_SEND_PROP_CHANGED_TIMEOUT passes
def int_handler(*args):
@@ -84,9 +88,16 @@ class TestDbus(object):
byte_arrays=byte_arrays)
self.signals.append(s)
- def timeout(self, *args):
+ def set_timeout(self, timeout):
+ if self._timeout_id:
+ gobject.source_remove(self._timeout_id)
+ self._timeout_id = gobject.timeout_add(timeout, self._timeout)
+
+ def _timeout(self, *args):
logger.debug("timeout")
self.loop.quit()
+
+ self._timeout_id = 0
return False
class alloc_fail_dbus(object):
@@ -479,7 +490,7 @@ def _test_dbus_get_set_wps(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_sets)
- gobject.timeout_add(1000, self.timeout)
+ self.set_timeout(1000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE_WPS,
"PropertiesChanged")
self.add_signal(self.propertiesChanged2, dbus.PROPERTIES_IFACE,
@@ -660,7 +671,7 @@ def _test_dbus_wps_pbc(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_pbc)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.wpsEvent, WPAS_DBUS_IFACE_WPS, "Event")
self.add_signal(self.credentials, WPAS_DBUS_IFACE_WPS,
"Credentials")
@@ -720,7 +731,7 @@ def test_dbus_wps_pbc_overlap(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_pbc)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.wpsEvent, WPAS_DBUS_IFACE_WPS, "Event")
self.loop.run()
return self
@@ -774,7 +785,7 @@ def _test_dbus_wps_pin(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_pin)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.wpsEvent, WPAS_DBUS_IFACE_WPS, "Event")
self.add_signal(self.credentials, WPAS_DBUS_IFACE_WPS,
"Credentials")
@@ -834,7 +845,7 @@ def _test_dbus_wps_pin2(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_pin)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.wpsEvent, WPAS_DBUS_IFACE_WPS, "Event")
self.add_signal(self.credentials, WPAS_DBUS_IFACE_WPS,
"Credentials")
@@ -897,7 +908,7 @@ def _test_dbus_wps_pin_m2d(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_pin)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.wpsEvent, WPAS_DBUS_IFACE_WPS, "Event")
self.add_signal(self.credentials, WPAS_DBUS_IFACE_WPS,
"Credentials")
@@ -960,7 +971,7 @@ def _test_dbus_wps_reg(dev, apdev):
def __enter__(self):
gobject.timeout_add(100, self.start_reg)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.wpsEvent, WPAS_DBUS_IFACE_WPS, "Event")
self.add_signal(self.credentials, WPAS_DBUS_IFACE_WPS,
"Credentials")
@@ -1103,7 +1114,7 @@ def test_dbus_scan(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_scan)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.scanDone, WPAS_DBUS_IFACE, "ScanDone")
self.add_signal(self.bssAdded, WPAS_DBUS_IFACE, "BSSAdded")
self.add_signal(self.bssRemoved, WPAS_DBUS_IFACE, "BSSRemoved")
@@ -1311,7 +1322,7 @@ def test_dbus_connect(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.networkAdded, WPAS_DBUS_IFACE, "NetworkAdded")
self.add_signal(self.networkRemoved, WPAS_DBUS_IFACE,
"NetworkRemoved")
@@ -1412,7 +1423,7 @@ def test_dbus_remove_connected(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.networkAdded, WPAS_DBUS_IFACE, "NetworkAdded")
self.add_signal(self.networkRemoved, WPAS_DBUS_IFACE,
"NetworkRemoved")
@@ -1511,7 +1522,7 @@ def test_dbus_connect_psk_mem(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE,
"PropertiesChanged")
self.add_signal(self.networkRequest, WPAS_DBUS_IFACE,
@@ -1571,7 +1582,7 @@ def test_dbus_connect_oom(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(1500, self.timeout)
+ self.set_timeout(1500)
self.add_signal(self.networkAdded, WPAS_DBUS_IFACE, "NetworkAdded")
self.add_signal(self.networkRemoved, WPAS_DBUS_IFACE,
"NetworkRemoved")
@@ -1730,7 +1741,7 @@ def test_dbus_connect_eap(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE,
"PropertiesChanged")
self.add_signal(self.certification, WPAS_DBUS_IFACE,
@@ -2220,7 +2231,7 @@ def test_dbus_blob(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_blob)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.blobAdded, WPAS_DBUS_IFACE, "BlobAdded")
self.add_signal(self.blobRemoved, WPAS_DBUS_IFACE, "BlobRemoved")
self.loop.run()
@@ -2368,7 +2379,7 @@ def test_dbus_tdls(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_tdls)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE,
"PropertiesChanged")
self.loop.run()
@@ -2439,7 +2450,7 @@ def test_dbus_tdls_channel_switch(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_tdls)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE,
"PropertiesChanged")
self.loop.run()
@@ -2834,7 +2845,7 @@ def test_dbus_probe_req_reporting(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.groupStarted, WPAS_DBUS_IFACE_P2PDEVICE,
"GroupStarted")
self.add_signal(self.probeRequest, WPAS_DBUS_IFACE, "ProbeRequest",
@@ -3241,7 +3252,7 @@ def run_dbus_p2p_discovery(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.deviceFoundProperties,
@@ -3391,7 +3402,7 @@ def test_dbus_p2p_discovery_freq(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(5000, self.timeout)
+ self.set_timeout(5000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.loop.run()
@@ -3601,7 +3612,7 @@ def test_dbus_p2p_service_discovery_query(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.serviceDiscoveryResponse,
@@ -3662,7 +3673,7 @@ def _test_dbus_p2p_service_discovery_external(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.serviceDiscoveryRequest,
@@ -3728,7 +3739,7 @@ def test_dbus_p2p_autogo(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.groupStarted, WPAS_DBUS_IFACE_P2PDEVICE,
@@ -3987,7 +3998,7 @@ def test_dbus_p2p_autogo_pbc(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.groupStarted, WPAS_DBUS_IFACE_P2PDEVICE,
@@ -4073,7 +4084,7 @@ def test_dbus_p2p_autogo_legacy(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.groupStarted, WPAS_DBUS_IFACE_P2PDEVICE,
"GroupStarted")
self.add_signal(self.groupFinished, WPAS_DBUS_IFACE_P2PDEVICE,
@@ -4146,7 +4157,7 @@ def test_dbus_p2p_join(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.groupStarted, WPAS_DBUS_IFACE_P2PDEVICE,
@@ -4268,7 +4279,7 @@ def test_dbus_p2p_invitation_received(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.invitationReceived, WPAS_DBUS_IFACE_P2PDEVICE,
"InvitationReceived")
self.loop.run()
@@ -4402,7 +4413,7 @@ def test_dbus_p2p_persistent(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.groupStarted, WPAS_DBUS_IFACE_P2PDEVICE,
"GroupStarted")
self.add_signal(self.groupFinished, WPAS_DBUS_IFACE_P2PDEVICE,
@@ -4501,7 +4512,7 @@ def test_dbus_p2p_reinvoke_persistent(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.groupStarted, WPAS_DBUS_IFACE_P2PDEVICE,
@@ -4628,7 +4639,7 @@ def test_dbus_p2p_go_neg_rx(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.goNegotiationRequest,
@@ -4712,7 +4723,7 @@ def test_dbus_p2p_go_neg_auth(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.goNegotiationSuccess,
@@ -4811,7 +4822,7 @@ def test_dbus_p2p_go_neg_init(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.goNegotiationSuccess,
@@ -4904,7 +4915,7 @@ def test_dbus_p2p_group_termination_by_go(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.goNegotiationSuccess,
@@ -4998,7 +5009,7 @@ def _test_dbus_p2p_group_idle_timeout(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.add_signal(self.goNegotiationSuccess,
@@ -5090,7 +5101,7 @@ def test_dbus_p2p_wps_failure(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.goNegotiationRequest,
WPAS_DBUS_IFACE_P2PDEVICE,
"GONegotiationRequest",
@@ -5174,7 +5185,7 @@ def test_dbus_p2p_two_groups(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, dbus.PROPERTIES_IFACE,
"PropertiesChanged", byte_arrays=True)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
@@ -5356,7 +5367,7 @@ def test_dbus_p2p_cancel(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.deviceFound, WPAS_DBUS_IFACE_P2PDEVICE,
"DeviceFound")
self.loop.run()
@@ -5426,7 +5437,7 @@ def test_dbus_p2p_ip_addr(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.groupStarted, WPAS_DBUS_IFACE_P2PDEVICE,
"GroupStarted")
self.loop.run()
@@ -5554,7 +5565,7 @@ def test_dbus_ap(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.networkAdded, WPAS_DBUS_IFACE, "NetworkAdded")
self.add_signal(self.networkSelected, WPAS_DBUS_IFACE,
"NetworkSelected")
@@ -5656,7 +5667,7 @@ def test_dbus_ap_scan(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE,
"PropertiesChanged")
self.add_signal(self.scanDone, WPAS_DBUS_IFACE, "ScanDone")
@@ -5717,7 +5728,7 @@ def test_dbus_connect_wpa_eap(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE,
"PropertiesChanged")
self.add_signal(self.eap, WPAS_DBUS_IFACE, "EAP")
@@ -5961,7 +5972,7 @@ def test_dbus_assoc_reject(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE,
"PropertiesChanged")
self.loop.run()
@@ -6010,7 +6021,7 @@ def test_dbus_mesh(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_test)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.meshGroupStarted, WPAS_DBUS_IFACE_MESH,
"MeshGroupStarted")
self.add_signal(self.meshGroupRemoved, WPAS_DBUS_IFACE_MESH,
@@ -6088,7 +6099,7 @@ def test_dbus_roam(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_IFACE,
"PropertiesChanged")
self.loop.run()
@@ -6209,7 +6220,7 @@ def test_dbus_interworking(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_select)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.interworkingAPAdded, WPAS_DBUS_IFACE,
"InterworkingAPAdded")
self.add_signal(self.interworkingSelectDone, WPAS_DBUS_IFACE,
@@ -6282,7 +6293,7 @@ def test_dbus_hs20_terms_and_conditions(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_connect)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.hs20TermsAndConditions, WPAS_DBUS_IFACE,
"HS20TermsAndConditions")
self.loop.run()
@@ -6371,7 +6382,7 @@ def test_dbus_anqp_query_done(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_query)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.anqpQueryDone, WPAS_DBUS_IFACE,
"ANQPQueryDone")
self.loop.run()
@@ -6419,7 +6430,7 @@ def test_dbus_bss_anqp_properties(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.run_query)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.propertiesChanged, WPAS_DBUS_BSS,
"PropertiesChanged")
self.loop.run()
@@ -6461,7 +6472,7 @@ def test_dbus_nan_usd_publish(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_publish)
gobject.timeout_add(500, self.stop_publish)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.nanPublishTerminated, WPAS_DBUS_IFACE,
"NANPublishTerminated")
self.loop.run()
@@ -6505,7 +6516,7 @@ def test_dbus_nan_usd_subscribe(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_subscribe)
gobject.timeout_add(500, self.stop_subscribe)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.nanSubscribeTerminated, WPAS_DBUS_IFACE,
"NANSubscribeTerminated")
self.loop.run()
@@ -6550,7 +6561,7 @@ def test_dbus_nan_usd_subscribe_followup(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_subscribe)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.nanDiscoveryResult, WPAS_DBUS_IFACE,
"NANDiscoveryResult")
self.add_signal(self.nanSubscribeTerminated, WPAS_DBUS_IFACE,
@@ -6632,7 +6643,7 @@ def test_dbus_nan_usd_publish_followup(dev, apdev):
def __enter__(self):
gobject.timeout_add(1, self.start_publish)
- gobject.timeout_add(15000, self.timeout)
+ self.set_timeout(15000)
self.add_signal(self.nanPublishTerminated, WPAS_DBUS_IFACE,
"NANPublishTerminated")
self.add_signal(self.nanReceive, WPAS_DBUS_IFACE,
--
2.50.1
More information about the Hostap
mailing list