tests: better implement ActivateConnection in NetworkManager stub service
Transition the states, so that `nmcli con up` can succeed.
This commit is contained in:
@@ -665,8 +665,39 @@ class ActiveConnection(ExportedObj):
|
|||||||
self.vpn = False
|
self.vpn = False
|
||||||
self.master = None
|
self.master = None
|
||||||
|
|
||||||
|
self._activation_id = None
|
||||||
|
|
||||||
self.dbus_interface_add(IFACE_ACTIVE_CONNECTION, self.__get_props, ActiveConnection.PropertiesChanged)
|
self.dbus_interface_add(IFACE_ACTIVE_CONNECTION, self.__get_props, ActiveConnection.PropertiesChanged)
|
||||||
|
|
||||||
|
def _set_state(self, state, reason):
|
||||||
|
self.state = state
|
||||||
|
self._dbus_property_notify(IFACE_ACTIVE_CONNECTION, PAC_STATE)
|
||||||
|
self.StateChanged(state, reason)
|
||||||
|
|
||||||
|
def activation_cancel(self):
|
||||||
|
if self._activation_id is None:
|
||||||
|
return False
|
||||||
|
GLib.source_remove(self._activation_id)
|
||||||
|
self._activation_id = None
|
||||||
|
return True
|
||||||
|
|
||||||
|
def _activation_step2(self):
|
||||||
|
assert self._activation_id is not None
|
||||||
|
self._activation_id = None
|
||||||
|
self._set_state(NM.ActiveConnectionState.ACTIVATED, NM.ActiveConnectionStateReason.UNKNOWN)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _activation_step1(self):
|
||||||
|
assert self._activation_id is not None
|
||||||
|
self._activation_id = GLib.timeout_add(50, self._activation_step2)
|
||||||
|
self.device.set_active_connection(self)
|
||||||
|
self._set_state(NM.ActiveConnectionState.ACTIVATING, NM.ActiveConnectionStateReason.UNKNOWN)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def start_activation(self):
|
||||||
|
assert self._activation_id is None
|
||||||
|
self._activation_id = GLib.timeout_add(50, self._activation_step1)
|
||||||
|
|
||||||
def __get_props(self):
|
def __get_props(self):
|
||||||
props = {}
|
props = {}
|
||||||
props[PAC_CONNECTION] = ExportedObj.to_path(self.conn)
|
props[PAC_CONNECTION] = ExportedObj.to_path(self.conn)
|
||||||
@@ -692,6 +723,10 @@ class ActiveConnection(ExportedObj):
|
|||||||
def PropertiesChanged(self, changed):
|
def PropertiesChanged(self, changed):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@dbus.service.signal(IFACE_ACTIVE_CONNECTION, signature='uu')
|
||||||
|
def StateChanged(self, state, reason):
|
||||||
|
pass
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
IFACE_TEST = 'org.freedesktop.NetworkManager.LibnmGlibTest'
|
IFACE_TEST = 'org.freedesktop.NetworkManager.LibnmGlibTest'
|
||||||
@@ -797,9 +832,7 @@ class NetworkManager(ExportedObj):
|
|||||||
# before returning it. It's the wrong order of what NetworkManager
|
# before returning it. It's the wrong order of what NetworkManager
|
||||||
# would do.
|
# would do.
|
||||||
self.active_connection_remove(ac)
|
self.active_connection_remove(ac)
|
||||||
else:
|
return ExportedObj.to_path(ac)
|
||||||
GLib.timeout_add(50,
|
|
||||||
lambda: device.set_active_connection(ac))
|
|
||||||
|
|
||||||
return ExportedObj.to_path(ac)
|
return ExportedObj.to_path(ac)
|
||||||
|
|
||||||
@@ -807,8 +840,10 @@ class NetworkManager(ExportedObj):
|
|||||||
ac.export()
|
ac.export()
|
||||||
self.active_connections.append(ac)
|
self.active_connections.append(ac)
|
||||||
self._dbus_property_notify(IFACE_NM, PM_ACTIVE_CONNECTIONS)
|
self._dbus_property_notify(IFACE_NM, PM_ACTIVE_CONNECTIONS)
|
||||||
|
ac.start_activation()
|
||||||
|
|
||||||
def active_connection_remove(self, ac):
|
def active_connection_remove(self, ac):
|
||||||
|
ac.activation_cancel()
|
||||||
self.active_connections.remove(ac)
|
self.active_connections.remove(ac)
|
||||||
self._dbus_property_notify(IFACE_NM, PM_ACTIVE_CONNECTIONS)
|
self._dbus_property_notify(IFACE_NM, PM_ACTIVE_CONNECTIONS)
|
||||||
ac.unexport()
|
ac.unexport()
|
||||||
|
Reference in New Issue
Block a user