browser_credentials_unittest.py revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 unittest
5import tempfile
6
7from telemetry.core import browser_credentials
8
9SIMPLE_CREDENTIALS_STRING = """
10{
11  "google": {
12    "username": "example",
13    "password": "asdf"
14  }
15}
16"""
17
18class BackendStub(object):
19  def __init__(self, credentials_type):
20    self.login_needed_called = None
21    self.login_no_longer_needed_called = None
22    self.credentials_type = credentials_type
23
24  def LoginNeeded(self, config, tab):
25    self.login_needed_called = (config, tab)
26    return True
27
28  def LoginNoLongerNeeded(self, tab):
29    self.login_no_longer_needed_called = (tab, )
30
31
32class TestBrowserCredentials(unittest.TestCase):
33  def testCredentialsInfrastructure(self):
34    google_backend = BackendStub("google")
35    othersite_backend = BackendStub("othersite")
36    browser_cred = browser_credentials.BrowserCredentials(
37      [google_backend,
38       othersite_backend])
39    with tempfile.NamedTemporaryFile() as f:
40      f.write(SIMPLE_CREDENTIALS_STRING)
41      f.flush()
42
43      browser_cred.credentials_path = f.name
44
45      # Should true because it has a password and a backend.
46      self.assertTrue(browser_cred.CanLogin('google'))
47
48      # Should be false succeed because it has no password.
49      self.assertFalse(browser_cred.CanLogin('othersite'))
50
51      # Should fail because it has no backend.
52      self.assertRaises(
53        Exception,
54        lambda: browser_cred.CanLogin('foobar'))
55
56      tab = {}
57      ret = browser_cred.LoginNeeded(tab, 'google')
58      self.assertTrue(ret)
59      self.assertTrue(google_backend.login_needed_called is not None)
60      self.assertEqual(tab, google_backend.login_needed_called[0])
61      self.assertEqual("example",
62                       google_backend.login_needed_called[1]["username"])
63      self.assertEqual("asdf",
64                       google_backend.login_needed_called[1]["password"])
65
66      browser_cred.LoginNoLongerNeeded(tab, 'google')
67      self.assertTrue(google_backend.login_no_longer_needed_called is not None)
68      self.assertEqual(tab, google_backend.login_no_longer_needed_called[0])
69