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