3 # TODO: adapt nm lib to connect to session bus too, and try this mock
8 from dbus
.mainloop
.glib
import DBusGMainLoop
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
19 NEE
= dbus
.exceptions
.NameExistsException
21 bus_name
= dbus
.service
.BusName(bus_name
, bus
,
22 replace_existing
=True,
25 raise NEE("%s (pid %d)" % (bus_name
, self
.service_pid(bus_name
)))
26 super(DBusMock
, self
).__init
__(bus
, opath
, bus_name
)
30 def service_pid(name
):
32 DBS
= 'org.freedesktop.DBus'
34 dbo
= bus
.get_object(DBS
, '/')
35 dbi
= dbus
.Interface(dbo
, DBI
)
36 owner
= dbi
.GetNameOwner(name
)
37 pid
= dbi
.GetConnectionUnixProcessID(owner
)
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
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")
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
):
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
):
100 class DeviceMock(DBusMock
):
101 def __init__(self
, bus
, opath
):
102 super(DeviceMock
, self
).__init
__(bus
, opath
)
104 self
.properties
.update({
106 "Driver": "mock driver",
107 "HwAddress": "11:22:33:44:55:66",
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",
142 "SpecificObject": "/AP1",
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()
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()