| Index: tools/telemetry/telemetry/test.py
|
| diff --git a/tools/telemetry/telemetry/test.py b/tools/telemetry/telemetry/test.py
|
| deleted file mode 100644
|
| index 4df4bde0b42231005de0fb9b60ca8604fa9e2f00..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/test.py
|
| +++ /dev/null
|
| @@ -1,205 +0,0 @@
|
| -# Copyright 2013 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import logging
|
| -import optparse
|
| -import os
|
| -import shutil
|
| -import sys
|
| -import zipfile
|
| -
|
| -from telemetry import decorators
|
| -from telemetry.core import browser_finder
|
| -from telemetry.core import command_line
|
| -from telemetry.core import util
|
| -from telemetry.page import page_runner
|
| -from telemetry.page import cloud_storage
|
| -from telemetry.page import page_set
|
| -from telemetry.page import page_test
|
| -from telemetry.page import test_expectations
|
| -from telemetry.results import page_test_results
|
| -
|
| -
|
| -Disabled = decorators.Disabled
|
| -Enabled = decorators.Enabled
|
| -
|
| -
|
| -class Test(command_line.Command):
|
| - """Base class for a Telemetry test or benchmark.
|
| -
|
| - A test packages a PageTest/PageMeasurement and a PageSet together.
|
| - """
|
| - options = {}
|
| -
|
| - @classmethod
|
| - def Name(cls):
|
| - name = cls.__module__.split('.')[-1]
|
| - if hasattr(cls, 'tag'):
|
| - name += '.' + cls.tag
|
| - if hasattr(cls, 'page_set'):
|
| - name += '.' + cls.page_set.Name()
|
| - return name
|
| -
|
| - @classmethod
|
| - def AddCommandLineArgs(cls, parser):
|
| - cls.PageTestClass().AddCommandLineArgs(parser)
|
| -
|
| - if hasattr(cls, 'AddTestCommandLineArgs'):
|
| - group = optparse.OptionGroup(parser, '%s test options' % cls.Name())
|
| - cls.AddTestCommandLineArgs(group)
|
| - parser.add_option_group(group)
|
| -
|
| - @classmethod
|
| - def SetArgumentDefaults(cls, parser):
|
| - cls.PageTestClass().SetArgumentDefaults(parser)
|
| - parser.set_defaults(**cls.options)
|
| -
|
| - @classmethod
|
| - def ProcessCommandLineArgs(cls, parser, args):
|
| - cls.PageTestClass().ProcessCommandLineArgs(parser, args)
|
| -
|
| - def CustomizeBrowserOptions(self, options):
|
| - """Add browser options that are required by this benchmark."""
|
| -
|
| - def Run(self, args):
|
| - """Run this test with the given options."""
|
| - self.CustomizeBrowserOptions(args.browser_options)
|
| -
|
| - test = self.PageTestClass()()
|
| - test.__name__ = self.__class__.__name__
|
| -
|
| - if hasattr(self, '_disabled_strings'):
|
| - test._disabled_strings = self._disabled_strings
|
| - if hasattr(self, '_enabled_strings'):
|
| - test._enabled_strings = self._enabled_strings
|
| -
|
| - ps = self.CreatePageSet(args)
|
| - expectations = self.CreateExpectations(ps)
|
| -
|
| - self._DownloadGeneratedProfileArchive(args)
|
| -
|
| - results = page_test_results.PageTestResults()
|
| - try:
|
| - results = page_runner.Run(test, ps, expectations, args)
|
| - except page_test.TestNotSupportedOnPlatformFailure as failure:
|
| - logging.warning(str(failure))
|
| -
|
| - results.PrintSummary()
|
| - return len(results.failures) + len(results.errors)
|
| -
|
| - def _DownloadGeneratedProfileArchive(self, options):
|
| - """Download and extract profile directory archive if one exists."""
|
| - archive_name = getattr(self, 'generated_profile_archive', None)
|
| -
|
| - # If attribute not specified, nothing to do.
|
| - if not archive_name:
|
| - return
|
| -
|
| - # If profile dir specified on command line, nothing to do.
|
| - if options.browser_options.profile_dir:
|
| - logging.warning("Profile directory specified on command line: %s, this"
|
| - "overrides the benchmark's default profile directory.",
|
| - options.browser_options.profile_dir)
|
| - return
|
| -
|
| - # Download profile directory from cloud storage.
|
| - found_browser = browser_finder.FindBrowser(options)
|
| - test_data_dir = os.path.join(util.GetChromiumSrcDir(), 'tools', 'perf',
|
| - 'generated_profiles',
|
| - found_browser.target_os)
|
| - generated_profile_archive_path = os.path.normpath(
|
| - os.path.join(test_data_dir, archive_name))
|
| -
|
| - try:
|
| - cloud_storage.GetIfChanged(generated_profile_archive_path,
|
| - cloud_storage.PUBLIC_BUCKET)
|
| - except (cloud_storage.CredentialsError,
|
| - cloud_storage.PermissionError) as e:
|
| - if os.path.exists(generated_profile_archive_path):
|
| - # If the profile directory archive exists, assume the user has their
|
| - # own local copy simply warn.
|
| - logging.warning('Could not download Profile archive: %s',
|
| - generated_profile_archive_path)
|
| - else:
|
| - # If the archive profile directory doesn't exist, this is fatal.
|
| - logging.error('Can not run without required profile archive: %s. '
|
| - 'If you believe you have credentials, follow the '
|
| - 'instructions below.',
|
| - generated_profile_archive_path)
|
| - logging.error(e)
|
| - sys.exit(-1)
|
| -
|
| - # Unzip profile directory.
|
| - extracted_profile_dir_path = (
|
| - os.path.splitext(generated_profile_archive_path)[0])
|
| - if not os.path.isfile(generated_profile_archive_path):
|
| - raise Exception("Profile directory archive not downloaded: ",
|
| - generated_profile_archive_path)
|
| - with zipfile.ZipFile(generated_profile_archive_path) as f:
|
| - try:
|
| - f.extractall(os.path.dirname(generated_profile_archive_path))
|
| - except e:
|
| - # Cleanup any leftovers from unzipping.
|
| - if os.path.exists(extracted_profile_dir_path):
|
| - shutil.rmtree(extracted_profile_dir_path)
|
| - logging.error("Error extracting profile directory zip file: %s", e)
|
| - sys.exit(-1)
|
| -
|
| - # Run with freshly extracted profile directory.
|
| - logging.info("Using profile archive directory: %s",
|
| - extracted_profile_dir_path)
|
| - options.browser_options.profile_dir = extracted_profile_dir_path
|
| -
|
| - @classmethod
|
| - def PageTestClass(cls):
|
| - """Get the PageTest for this Test.
|
| -
|
| - If the Test has no PageTest, raises NotImplementedError.
|
| - """
|
| - if not hasattr(cls, 'test'):
|
| - raise NotImplementedError('This test has no "test" attribute.')
|
| - if not issubclass(cls.test, page_test.PageTest):
|
| - raise TypeError('"%s" is not a PageTest.' % cls.test.__name__)
|
| - return cls.test
|
| -
|
| - @classmethod
|
| - def PageSetClass(cls):
|
| - """Get the PageSet for this Test.
|
| -
|
| - If the Test has no PageSet, raises NotImplementedError.
|
| - """
|
| - if not hasattr(cls, 'page_set'):
|
| - raise NotImplementedError('This test has no "page_set" attribute.')
|
| - if not issubclass(cls.page_set, page_set.PageSet):
|
| - raise TypeError('"%s" is not a PageSet.' % cls.page_set.__name__)
|
| - return cls.page_set
|
| -
|
| - @classmethod
|
| - def CreatePageSet(cls, options): # pylint: disable=W0613
|
| - """Get the page set this test will run on.
|
| -
|
| - By default, it will create a page set from the file at this test's
|
| - page_set attribute. Override to generate a custom page set.
|
| - """
|
| - return cls.PageSetClass()()
|
| -
|
| - @classmethod
|
| - def CreateExpectations(cls, ps): # pylint: disable=W0613
|
| - """Get the expectations this test will run with.
|
| -
|
| - By default, it will create an empty expectations set. Override to generate
|
| - custom expectations.
|
| - """
|
| - if hasattr(cls, 'expectations'):
|
| - return cls.expectations
|
| - else:
|
| - return test_expectations.TestExpectations()
|
| -
|
| -
|
| -def AddCommandLineArgs(parser):
|
| - page_runner.AddCommandLineArgs(parser)
|
| -
|
| -
|
| -def ProcessCommandLineArgs(parser, args):
|
| - page_runner.ProcessCommandLineArgs(parser, args)
|
|
|