| OLD | NEW |
| (Empty) |
| 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. | |
| 4 import os | |
| 5 import tempfile | |
| 6 import unittest | |
| 7 | |
| 8 from telemetry.core import browser_finder | |
| 9 from telemetry.core import user_agent | |
| 10 from telemetry.page import page as page_module | |
| 11 from telemetry.page import page_set | |
| 12 from telemetry.page import page_test | |
| 13 from telemetry.page import page_runner | |
| 14 from telemetry.test import options_for_unittests | |
| 15 | |
| 16 SIMPLE_CREDENTIALS_STRING = """ | |
| 17 { | |
| 18 "test": { | |
| 19 "username": "example", | |
| 20 "password": "asdf" | |
| 21 } | |
| 22 } | |
| 23 """ | |
| 24 class StubCredentialsBackend(object): | |
| 25 def __init__(self, login_return_value): | |
| 26 self.did_get_login = False | |
| 27 self.did_get_login_no_longer_needed = False | |
| 28 self.login_return_value = login_return_value | |
| 29 | |
| 30 @property | |
| 31 def credentials_type(self): # pylint: disable=R0201 | |
| 32 return 'test' | |
| 33 | |
| 34 def LoginNeeded(self, tab, config): # pylint: disable=W0613 | |
| 35 self.did_get_login = True | |
| 36 return self.login_return_value | |
| 37 | |
| 38 def LoginNoLongerNeeded(self, tab): # pylint: disable=W0613 | |
| 39 self.did_get_login_no_longer_needed = True | |
| 40 | |
| 41 class PageRunnerTests(unittest.TestCase): | |
| 42 # TODO(nduca): Move the basic "test failed, test succeeded" tests from | |
| 43 # multi_page_benchmark_unittest to here. | |
| 44 | |
| 45 def testHandlingOfCrashedTab(self): | |
| 46 ps = page_set.PageSet() | |
| 47 page1 = page_module.Page('chrome://crash', ps) | |
| 48 page2 = page_module.Page('http://www.google.com', ps) | |
| 49 ps.pages.append(page1) | |
| 50 ps.pages.append(page2) | |
| 51 results = page_test.PageTestResults() | |
| 52 | |
| 53 class Test(page_test.PageTest): | |
| 54 def RunTest(self, *args): | |
| 55 pass | |
| 56 | |
| 57 with page_runner.PageRunner(ps) as runner: | |
| 58 options = options_for_unittests.GetCopy() | |
| 59 possible_browser = browser_finder.FindBrowser(options) | |
| 60 runner.Run(options, possible_browser, Test('RunTest'), results) | |
| 61 self.assertEquals(1, len(results.page_successes)) | |
| 62 self.assertEquals(1, len(results.page_failures)) | |
| 63 | |
| 64 def testCredentialsWhenLoginFails(self): | |
| 65 results = page_test.PageTestResults() | |
| 66 credentials_backend = StubCredentialsBackend(login_return_value=False) | |
| 67 did_run = self.runCredentialsTest(credentials_backend, results) | |
| 68 assert credentials_backend.did_get_login == True | |
| 69 assert credentials_backend.did_get_login_no_longer_needed == False | |
| 70 assert did_run == False | |
| 71 | |
| 72 def testCredentialsWhenLoginSucceeds(self): | |
| 73 results = page_test.PageTestResults() | |
| 74 credentials_backend = StubCredentialsBackend(login_return_value=True) | |
| 75 did_run = self.runCredentialsTest(credentials_backend, results) | |
| 76 assert credentials_backend.did_get_login == True | |
| 77 assert credentials_backend.did_get_login_no_longer_needed == True | |
| 78 assert did_run | |
| 79 | |
| 80 def runCredentialsTest(self, # pylint: disable=R0201 | |
| 81 credentials_backend, | |
| 82 results): | |
| 83 ps = page_set.PageSet() | |
| 84 page = page_module.Page('http://www.google.com', ps) | |
| 85 page.credentials = "test" | |
| 86 ps.pages.append(page) | |
| 87 | |
| 88 did_run = [False] | |
| 89 | |
| 90 with tempfile.NamedTemporaryFile() as f: | |
| 91 f.write(SIMPLE_CREDENTIALS_STRING) | |
| 92 f.flush() | |
| 93 ps.credentials_path = f.name | |
| 94 | |
| 95 class TestThatInstallsCredentialsBackend(page_test.PageTest): | |
| 96 def __init__(self, credentials_backend): | |
| 97 super(TestThatInstallsCredentialsBackend, self).__init__('RunTest') | |
| 98 self._credentials_backend = credentials_backend | |
| 99 | |
| 100 def SetUpBrowser(self, browser): | |
| 101 browser.credentials.AddBackend(self._credentials_backend) | |
| 102 | |
| 103 def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 | |
| 104 did_run[0] = True | |
| 105 | |
| 106 test = TestThatInstallsCredentialsBackend(credentials_backend) | |
| 107 with page_runner.PageRunner(ps) as runner: | |
| 108 options = options_for_unittests.GetCopy() | |
| 109 possible_browser = browser_finder.FindBrowser(options) | |
| 110 runner.Run(options, possible_browser, test, results) | |
| 111 | |
| 112 return did_run[0] | |
| 113 | |
| 114 def testUserAgent(self): | |
| 115 ps = page_set.PageSet() | |
| 116 page = page_module.Page( | |
| 117 'file:///' + os.path.join('..', '..', 'unittest_data', 'blank.html'), | |
| 118 ps, | |
| 119 base_dir=os.path.dirname(__file__)) | |
| 120 ps.pages.append(page) | |
| 121 ps.user_agent_type = 'tablet' | |
| 122 | |
| 123 class TestUserAgent(page_test.PageTest): | |
| 124 def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 | |
| 125 actual_user_agent = tab.EvaluateJavaScript('window.navigator.userAgent') | |
| 126 expected_user_agent = user_agent.UA_TYPE_MAPPING['tablet'] | |
| 127 assert actual_user_agent.strip() == expected_user_agent | |
| 128 | |
| 129 # This is so we can check later that the test actually made it into this | |
| 130 # function. Previously it was timing out before even getting here, which | |
| 131 # should fail, but since it skipped all the asserts, it slipped by. | |
| 132 self.hasRun = True # pylint: disable=W0201 | |
| 133 | |
| 134 test = TestUserAgent('RunTest') | |
| 135 with page_runner.PageRunner(ps) as runner: | |
| 136 options = options_for_unittests.GetCopy() | |
| 137 possible_browser = browser_finder.FindBrowser(options) | |
| 138 results = page_test.PageTestResults() | |
| 139 runner.Run(options, possible_browser, test, results) | |
| 140 | |
| 141 self.assertTrue(hasattr(test, 'hasRun') and test.hasRun) | |
| OLD | NEW |