browser_credentials_unittest.py revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
1# Copyright (c) 2012 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4import os 5import tempfile 6import unittest 7 8from telemetry.core import browser_credentials 9 10SIMPLE_CREDENTIALS_STRING = """ 11{ 12 "google": { 13 "username": "example", 14 "password": "asdf" 15 } 16} 17""" 18 19class BackendStub(object): 20 def __init__(self, credentials_type): 21 self.login_needed_called = None 22 self.login_no_longer_needed_called = None 23 self.credentials_type = credentials_type 24 25 def LoginNeeded(self, config, tab): 26 self.login_needed_called = (config, tab) 27 return True 28 29 def LoginNoLongerNeeded(self, tab): 30 self.login_no_longer_needed_called = (tab, ) 31 32 33class TestBrowserCredentials(unittest.TestCase): 34 def testCredentialsInfrastructure(self): 35 google_backend = BackendStub("google") 36 othersite_backend = BackendStub("othersite") 37 browser_cred = browser_credentials.BrowserCredentials( 38 [google_backend, 39 othersite_backend]) 40 try: 41 with tempfile.NamedTemporaryFile(delete=False) as f: 42 f.write(SIMPLE_CREDENTIALS_STRING) 43 44 browser_cred.credentials_path = f.name 45 46 # Should true because it has a password and a backend. 47 self.assertTrue(browser_cred.CanLogin('google')) 48 49 # Should be false succeed because it has no password. 50 self.assertFalse(browser_cred.CanLogin('othersite')) 51 52 # Should fail because it has no backend. 53 self.assertRaises( 54 Exception, 55 lambda: browser_cred.CanLogin('foobar')) 56 57 tab = {} 58 ret = browser_cred.LoginNeeded(tab, 'google') 59 self.assertTrue(ret) 60 self.assertTrue(google_backend.login_needed_called is not None) 61 self.assertEqual(tab, google_backend.login_needed_called[0]) 62 self.assertEqual("example", 63 google_backend.login_needed_called[1]["username"]) 64 self.assertEqual("asdf", 65 google_backend.login_needed_called[1]["password"]) 66 67 browser_cred.LoginNoLongerNeeded(tab, 'google') 68 self.assertTrue(google_backend.login_no_longer_needed_called is not None) 69 self.assertEqual(tab, google_backend.login_no_longer_needed_called[0]) 70 finally: 71 os.remove(f.name) 72