24
24
from ubuntuone.devtools.testcase import DBusTestCase as TestCase
25
25
from ubuntuone.devtools.handlers import MementoHandler
27
from ubuntuone.platform.linux.credentials import (dbus, logger, logging, ubuntu_sso,
28
CredentialsManagement, TIMEOUT_INTERVAL,
27
from ubuntuone.platform.linux.credentials import (dbus, logger, logging,
28
CredentialsManagement, CredentialsManagementTool, CredentialsError,
29
30
DBUS_BUS_NAME, DBUS_CREDENTIALS_PATH, DBUS_CREDENTIALS_IFACE,
30
31
APP_NAME, HELP_TEXT_KEY, DESCRIPTION, TC_URL_KEY, TC_URL,
31
PING_URL_KEY, PING_URL, WINDOW_ID_KEY,
32
PING_URL_KEY, PING_URL, TIMEOUT_INTERVAL,
34
35
FAKED_CREDENTIALS = {
326
317
def test_register(self):
327
318
"""The register method calls ubuntu_sso's method."""
329
self.proxy.register(reply_handler=lambda: d.callback(None),
320
self.proxy.register(self.args, reply_handler=lambda: d.callback(None),
330
321
error_handler=d.errback)
333
324
self.assertEqual(self.sso_server._app_name, APP_NAME)
334
325
params = {HELP_TEXT_KEY: DESCRIPTION, TC_URL_KEY: TC_URL,
335
PING_URL_KEY: PING_URL, WINDOW_ID_KEY: '0'}
326
PING_URL_KEY: PING_URL}
327
params.update(self.args)
336
328
self.assertEqual(self.sso_server._args, params)
339
331
def test_login(self):
340
332
"""The login method calls ubuntu_sso's method."""
342
self.proxy.login(reply_handler=lambda: d.callback(None),
334
self.proxy.login(self.args, reply_handler=lambda: d.callback(None),
343
335
error_handler=d.errback)
346
338
self.assertEqual(self.sso_server._app_name, APP_NAME)
347
339
params = {HELP_TEXT_KEY: DESCRIPTION, TC_URL_KEY: TC_URL,
348
PING_URL_KEY: PING_URL, WINDOW_ID_KEY: '0'}
340
PING_URL_KEY: PING_URL}
341
params.update(self.args)
349
342
self.assertEqual(self.sso_server._args, params)
607
600
def test_find_credentials(self):
608
601
"""Keep proper track of on going requests."""
605
"""Make the check."""
606
self.assertEqual(self.client.ref_count, 1)
609
self.patch(self.client, 'CredentialsNotFound', verify)
609
610
self.client.find_credentials()
611
self.assertEqual(self.client.ref_count, 1)
613
614
def test_clear_credentials(self):
614
615
"""Keep proper track of on going requests."""
619
"""Make the check."""
620
self.assertEqual(self.client.ref_count, 1)
623
self.patch(self.client, 'CredentialsCleared', verify)
615
624
self.client.clear_credentials()
617
self.assertEqual(self.client.ref_count, 1)
619
628
def test_store_credentials(self):
620
629
"""Keep proper track of on going requests."""
621
self.client.store_credentials(FAKED_CREDENTIALS)
623
self.assertEqual(self.client.ref_count, 1)
633
"""Make the check."""
634
self.assertEqual(self.client.ref_count, 1)
637
self.patch(self.client, 'CredentialsStored', verify)
638
self.client.store_credentials(self.args)
625
642
def test_register(self):
626
643
"""Keep proper track of on going requests."""
627
self.client.register()
629
self.assertEqual(self.client.ref_count, 1)
647
"""Make the check."""
648
self.assertEqual(self.client.ref_count, 1)
651
self.patch(self.client, 'CredentialsFound', verify)
652
self.client.register(self.args)
631
656
def test_login(self):
632
657
"""Keep proper track of on going requests."""
635
self.assertEqual(self.client.ref_count, 1)
661
"""Make the check."""
662
self.assertEqual(self.client.ref_count, 1)
665
self.patch(self.client, 'CredentialsFound', verify)
666
self.client.login(self.args)
637
670
def test_several_requests(self):
638
671
"""Requests can be nested."""
640
self.client.clear_credentials()
641
self.client.find_credentials()
642
self.client.register()
643
self.client.store_credentials(FAKED_CREDENTIALS)
645
self.assertEqual(self.client.ref_count, 5)
675
def parallel_counter(*args):
676
"""Make the check."""
678
if self.ref_count == 5:
679
self.assertEqual(self.client.ref_count, self.ref_count)
682
self.patch(self.client, 'CredentialsFound', parallel_counter)
684
self.client.login(self.args)
685
self.client.register(self.args)
686
self.client.login(self.args)
687
self.client.register(self.args)
688
self.client.register(self.args)
647
692
def test_credentials_found(self):
648
693
"""Ref counter is decreased when a signal is sent."""
743
788
def test_on_zero_ref_count_shutdown(self):
744
789
"""When ref count reaches 0, queue shutdown op."""
745
790
self.client.timeout_func = self._set_called
746
self.client.find_credentials()
791
self.client.login(self.args)
747
792
self.client.CredentialsFound(FAKED_CREDENTIALS)
749
794
self.assertEqual(self._called,
750
((TIMEOUT_INTERVAL, self.client.shutdown_func), {}))
795
((TIMEOUT_INTERVAL, self.client.shutdown), {}))
752
797
def test_on_non_zero_ref_count_do_not_shutdown(self):
753
798
"""If ref count is not 0, do not queue shutdown op."""
754
799
self.client.timeout_func = self._set_called
755
self.client.find_credentials()
800
self.client.login(self.args)
757
802
self.assertEqual(self._called, False)
804
def test_on_non_zero_ref_count_after_zero_do_not_shutdown(self):
805
"""If the shutdown was queued, do not quit if counter is not zero."""
807
def fake_timeout_func(interval, func):
808
"""Start a new request when the timer is started."""
809
self.client._ref_count = 1
810
assert self.client.ref_count > 0
813
self.client.timeout_func = fake_timeout_func
814
self.client.shutdown_func = self._set_called
816
self.client.ref_count = 0 # trigger timer and possible shutdown
818
self.assertEqual(self._called, False, 'shutdown_func was not called')
820
def test_zero_ref_count_after_zero_do_shutdown(self):
821
"""If the shutdown was queued, do quit if counter is zero."""
823
def fake_timeout_func(interval, func):
824
"""Start a new request when the timer is started."""
825
assert self.client.ref_count == 0
828
self.client.timeout_func = fake_timeout_func
829
self.client.shutdown_func = self._set_called
831
self.client.ref_count = 0 # trigger timer and possible shutdown
833
self.assertEqual(self._called, ((), {}), 'shutdown_func was called')
836
class CredentialsTestCase(BaseTestCase):
837
"""Test suite for the Credentials class."""
840
super(CredentialsTestCase, self).setUp()
841
FakedSSOService.error_dict = None
842
self.creds_server = self.register_server(DBUS_BUS_NAME,
843
DBUS_CREDENTIALS_PATH,
844
CredentialsManagement) # real service
846
self.client = CredentialsManagementTool()
849
def test_find_credentials_no_credentials(self):
850
"""Find credentials when credentials does not exist."""
851
result = yield self.client.find_credentials()
853
self.assertEqual(result, {})
856
def test_find_credentials_with_credentials(self):
857
"""Find credentials when credentials exists."""
858
yield self.client.store_credentials(FAKED_CREDENTIALS)
860
result = yield self.client.find_credentials()
862
self.assertEqual(result, FAKED_CREDENTIALS)
865
def test_find_credentials_error(self):
866
"""Find credentials and error."""
867
FakedSSOService.error_dict = {'failure': 'really'}
870
yield self.client.find_credentials()
871
except CredentialsError, e:
872
self.assertEqual(e[0], FakedSSOService.error_dict)
874
self.fail('Must not succeed!')
877
def test_clear_credentials(self):
878
"""Clear credentials."""
879
yield self.client.store_credentials({'test': 'me'})
880
yield self.client.clear_credentials()
882
result = yield self.client.find_credentials()
884
self.assertEqual(result, {})
887
def test_clear_credentials_error(self):
888
"""Clear credentials and error."""
889
FakedSSOService.error_dict = {'failure': 'really'}
892
yield self.client.clear_credentials()
893
except CredentialsError, e:
894
self.assertEqual(e[0], FakedSSOService.error_dict)
896
self.fail('Must not succeed!')
899
def test_store_credentials(self):
900
"""Store credentials."""
901
token = {'test': 'me'}
902
yield self.client.store_credentials(token)
904
result = yield self.client.find_credentials()
906
self.assertEqual(result, token)
909
def test_store_credentials_error(self):
910
"""Store credentials and error."""
911
FakedSSOService.error_dict = {'failure': 'really'}
914
yield self.client.store_credentials({'test': 'me'})
915
except CredentialsError, e:
916
self.assertEqual(e[0], FakedSSOService.error_dict)
918
self.fail('Must not succeed!')
921
def test_register(self):
923
result = yield self.client.register()
925
self.assertEqual(result, FAKED_CREDENTIALS)
928
def test_register_auth_denied(self):
929
"""Register and auth_denied."""
930
yield self.client.store_credentials({}) # trigger AuthorizationDenied
931
result = yield self.client.register()
933
self.assertEqual(result, None)
936
def test_register_error(self):
937
"""Register and error."""
938
FakedSSOService.error_dict = {'failure': 'really'}
941
yield self.client.register()
942
except CredentialsError, e:
943
self.assertEqual(e[0], FakedSSOService.error_dict)
945
self.fail('Must not succeed!')
948
def test_login(self):
950
result = yield self.client.login()
952
self.assertEqual(result, FAKED_CREDENTIALS)
955
def test_login_auth_denied(self):
956
"""Login and auth denied."""
957
yield self.client.store_credentials({}) # trigger AuthorizationDenied
958
result = yield self.client.login()
960
self.assertEqual(result, None)
963
def test_login_error(self):
964
"""Login and error."""
965
FakedSSOService.error_dict = {'failure': 'really'}
968
yield self.client.login()
969
except CredentialsError, e:
970
self.assertEqual(e[0], FakedSSOService.error_dict)
972
self.fail('Must not succeed!')