doc: Migrating from cnetworkmanager to nmcli
[cnetworkmanager.git] / nm-mock
blob16c4850d9fc810fa231eaba0992dd1961297022f
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
4 # TODO: adapt nm lib to connect to session bus too, and try this mock
6 import dbus
7 import dbus.service
8 import _dbus_bindings
9 from dbus.mainloop.glib import DBusGMainLoop
10 import gobject
12 import networkmanager
13 import networkmanager.device
14 from networkmanager.base import Bus
16 class DBusMock(dbus.service.Object):
17 def __init__(self, bus, opath, bus_name=None):
18 print "INIT:", self.__class__, opath
19 if bus_name != None:
20 NEE = dbus.exceptions.NameExistsException
21 try:
22 bus_name = dbus.service.BusName(bus_name, bus,
23 replace_existing=True,
24 do_not_queue=True)
25 except NEE:
26 raise NEE("%s (pid %d)" % (bus_name, self.service_pid(bus_name)))
27 super(DBusMock, self).__init__(bus, opath, bus_name)
28 self.properties = {}
30 @staticmethod
31 def service_pid(name):
32 bus = Bus()
33 DBS = 'org.freedesktop.DBus'
34 DBI = DBS
35 dbo = bus.get_object(DBS, '/')
36 dbi = dbus.Interface(dbo, DBI)
37 owner = dbi.GetNameOwner(name)
38 pid = dbi.GetConnectionUnixProcessID(owner)
39 return pid
42 @dbus.service.method(dbus_interface="org.freedesktop.DBus.Properties",
43 in_signature="ss", out_signature="v")
44 def Get(self, interface, prop_name):
45 # real NM ignores the interface too
46 value = self.properties.get(prop_name, 42)
47 print "Get", self.__dbus_object_path__, prop_name, "->", value
48 return value
50 class NetworkManagerMock(DBusMock):
51 def __init__(self, bus):
52 opath = "/org/freedesktop/NetworkManager"
53 bus_name = "org.freedesktop.NetworkManager"
54 super(NetworkManagerMock, self).__init__(bus, opath, bus_name)
56 self.properties.update({
57 "State": networkmanager.NetworkManager.State.CONNECTED,
58 "ActiveConnections": ["/AC1"],
62 @dbus.service.method(dbus_interface="org.freedesktop.NetworkManager",
63 in_signature="", out_signature="ao")
64 def GetDevices(self):
65 return ["/D1", "/D5"]
67 class NetworkManagerSettingsMock(DBusMock):
68 def __init__(self, bus):
69 opath = "/org/freedesktop/NetworkManagerSettings"
70 bus_name = "org.freedesktop.NetworkManagerUserSettings"
71 super(NetworkManagerSettingsMock, self).__init__(bus, opath, bus_name)
73 @dbus.service.method(dbus_interface="org.freedesktop.NetworkManagerSettings",
74 in_signature="", out_signature="ao")
75 def ListConnections(self):
76 return ["/C1", "/C2"]
78 class ConnectionMock(DBusMock):
79 def __init__(self, bus, opath):
80 super(ConnectionMock, self).__init__(bus, opath)
82 @dbus.service.method(dbus_interface="org.freedesktop.NetworkManagerSettings.Connection",
83 in_signature="", out_signature="a{sa{sv}}")
84 def GetSettings(self):
85 return {
86 "connection": {
87 # testing non-ASCII output: str vs unicode
88 "id": "moje síť", # "my net"
89 "type": "mocktype"
91 "section1": {
92 "key1": "value1",
93 "key2": "value2",
95 "section2": {
96 "key3": "value4",
97 "key4": "value4",
102 class DeviceMock(DBusMock):
103 def __init__(self, bus, opath):
104 super(DeviceMock, self).__init__(bus, opath)
106 self.properties.update({
107 "Udi": "/hal/udi",
108 "Driver": "mock driver",
109 "HwAddress": "11:22:33:44:55:66",
110 "Ip4Config": "/IC1",
113 class WiredDeviceMock(DeviceMock):
114 def __init__(self, bus, opath):
115 super(WiredDeviceMock, self).__init__(bus, opath)
117 self.properties.update({
118 "DeviceType": networkmanager.Device.DeviceType.ETHERNET,
119 "Interface": "emock0",
122 class WirelessDeviceMock(DeviceMock):
123 def __init__(self, bus, opath):
124 super(WirelessDeviceMock, self).__init__(bus, opath)
126 self.properties.update({
127 "DeviceType": networkmanager.Device.DeviceType.WIRELESS,
128 "ActiveAccessPoint": "/AP1",
129 "Interface": "wmock0",
132 @dbus.service.method(dbus_interface="org.freedesktop.NetworkManager.Device.Wireless",
133 in_signature="", out_signature="ao")
134 def GetAccessPoints(self):
135 return ["/AP1", "/AP2"]
137 class ActiveConnectionMock(DBusMock):
138 def __init__(self, bus, opath):
139 super(ActiveConnectionMock, self).__init__(bus, opath)
141 self.properties.update({
142 "ServiceName": "org.freedesktop.NetworkManagerUserSettings",
143 "Connection": "/C1",
144 "SpecificObject": "/AP1",
145 "Devices": ["/D5"],
148 class AccessPointMock(DBusMock):
149 def __init__(self, bus, opath):
150 super(AccessPointMock, self).__init__(bus, opath)
152 self.properties.update({
153 "Ssid": dbus.ByteArray("mock-ssid"),
154 "HwAddress": "11:22:33:44:55:66",
157 class Ip4ConfigMock(DBusMock):
158 def __init__(self, bus, opath):
159 super(Ip4ConfigMock, self).__init__(bus, opath)
161 self.properties.update({
162 "Addresses": [(42, 43, 44)],
163 "Nameservers": [42, 43, 44],
164 "Domains": ["mockdom1", "mockdom2"],
165 "Routes": dbus.Array([], signature="au"), # format? fix nmcli
168 if __name__ == "__main__":
169 DBusGMainLoop(set_as_default=True)
171 networkmanager.base.NM_BUS = dbus.SessionBus()
172 bus = Bus()
173 nmm = NetworkManagerMock(bus)
174 nms = NetworkManagerSettingsMock(bus)
175 c1 = ConnectionMock(bus, "/C1")
176 c2 = ConnectionMock(bus, "/C2")
177 ac = ActiveConnectionMock(bus, "/AC1")
178 d1 = WiredDeviceMock(bus, "/D1")
179 d5 = WirelessDeviceMock(bus, "/D5")
180 ap1 = AccessPointMock(bus, "/AP1")
181 ap2 = AccessPointMock(bus, "/AP2")
182 ic1 = Ip4ConfigMock(bus, "/IC1")
183 loop = gobject.MainLoop()
184 loop.run()