diff options
author | Thomas Haller <thaller@redhat.com> | 2018-05-15 10:16:14 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-05-15 10:32:02 +0200 |
commit | 2ef24490a3712ffca0faf86aecf56abcd43a1276 (patch) | |
tree | ada2c8a45d581ff39a273c47ad0a62ff4c738476 | |
parent | 39118a1f4229d66667867a85b976258aef0141ea (diff) |
tests: explicitly export/unexport objects
Instead of exporting exported-objects during construction, export
them right before we register them (for example, in case of device
instances, before we add the device to the manager's device list).
Likewise, when removing the object from the list, always explicitly
unexport them.
Without explicitly unexporting the objects, they can also not be
removed, because object-manage and D-Bus library keep references
to them.
-rwxr-xr-x | tools/test-networkmanager-service.py | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/tools/test-networkmanager-service.py b/tools/test-networkmanager-service.py index 39dc37f57..2121bb2b2 100755 --- a/tools/test-networkmanager-service.py +++ b/tools/test-networkmanager-service.py @@ -32,7 +32,7 @@ _DEFAULT_ARG = object() class Global: pass -gl = Global() +gl = None ############################################################################### @@ -297,7 +297,6 @@ class WiredDevice(Device): } self.dbus_interface_add(IFACE_WIRED, props, WiredDevice.PropertiesChanged) - self.export() @dbus.service.signal(IFACE_WIRED, signature='a{sv}') def PropertiesChanged(self, changed): @@ -322,7 +321,6 @@ class VlanDevice(Device): } self.dbus_interface_add(IFACE_VLAN, props, VlanDevice.PropertiesChanged) - self.export() @dbus.service.signal(IFACE_VLAN, signature='a{sv}') def PropertiesChanged(self, changed): @@ -381,7 +379,6 @@ class WifiAp(ExportedObj): } self.dbus_interface_add(IFACE_WIFI_AP, props, WifiAp.PropertiesChanged) - self.export() def __del__(self): if self.strength_id > 0: @@ -433,7 +430,6 @@ class WifiDevice(Device): } self.dbus_interface_add(IFACE_WIFI, props, WifiDevice.PropertiesChanged) - self.export() @dbus.service.method(dbus_interface=IFACE_WIFI, in_signature='', out_signature='ao') def GetAccessPoints(self): @@ -454,19 +450,21 @@ class WifiDevice(Device): pass def add_ap(self, ap): + ap.export() self.aps.append(ap) self._dbus_property_set(IFACE_WIFI, PRP_WIFI_ACCESS_POINTS, ExportedObj.to_path_array(self.aps)) self.AccessPointAdded(ExportedObj.to_path(ap)) return ap - @dbus.service.signal(IFACE_WIFI, signature='o') - def AccessPointRemoved(self, ap_path): - pass - def remove_ap(self, ap): self.aps.remove(ap) self._dbus_property_set(IFACE_WIFI, PRP_WIFI_ACCESS_POINTS, ExportedObj.to_path_array(self.aps)) self.AccessPointRemoved(ExportedObj.to_path(ap)) + ap.unexport() + + @dbus.service.signal(IFACE_WIFI, signature='o') + def AccessPointRemoved(self, ap_path): + pass @dbus.service.signal(IFACE_WIFI, signature='a{sv}') def PropertiesChanged(self, changed): @@ -506,7 +504,6 @@ class WimaxNsp(ExportedObj): } self.dbus_interface_add(IFACE_WIMAX_NSP, props, WimaxNsp.PropertiesChanged) - self.export() def __del__(self): if self.strength_id > 0: @@ -558,7 +555,6 @@ class WimaxDevice(Device): } self.dbus_interface_add(IFACE_WIMAX, props, WimaxDevice.PropertiesChanged) - self.export() @dbus.service.method(dbus_interface=IFACE_WIMAX, in_signature='', out_signature='ao') def GetNspList(self): @@ -569,18 +565,20 @@ class WimaxDevice(Device): pass def add_nsp(self, nsp): + nsp.export() self.nsps.append(nsp) self._dbus_property_set(IFACE_WIMAX, PRP_WIMAX_NSPS, ExportedObj.to_path_array(self.nsps)) self.NspAdded(ExportedObj.to_path(nsp)) - @dbus.service.signal(IFACE_WIMAX, signature='o') - def NspRemoved(self, nsp_path): - pass - def remove_nsp(self, nsp): self.nsps.remove(nsp) self._dbus_property_set(IFACE_WIMAX, PRP_WIMAX_NSPS, ExportedObj.to_path_array(self.nsps)) self.NspRemoved(ExportedObj.to_path(nsp)) + nsp.unexport() + + @dbus.service.signal(IFACE_WIMAX, signature='o') + def NspRemoved(self, nsp_path): + pass @dbus.service.signal(IFACE_WIMAX, signature='a{sv}') def PropertiesChanged(self, changed): @@ -914,21 +912,23 @@ class NetworkManager(ExportedObj): def add_device(self, device): if self.find_device_first(ident = device.ident, path = device.path) is not None: raise TestError("Duplicate device ident=%s / path=%s" % (device.ident, device.path)) + device.export() self.devices.append(device) self._dbus_property_set(IFACE_NM, PRP_NM_DEVICES, ExportedObj.to_path_array(self.devices)) self._dbus_property_set(IFACE_NM, PRP_NM_ALL_DEVICES, ExportedObj.to_path_array(self.devices)) self.DeviceAdded(ExportedObj.to_path(device)) return device - @dbus.service.signal(IFACE_NM, signature='o') - def DeviceRemoved(self, devpath): - pass - def remove_device(self, device): self.devices.remove(device) self._dbus_property_set(IFACE_NM, PRP_NM_DEVICES, ExportedObj.to_path_array(self.devices)) self._dbus_property_set(IFACE_NM, PRP_NM_ALL_DEVICES, ExportedObj.to_path_array(self.devices)) self.DeviceRemoved(ExportedObj.to_path(device)) + device.unexport() + + @dbus.service.signal(IFACE_NM, signature='o') + def DeviceRemoved(self, devpath): + pass @dbus.service.signal(IFACE_NM, signature='a{sv}') def PropertiesChanged(self, changed): @@ -1060,7 +1060,6 @@ class Connection(ExportedObj): } self.dbus_interface_add(IFACE_CONNECTION, props) - self.export() def get_id(self, settings=None): if settings is None: @@ -1200,13 +1199,14 @@ class Settings(ExportedObj): if uuid in [c.get_uuid() for c in self.connections.values()]: raise InvalidSettingException('cannot add duplicate connection with uuid %s' % (uuid)) + con.export() self.connections[con.path] = con self.NewConnection(con.path) self._dbus_property_set(IFACE_SETTINGS, PRP_SETTINGS_CONNECTIONS, dbus.Array(self.connections.keys(), 'o')) if self.remove_next_connection: self.remove_next_connection = False - self.connections[con.path].Delete() + self.delete_connection(con) return con.path @@ -1376,6 +1376,8 @@ def main(): random.seed() + global gl + gl = Global() gl.mainloop = GLib.MainLoop() gl.bus = dbus.SessionBus() @@ -1383,8 +1385,8 @@ def main(): gl.object_manager = ObjectManager('/org/freedesktop') gl.manager = NetworkManager() gl.settings = Settings() - gl.agent_manager = AgentManager() gl.dns_manager = DnsManager() + gl.agent_manager = AgentManager() if not gl.bus.request_name("org.freedesktop.NetworkManager"): raise AssertionError("Failure to request D-Bus name org.freedesktop.NetworkManager") @@ -1403,6 +1405,12 @@ def main(): GLib.source_remove(id1) GLib.source_remove(id2) + gl.agent_manager.remove_from_connection() + gl.dns_manager.unexport() + gl.settings.unexport() + gl.manager.unexport() + gl.object_manager.remove_from_connection() + sys.exit(0) if __name__ == '__main__': |