Merge lp:~diegosarmentero/ubuntuone-client/network-detect into lp:ubuntuone-client
- network-detect
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Natalia Bidart |
Approved revision: | 1187 |
Merged at revision: | 1196 |
Proposed branch: | lp:~diegosarmentero/ubuntuone-client/network-detect |
Merge into: | lp:ubuntuone-client |
Diff against target: |
754 lines (+37/-514) 12 files modified
tests/platform/linux/test_dbus.py (+5/-39) tests/platform/windows/test_ipc.py (+0/-4) tests/platform/windows/test_network_manager.py (+0/-71) tests/syncdaemon/test_action_queue.py (+1/-104) tests/syncdaemon/test_interaction_interfaces.py (+16/-1) tests/syncdaemon/test_states.py (+0/-52) ubuntuone/platform/__init__.py (+1/-0) ubuntuone/platform/linux/dbus_interface.py (+0/-67) ubuntuone/platform/windows/ipc.py (+0/-15) ubuntuone/platform/windows/network_manager.py (+0/-160) ubuntuone/syncdaemon/interaction_interfaces.py (+13/-0) ubuntuone/syncdaemon/states.py (+1/-1) |
To merge this branch: | bzr merge lp:~diegosarmentero/ubuntuone-client/network-detect |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Natalia Bidart (community) | Approve | ||
Manuel de la Peña (community) | Approve | ||
Review via email: mp+88545@code.launchpad.net |
Commit message
- The current network manager is now calling network_connected properly (LP: #885292).
Description of the change
To test it IRL you can execute syncdaemon, and you can see the logs for online/offline if you connect and disconnect the computer.
Manuel de la Peña (mandel) wrote : | # |
I'm getting the following when I run the tests on windows:
C:\Users\
Checking if python 2.7 is in the system
ERROR: The system was unable to find the specified registry key or value.
Checking if python 2.6 is in the system
ERROR: The system was unable to find the specified registry key or value.
Checking if python 2.7 32 is in the system
Python found, building auto-generated modules...
running build
Compiled data\qt\
Compiled data\qt\
_ui.py
Compiled data\qt\
py
Compiled data\qt\
Compiled data\qt\
py
Compiled data\qt\
Compiled data\qt\
Compiled data\qt\
running build_py
creating build
creating build\lib
creating build\lib\
copying ubuntu_
copying ubuntu_
copying ubuntu_
copying ubuntu_
creating build\lib\
copying ubuntu_
copying ubuntu_
copying ubuntu_
copying ubuntu_
copying ubuntu_
creating build\lib\
copying ubuntu_
copying ubuntu_
copying ubuntu_
creating build\lib\
copying ubuntu_
copying ubuntu_
copying ubuntu_
creating build\lib\
copying ubuntu_
copying ubuntu_
copying ubuntu_
creating build\lib\
copying ubuntu_
copying ubuntu_
copying ubuntu_
creating build\lib\
copying ubuntu_
copying ubuntu_
copying ubuntu_
copying ubuntu_
copying ubuntu_
copying ubuntu_
copying ubun...
Manuel de la Peña (mandel) wrote : | # |
Ag, sorry wrong branch :(
Natalia Bidart (nataliabidart) wrote : | # |
* This import:
from ubuntu_
has to be in the same group as:
from twisted.internet import defer
from ubuntuone.
Same for from ubuntu_
* "# This imports needs to be here in order to belongs to this namespace" -> "# These imports needs to be here in order to belongs to this namespace"
* Since now NetworkManagerState is multiplatform, you should move it to intercation_
Manuel de la Peña (mandel) wrote : | # |
This is for this branch:
C:\Users\
>> test.out
ERROR: The system was unable to find the specified registry key or value.
ERROR: The system was unable to find the specified registry key or value.
Traceback (most recent call last):
File "C:\Python27\
main()
File "C:\Python27\
suite = trial_runner.
File "C:\Python27\
config[
File "C:\Python27\
module_suite = self._load_
File "C:\Python27\
module = __import__(modpath, None, None, [""])
File "C:\Users\
\platform\
from ubuntuone.
ImportError: No module named network_manager
That is when trying to run the tests on Windows.
Natalia Bidart (nataliabidart) wrote : | # |
Also, when trying to run tests on windows I'm getting:
File "E:\client\
ger.py", line 23, in <module>
from ubuntuone.
ImportError: No module named network_manager
- 1180. By Diego Sarmentero
-
Merge.
Move Network Manager State to interaction interfaces. - 1181. By Diego Sarmentero
-
removed test network manager file.
Manuel de la Peña (mandel) wrote : | # |
All tests passed on Linux P and Windows.
Natalia Bidart (nataliabidart) wrote : | # |
Can you please also remove this bit from ubuntuone/
# remove the NM's StateChanged signal receiver
The rest looks good, works OK on linux, and I'm setting up my windows VM to test it IRL there.
Diego Sarmentero (diegosarmentero) wrote : | # |
> Can you please also remove this bit from
> ubuntuone/
>
> # remove the NM's StateChanged signal receiver
> self.system_
> signal_
> dbus_interface=
> path='/
>
> The rest looks good, works OK on linux, and I'm setting up my windows VM to
> test it IRL there.
Done!
- 1182. By Diego Sarmentero
-
merge
- 1183. By Diego Sarmentero
-
merge
- 1184. By Diego Sarmentero
-
Removing dbus code for network detect.
Natalia Bidart (nataliabidart) wrote : | # |
Hum, I did not notice this before, but there are still some NM code:
nessita@
contrib/
contrib/
tests/syncdaemo
tests/platform/
tests/platform/
tests/platform/
tests/platform/
tests/platform/
tests/platform/
tests/platform/
tests/platform/
tests/platform/
tests/platform/
tests/platform/
ubuntuone/
ubuntuone/
ubuntuone/
ubuntuone/
Can you also remove those?
- 1185. By Diego Sarmentero
-
merge
- 1186. By Diego Sarmentero
-
run-tests.bat reverted
- 1187. By Diego Sarmentero
-
Remove some references to NetworkManager
Natalia Bidart (nataliabidart) wrote : | # |
Looks good. Still we have a FakedNetworkManager in test_dbus, so I filled bug #935389 so we can land this branch.
Tested IRL, works as expected!
Preview Diff
1 | === modified file 'tests/platform/linux/test_dbus.py' |
2 | --- tests/platform/linux/test_dbus.py 2011-11-30 19:30:00 +0000 |
3 | +++ tests/platform/linux/test_dbus.py 2012-02-10 13:42:19 +0000 |
4 | @@ -39,8 +39,8 @@ |
5 | DBUS_IFACE_FOLDERS_NAME, |
6 | DBUS_IFACE_PUBLIC_FILES_NAME, |
7 | DBUS_IFACE_LAUNCHER_NAME, |
8 | - NM_STATE_CONNECTED_GLOBAL, |
9 | - NM_STATE_DISCONNECTED, |
10 | +# NM_STATE_CONNECTED_GLOBAL, |
11 | +# NM_STATE_DISCONNECTED, |
12 | ) |
13 | from ubuntuone.platform.tools.linux import DBusClient |
14 | |
15 | @@ -76,11 +76,11 @@ |
16 | |
17 | def emit_connected(self): |
18 | """ Emits the signal StateCganged(3). """ |
19 | - self.StateChanged(NM_STATE_CONNECTED_GLOBAL) |
20 | + self.StateChanged(70) |
21 | |
22 | def emit_disconnected(self): |
23 | """ Emits the signal StateCganged(4). """ |
24 | - self.StateChanged(NM_STATE_DISCONNECTED) |
25 | + self.StateChanged(20) |
26 | |
27 | @dbus.service.method(dbus.PROPERTIES_IFACE, |
28 | in_signature='ss', out_signature='v', |
29 | @@ -95,7 +95,7 @@ |
30 | @dbus.service.method('org.freedesktop.NetworkManager') |
31 | def state(self): |
32 | """Fake the state.""" |
33 | - return NM_STATE_CONNECTED_GLOBAL |
34 | + return 70 |
35 | |
36 | # pylint: enable-msg=C0103 |
37 | |
38 | @@ -208,40 +208,6 @@ |
39 | DBusTwistedTestCase = IPCTestCase # API compatibility |
40 | |
41 | |
42 | -class NetworkManagerIntegrationTests(IPCTestCase): |
43 | - """Test case for our NetworkManager integration.""" |
44 | - |
45 | - def test_nm_signals(self): |
46 | - """Test that NM signals are received and handled properly.""" |
47 | - result = None |
48 | - d = defer.Deferred() |
49 | - |
50 | - class Listener(object): |
51 | - """Helper class.""" |
52 | - |
53 | - # class-closure, cannot use self, pylint: disable=E0213 |
54 | - def handle_SYS_NET_CONNECTED(innerself): |
55 | - self.nm.emit_disconnected() |
56 | - |
57 | - def handle_SYS_NET_DISCONNECTED(innerself): |
58 | - self.assertTrue(result) |
59 | - |
60 | - listener = Listener() |
61 | - self.event_q.subscribe(listener) |
62 | - |
63 | - def empty_queue_cb(): |
64 | - d.callback(True) |
65 | - |
66 | - def callback(result): |
67 | - self.event_q.unsubscribe(listener) |
68 | - self.event_q.remove_empty_event_queue_callback(empty_queue_cb) |
69 | - d.addCallback(callback) |
70 | - |
71 | - self.nm.emit_connected() |
72 | - self.event_q.add_empty_event_queue_callback(empty_queue_cb) |
73 | - return d |
74 | - |
75 | - |
76 | class StatusTestCase(IPCTestCase): |
77 | """Tests for the Status exposed object.""" |
78 | |
79 | |
80 | === modified file 'tests/platform/windows/test_ipc.py' |
81 | --- tests/platform/windows/test_ipc.py 2011-10-28 19:17:47 +0000 |
82 | +++ tests/platform/windows/test_ipc.py 2012-02-10 13:42:19 +0000 |
83 | @@ -652,10 +652,6 @@ |
84 | 'Remote object should not be None') |
85 | self.assertIsInstance(remote, RemoteReference) |
86 | |
87 | - def test_daemonized(self): |
88 | - """Check that the NM thread won't block the process.""" |
89 | - self.assertTrue(self.interface.network_manager_thread.daemon) |
90 | - |
91 | |
92 | class IPCPortTestCase(TestCase): |
93 | """Tests for the ipc port setup.""" |
94 | |
95 | === removed file 'tests/platform/windows/test_network_manager.py' |
96 | --- tests/platform/windows/test_network_manager.py 2011-10-28 18:43:23 +0000 |
97 | +++ tests/platform/windows/test_network_manager.py 1970-01-01 00:00:00 +0000 |
98 | @@ -1,71 +0,0 @@ |
99 | -# -*- coding: utf-8 -*- |
100 | -# |
101 | -# Author: Manuel de la Pena<manuel@canonical.com> |
102 | -# |
103 | -# Copyright 2011 Canonical Ltd. |
104 | -# |
105 | -# This program is free software: you can redistribute it and/or modify it |
106 | -# under the terms of the GNU General Public License version 3, as published |
107 | -# by the Free Software Foundation. |
108 | -# |
109 | -# This program is distributed in the hope that it will be useful, but |
110 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
111 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
112 | -# PURPOSE. See the GNU General Public License for more details. |
113 | -# |
114 | -# You should have received a copy of the GNU General Public License along |
115 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
116 | - |
117 | -"""Tests for the network manager.""" |
118 | - |
119 | -from mocker import MockerTestCase |
120 | - |
121 | -from ubuntuone.platform.windows.network_manager import NetworkManager |
122 | - |
123 | - |
124 | -class TestNetworkManager(MockerTestCase): |
125 | - """Test he Network Manager.""" |
126 | - |
127 | - def setUp(self): |
128 | - super(TestNetworkManager, self).setUp() |
129 | - self.connection_info = self.mocker.mock() |
130 | - self.connection_no_info = self.mocker.mock() |
131 | - self.disconnected = self.mocker.mock() |
132 | - self.manager = NetworkManager(self.connection_no_info, |
133 | - self.connection_info, self.disconnected) |
134 | - |
135 | - def test_connection_made(self): |
136 | - """Ensure db is called.""" |
137 | - self.connection_info() |
138 | - self.mocker.replay() |
139 | - self.manager.ConnectionMade() |
140 | - |
141 | - def test_connection_made_no_cb(self): |
142 | - """Ensure db is called.""" |
143 | - self.manager.connected_cb_info = None |
144 | - self.mocker.replay() |
145 | - self.manager.ConnectionMade() |
146 | - |
147 | - def test_connection_made_no_info(self): |
148 | - """Ensure db is called.""" |
149 | - self.connection_no_info() |
150 | - self.mocker.replay() |
151 | - self.manager.ConnectionMadeNoQOCInfo() |
152 | - |
153 | - def test_connection_made_no_info_no_cb(self): |
154 | - """Ensure db is called.""" |
155 | - self.manager.connected_cb = None |
156 | - self.mocker.replay() |
157 | - self.manager.ConnectionMadeNoQOCInfo() |
158 | - |
159 | - def test_disconnection(self): |
160 | - """Ensure db is called.""" |
161 | - self.disconnected() |
162 | - self.mocker.replay() |
163 | - self.manager.ConnectionLost() |
164 | - |
165 | - def test_disconnection_no_cb(self): |
166 | - """Ensure db is called.""" |
167 | - self.manager.disconnected_cb = None |
168 | - self.mocker.replay() |
169 | - self.manager.ConnectionLost() |
170 | |
171 | === modified file 'tests/syncdaemon/test_action_queue.py' |
172 | --- tests/syncdaemon/test_action_queue.py 2012-02-06 15:32:28 +0000 |
173 | +++ tests/syncdaemon/test_action_queue.py 2012-02-10 13:42:19 +0000 |
174 | @@ -58,7 +58,7 @@ |
175 | protocol_pb2, |
176 | request, |
177 | ) |
178 | -from ubuntuone.syncdaemon import states, interfaces, config |
179 | +from ubuntuone.syncdaemon import interfaces, config |
180 | from ubuntuone.syncdaemon import action_queue |
181 | from ubuntuone.syncdaemon.action_queue import ( |
182 | ActionQueue, ActionQueueCommand, ChangePublicAccess, CreateUDF, |
183 | @@ -1295,109 +1295,6 @@ |
184 | "host 1.2.3.4", "port 4321")) |
185 | |
186 | |
187 | -class NetworkmanagerTestCase(FactoryBaseTestCase): |
188 | - """Base test case generating a connected factory.""" |
189 | - |
190 | - timeout = 15 |
191 | - |
192 | - @defer.inlineCallbacks |
193 | - def setUp(self): |
194 | - """Init.""" |
195 | - yield super(NetworkmanagerTestCase, self).setUp() |
196 | - self.action_queue.event_queue.push('SYS_NET_CONNECTED') |
197 | - self.main.start() |
198 | - |
199 | - @defer.inlineCallbacks |
200 | - def test_wrong_disconnect(self): |
201 | - """Test factory's connection when SYS_NET_DISCONNECTED.""" |
202 | - |
203 | - d1 = self.main.wait_for('SYS_CONNECTION_MADE') |
204 | - d2 = self.main.wait_for('SYS_CONNECTION_LOST') |
205 | - |
206 | - self.server = self._start_sample_webserver() |
207 | - self.user_connect() |
208 | - yield d1 |
209 | - |
210 | - self.action_queue.event_queue.push('SYS_NET_DISCONNECTED') |
211 | - yield d2 |
212 | - |
213 | - @defer.inlineCallbacks |
214 | - def test_disconnect_twice(self): |
215 | - """Test connection when SYS_NET_DISCONNECTED is received twice.""" |
216 | - |
217 | - d1 = self.main.wait_for('SYS_CONNECTION_MADE') |
218 | - d2 = self.main.wait_for('SYS_CONNECTION_LOST') |
219 | - |
220 | - self.server = self._start_sample_webserver() |
221 | - self.user_connect() |
222 | - yield d1 |
223 | - |
224 | - self.action_queue.event_queue.push('SYS_NET_DISCONNECTED') |
225 | - yield d2 |
226 | - |
227 | - self.action_queue.event_queue.events = [] |
228 | - self.action_queue.event_queue.push('SYS_NET_DISCONNECTED') |
229 | - self.assertEqual([('SYS_NET_DISCONNECTED', {})], |
230 | - self.action_queue.event_queue.events, |
231 | - 'No new events after a misplaced SYS_NET_DISCONNECTED') |
232 | - |
233 | - @defer.inlineCallbacks |
234 | - def test_net_connected_if_already_connected(self): |
235 | - """Test connection when SYS_NET_CONNECTED is received twice.""" |
236 | - |
237 | - d1 = self.main.wait_for('SYS_CONNECTION_MADE') |
238 | - |
239 | - self.server = self._start_sample_webserver() |
240 | - self.user_connect() |
241 | - yield d1 |
242 | - |
243 | - self.action_queue.event_queue.events = [] |
244 | - self.action_queue.event_queue.push('SYS_NET_CONNECTED') |
245 | - self.assertEqual([('SYS_NET_CONNECTED', {})], |
246 | - self.action_queue.event_queue.events, |
247 | - 'No new events after a misplaced SYS_NET_CONNECTED') |
248 | - |
249 | - @defer.inlineCallbacks |
250 | - def test_messy_mix(self): |
251 | - """Test connection when a messy mix of events is received.""" |
252 | - orig_waiting = states.MAX_WAITING |
253 | - states.MAX_WAITING = 1 |
254 | - |
255 | - self.action_queue.event_queue.events = [] |
256 | - self.server = self._start_sample_webserver() |
257 | - |
258 | - conn_made = self.main.wait_for('SYS_CONNECTION_MADE') |
259 | - self.user_connect() |
260 | - yield conn_made |
261 | - |
262 | - events = ['SYS_NET_CONNECTED', 'SYS_NET_DISCONNECTED', |
263 | - 'SYS_NET_CONNECTED', 'SYS_NET_CONNECTED', |
264 | - 'SYS_NET_DISCONNECTED', 'SYS_NET_DISCONNECTED', |
265 | - 'SYS_NET_CONNECTED'] |
266 | - |
267 | - for i in events: |
268 | - self.action_queue.event_queue.push(i) |
269 | - |
270 | - yield self.main.wait_for_nirvana() |
271 | - |
272 | - expected = ['SYS_NET_CONNECTED', # from the DBus fake NetworkManager |
273 | - 'SYS_NET_CONNECTED', 'SYS_NET_DISCONNECTED', |
274 | - 'SYS_CONNECTION_LOST', 'SYS_CONNECTION_RETRY', |
275 | - 'SYS_NET_CONNECTED', 'SYS_NET_CONNECTED', |
276 | - 'SYS_CONNECTION_MADE', 'SYS_NET_DISCONNECTED', |
277 | - 'SYS_NET_DISCONNECTED'] |
278 | - |
279 | - avoid = ('SYS_STATE_CHANGED', 'SYS_LOCAL_RESCAN_DONE', |
280 | - 'SYS_PROTOCOL_VERSION_OK', 'SYS_SET_CAPABILITIES_OK', |
281 | - 'SYS_AUTH_OK', 'SYS_SERVER_RESCAN_DONE') |
282 | - actual = [event for (event, kwargs) in |
283 | - self.action_queue.event_queue.events |
284 | - if event not in avoid] |
285 | - self.assertEqual(sorted(expected), sorted(actual)) |
286 | - |
287 | - states.MAX_WAITING = orig_waiting |
288 | - |
289 | - |
290 | class ConnectedBaseTestCase(FactoryBaseTestCase): |
291 | """Base test case generating a connected factory.""" |
292 | |
293 | |
294 | === modified file 'tests/syncdaemon/test_interaction_interfaces.py' |
295 | --- tests/syncdaemon/test_interaction_interfaces.py 2012-01-17 20:00:44 +0000 |
296 | +++ tests/syncdaemon/test_interaction_interfaces.py 2012-02-10 13:42:19 +0000 |
297 | @@ -21,6 +21,7 @@ |
298 | |
299 | from twisted.internet import defer |
300 | from ubuntuone.devtools.handlers import MementoHandler |
301 | +from ubuntu_sso.networkstate import ONLINE |
302 | |
303 | from contrib.testing.testcase import ( |
304 | FakeCommand, |
305 | @@ -2208,7 +2209,21 @@ |
306 | def test_rescan_from_scratch_missing_volume(self): |
307 | """Test for rescan_from_scratch with a non-existing volume.""" |
308 | volume_id = object() |
309 | - self.assertRaises(ValueError, self.sd_obj.rescan_from_scratch, volume_id) |
310 | + self.assertRaises(ValueError, |
311 | + self.sd_obj.rescan_from_scratch, volume_id) |
312 | + |
313 | + def test_network_state_changed_with_connection(self): |
314 | + """Test the network_state changed method with a connection.""" |
315 | + self.sd_obj.network_state_changed(ONLINE) |
316 | + |
317 | + self.assertEqual(self.events, [('SYS_NET_CONNECTED', {})]) |
318 | + |
319 | + def test_network_state_changed_without_connection(self): |
320 | + """Test the network_state changed method without a connection.""" |
321 | + # Sending anything instead of ONLINE should be interpreted as OFFLINE |
322 | + self.sd_obj.network_state_changed(object()) |
323 | + |
324 | + self.assertEqual(self.events, [('SYS_NET_DISCONNECTED', {})]) |
325 | |
326 | def test_network_connected(self): |
327 | """Test the network_connected method.""" |
328 | |
329 | === modified file 'tests/syncdaemon/test_states.py' |
330 | --- tests/syncdaemon/test_states.py 2011-10-27 11:39:43 +0000 |
331 | +++ tests/syncdaemon/test_states.py 2012-02-10 13:42:19 +0000 |
332 | @@ -847,58 +847,6 @@ |
333 | self.assertFalse(self.aq.queue.active) |
334 | |
335 | |
336 | -class TestStateManagerPassToNetworkManager(Base): |
337 | - """All network events should go to NetworkManager.""" |
338 | - |
339 | - @defer.inlineCallbacks |
340 | - def setUp(self): |
341 | - yield super(TestStateManagerPassToNetworkManager, |
342 | - self).setUp() |
343 | - |
344 | - # put a function in the middle to log calls |
345 | - self.called_events = [] |
346 | - orig_on_event = self.sm.connection.on_event |
347 | - def fake_on_event(event): |
348 | - """Log the call and call original.""" |
349 | - self.called_events.append(event) |
350 | - orig_on_event(event) |
351 | - self.sm.connection.on_event = fake_on_event |
352 | - |
353 | - def _test(self, event): |
354 | - """Generic test method.""" |
355 | - cnt = 0 |
356 | - for node in self.sm_nodes_ok: |
357 | - cnt += 1 |
358 | - self.sm.state = node |
359 | - self.sm.handle_default(event) |
360 | - self.assertEqual(self.called_events, [event]*cnt) |
361 | - |
362 | - def test_net_connected(self): |
363 | - """SYS_NET_CONNECTED should go to Connection no matter where.""" |
364 | - self._test('SYS_NET_CONNECTED') |
365 | - |
366 | - def test_user_connect(self): |
367 | - """SYS_USER_CONNECT should go to Connection no matter where.""" |
368 | - self._test('SYS_USER_CONNECT') |
369 | - |
370 | - def test_net_disconnected(self): |
371 | - """SYS_NET_DISCONNECTED should go to Connection no matter where.""" |
372 | - self._test('SYS_NET_DISCONNECTED') |
373 | - |
374 | - def test_user_disconnect(self): |
375 | - """SYS_USER_DISCONNECT should go to Connection no matter where.""" |
376 | - self._test('SYS_USER_DISCONNECT') |
377 | - |
378 | - def test_connection_lost(self): |
379 | - """SYS_CONNECTION_LOST should go to Connection no matter where.""" |
380 | - self._test('SYS_CONNECTION_LOST') |
381 | - |
382 | - def test_handshake_timeout(self): |
383 | - """SYS_HANDSHAKE_TIMEOUT should go to Connection no matter where.""" |
384 | - self._test('SYS_HANDSHAKE_TIMEOUT') |
385 | - |
386 | - |
387 | - |
388 | class TestStateManagerPassToQueueManager(Base): |
389 | """All queue events should go to QueueManager.""" |
390 | |
391 | |
392 | === modified file 'ubuntuone/platform/__init__.py' |
393 | --- ubuntuone/platform/__init__.py 2012-01-25 20:49:55 +0000 |
394 | +++ ubuntuone/platform/__init__.py 2012-02-10 13:42:19 +0000 |
395 | @@ -31,6 +31,7 @@ |
396 | from ubuntuone.platform import linux |
397 | source = linux |
398 | |
399 | +# This imports needs to be here in order to belongs to this namespace |
400 | from ubuntuone.platform import credentials |
401 | from ubuntuone.platform import tools |
402 | |
403 | |
404 | === modified file 'ubuntuone/platform/linux/dbus_interface.py' |
405 | --- ubuntuone/platform/linux/dbus_interface.py 2012-01-02 20:24:31 +0000 |
406 | +++ ubuntuone/platform/linux/dbus_interface.py 2012-02-10 13:42:19 +0000 |
407 | @@ -41,28 +41,6 @@ |
408 | DBUS_IFACE_PUBLIC_FILES_NAME = DBUS_IFACE_NAME + '.PublicFiles' |
409 | DBUS_IFACE_LAUNCHER_NAME = DBUS_IFACE_NAME + '.Launcher' |
410 | |
411 | -# NetworkManager State constants |
412 | -NM_STATE_UNKNOWN = 0 |
413 | -NM_STATE_ASLEEP_OLD = 1 |
414 | -NM_STATE_ASLEEP = 10 |
415 | -NM_STATE_CONNECTING_OLD = 2 |
416 | -NM_STATE_CONNECTING = 40 |
417 | -NM_STATE_CONNECTED_OLD = 3 |
418 | -NM_STATE_CONNECTED_LOCAL = 50 |
419 | -NM_STATE_CONNECTED_SITE = 60 |
420 | -NM_STATE_CONNECTED_GLOBAL = 70 |
421 | -NM_STATE_DISCONNECTED_OLD = 4 |
422 | -NM_STATE_DISCONNECTED = 20 |
423 | - |
424 | -# NM state -> online/offline mapping |
425 | -# Note that the LOCAL and SITE mappings are *not* a typo. Local and site links |
426 | -# are not enough to connect to one.ubuntu.com, so we treat them as if we were |
427 | -# not connected. |
428 | -NM_STATE_ONLINE_EVENTS = [ |
429 | - NM_STATE_CONNECTED_OLD, |
430 | - NM_STATE_CONNECTED_GLOBAL, |
431 | -] |
432 | - |
433 | logger = logging.getLogger("ubuntuone.SyncDaemon.DBus") |
434 | |
435 | |
436 | @@ -859,39 +837,6 @@ |
437 | self.config = Config(self.busName, service) |
438 | self.service = service |
439 | |
440 | - def error_handler(error): |
441 | - """Handle errors from NM.""" |
442 | - logger.error("Error while getting the NetworkManager state %s", |
443 | - error) |
444 | - # If we get an error back from NetworkManager, we should |
445 | - # just try to connect anyway; it probably means that |
446 | - # NetworkManager is down or broken or something. |
447 | - self.connection_state_changed(NM_STATE_CONNECTED_GLOBAL) |
448 | - try: |
449 | - nm = self.system_bus.get_object( |
450 | - 'org.freedesktop.NetworkManager', |
451 | - '/org/freedesktop/NetworkManager', |
452 | - follow_name_owner_changes=True) |
453 | - iface = dbus.Interface(nm, 'org.freedesktop.NetworkManager') |
454 | - except dbus.DBusException, e: |
455 | - if e.get_dbus_name() == \ |
456 | - 'org.freedesktop.DBus.Error.ServiceUnknown': |
457 | - # NetworkManager isn't running. |
458 | - logger.warn("Unable to connect to NetworkManager. " |
459 | - "Assuming we have network.") |
460 | - self.connection_state_changed(NM_STATE_CONNECTED_GLOBAL) |
461 | - else: |
462 | - raise |
463 | - else: |
464 | - iface.state(reply_handler=self.connection_state_changed, |
465 | - error_handler=error_handler) |
466 | - |
467 | - # register a handler to NM StateChanged signal |
468 | - self.system_bus.add_signal_receiver(self.connection_state_changed, |
469 | - signal_name='StateChanged', |
470 | - dbus_interface='org.freedesktop.NetworkManager', |
471 | - path='/org/freedesktop/NetworkManager') |
472 | - |
473 | logger.info('DBusInterface initialized.') |
474 | |
475 | def shutdown(self, with_restart=False): |
476 | @@ -905,11 +850,6 @@ |
477 | self.config.remove_from_connection() |
478 | self.folders.remove_from_connection() |
479 | self.launcher.remove_from_connection() |
480 | - # remove the NM's StateChanged signal receiver |
481 | - self.system_bus.remove_signal_receiver(self.connection_state_changed, |
482 | - signal_name='StateChanged', |
483 | - dbus_interface='org.freedesktop.NetworkManager', |
484 | - path='/org/freedesktop/NetworkManager') |
485 | self.bus.release_name(self.busName.get_name()) |
486 | if with_restart: |
487 | # this is what activate_name_owner boils down to, except that |
488 | @@ -931,10 +871,3 @@ |
489 | not: there is nothing we can do about it. |
490 | """ |
491 | _restart_error_handler = _restart_reply_handler |
492 | - |
493 | - def connection_state_changed(self, state): |
494 | - """Push a connection state changed event to the Event Queue.""" |
495 | - if state in NM_STATE_ONLINE_EVENTS: |
496 | - self.service.network_connected() |
497 | - else: |
498 | - self.service.network_disconnected() |
499 | |
500 | === modified file 'ubuntuone/platform/windows/ipc.py' |
501 | --- ubuntuone/platform/windows/ipc.py 2012-01-03 12:40:04 +0000 |
502 | +++ ubuntuone/platform/windows/ipc.py 2012-02-10 13:42:19 +0000 |
503 | @@ -21,7 +21,6 @@ |
504 | |
505 | from functools import wraps |
506 | from collections import defaultdict |
507 | -from threading import Thread |
508 | |
509 | from twisted.internet import defer, reactor |
510 | from twisted.spread.pb import ( |
511 | @@ -38,7 +37,6 @@ |
512 | ActivationInstance, |
513 | AlreadyStartedError, |
514 | ) |
515 | -from ubuntuone.platform.windows.network_manager import NetworkManager |
516 | |
517 | logger = logging.getLogger("ubuntuone.SyncDaemon.Pb") |
518 | LOCALHOST = "127.0.0.1" |
519 | @@ -933,19 +931,6 @@ |
520 | self.factory = PBServerFactory(self) |
521 | self.listener = ipc_server_listen(self.factory) |
522 | |
523 | - # register to future network changes |
524 | - self.network_manager = NetworkManager( |
525 | - connected_cb=service.network_connected, |
526 | - disconnected_cb=service.network_disconnected) |
527 | - self.network_manager_thread = Thread( |
528 | - target=self.network_manager.register, name='Network changes') |
529 | - self.network_manager_thread.daemon = True |
530 | - self.network_manager_thread.start() |
531 | - |
532 | - # XXX: the current network manager is not calling network_connected |
533 | - # for now, let's fake it |
534 | - service.network_connected() |
535 | - |
536 | logger.info('IPC initialized.') |
537 | |
538 | def shutdown(self, with_restart=False): |
539 | |
540 | === removed file 'ubuntuone/platform/windows/network_manager.py' |
541 | --- ubuntuone/platform/windows/network_manager.py 2011-10-14 20:02:23 +0000 |
542 | +++ ubuntuone/platform/windows/network_manager.py 1970-01-01 00:00:00 +0000 |
543 | @@ -1,160 +0,0 @@ |
544 | -# -*- coding: utf-8 -*- |
545 | -# |
546 | -# Author: Manuel de la Pena<manuel@canonical.com> |
547 | -# |
548 | -# Copyright 2011 Canonical Ltd. |
549 | -# |
550 | -# This program is free software: you can redistribute it and/or modify it |
551 | -# under the terms of the GNU General Public License version 3, as published |
552 | -# by the Free Software Foundation. |
553 | -# |
554 | -# This program is distributed in the hope that it will be useful, but |
555 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
556 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
557 | -# PURPOSE. See the GNU General Public License for more details. |
558 | -# |
559 | -# You should have received a copy of the GNU General Public License along |
560 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
561 | -"""Implementation of a Network Mnager using ISesNework in Python.""" |
562 | -import logging |
563 | - |
564 | -import pythoncom |
565 | - |
566 | -from win32com.server.policy import DesignatedWrapPolicy |
567 | -from win32com.client import Dispatch |
568 | - |
569 | -# set te logging to store the data in the ubuntuone folder |
570 | -logger = logging.getLogger('ubuntuone.platform.windows.NetworkManager') |
571 | - |
572 | -## from EventSys.h |
573 | -PROGID_EventSystem = "EventSystem.EventSystem" |
574 | -PROGID_EventSubscription = "EventSystem.EventSubscription" |
575 | - |
576 | -# SENS (System Event Notification Service) values for the events, |
577 | -# this events contain the uuid of the event, the name of the event to be used |
578 | -# as well as the method name of the method in the ISesNetwork interface that |
579 | -# will be executed for the event. |
580 | -# For more ingo look at: |
581 | -# http://msdn.microsoft.com/en-us/library/aa377384(v=vs.85).aspx |
582 | - |
583 | -SUBSCRIPTION_NETALIVE = ('{cd1dcbd6-a14d-4823-a0d2-8473afde360f}', |
584 | - 'UbuntuOne Network Alive', |
585 | - 'ConnectionMade') |
586 | - |
587 | -SUBSCRIPTION_NETALIVE_NOQOC = ('{a82f0e80-1305-400c-ba56-375ae04264a1}', |
588 | - 'UbuntuOne Net Alive No Info', |
589 | - 'ConnectionMadeNoQOCInfo') |
590 | - |
591 | -SUBSCRIPTION_NETLOST = ('{45233130-b6c3-44fb-a6af-487c47cee611}', |
592 | - 'UbuntuOne Network Lost', |
593 | - 'ConnectionLost') |
594 | - |
595 | -SUBSCRIPTION_REACH = ('{4c6b2afa-3235-4185-8558-57a7a922ac7b}', |
596 | - 'UbuntuOne Network Reach', |
597 | - 'ConnectionMade') |
598 | - |
599 | -SUBSCRIPTION_REACH_NOQOC = ('{db62fa23-4c3e-47a3-aef2-b843016177cf}', |
600 | - 'UbuntuOne Network Reach No Info', |
601 | - 'ConnectionMadeNoQOCInfo') |
602 | - |
603 | -SUBSCRIPTION_REACH_NOQOC2 = ('{d4d8097a-60c6-440d-a6da-918b619ae4b7}', |
604 | - 'UbuntuOne Network Reach No Info 2', |
605 | - 'ConnectionMadeNoQOCInfo') |
606 | - |
607 | -SUBSCRIPTIONS = [SUBSCRIPTION_NETALIVE, |
608 | - SUBSCRIPTION_NETALIVE_NOQOC, |
609 | - SUBSCRIPTION_NETLOST, |
610 | - SUBSCRIPTION_REACH, |
611 | - SUBSCRIPTION_REACH_NOQOC, |
612 | - SUBSCRIPTION_REACH_NOQOC2] |
613 | - |
614 | -SENSGUID_EVENTCLASS_NETWORK = '{d5978620-5b9f-11d1-8dd2-00aa004abd5e}' |
615 | -SENSGUID_PUBLISHER = "{5fee1bd6-5b9b-11d1-8dd2-00aa004abd5e}" |
616 | - |
617 | -# uuid of the implemented com interface |
618 | -IID_ISesNetwork = '{d597bab1-5b9f-11d1-8dd2-00aa004abd5e}' |
619 | - |
620 | - |
621 | -class NetworkManager(DesignatedWrapPolicy): |
622 | - """Implement ISesNetwork to know about the network status.""" |
623 | - |
624 | - _com_interfaces_ = [IID_ISesNetwork] |
625 | - _public_methods_ = ['ConnectionMade', |
626 | - 'ConnectionMadeNoQOCInfo', |
627 | - 'ConnectionLost'] |
628 | - _reg_clsid_ = '{41B032DA-86B5-4907-A7F7-958E59333010}' |
629 | - _reg_progid_ = "UbuntuOne.NetworkManager" |
630 | - |
631 | - def __init__(self, connected_cb=None, connected_cb_info=None, |
632 | - disconnected_cb=None): |
633 | - self._wrap_(self) |
634 | - self.connected_cb = connected_cb |
635 | - self.connected_cb_info = connected_cb_info |
636 | - self.disconnected_cb = disconnected_cb |
637 | - |
638 | - def ConnectionMade(self, *args): |
639 | - """Tell that the connection is up again.""" |
640 | - logger.info('Connection was made.') |
641 | - if self.connected_cb_info: |
642 | - self.connected_cb_info() |
643 | - |
644 | - def ConnectionMadeNoQOCInfo(self, *args): |
645 | - """Tell that the connection is up again.""" |
646 | - logger.info('Connection was made no info.') |
647 | - if self.connected_cb: |
648 | - self.connected_cb() |
649 | - |
650 | - def ConnectionLost(self, *args): |
651 | - """Tell the connection was lost.""" |
652 | - logger.info('Connection was lost.') |
653 | - if self.disconnected_cb: |
654 | - self.disconnected_cb() |
655 | - |
656 | - def register(self): |
657 | - """Register to listen to network events.""" |
658 | - # call the CoInitialize to allow the registration to run in an other |
659 | - # thread |
660 | - pythoncom.CoInitialize() |
661 | - # interface to be used by com |
662 | - manager_interface = pythoncom.WrapObject(self) |
663 | - event_system = Dispatch(PROGID_EventSystem) |
664 | - # register to listent to each of the events to make sure that |
665 | - # the code will work on all platforms. |
666 | - for current_event in SUBSCRIPTIONS: |
667 | - # create an event subscription and add it to the event |
668 | - # service |
669 | - event_subscription = Dispatch(PROGID_EventSubscription) |
670 | - event_subscription.EventClassId = SENSGUID_EVENTCLASS_NETWORK |
671 | - event_subscription.PublisherID = SENSGUID_PUBLISHER |
672 | - event_subscription.SubscriptionID = current_event[0] |
673 | - event_subscription.SubscriptionName = current_event[1] |
674 | - event_subscription.MethodName = current_event[2] |
675 | - event_subscription.SubscriberInterface = manager_interface |
676 | - event_subscription.PerUser = True |
677 | - # store the event |
678 | - try: |
679 | - event_system.Store(PROGID_EventSubscription, |
680 | - event_subscription) |
681 | - except pythoncom.com_error as e: |
682 | - logger.error( |
683 | - 'Error registering %s to event %s', e, current_event[1]) |
684 | - |
685 | - pythoncom.PumpMessages() |
686 | - |
687 | -if __name__ == '__main__': |
688 | - # Run an expample of the code so that the user can test the code in |
689 | - # real life. |
690 | - from threading import Thread |
691 | - |
692 | - def connected(): |
693 | - print 'Connected' |
694 | - |
695 | - def connected_info(): |
696 | - print 'Connected' |
697 | - |
698 | - def disconnected(): |
699 | - print 'Disconnected' |
700 | - |
701 | - manager = NetworkManager(connected, connected_info, disconnected) |
702 | - p = Thread(target=manager.register) |
703 | - p.start() |
704 | |
705 | === modified file 'ubuntuone/syncdaemon/interaction_interfaces.py' |
706 | --- ubuntuone/syncdaemon/interaction_interfaces.py 2012-01-15 19:31:07 +0000 |
707 | +++ ubuntuone/syncdaemon/interaction_interfaces.py 2012-02-10 13:42:19 +0000 |
708 | @@ -36,6 +36,8 @@ |
709 | |
710 | from twisted.internet import defer |
711 | |
712 | +from ubuntu_sso.networkstate import NetworkManagerState, ONLINE |
713 | + |
714 | from ubuntuone.logger import log_call |
715 | from ubuntuone.platform import credentials, ExternalInterface |
716 | from ubuntuone.storageprotocol import request |
717 | @@ -1150,6 +1152,9 @@ |
718 | super(SyncdaemonService, self).__init__(main, interface) |
719 | |
720 | self.send_events = send_events |
721 | + self.network_manager = NetworkManagerState( |
722 | + result_cb=self.network_state_changed) |
723 | + self.network_manager.find_online_state() |
724 | |
725 | if interface is None: |
726 | self.interface = ExternalInterface(service=self) |
727 | @@ -1283,6 +1288,14 @@ |
728 | self.main.action_q.rescan_from_scratch(volume.volume_id) |
729 | |
730 | @log_call(logger.debug) |
731 | + def network_state_changed(self, state): |
732 | + """Receive the connection state and call the proper function.""" |
733 | + if state == ONLINE: |
734 | + self.network_connected() |
735 | + else: |
736 | + self.network_disconnected() |
737 | + |
738 | + @log_call(logger.debug) |
739 | def network_connected(self): |
740 | """Push the connected event.""" |
741 | self.main.event_q.push('SYS_NET_CONNECTED') |
742 | |
743 | === modified file 'ubuntuone/syncdaemon/states.py' |
744 | --- ubuntuone/syncdaemon/states.py 2011-10-14 20:02:23 +0000 |
745 | +++ ubuntuone/syncdaemon/states.py 2012-02-10 13:42:19 +0000 |
746 | @@ -400,7 +400,7 @@ |
747 | self._state_changed() |
748 | return |
749 | |
750 | - # NetworkManager and User events |
751 | + # User events |
752 | if event in ('SYS_NET_CONNECTED', 'SYS_USER_CONNECT', |
753 | 'SYS_NET_DISCONNECTED', 'SYS_USER_DISCONNECT', |
754 | 'SYS_CONNECTION_LOST', 'SYS_HANDSHAKE_TIMEOUT'): |
I can not branch this branch, I'm getting:
nessita@ dali:~/ canonical/ client$ bzr branch lp:~diegosarmentero/ubuntuone-client/network-detect //bazaar. launchpad. net/~diegosarme ntero/ubuntuone -client/ network- detect/ ": location is a repository. dali:~/ canonical/ client$
bzr: ERROR: Not a branch: "bzr+ssh:
nessita@
Also, this MP is empty, so... can you please check what happened?
Thanks!