~verterok/ubuntuone-client/faster-startup

« back to all changes in this revision

Viewing changes to tests/test_preferences.py

  • Committer: guillermo.gonzalez at canonical
  • Date: 2010-09-10 20:39:47 UTC
  • mfrom: (92.1.595 trunk)
  • Revision ID: guillermo.gonzalez@canonical.com-20100910203947-l5phy0r4h7fm4lzh
merge with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
import new
21
21
import os
22
 
import gnomekeyring
23
 
 
24
 
from contrib.mocker import MockerTestCase
25
 
from contrib.testing.testcase import DBusTwistedTestCase, FakeLogin
 
22
 
 
23
import dbus.service
 
24
import logging
 
25
import ubuntu_sso
 
26
 
 
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
 
31
 
 
32
from contrib.testing.testcase import (
 
33
    DBusTwistedTestCase,
 
34
    FAKED_CREDENTIALS,
 
35
    FakeLogin,
 
36
    MementoHandler)
 
37
from ubuntuone import clientdefs
 
38
from ubuntuone.syncdaemon import tools
29
39
 
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'
63
73
 
64
74
    def setUp(self):
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'
70
 
 
71
 
        # For testing keyring queries
72
 
        self.keyring = self.mocker.mock()
73
 
        self.item = self.mocker.mock(gnomekeyring.Found)
74
 
 
75
 
        self.item_id = 999
76
 
 
77
 
        self.item.item_id
78
 
        self.mocker.result(self.item_id)
79
 
        self.mocker.count(0, None)
80
 
 
81
 
        self.item.secret
82
 
        self.mocker.result('oauth_token=access_key'
83
 
                           '&oauth_token_secret=access_secret')
84
 
        self.mocker.count(0, None)
85
 
 
86
 
        self.keyring.find_items_sync(
87
 
            None,
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'
95
80
 
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)
112
97
 
113
98
    def make_rest_request(self, url=None, method='GET',
114
 
                          callback=None, keyring=None):
 
99
                          callback=None):
115
100
        """Override the real request call to mock some stuff."""
116
101
        if callback:
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()
127
112
        try:
157
142
 
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()
162
147
        try:
163
148
            widget.devices = []
171
156
 
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()
176
161
        try:
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')
193
178
                            in interesting)
194
179
            self.assertTrue(('Label', 'Maximum _download speed (KB/s):')
195
180
                            in interesting)
202
187
 
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()
207
192
        try:
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'
280
265
        """
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
301
286
        """
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
323
308
        """
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()
500
485
        return d
501
486
    test_login_check.skip = \
502
487
        "This shouldn't depend on the real DBus service (see bug #591340)."
 
488
 
 
489
 
 
490
class CallbacksTest(TestCase, MockerTestCase):
 
491
    """Tests for DBus callbacks."""
 
492
 
 
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'
 
497
 
 
498
    def setUp(self):
 
499
        """Set up the test."""
 
500
        TestCase.setUp(self)
 
501
        self.memento = MementoHandler()
 
502
        logger = logging.getLogger("ubuntuone-preferences")
 
503
        logger.addHandler(self.memento)
 
504
 
 
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)
 
510
 
 
511
        self.login_handler = self.u1prefs.UbuntuoneLoginHandler(dialog=None)
 
512
 
 
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))
 
517
 
 
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"))
 
522
 
 
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))