OLD | NEW |
(Empty) | |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 from recipe_engine import recipe_test_api |
| 6 |
| 7 |
| 8 class CIPDTestApi(recipe_test_api.RecipeTestApi): |
| 9 def make_resolved_version(self, v): |
| 10 if not v: |
| 11 return '40-chars-fake-of-the-package-instance_id' |
| 12 if len(v) == 40: |
| 13 return v |
| 14 # Truncate or pad to 40 chars. |
| 15 prefix = 'resolved-instance_id-of-' |
| 16 if len(v) + len(prefix) >= 40: |
| 17 return '%s%s' % (prefix, v[:40-len(prefix)]) |
| 18 return '%s%s%s' % (prefix, v, '-' * (40 - len(prefix) - len(v))) |
| 19 |
| 20 def make_pin(self, package_name, version=None): |
| 21 return { |
| 22 'package': package_name, |
| 23 'instance_id': self.make_resolved_version(version), |
| 24 } |
| 25 |
| 26 def _resultify(self, result, error=None, retcode=None): |
| 27 dic = {'result': result} |
| 28 if error: |
| 29 dic['error'] = error |
| 30 return self.m.json.output(dic, retcode=retcode) |
| 31 |
| 32 def make_test_executable(self): |
| 33 return str(self.m.path['slave_build'].join('cipd', 'cipd')) |
| 34 |
| 35 def example_error(self, error, retcode=None): |
| 36 return self._resultify( |
| 37 result=None, |
| 38 error=error, |
| 39 retcode=1 if retcode is None else retcode) |
| 40 |
| 41 def example_install_client(self, package_name, version=None, retcode=None): |
| 42 return self.m.json.output({ |
| 43 'executable': self.make_test_executable(), |
| 44 'instance_id': self.make_resolved_version(version), |
| 45 }, retcode=retcode) |
| 46 |
| 47 def example_build(self, package_name, version=None): |
| 48 return self._resultify(self.make_pin(package_name, version)) |
| 49 |
| 50 example_register = example_build |
| 51 |
| 52 def example_ensure(self, packages): |
| 53 return self._resultify([self.make_pin(name, version) |
| 54 for name, version in sorted(packages.items())]) |
| 55 |
| 56 def example_set_tag(self, package_name, version): |
| 57 return self._resultify({ |
| 58 'package': package_name, |
| 59 'pin': self.make_pin(package_name, version) |
| 60 }) |
| 61 |
| 62 example_set_ref = example_set_tag |
| 63 |
| 64 def example_search(self, package_name, instances=None): |
| 65 if instances is None: |
| 66 # Return one instance by default. |
| 67 return self._resultify([self.make_pin(package_name)]) |
| 68 if isinstance(instances, int): |
| 69 instances = ['instance_id_%i' % (i+1) for i in xrange(instances)] |
| 70 return self._resultify([self.make_pin(package_name, instance) |
| 71 for instance in instances]) |
| 72 |
| 73 def example_describe(self, package_name, version=None, |
| 74 test_data_refs=None, test_data_tags=None, |
| 75 user='user:44-blablbla@developer.gserviceaccount.com', |
| 76 tstamp=1446574210): |
| 77 assert not test_data_tags or all(':' in tag for tag in test_data_tags) |
| 78 return self._resultify({ |
| 79 'pin': self.make_pin(package_name, version), |
| 80 'registered_by': user, |
| 81 'registered_ts': tstamp, |
| 82 'refs': [ |
| 83 { |
| 84 'ref': ref, |
| 85 'modified_by': user, |
| 86 'modified_ts': tstamp, |
| 87 } |
| 88 for ref in (['latest'] if test_data_refs is None else test_data_refs) |
| 89 ], |
| 90 'tags': [ |
| 91 { |
| 92 'tag': tag, |
| 93 'registered_by': user, |
| 94 'registered_ts': tstamp, |
| 95 } |
| 96 for tag in ([ |
| 97 'buildbot_build:some.waterfall/builder/1234', |
| 98 'git_repository:https://chromium.googlesource.com/some/repo', |
| 99 'git_revision:397a2597cdc237f3026e6143b683be4b9ab60540', |
| 100 ] if test_data_tags is None else test_data_tags) |
| 101 ], |
| 102 }) |
OLD | NEW |