2 import dbus, os, unittest, sys;
5 bad_params_dict = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(3)}, signature='sv')
6 canceled_dict = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(4)}, signature='sv')
7 not_available_dict = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(5)}, signature='sv')
9 class TestSequenceFunctions(unittest.TestCase):
12 bus = dbus.SessionBus()
14 proxy = bus.get_object('com.google.code.AccountsSSO.gSingleSignOn.UI',
16 sso = dbus.Interface(proxy, dbus_interface='com.google.code.AccountsSSO.gSingleSignOn.UI')
18 address = sso.getBusAddress();
20 print 'server address:' , "'" , str(address) , "'" ;
21 bus_a = dbus.bus.Connection(str(address));
23 proxy = bus_a.get_object (object_path='/Dialog');
25 cls.sso = dbus.Interface(proxy, dbus_interface='com.google.code.AccountsSSO.gSingleSignOn.UI.Dialog');
27 print 'EXCEPTION: ' , sys.exc_info(), traceback.print_exc()
28 raise unittest.SkipTest('could not get a D-Bus proxy for SignonUI')
30 def test_no_request_id(self):
31 params = dbus.Dictionary({'QueryPassword':True}, signature='sv')
32 self.assertEqual(self.sso.queryDialog(params), bad_params_dict)
34 def test_no_query(self):
35 params = dbus.Dictionary({'RequestId':'test_id'}, signature='sv')
36 self.assertEqual(self.sso.queryDialog(params), bad_params_dict)
38 def test_open_url_with_other_query(self):
39 params = dbus.Dictionary({'RequestId':'test_id',
41 'OpenUrl':'http://first.invalid/',
42 'FinalUrl':'http://second.invalid/'}, signature='sv')
43 self.assertEqual(self.sso.queryDialog(params), bad_params_dict)
45 def test_query_password(self):
46 params = dbus.Dictionary({'RequestId':'test_id',
48 'TestReplyValues':'Secret:12345'}, signature='sv')
49 expected = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(0),
50 'Secret': '12345'}, signature='sv')
51 self.assertEqual(self.sso.queryDialog(params), expected)
53 def test_query_remember_password(self):
54 params = dbus.Dictionary({'RequestId':'test_id',
56 'RememberPassword': False,
57 'TestReplyValues':'Secret:12345,RememberPassword:True'}, signature='sv')
58 expected = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(0),
60 'RememberPassword': True}, signature='sv')
61 self.assertEqual(self.sso.queryDialog(params), expected)
63 def test_query_username_and_password(self):
64 params = dbus.Dictionary({'RequestId':'test_id',
67 'TestReplyValues':'Secret:12345,UserName:uname'}, signature='sv')
68 expected = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(0),
70 'Secret': '12345'}, signature='sv')
71 self.assertEqual(self.sso.queryDialog(params), expected)
73 def test_query_password_and_confirm (self):
74 params = dbus.Dictionary({'RequestId':'test_id',
78 'TestReplyValues':'Secret:12345,SecretConfirm:67890'}, signature='sv')
79 expected = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(0),
80 'SecretConfirm': '67890',
81 'Secret': '12345'}, signature='sv')
82 self.assertEqual(self.sso.queryDialog(params), expected)
84 def test_query_captcha(self):
85 params = dbus.Dictionary({'RequestId':'test_id',
86 'CaptchaUrl':'file:///usr/share/locale/l10n/us/flag.png',
87 'TestReplyValues':'CaptchaResponse:qwerty'}, signature='sv')
88 expected = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(0),
89 'CaptchaResponse': 'qwerty'}, signature='sv')
90 self.assertEqual(self.sso.queryDialog(params), expected)
92 def test_query_oauth(self):
93 # ugly, this test actually opens the dialog for a moment
94 params = dbus.Dictionary({'RequestId':'test_id',
95 'OpenUrl':'file:///?param=val¶m2=val2',
96 'FinalUrl':'file:///'}, signature='sv')
97 expected = dbus.Dictionary({'QueryErrorCode': dbus.UInt32(0),
98 'UrlResponse': 'file:///?param=val¶m2=val2'}, signature='sv')
99 retval = self.sso.queryDialog(params)
100 # Elementary might not be compiled with Web, have to accept "not available"
101 self.assertTrue(retval == expected or retval == not_available_dict)
103 def test_cancel(self):
104 params = dbus.Dictionary({'RequestId':'test_id',
105 'QueryPassword':True,
106 'TestReplyValues':'QueryErrorCode:4'}, signature='sv')
107 self.assertEqual(self.sso.queryDialog(params), canceled_dict)
109 if __name__ == '__main__':