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 |