Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: recipe_modules/bot_update/test_api.py

Issue 1651033004: depot_tools: import bot_update gclient git rietveld tryserver recipe modules (reland #1) (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: 80cols Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « recipe_modules/bot_update/resources/bot_update.py ('k') | recipe_modules/gclient/__init__.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2014 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 import hashlib
6 import os
7 import struct
8 import sys
9 from recipe_engine import recipe_test_api
10
11 # TODO(phajdan.jr): Clean up this somewhat ugly import.
12 sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'resources'))
13 import bot_update
14
15
16 class BotUpdateTestApi(recipe_test_api.RecipeTestApi):
17 def output_json(self, master, builder, slave, root, first_sln,
18 revision_mapping, git_mode, force=False, fail_patch=False,
19 output_manifest=False, fixed_revisions=None):
20 """Deterministically synthesize json.output test data for gclient's
21 --output-json option.
22 """
23 active = bot_update.check_valid_host(master, builder, slave) or force
24
25 output = {
26 'did_run': active,
27 'patch_failure': False
28 }
29
30 # Add in extra json output if active.
31 if active:
32 properties = {
33 property_name: self.gen_revision(project_name, git_mode)
34 for project_name, property_name in revision_mapping.iteritems()
35 }
36 properties.update({
37 '%s_cp' % property_name: ('refs/heads/master@{#%s}' %
38 self.gen_revision(project_name, False))
39 for project_name, property_name in revision_mapping.iteritems()
40 })
41
42 # We also want to simulate outputting "got_revision_git": ...
43 # when git mode is off to match what bot_update.py does.
44 if not git_mode:
45 properties.update({
46 '%s_git' % property_name: self.gen_revision(project_name, True)
47 for project_name, property_name in revision_mapping.iteritems()
48 })
49
50 output.update({
51 'patch_root': root or first_sln,
52 'root': first_sln,
53 'properties': properties,
54 'step_text': 'Some step text'
55 })
56
57 if output_manifest:
58 output.update({
59 'manifest': {
60 project_name: {
61 'repository': 'https://fake.org/%s.git' % project_name,
62 'revision': self.gen_revision(project_name, git_mode),
63 }
64 for project_name in revision_mapping
65 }
66 })
67
68 if fixed_revisions:
69 output['fixed_revisions'] = fixed_revisions
70
71 if fail_patch:
72 output['log_lines'] = [('patch error', 'Patch failed to apply'),]
73 output['patch_failure'] = True
74 output['patch_apply_return_code'] = 1
75 if fail_patch == 'download':
76 output['patch_apply_return_code'] = 3
77 return self.m.json.output(output)
78
79 @staticmethod
80 def gen_revision(project, GIT_MODE):
81 """Hash project to bogus deterministic revision values."""
82 h = hashlib.sha1(project)
83 if GIT_MODE:
84 return h.hexdigest()
85 else:
86 return struct.unpack('!I', h.digest()[:4])[0] % 300000
OLDNEW
« no previous file with comments | « recipe_modules/bot_update/resources/bot_update.py ('k') | recipe_modules/gclient/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698