libnm/tests: turn all mock objects into ExportedObjs

This way they will all be able to register with the ObjectManager mock.
This commit is contained in:
Lubomir Rintel
2016-09-20 14:39:55 +02:00
parent 3f451a2394
commit ab0e0ed117

View File

@@ -92,9 +92,14 @@ class ExportedObj(dbus.service.Object):
dbus.service.Object.__init__(self, bus, object_path) dbus.service.Object.__init__(self, bus, object_path)
self._bus = bus self._bus = bus
self.path = object_path self.path = object_path
self.__dbus_ifaces = {} self.__ensure_dbus_ifaces()
def __ensure_dbus_ifaces(self):
if not hasattr(self, '_ExportedObj__dbus_ifaces'):
self.__dbus_ifaces = {}
def add_dbus_interface(self, dbus_iface, get_props_func, prop_changed_func): def add_dbus_interface(self, dbus_iface, get_props_func, prop_changed_func):
self.__ensure_dbus_ifaces()
self.__dbus_ifaces[dbus_iface] = ExportedObj.DBusInterface(dbus_iface, get_props_func, prop_changed_func) self.__dbus_ifaces[dbus_iface] = ExportedObj.DBusInterface(dbus_iface, get_props_func, prop_changed_func)
def __dbus_interface_get(self, dbus_iface): def __dbus_interface_get(self, dbus_iface):
@@ -957,7 +962,7 @@ class InvalidSettingException(dbus.DBusException):
class MissingSettingException(dbus.DBusException): class MissingSettingException(dbus.DBusException):
_dbus_error_name = IFACE_CONNECTION + '.MissingSetting' _dbus_error_name = IFACE_CONNECTION + '.MissingSetting'
class Connection(dbus.service.Object): class Connection(ExportedObj):
def __init__(self, bus, object_path, settings, remove_func, verify_connection=True): def __init__(self, bus, object_path, settings, remove_func, verify_connection=True):
if self.get_uuid(settings) is None: if self.get_uuid(settings) is None:
@@ -966,8 +971,6 @@ class Connection(dbus.service.Object):
settings['connection']['uuid'] = uuid.uuid4() settings['connection']['uuid'] = uuid.uuid4()
self.verify(settings, verify_strict=verify_connection) self.verify(settings, verify_strict=verify_connection)
dbus.service.Object.__init__(self, bus, object_path)
self.path = object_path self.path = object_path
self.settings = settings self.settings = settings
self.remove_func = remove_func self.remove_func = remove_func
@@ -975,6 +978,9 @@ class Connection(dbus.service.Object):
self.props = {} self.props = {}
self.props['Unsaved'] = False self.props['Unsaved'] = False
self.add_dbus_interface(IFACE_CONNECTION, self.__get_props, None)
ExportedObj.__init__(self, bus, object_path)
def get_uuid(self, settings=None): def get_uuid(self, settings=None):
if settings is None: if settings is None:
settings = self.settings settings = self.settings
@@ -1014,20 +1020,11 @@ class Connection(dbus.service.Object):
self.settings = settings; self.settings = settings;
self.Updated() self.Updated()
# Properties interface def __get_props(self):
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}')
def GetAll(self, iface):
if iface != IFACE_CONNECTION:
raise UnknownInterfaceException()
return self.props return self.props
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') def __notify(self, propname):
def Get(self, iface, name): self._dbus_property_notify(IFACE_CONNECTION, propname)
if iface != IFACE_CONNECTION:
raise UnknownInterfaceException()
if not name in self.props.keys():
raise UnknownPropertyException()
return self.props[name]
# Connection methods # Connection methods
@dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='a{sa{sv}}') @dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='a{sa{sv}}')
@@ -1065,9 +1062,8 @@ IFACE_SETTINGS = 'org.freedesktop.NetworkManager.Settings'
class InvalidHostnameException(dbus.DBusException): class InvalidHostnameException(dbus.DBusException):
_dbus_error_name = IFACE_SETTINGS + '.InvalidHostname' _dbus_error_name = IFACE_SETTINGS + '.InvalidHostname'
class Settings(dbus.service.Object): class Settings(ExportedObj):
def __init__(self, bus, object_path): def __init__(self, bus, object_path):
dbus.service.Object.__init__(self, bus, object_path)
self.connections = {} self.connections = {}
self.bus = bus self.bus = bus
self.counter = 1 self.counter = 1
@@ -1077,6 +1073,9 @@ class Settings(dbus.service.Object):
self.props['CanModify'] = True self.props['CanModify'] = True
self.props['Connections'] = dbus.Array([], 'o') self.props['Connections'] = dbus.Array([], 'o')
self.add_dbus_interface(IFACE_SETTINGS, self.__get_props, Settings.PropertiesChanged)
ExportedObj.__init__(self, bus, object_path)
def auto_remove_next_connection(self): def auto_remove_next_connection(self):
self.remove_next_connection = True; self.remove_next_connection = True;
@@ -1103,7 +1102,7 @@ class Settings(dbus.service.Object):
self.connections[path] = con self.connections[path] = con
self.props['Connections'] = dbus.Array(self.connections.keys(), 'o') self.props['Connections'] = dbus.Array(self.connections.keys(), 'o')
self.NewConnection(path) self.NewConnection(path)
self.PropertiesChanged({ 'connections': self.props['Connections'] }) self.__notify('Connections')
if self.remove_next_connection: if self.remove_next_connection:
self.remove_next_connection = False self.remove_next_connection = False
@@ -1122,7 +1121,7 @@ class Settings(dbus.service.Object):
def delete_connection(self, connection): def delete_connection(self, connection):
del self.connections[connection.path] del self.connections[connection.path]
self.props['Connections'] = dbus.Array(self.connections.keys(), 'o') self.props['Connections'] = dbus.Array(self.connections.keys(), 'o')
self.PropertiesChanged({ 'connections': self.props['Connections'] }) self.__notify('Connections')
@dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='s', out_signature='') @dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='s', out_signature='')
def SaveHostname(self, hostname): def SaveHostname(self, hostname):
@@ -1130,21 +1129,13 @@ class Settings(dbus.service.Object):
if hostname.find('.') == -1: if hostname.find('.') == -1:
raise InvalidHostnameException() raise InvalidHostnameException()
self.props['Hostname'] = hostname self.props['Hostname'] = hostname
self.PropertiesChanged({ 'hostname': hostname }) self.__notify('Hostname')
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}') def __get_props(self):
def GetAll(self, iface):
if iface != IFACE_SETTINGS:
raise UnknownInterfaceException()
return self.props return self.props
@dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') def __notify(self, propname):
def Get(self, iface, name): self._dbus_property_notify(IFACE_SETTINGS, propname)
if iface != IFACE_SETTINGS:
raise UnknownInterfaceException()
if not name in self.props.keys():
raise UnknownPropertyException()
return self.props[name]
@dbus.service.signal(IFACE_SETTINGS, signature='o') @dbus.service.signal(IFACE_SETTINGS, signature='o')
def NewConnection(self, path): def NewConnection(self, path):