24
from contrib.mocker import MockerTestCase
25
from contrib.testing.testcase import DBusTwistedTestCase, FakeLogin
27
from mocker import MockerTestCase
26
28
from twisted.internet import defer
27
29
from twisted.python.failure import Failure
28
from ubuntuone.syncdaemon import dbus_interface, tools
30
from twisted.trial.unittest import TestCase
32
from contrib.testing.testcase import (
37
from ubuntuone import clientdefs
38
from ubuntuone.syncdaemon import tools
30
40
class SyncDaemonTool(tools.SyncDaemonTool):
31
41
"""A subclass of tools.SyncDaemonTool that keep track of the deferreds."""
59
69
_path = os.path.join(os.getcwd(), "bin", "ubuntuone-preferences")
60
70
u1prefs = new.module('u1prefs')
61
71
execfile(_path, u1prefs.__dict__)
62
u1prefs.DBUS_IFACE_AUTH_PATH = '/oauthdesktop'
72
u1prefs.DBUS_CRED_PATH = '/oauthdesktop'
65
75
MockerTestCase.setUp(self)
66
76
DBusTwistedTestCase.setUp(self)
67
77
self.oauth = FakeLogin(self.bus)
68
self._old_path = dbus_interface.DBUS_PATH_AUTH
69
dbus_interface.DBUS_PATH_AUTH = '/oauthdesktop'
71
# For testing keyring queries
72
self.keyring = self.mocker.mock()
73
self.item = self.mocker.mock(gnomekeyring.Found)
78
self.mocker.result(self.item_id)
79
self.mocker.count(0, None)
82
self.mocker.result('oauth_token=access_key'
83
'&oauth_token_secret=access_secret')
84
self.mocker.count(0, None)
86
self.keyring.find_items_sync(
88
{'ubuntuone-realm': 'https://ubuntuone.com',
89
'oauth-consumer-key': 'ubuntuone'})
90
self.mocker.count(0, None)
91
self.mocker.result([self.item])
92
self.keyring.ITEM_GENERIC_SECRET
93
self.mocker.count(0, None)
94
self.mocker.result(None)
78
self._old_path = ubuntu_sso.DBUS_CRED_PATH
79
ubuntu_sso.DBUS_CRED_PATH = '/oauthdesktop'
96
81
self.u1prefs.make_rest_request = self.make_rest_request
97
82
self.u1prefs.SyncDaemonTool = SyncDaemonTool
107
92
signal_receivers.update(match)
108
93
yield self.cleanup_signal_receivers(signal_receivers)
109
94
self.oauth.shutdown()
110
dbus_interface.DBUS_PATH_AUTH = self._old_path
95
ubuntu_sso.DBUS_AUTH = self._old_path
111
96
yield DBusTwistedTestCase.tearDown(self)
113
98
def make_rest_request(self, url=None, method='GET',
114
callback=None, keyring=None):
115
100
"""Override the real request call to mock some stuff."""
117
102
callback(self.content)
121
106
def test_bw_throttling(self):
122
107
"""Test that toggling bw throttling works correctly."""
123
108
self.mocker.replay()
124
widget = self.u1prefs.DevicesWidget(None, keyring=self.keyring)
109
widget = self.u1prefs.DevicesWidget(None)
125
110
self.assertFalse(widget.got_limits)
126
111
widget.update_bw_settings = self.mocker.mock()
158
143
def test_list_devices_fills_devices_list_with_fake_result_when_empty(self):
159
144
self.mocker.replay()
160
widget = self.u1prefs.DevicesWidget(None, keyring=self.keyring)
145
widget = self.u1prefs.DevicesWidget(None)
161
146
widget.update_bw_settings = self.mocker.mock()
163
148
widget.devices = []
172
157
def test_list_devices_shows_devices_list(self):
173
158
self.mocker.replay()
174
widget = self.u1prefs.DevicesWidget(None, keyring=self.keyring)
159
widget = self.u1prefs.DevicesWidget(None)
175
160
widget.update_bw_settings = self.mocker.mock()
177
162
widget.devices = []
189
174
# check a placeholder for the local machine description is there
190
175
self.assertTrue(('Label', '<LOCAL MACHINE>') in interesting)
191
176
# check the bw limitation stuff is there
192
self.assertTrue(('CheckButton', '_Limit Bandwidth Usage')
177
self.assertTrue(('CheckButton', '_Limit bandwidth')
194
179
self.assertTrue(('Label', 'Maximum _download speed (KB/s):')
203
188
def test_list_devices_shows_real_devices_list(self):
204
189
self.mocker.replay()
205
widget = self.u1prefs.DevicesWidget(None, keyring=self.keyring)
190
widget = self.u1prefs.DevicesWidget(None)
206
191
widget.update_bw_settings = self.mocker.mock()
208
193
widget.devices = [{'kind': 'Computer',
239
224
def test_quota_display(self):
240
225
"""Test that quota display works correctly."""
241
226
self.mocker.replay()
242
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
227
dialog = self.u1prefs.UbuntuOneDialog()
243
228
self.assertTrue(dialog is not None)
244
229
self.assertEqual(dialog.usage_graph.get_fraction(), 0.0)
245
230
dialog.update_quota_display(1024, 2048)
251
236
"""Test that we can request the quota info properly."""
252
237
self.content = {"total":2048, "used":1024}
253
238
self.mocker.replay()
254
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
239
dialog = self.u1prefs.UbuntuOneDialog()
255
240
self.assertTrue(dialog is not None)
256
241
self.assertEqual(dialog.usage_graph.get_fraction(), 0.0)
257
242
dialog.request_quota_info()
263
248
"""Test that the quota notice is not visible if usage is low."""
264
249
self.content = {"total":2048, "used":1024}
265
250
self.mocker.replay()
266
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
251
dialog = self.u1prefs.UbuntuOneDialog()
267
252
self.assertTrue(dialog is not None)
268
253
dialog.request_quota_info()
269
254
# the label should just be the blank '\n'
281
266
self.content = {"total": 100, "used": 95}
282
267
self.mocker.replay()
283
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
268
dialog = self.u1prefs.UbuntuOneDialog()
284
269
self.assertTrue(dialog is not None)
285
270
dialog.request_quota_info()
286
271
# don't check the exact text, as it will probably
302
287
self.content = {"total": 50<<30, "used": 49<<30}
303
288
self.mocker.replay()
304
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
289
dialog = self.u1prefs.UbuntuOneDialog()
305
290
self.assertTrue(dialog is not None)
306
291
dialog.request_quota_info()
307
292
# don't check the exact text, as it will probably
324
309
self.content = {"total": 100, "used": 100}
325
310
self.mocker.replay()
326
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
311
dialog = self.u1prefs.UbuntuOneDialog()
327
312
self.assertTrue(dialog is not None)
328
313
dialog.request_quota_info()
329
314
# don't check the exact text, as it will probably
341
326
"""Test that the quota notice is visible if usage is 100%."""
342
327
self.content = {"total": 50<<30, "used": 50<<30}
343
328
self.mocker.replay()
344
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
329
dialog = self.u1prefs.UbuntuOneDialog()
345
330
self.assertTrue(dialog is not None)
346
331
dialog.request_quota_info()
347
332
# don't check the exact text, as it will probably
358
343
self.content = {"username": "ubuntuone", "nickname": "Ubuntu One",
359
344
"email": "uone@example.com"}
360
345
self.mocker.replay()
361
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
346
dialog = self.u1prefs.UbuntuOneDialog()
362
347
self.assertTrue(dialog is not None)
363
348
dialog.request_account_info()
364
349
self.content = {"total":2048, "used":1024}
384
369
self.expect(toggle_db_sync('bookmarks', True))
385
370
self.expect(toggle_db_sync('bookmarks', False))
386
371
self.mocker.replay()
387
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
372
dialog = self.u1prefs.UbuntuOneDialog()
388
373
self.assertTrue(dialog is not None)
389
374
dialog.toggle_db_sync = toggle_db_sync
390
375
dialog.bookmarks_check.set_active(True)
403
388
self.expect(toggle_db_sync('contacts', True))
404
389
self.expect(toggle_db_sync('contacts', False))
405
390
self.mocker.replay()
406
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
391
dialog = self.u1prefs.UbuntuOneDialog()
407
392
self.assertTrue(dialog is not None)
408
393
dialog.toggle_db_sync = toggle_db_sync
409
394
dialog.abook_check.set_active(True)
419
404
def test_toggle_files(self):
420
405
"""Test toggling the files service on/off."""
421
406
self.mocker.replay()
422
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
407
dialog = self.u1prefs.UbuntuOneDialog()
423
408
self.assertTrue(dialog is not None)
424
409
dialog.files_check.set_active(True)
425
410
self.assertTrue(dialog.files_check.get_active())
433
418
def test_toggle_files_and_music(self):
434
419
"""Test toggling the files and music services on/off."""
435
420
self.mocker.replay()
436
dialog = self.u1prefs.UbuntuOneDialog(keyring=self.keyring)
421
dialog = self.u1prefs.UbuntuOneDialog()
437
422
self.assertTrue(dialog is not None)
438
423
def files_toggled(checkbutton):
439
424
enabled = checkbutton.get_active()
501
486
test_login_check.skip = \
502
487
"This shouldn't depend on the real DBus service (see bug #591340)."
490
class CallbacksTest(TestCase, MockerTestCase):
491
"""Tests for DBus callbacks."""
493
_path = os.path.join(os.getcwd(), "bin", "ubuntuone-preferences")
494
u1prefs = new.module('u1prefs')
495
execfile(_path, u1prefs.__dict__)
496
u1prefs.DBUS_CRED_PATH = '/oauthdesktop'
499
"""Set up the test."""
501
self.memento = MementoHandler()
502
logger = logging.getLogger("ubuntuone-preferences")
503
logger.addHandler(self.memento)
505
# Create fake UbuntuoneLoginHandler object
506
self.patch(dbus, "SessionBus", lambda *a, **k: self.mocker.mock())
507
self.patch(dbus.service, "BusName", lambda *a, **k: None)
508
self.patch(dbus.service, "Object", lambda *a, **k: None)
509
self.patch(self.u1prefs.UbuntuoneLoginHandler, "present", lambda *a, **k: None)
511
self.login_handler = self.u1prefs.UbuntuoneLoginHandler(dialog=None)
513
def test_got_newcredentials(self):
514
"""Test CredentialsFound signal."""
515
self.login_handler.got_newcredentials(clientdefs.APP_NAME, FAKED_CREDENTIALS)
516
self.assertTrue(self.memento.check_info("credentials", clientdefs.APP_NAME))
518
def test_got_credentialserror(self):
519
"""Test CredentialsError signal."""
520
self.login_handler.got_credentialserror(clientdefs.APP_NAME, "Error", "Detailed error")
521
self.assertTrue(self.memento.check_error(clientdefs.APP_NAME, "Error", "Detailed error"))
523
def test_got_authdenied(self):
524
"""Test AuthorizationDenied signal."""
525
self.login_handler.got_authdenied(clientdefs.APP_NAME)
526
self.assertTrue(self.memento.check_error(clientdefs.APP_NAME))