You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
# 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.
|
|
|
|
from recipe_engine import recipe_test_api
|
|
|
|
|
|
class CIPDTestApi(recipe_test_api.RecipeTestApi):
|
|
def make_resolved_version(self, v):
|
|
if not v:
|
|
return '40-chars-fake-of-the-package-instance_id'
|
|
if len(v) == 40:
|
|
return v
|
|
# Truncate or pad to 40 chars.
|
|
prefix = 'resolved-instance_id-of-'
|
|
if len(v) + len(prefix) >= 40:
|
|
return '%s%s' % (prefix, v[:40-len(prefix)])
|
|
return '%s%s%s' % (prefix, v, '-' * (40 - len(prefix) - len(v)))
|
|
|
|
def make_pin(self, package_name, version=None):
|
|
return {
|
|
'package': package_name,
|
|
'instance_id': self.make_resolved_version(version),
|
|
}
|
|
|
|
def _resultify(self, result, error=None, retcode=None):
|
|
dic = {'result': result}
|
|
if error:
|
|
dic['error'] = error
|
|
return self.m.json.output(dic, retcode=retcode)
|
|
|
|
def example_error(self, error, retcode=None):
|
|
return self._resultify(
|
|
result=None,
|
|
error=error,
|
|
retcode=1 if retcode is None else retcode)
|
|
|
|
def example_build(self, package_name, version=None):
|
|
return self._resultify(self.make_pin(package_name, version))
|
|
|
|
example_register = example_build
|
|
|
|
def example_ensure(self, packages):
|
|
return self._resultify([self.make_pin(name, version)
|
|
for name, version in sorted(packages.items())])
|
|
|
|
def example_set_tag(self, package_name, version):
|
|
return self._resultify({
|
|
'package': package_name,
|
|
'pin': self.make_pin(package_name, version)
|
|
})
|
|
|
|
example_set_ref = example_set_tag
|
|
|
|
def example_search(self, package_name, instances=None):
|
|
if instances is None:
|
|
# Return one instance by default.
|
|
return self._resultify([self.make_pin(package_name)])
|
|
if isinstance(instances, int):
|
|
instances = ['instance_id_%i' % (i+1) for i in xrange(instances)]
|
|
return self._resultify([self.make_pin(package_name, instance)
|
|
for instance in instances])
|
|
|
|
def example_describe(self, package_name, version=None,
|
|
test_data_refs=None, test_data_tags=None,
|
|
user='user:44-blablbla@developer.gserviceaccount.com',
|
|
tstamp=1446574210):
|
|
assert not test_data_tags or all(':' in tag for tag in test_data_tags)
|
|
return self._resultify({
|
|
'pin': self.make_pin(package_name, version),
|
|
'registered_by': user,
|
|
'registered_ts': tstamp,
|
|
'refs': [
|
|
{
|
|
'ref': ref,
|
|
'modified_by': user,
|
|
'modified_ts': tstamp,
|
|
}
|
|
for ref in (['latest'] if test_data_refs is None else test_data_refs)
|
|
],
|
|
'tags': [
|
|
{
|
|
'tag': tag,
|
|
'registered_by': user,
|
|
'registered_ts': tstamp,
|
|
}
|
|
for tag in ([
|
|
'buildbot_build:some.waterfall/builder/1234',
|
|
'git_repository:https://chromium.googlesource.com/some/repo',
|
|
'git_revision:397a2597cdc237f3026e6143b683be4b9ab60540',
|
|
] if test_data_tags is None else test_data_tags)
|
|
],
|
|
})
|