Factored out the common API options.
[cnetworkmanager.git] / nm-mock
blobc1e002be2cf5bdca0b61fd6aa49901a53e419799
1 #!/usr/bin/python
3 # TODO: adapt nm lib to connect to session bus too, and try this mock
5 import dbus
6 import dbus.service
7 import _dbus_bindings
8 from dbus.mainloop.glib import DBusGMainLoop
9 import gobject
11 import networkmanager
12 import networkmanager.device
13 from networkmanager.base import Bus
15 class DBusMock(dbus.service.Object):
16 def __init__(self, bus, opath, bus_name=None):
17 print "INIT:", self.__class__, opath
18 if bus_name != None:
19 NEE = dbus.exceptions.NameExistsException
20 try:
21 bus_name = dbus.service.BusName(bus_name, bus,
22 replace_existing=True,
23 do_not_queue=True)
24 except NEE:
25 raise NEE("%s (pid %d)" % (bus_name, self.service_pid(bus_name)))
26 super(DBusMock, self).__init__(bus, opath, bus_name)
27 self.properties = {}
29 @staticmethod
30 def service_pid(name):
31 bus = Bus()
32 DBS = 'org.freedesktop.DBus'
33 DBI = DBS
34 dbo = bus.get_object(DBS, '/')
35 dbi = dbus.Interface(dbo, DBI)
36 owner = dbi.GetNameOwner(name)
37 pid = dbi.GetConnectionUnixProcessID(owner)
38 return pid
41 @dbus.service.method(dbus_interface="org.freedesktop.DBus.Properties",
42 in_signature="ss", out_signature="v")
43 def Get(self, interface, prop_name):
44 # real NM ignores the interface too
45 value = self.properties.get(prop_name, 42)
46 print "Get", self.__dbus_object_path__, prop_name, "->", value
47 return value
49 class NetworkManagerMock(DBusMock):
50 def __init__(self, bus):
51 opath = "/org/freedesktop/NetworkManager"
52 bus_name = "org.freedesktop.NetworkManager"
53 super(NetworkManagerMock, self).__init__(bus, opath, bus_name)
55 self.properties.update({
56 "State": networkmanager.NetworkManager.State.CONNECTED,
57 "ActiveConnections": ["/AC1"],
61 @dbus.service.method(dbus_interface="org.freedesktop.NetworkManager",
62 in_signature="", out_signature="ao")
63 def GetDevices(self):
64 return ["/D1", "/D5"]
66 class NetworkManagerSettingsMock(DBusMock):
67 def __init__(self, bus):
68 opath = "/org/freedesktop/NetworkManagerSettings"
69 bus_name = "org.freedesktop.NetworkManagerUserSettings"
70 super(NetworkManagerSettingsMock, self).__init__(bus, opath, bus_name)
72 @dbus.service.method(dbus_interface="org.freedesktop.NetworkManagerSettings",
73 in_signature="", out_signature="ao")
74 def ListConnections(self):
75 return ["/C1", "/C2"]
77 class ConnectionMock(DBusMock):
78 def __init__(self, bus, opath):
79 super(ConnectionMock, self).__init__(bus, opath)
81 @dbus.service.method(dbus_interface="org.freedesktop.NetworkManagerSettings.Connection",
82 in_signature="", out_signature="a{sa{sv}}")
83 def GetSettings(self):
84 return {
85 "connection": {
86 "id": "mockid",
87 "type": "mocktype"
89 "section1": {
90 "key1": "value1",
91 "key2": "value2",
93 "section2": {
94 "key3": "value4",
95 "key4": "value4",
100 class DeviceMock(DBusMock):
101 def __init__(self, bus, opath):
102 super(DeviceMock, self).__init__(bus, opath)
104 self.properties.update({
105 "Udi": "/hal/udi",
106 "Driver": "mock driver",
107 "HwAddress": "11:22:33:44:55:66",
108 "Ip4Config": "/IC1",
111 class WiredDeviceMock(DeviceMock):
112 def __init__(self, bus, opath):
113 super(WiredDeviceMock, self).__init__(bus, opath)
115 self.properties.update({
116 "DeviceType": networkmanager.Device.DeviceType.ETHERNET,
117 "Interface": "emock0",
120 class WirelessDeviceMock(DeviceMock):
121 def __init__(self, bus, opath):
122 super(WirelessDeviceMock, self).__init__(bus, opath)
124 self.properties.update({
125 "DeviceType": networkmanager.Device.DeviceType.WIRELESS,
126 "ActiveAccessPoint": "/AP1",
127 "Interface": "wmock0",
130 @dbus.service.method(dbus_interface="org.freedesktop.NetworkManager.Device.Wireless",
131 in_signature="", out_signature="ao")
132 def GetAccessPoints(self):
133 return ["/AP1", "/AP2"]
135 class ActiveConnectionMock(DBusMock):
136 def __init__(self, bus, opath):
137 super(ActiveConnectionMock, self).__init__(bus, opath)
139 self.properties.update({
140 "ServiceName": "org.freedesktop.NetworkManagerUserSettings",
141 "Connection": "/C1",
142 "SpecificObject": "/AP1",
143 "Devices": ["/D5"],
146 class AccessPointMock(DBusMock):
147 def __init__(self, bus, opath):
148 super(AccessPointMock, self).__init__(bus, opath)
150 self.properties.update({
151 "Ssid": dbus.ByteArray("mock-ssid"),
152 "HwAddress": "11:22:33:44:55:66",
155 class Ip4ConfigMock(DBusMock):
156 def __init__(self, bus, opath):
157 super(Ip4ConfigMock, self).__init__(bus, opath)
159 self.properties.update({
160 "Addresses": [(42, 43, 44)],
161 "Nameservers": [42, 43, 44],
162 "Domains": ["mockdom1", "mockdom2"],
163 "Routes": dbus.Array([], signature="au"), # format? fix nmcli
166 if __name__ == "__main__":
167 DBusGMainLoop(set_as_default=True)
169 networkmanager.base.NM_BUS = dbus.SessionBus()
170 bus = Bus()
171 nmm = NetworkManagerMock(bus)
172 nms = NetworkManagerSettingsMock(bus)
173 c1 = ConnectionMock(bus, "/C1")
174 c2 = ConnectionMock(bus, "/C2")
175 ac = ActiveConnectionMock(bus, "/AC1")
176 d1 = WiredDeviceMock(bus, "/D1")
177 d5 = WirelessDeviceMock(bus, "/D5")
178 ap1 = AccessPointMock(bus, "/AP1")
179 ap2 = AccessPointMock(bus, "/AP2")
180 ic1 = Ip4ConfigMock(bus, "/IC1")
181 loop = gobject.MainLoop()
182 loop.run()