| Index: tools/telemetry/telemetry/page/page_test_unittest.py
|
| diff --git a/tools/telemetry/telemetry/page/page_test_unittest.py b/tools/telemetry/telemetry/page/page_test_unittest.py
|
| index 6b068bf04be4ef94ec94de96385471546001a1f6..65a852aa562758becb31ba394f67606ab1bc34b4 100644
|
| --- a/tools/telemetry/telemetry/page/page_test_unittest.py
|
| +++ b/tools/telemetry/telemetry/page/page_test_unittest.py
|
| @@ -2,32 +2,167 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| -import unittest
|
| +import json
|
| +import os
|
|
|
| -from telemetry.core import util
|
| +from telemetry import benchmark
|
| +from telemetry.core import exceptions
|
| +from telemetry.core import wpr_modes
|
| from telemetry.page import page as page_module
|
| +from telemetry.page import page_set
|
| +from telemetry.page import page_set_archive_info
|
| from telemetry.page import page_test
|
| +from telemetry.testing import page_test_test_case
|
| +from telemetry.unittest import options_for_unittests
|
| +from telemetry.value import scalar
|
|
|
|
|
| -class DoNothingPageTest(page_test.PageTest):
|
| - def ValidateAndMeasurePage(self, *_):
|
| +class PageTestThatFails(page_test.PageTest):
|
| + def MeasurePage(self, page, tab, results):
|
| + raise exceptions.IntentionalException
|
| +
|
| +
|
| +class PageTestThatHasDefaults(page_test.PageTest):
|
| + def AddCommandLineArgs(self, parser):
|
| + parser.add_option('-x', dest='x', default=3)
|
| +
|
| + def MeasurePage(self, page, tab, results):
|
| + if not hasattr(self.options, 'x'):
|
| + raise page_test.MeasurementFailure('Default option was not set.')
|
| + if self.options.x != 3:
|
| + raise page_test.MeasurementFailure(
|
| + 'Expected x == 3, got x == ' + self.options.x)
|
| + results.AddValue(scalar.ScalarValue(page, 'x', 'ms', 7))
|
| +
|
| +
|
| +class PageTestForBlank(page_test.PageTest):
|
| + def MeasurePage(self, page, tab, results):
|
| + contents = tab.EvaluateJavaScript('document.body.textContent')
|
| + if contents.strip() != 'Hello world':
|
| + raise page_test.MeasurementFailure(
|
| + 'Page contents were: ' + contents)
|
| +
|
| +
|
| +class PageTestForReplay(page_test.PageTest):
|
| + def MeasurePage(self, page, tab, results):
|
| + # Web Page Replay returns '404 Not found' if a page is not in the archive.
|
| + contents = tab.EvaluateJavaScript('document.body.textContent')
|
| + if '404 Not Found' in contents.strip():
|
| + raise page_test.MeasurementFailure('Page not in archive.')
|
| +
|
| +
|
| +class PageTestQueryParams(page_test.PageTest):
|
| + def MeasurePage(self, page, tab, results):
|
| + query = tab.EvaluateJavaScript('window.location.search')
|
| + expected = '?foo=1'
|
| + if query.strip() != expected:
|
| + raise page_test.MeasurementFailure(
|
| + 'query was %s, not %s.' % (query, expected))
|
| +
|
| +
|
| +class PageTestWithAction(page_test.PageTest):
|
| + def __init__(self):
|
| + super(PageTestWithAction, self).__init__('RunTestAction')
|
| +
|
| + def MeasurePage(self, page, tab, results):
|
| pass
|
|
|
|
|
| -class TestPage(page_module.Page):
|
| - def __init__(self, url, page_set, base_dir):
|
| - super(TestPage, self).__init__(url, page_set, base_dir)
|
| - self.run_action_to_run_called = False
|
| +class PageWithAction(page_module.Page):
|
| + def __init__(self, url, ps):
|
| + super(PageWithAction, self).__init__(url, ps, ps.base_dir)
|
| + self.run_test_action_called = False
|
|
|
| - def RunActionToRun(self, _):
|
| - self.run_action_to_run_called = True
|
| + def RunTestAction(self, _):
|
| + self.run_test_action_called = True
|
|
|
|
|
| -class PageTestUnitTest(unittest.TestCase):
|
| - def testRunActions(self):
|
| - test = DoNothingPageTest('RunActionToRun')
|
| - page = TestPage('file://blank.html', None, util.GetUnittestDataDir())
|
| +class PageTestUnitTest(page_test_test_case.PageTestTestCase):
|
|
|
| - test.RunPage(page, None, None)
|
| + def setUp(self):
|
| + self._options = options_for_unittests.GetCopy()
|
| + self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF
|
|
|
| - self.assertTrue(page.run_action_to_run_called)
|
| + def testGotToBlank(self):
|
| + ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html')
|
| + measurement = PageTestForBlank()
|
| + all_results = self.RunMeasurement(measurement, ps, options=self._options)
|
| + self.assertEquals(0, len(all_results.failures))
|
| +
|
| + def testGotQueryParams(self):
|
| + ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html?foo=1')
|
| + measurement = PageTestQueryParams()
|
| + all_results = self.RunMeasurement(measurement, ps, options=self._options)
|
| + self.assertEquals(0, len(all_results.failures))
|
| +
|
| + def testFailure(self):
|
| + ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html')
|
| + measurement = PageTestThatFails()
|
| + all_results = self.RunMeasurement(measurement, ps, options=self._options)
|
| + self.assertEquals(1, len(all_results.failures))
|
| +
|
| + def testDefaults(self):
|
| + ps = self.CreatePageSetFromFileInUnittestDataDir('blank.html')
|
| + measurement = PageTestThatHasDefaults()
|
| + all_results = self.RunMeasurement(measurement, ps, options=self._options)
|
| + self.assertEquals(len(all_results.all_page_specific_values), 1)
|
| + self.assertEquals(
|
| + all_results.all_page_specific_values[0].value, 7)
|
| +
|
| + # This test is disabled because it runs against live sites, and needs to be
|
| + # fixed. crbug.com/179038
|
| + @benchmark.Disabled
|
| + def testRecordAndReplay(self):
|
| + test_archive = '/tmp/google.wpr'
|
| + google_url = 'http://www.google.com/'
|
| + foo_url = 'http://www.foo.com/'
|
| + archive_info_template = ("""
|
| +{
|
| +"archives": {
|
| + "%s": ["%s"]
|
| +}
|
| +}
|
| +""")
|
| + try:
|
| + ps = page_set.PageSet()
|
| + measurement = PageTestForReplay()
|
| +
|
| + # First record an archive with only www.google.com.
|
| + self._options.browser_options.wpr_mode = wpr_modes.WPR_RECORD
|
| +
|
| + ps.wpr_archive_info = page_set_archive_info.PageSetArchiveInfo(
|
| + '', '', json.loads(archive_info_template %
|
| + (test_archive, google_url)))
|
| + ps.pages = [page_module.Page(google_url, ps)]
|
| + all_results = self.RunMeasurement(measurement, ps, options=self._options)
|
| + self.assertEquals(0, len(all_results.failures))
|
| +
|
| + # Now replay it and verify that google.com is found but foo.com is not.
|
| + self._options.browser_options.wpr_mode = wpr_modes.WPR_REPLAY
|
| +
|
| + ps.wpr_archive_info = page_set_archive_info.PageSetArchiveInfo(
|
| + '', '', json.loads(archive_info_template % (test_archive, foo_url)))
|
| + ps.pages = [page_module.Page(foo_url, ps)]
|
| + all_results = self.RunMeasurement(measurement, ps, options=self._options)
|
| + self.assertEquals(1, len(all_results.failures))
|
| +
|
| + ps.wpr_archive_info = page_set_archive_info.PageSetArchiveInfo(
|
| + '', '', json.loads(archive_info_template %
|
| + (test_archive, google_url)))
|
| + ps.pages = [page_module.Page(google_url, ps)]
|
| + all_results = self.RunMeasurement(measurement, ps, options=self._options)
|
| + self.assertEquals(0, len(all_results.failures))
|
| +
|
| + self.assertTrue(os.path.isfile(test_archive))
|
| +
|
| + finally:
|
| + if os.path.isfile(test_archive):
|
| + os.remove(test_archive)
|
| +
|
| + def testRunActions(self):
|
| + ps = self.CreateEmptyPageSet()
|
| + page = PageWithAction('file://blank.html', ps)
|
| + ps.AddPage(page)
|
| + measurement = PageTestWithAction()
|
| + self.RunMeasurement(measurement, ps, options=self._options)
|
| + self.assertTrue(page.run_test_action_called)
|
|
|