| Index: dashboard/dashboard/pinpoint/models/quest/run_test.py
|
| diff --git a/dashboard/dashboard/pinpoint/models/quest/run_test.py b/dashboard/dashboard/pinpoint/models/quest/run_test.py
|
| index 40eaf3ede2396cd4bf0e2e9a06e7b45f401a482d..3a4b90c2a3f80f75123a1c76aeccba43ed31adb0 100644
|
| --- a/dashboard/dashboard/pinpoint/models/quest/run_test.py
|
| +++ b/dashboard/dashboard/pinpoint/models/quest/run_test.py
|
| @@ -8,9 +8,6 @@ This is the only Quest/Execution where the Execution has a reference back to
|
| modify the Quest.
|
| """
|
|
|
| -import json
|
| -import os
|
| -
|
| from dashboard.pinpoint.models.quest import execution as execution_module
|
| from dashboard.pinpoint.models.quest import quest
|
| from dashboard.services import swarming_service
|
| @@ -21,19 +18,6 @@ class RunTestError(Exception):
|
| pass
|
|
|
|
|
| -class UnknownConfigError(RunTestError):
|
| -
|
| - def __init__(self, configuration):
|
| - self.configuration = configuration
|
| - super(UnknownConfigError, self).__init__(
|
| - 'There are no swarming bots corresponding to config "%s".' %
|
| - self.configuration)
|
| -
|
| - def __reduce__(self):
|
| - # http://stackoverflow.com/a/36342588
|
| - return UnknownConfigError, (self.configuration,)
|
| -
|
| -
|
| class SwarmingTaskError(RunTestError):
|
|
|
| def __init__(self, task_id, state):
|
| @@ -64,30 +48,31 @@ class SwarmingTestError(RunTestError):
|
|
|
| class RunTest(quest.Quest):
|
|
|
| - def __init__(self, configuration, test_suite, test, repeat_count):
|
| - self._configuration = configuration
|
| - self._test_suite = test_suite
|
| - self._test = test
|
| - self._repeat_count = repeat_count
|
| + def __init__(self, dimensions, extra_args):
|
| + self._dimensions = dimensions
|
| + self._extra_args = extra_args
|
|
|
| # We want subsequent executions use the same bot as the first one.
|
| self._first_execution = None
|
|
|
| + def __eq__(self, other):
|
| + return (isinstance(other, type(self)) and
|
| + self._dimensions == other._dimensions and
|
| + self._extra_args == other._extra_args and
|
| + self._first_execution == other._first_execution)
|
| +
|
| +
|
| def __str__(self):
|
| - if self._test:
|
| - running = '/'.join((self._test_suite, self._test))
|
| - else:
|
| - running = self._test_suite
|
| - return 'Run %s on %s' % (running, self._configuration)
|
| + return 'Test'
|
|
|
| @property
|
| def retry_count(self):
|
| return 4
|
|
|
| def Start(self, isolate_hash):
|
| - execution = _RunTestExecution(self._configuration, self._test_suite,
|
| - self._test, self._repeat_count, isolate_hash,
|
| - first_execution=self._first_execution)
|
| + execution = _RunTestExecution(
|
| + self._dimensions, self._extra_args, isolate_hash,
|
| + first_execution=self._first_execution)
|
|
|
| if not self._first_execution:
|
| self._first_execution = execution
|
| @@ -97,13 +82,11 @@ class RunTest(quest.Quest):
|
|
|
| class _RunTestExecution(execution_module.Execution):
|
|
|
| - def __init__(self, configuration, test_suite, test, repeat_count,
|
| - isolate_hash, first_execution=None):
|
| + def __init__(self, dimensions, extra_args, isolate_hash,
|
| + first_execution=None):
|
| super(_RunTestExecution, self).__init__()
|
| - self._configuration = configuration
|
| - self._test_suite = test_suite
|
| - self._test = test
|
| - self._repeat_count = repeat_count
|
| + self._dimensions = dimensions
|
| + self._extra_args = extra_args
|
| self._isolate_hash = isolate_hash
|
| self._first_execution = first_execution
|
|
|
| @@ -150,55 +133,25 @@ class _RunTestExecution(execution_module.Execution):
|
| else:
|
| return
|
|
|
| - # TODO: Support non-Telemetry tests.
|
| - extra_args = [self._test_suite]
|
| - if self._test:
|
| - extra_args += ('--story-filter', self._test)
|
| - if self._repeat_count != 1:
|
| - extra_args += ('--pageset-repeat', str(self._repeat_count))
|
| - # TODO: Use the correct browser for Android and 64-bit Windows.
|
| - extra_args += [
|
| - '-v', '--upload-results',
|
| - '--output-format=chartjson', '--browser=release',
|
| - '--isolated-script-test-output=${ISOLATED_OUTDIR}/output.json',
|
| - '--isolated-script-test-chartjson-output='
|
| - '${ISOLATED_OUTDIR}/chartjson-output.json',
|
| - ]
|
| -
|
| dimensions = [{'key': 'pool', 'value': 'Chrome-perf-pinpoint'}]
|
| if self._first_execution:
|
| dimensions.append({'key': 'id', 'value': self._first_execution.bot_id})
|
| else:
|
| - dimensions += _ConfigurationDimensions(self._configuration)
|
| + dimensions += self._dimensions
|
|
|
| body = {
|
| - 'name': 'Pinpoint job on %s' % self._configuration,
|
| + 'name': 'Pinpoint job',
|
| 'user': 'Pinpoint',
|
| 'priority': '100',
|
| 'expiration_secs': '600',
|
| 'properties': {
|
| 'inputs_ref': {'isolated': self._isolate_hash},
|
| - 'extra_args': extra_args,
|
| + 'extra_args': self._extra_args,
|
| 'dimensions': dimensions,
|
| 'execution_timeout_secs': '3600',
|
| 'io_timeout_secs': '3600',
|
| },
|
| - 'tags': [
|
| - 'configuration:' + self._configuration,
|
| - ],
|
| }
|
| response = swarming_service.Tasks().New(body)
|
|
|
| self._task_id = response['task_id']
|
| -
|
| -
|
| -def _ConfigurationDimensions(configuration):
|
| - bot_dimensions_path = os.path.join(os.path.dirname(__file__),
|
| - 'bot_dimensions.json')
|
| - with open(bot_dimensions_path) as bot_dimensions_file:
|
| - bot_dimensions = json.load(bot_dimensions_file)
|
| -
|
| - if configuration not in bot_dimensions:
|
| - raise UnknownConfigError(configuration)
|
| -
|
| - return bot_dimensions[configuration]
|
|
|