page_runner_unittest.py revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)import logging 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import os 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import tempfile 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import unittest 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.core import user_agent 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)from telemetry.core import util 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page as page_module 12ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochfrom telemetry.page import page_measurement 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_set 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_test 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from telemetry.page import page_runner 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)from telemetry.unittest import options_for_unittests 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochfrom telemetry.page import test_expectations 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)SIMPLE_CREDENTIALS_STRING = """ 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "test": { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "username": "example", 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "password": "asdf" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)""" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StubCredentialsBackend(object): 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, login_return_value): 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login = False 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login_no_longer_needed = False 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.login_return_value = login_return_value 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) @property 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def credentials_type(self): # pylint: disable=R0201 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 'test' 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def LoginNeeded(self, tab, config): # pylint: disable=W0613 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login = True 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return self.login_return_value 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def LoginNoLongerNeeded(self, tab): # pylint: disable=W0613 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.did_get_login_no_longer_needed = True 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PageRunnerTests(unittest.TestCase): 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # TODO(nduca): Move the basic "test failed, test succeeded" tests from 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) # page_measurement_unittest to here. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testHandlingOfCrashedTab(self): 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page1 = page_module.Page('chrome://crash', ps) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page1) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Test(page_test.PageTest): 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, *args): 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pass 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch results = page_runner.Run(Test('RunTest'), ps, expectations, options) 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.successes)) 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(0, len(results.failures)) 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(1, len(results.errors)) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testHandlingOfTestThatRaisesWithNonFatalUnknownExceptions(self): 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ps = page_set.PageSet() 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) expectations = test_expectations.TestExpectations() 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ps.pages.append(page_module.Page( 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ps.pages.append(page_module.Page( 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) class ExpectedException(Exception): 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) pass 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) class Test(page_test.PageTest): 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def __init__(self, *args): 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) super(Test, self).__init__(*args) 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.run_count = 0 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def RunTest(self, *_): 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) old_run_count = self.run_count 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.run_count += 1 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if old_run_count == 0: 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) raise ExpectedException() 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) options = options_for_unittests.GetCopy() 87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) options.output_format = 'none' 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) test = Test('RunTest') 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) results = page_runner.Run(test, ps, expectations, options) 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEquals(2, test.run_count) 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEquals(1, len(results.successes)) 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEquals(1, len(results.failures)) 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testHandlingOfCrashedTabWithExpectedFailure(self): 953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ps = page_set.PageSet() 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expectations = test_expectations.TestExpectations() 973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expectations.Fail('chrome://crash') 983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) page1 = page_module.Page('chrome://crash', ps) 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ps.pages.append(page1) 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) class Test(page_test.PageTest): 102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def RunTest(self, *_): 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pass 1043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options = options_for_unittests.GetCopy() 1063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) options.output_format = 'none' 107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) results = page_runner.Run( 108a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Test('RunTest'), ps, expectations, options) 1093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(1, len(results.successes)) 1103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(0, len(results.failures)) 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(0, len(results.errors)) 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def testDiscardFirstResult(self): 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ps = page_set.PageSet() 115ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 116a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps.pages.append(page_module.Page( 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 118a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch ps.pages.append(page_module.Page( 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir())) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 121ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch class Measurement(page_measurement.PageMeasurement): 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) @property 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def discard_first_result(self): 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return True 125ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch def MeasurePage(self, *args): 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pass 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 1297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 1308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) options.reset_results = None 1318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) options.upload_results = None 1328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) options.results_label = None 133a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 134a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 1 135a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 1 136ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch results = page_runner.Run(Measurement(), ps, expectations, options) 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.successes)) 13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self.assertEquals(0, len(results.failures)) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 140a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 1 141a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 2 142ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch results = page_runner.Run(Measurement(), ps, expectations, options) 143a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(2, len(results.successes)) 144a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(0, len(results.failures)) 145a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 146a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.page_repeat_iters = 2 147a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch options.repeat_options.pageset_repeat_iters = 1 148ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch results = page_runner.Run(Measurement(), ps, expectations, options) 149a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(2, len(results.successes)) 150a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch self.assertEquals(0, len(results.failures)) 151a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options.output_format = 'html' 153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options.repeat_options.page_repeat_iters = 1 154ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch options.repeat_options.pageset_repeat_iters = 1 155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch results = page_runner.Run(Measurement(), ps, expectations, options) 156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.assertEquals(0, len(results.successes)) 157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch self.assertEquals(0, len(results.failures)) 158ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testCredentialsWhenLoginFails(self): 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credentials_backend = StubCredentialsBackend(login_return_value=False) 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) did_run = self.runCredentialsTest(credentials_backend) 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login == True 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login_no_longer_needed == False 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert did_run == False 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def testCredentialsWhenLoginSucceeds(self): 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credentials_backend = StubCredentialsBackend(login_return_value=True) 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) did_run = self.runCredentialsTest(credentials_backend) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login == True 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert credentials_backend.did_get_login_no_longer_needed == True 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert did_run 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def runCredentialsTest(self, # pylint: disable=R0201 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) credentials_backend): 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 176ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 17790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) page = page_module.Page( 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page.credentials = "test" 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_run = [False] 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 18490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) try: 18590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) with tempfile.NamedTemporaryFile(delete=False) as f: 18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) f.write(SIMPLE_CREDENTIALS_STRING) 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ps.credentials_path = f.name 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestThatInstallsCredentialsBackend(page_test.PageTest): 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, credentials_backend): 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super(TestThatInstallsCredentialsBackend, self).__init__('RunTest') 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._credentials_backend = credentials_backend 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 194a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser.credentials.AddBackend(self._credentials_backend) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) did_run[0] = True 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestThatInstallsCredentialsBackend(credentials_backend) 2017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 2027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 203ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 20490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) finally: 20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) os.remove(f.name) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return did_run[0] 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testUserAgent(self): 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 211ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page( 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.user_agent_type = 'tablet' 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestUserAgent(page_test.PageTest): 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) actual_user_agent = tab.EvaluateJavaScript('window.navigator.userAgent') 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected_user_agent = user_agent.UA_TYPE_MAPPING['tablet'] 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert actual_user_agent.strip() == expected_user_agent 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # This is so we can check later that the test actually made it into this 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # function. Previously it was timing out before even getting here, which 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # should fail, but since it skipped all the asserts, it slipped by. 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.hasRun = True # pylint: disable=W0201 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestUserAgent('RunTest') 2297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 231ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self.assertTrue(hasattr(test, 'hasRun') and test.hasRun) 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) # Ensure that page_runner forces exactly 1 tab before running a page. 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def testOneTab(self): 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps = page_set.PageSet() 238ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch expectations = test_expectations.TestExpectations() 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page = page_module.Page( 2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ps.pages.append(page) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TestOneTab(page_test.PageTest): 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def __init__(self, 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test_method_name, 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) action_name_to_run='', 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_browser_restart_after_each_run=False): 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) super(TestOneTab, self).__init__(test_method_name, action_name_to_run, 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) needs_browser_restart_after_each_run) 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._browser = None 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) self._browser = browser 25490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if self._browser.supports_tab_control: 25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) self._browser.tabs.New() 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if not self._browser.supports_tab_control: 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) logging.warning('Browser does not support tab control, skipping test') 26090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) assert len(self._browser.tabs) == 1 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) test = TestOneTab('RunTest') 2647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options = options_for_unittests.GetCopy() 2657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) options.output_format = 'none' 266ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch page_runner.Run(test, ps, expectations, options) 267a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 268a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # Ensure that page_runner allows the test to customize the browser before it 269a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # launches. 270a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def testBrowserBeforeLaunch(self): 271a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps = page_set.PageSet() 272a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) expectations = test_expectations.TestExpectations() 273a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) page = page_module.Page( 2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 'file://blank.html', ps, base_dir=util.GetUnittestDataDir()) 275a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ps.pages.append(page) 276a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 277a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) class TestBeforeLaunch(page_test.PageTest): 278a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def __init__(self, 279a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_method_name, 280a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) action_name_to_run=''): 281a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) super(TestBeforeLaunch, self).__init__( 282a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_method_name, action_name_to_run, False) 283a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_will_start = False 284a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_did_start = False 285a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 286a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def WillStartBrowser(self, browser): 287a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_will_start = True 288a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) # TODO(simonjam): Test that the profile is available. 289a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 290a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def DidStartBrowser(self, browser): 291a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert self._did_call_will_start 292a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) self._did_call_did_start = True 293a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 294a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) def RunTest(self, page, tab, results): # pylint: disable=W0613,R0201 295a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert self._did_call_did_start 296a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 297a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test = TestBeforeLaunch('RunTest') 298a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) options = options_for_unittests.GetCopy() 299a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) options.output_format = 'none' 300a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) page_runner.Run(test, ps, expectations, options) 301