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 |