blob: 028bd9a150005905db53108e868a3fd1954ff8ac [file] [log] [blame]
# Copyright 2015 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.
"""Small test to send a put request to buildbucket."""
import re
class BisectJob(object):
"""A buildbot bisect job started and monitored through buildbucket."""
def __init__(self, try_job_id, good_revision, bad_revision,
test_command, metric, repeats, timeout_minutes, bug_id,
gs_bucket, recipe_tester_name, builder_host=None,
builder_port=None, test_type='perf',
required_initial_confidence=None):
if not all([good_revision, bad_revision, test_command, metric,
repeats, timeout_minutes, recipe_tester_name]):
raise ValueError('At least one of the values required for BisectJob '
'construction was not given or was given with a None '
'value.')
self.try_job_id = try_job_id
self.good_revision = good_revision
self.bad_revision = bad_revision
self.command = BisectJob.EnsureCommandPath(test_command)
self.metric = metric
self.repeat_count = repeats
self.max_time_minutes = timeout_minutes
self.bug_id = bug_id
self.gs_bucket = gs_bucket
self.builder_host = builder_host
self.builder_port = builder_port
self.test_type = test_type
self.recipe_tester_name = recipe_tester_name
self.required_initial_confidence = required_initial_confidence
@staticmethod
def EnsureCommandPath(command):
old_perf_path_regex = re.compile(r'(?<!src/)tools/perf')
if old_perf_path_regex.search(command):
return old_perf_path_regex.sub('src/tools/perf', command)
old_perf_path_regex_win = re.compile(r'(?<!src\\)tools\\perf')
if old_perf_path_regex_win.search(command):
return old_perf_path_regex_win.sub(r'src\\tools\\perf', command)
return command
def GetBuildParameters(self):
"""Prepares a nested dict containing the bisect config."""
# TODO(robertocn): Some of these should be optional.
bisect_config = {
'try_job_id': self.try_job_id,
'test_type': self.test_type,
'command': self.command,
'good_revision': self.good_revision,
'bad_revision': self.bad_revision,
'metric': self.metric,
'repeat_count': self.repeat_count,
'max_time_minutes': self.max_time_minutes,
'bug_id': self.bug_id,
'gs_bucket': self.gs_bucket,
'builder_host': self.builder_host,
'builder_port': self.builder_port,
'recipe_tester_name': self.recipe_tester_name,
}
if self.required_initial_confidence:
bisect_config['required_initial_confidence'] = (
self.required_initial_confidence)
properties = {'bisect_config': bisect_config}
parameters = {
'builder_name': self.recipe_tester_name,
'properties': properties,
}
return parameters
# TODO(robertocn): Add methods to query the status of a job form buildbucket.
# TODO(robertocn): Add static method to get a job by it's buildbucket id.
# TODO(robertocn): Add appropriate tests.