Fix connection settings Updated signal emitted by wrong object #7

Closed
wants to merge 2 commits into
from
Jump to file or symbol
Failed to load files and symbols.
+71 −3
Split
@@ -160,7 +160,10 @@ def activate_connection(self, conn, dev, ap):
count += 1
state = dbus.UInt32(NMActiveConnectionState.NM_ACTIVE_CONNECTION_STATE_ACTIVATED)
- active_conn = dbus.ObjectPath(AddActiveConnection(self, [dev], conn, ap, str(count), state))
+ devices = []
+ if str(dev) != '/':
+ devices.append(dev)
+ active_conn = dbus.ObjectPath(AddActiveConnection(self, devices, conn, ap, str(count), state))
return active_conn
@@ -757,8 +760,8 @@ def ConnectionUpdate(self, connection_path, settings):
conn_obj.Set(CSETTINGS_IFACE, 'Settings', conn_settings)
- settings_obj.EmitSignal(CSETTINGS_IFACE, 'PropertiesChanged', 'a{sv}', [changed_settings])
- settings_obj.EmitSignal(CSETTINGS_IFACE, 'Updated', '', [])
+ conn_obj.EmitSignal(CSETTINGS_IFACE, 'PropertiesChanged', 'a{sv}', [changed_settings])
+ conn_obj.EmitSignal(CSETTINGS_IFACE, 'Updated', '', [])
auto_connect = False
if 'autoconnect' in settings['connection']:
@@ -19,6 +19,8 @@
import os
import re
+from gi.repository import GLib
+
from dbusmock.templates.networkmanager import DeviceState
from dbusmock.templates.networkmanager import NM80211ApSecurityFlags
from dbusmock.templates.networkmanager import InfrastructureMode
@@ -389,6 +391,69 @@ def test_add_remove_settings(self):
connectionC = self.settings.AddConnection(connection)
self.assertEqual(self.settings.ListConnections(), [connectionB, connectionC])
+ def test_add_update_settings(self):
+ connection = {
+ 'connection': {
+ 'timestamp': 1441979296,
+ 'type': 'vpn',
+ 'id': 'a',
+ 'uuid': '11111111-1111-1111-1111-111111111111'
+ },
+ 'vpn': {
+ 'service-type': 'org.freedesktop.NetworkManager.openvpn',
+ 'data': {
+ 'connection-type': 'tls'
+ }
+ },
+ 'ipv4': {
+ 'routes': dbus.Array([], signature='o'),
+ 'never-default': True,
+ 'addresses': dbus.Array([], signature='o'),
+ 'dns': dbus.Array([], signature='o'),
+ 'method': 'auto'
+ },
+ 'ipv6': {
+ 'addresses': dbus.Array([], signature='o'),
+ 'ip6-privacy': 0,
+ 'dns': dbus.Array([], signature='o'),
+ 'never-default': True,
+ 'routes': dbus.Array([], signature='o'),
+ 'method': 'auto'
+ }
+ }
+
+ connectionA = self.settings.AddConnection(connection)
+ self.assertEqual(self.settings.ListConnections(), [connectionA])
+
+ connectionA_i = dbus.Interface(
+ self.dbus_con.get_object(MAIN_IFACE, connectionA), CSETTINGS_IFACE)
+ connection['connection']['id'] = 'b'
+
+ def do_update():
+ connectionA_i.Update(connection)
+
+ caught = []
+ ml = GLib.MainLoop()
+
+ def catch(*args, **kwargs):
+ if (kwargs['interface'] == 'org.freedesktop.NetworkManager.Settings.Connection' and
+ kwargs['member'] == 'Updated'):
+ caught.append(kwargs['path'])
+ ml.quit()
+
+ self.dbus_con.add_signal_receiver(catch,
+ interface_keyword='interface',
+ path_keyword='path',
+ member_keyword='member')
+
+ GLib.timeout_add(200, do_update)
+ # ensure that the loop quits even when we don't catch anything
+ GLib.timeout_add(3000, ml.quit)
+ ml.run()
+
+ self.assertEqual(connectionA_i.GetSettings(), connection)
+ self.assertEqual(caught, [connectionA])
+
if __name__ == '__main__':
unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, verbosity=2))