Index: recipe_modules/cipd/test_api.py |
diff --git a/recipe_modules/cipd/test_api.py b/recipe_modules/cipd/test_api.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..63165359269d34a6427779f7fca7444520eff3e5 |
--- /dev/null |
+++ b/recipe_modules/cipd/test_api.py |
@@ -0,0 +1,102 @@ |
+# 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 make_test_executable(self): |
+ return str(self.m.path['slave_build'].join('cipd', 'cipd')) |
+ |
+ def example_error(self, error, retcode=None): |
+ return self._resultify( |
+ result=None, |
+ error=error, |
+ retcode=1 if retcode is None else retcode) |
+ |
+ def example_install_client(self, package_name, version=None, retcode=None): |
+ return self.m.json.output({ |
+ 'executable': self.make_test_executable(), |
+ 'instance_id': self.make_resolved_version(version), |
+ }, retcode=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) |
+ ], |
+ }) |