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

Side by Side Diff: scripts/slave/recipe_modules/chromium_tests/bot_config_and_test_db.py

Issue 1928783004: Extend chromium_tests trigger to work across masters. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: REbase Created 4 years, 7 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
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import ast 5 import ast
6 import copy 6 import copy
7 7
8 from recipe_engine.types import freeze 8 from recipe_engine.types import freeze
9 9
10 10
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 69
70 def initialize_bot_db(self, chromium_tests_api, bot_db, bot_update_step): 70 def initialize_bot_db(self, chromium_tests_api, bot_db, bot_update_step):
71 # TODO(phajdan.jr): Bots should have no generators instead. 71 # TODO(phajdan.jr): Bots should have no generators instead.
72 if self.get('disable_tests'): 72 if self.get('disable_tests'):
73 scripts_compile_targets = {} 73 scripts_compile_targets = {}
74 else: 74 else:
75 scripts_compile_targets = \ 75 scripts_compile_targets = \
76 chromium_tests_api.get_compile_targets_for_scripts().json.output 76 chromium_tests_api.get_compile_targets_for_scripts().json.output
77 77
78 masternames = set(bot_id['mastername'] for bot_id in self._bot_ids) 78 masternames = set(bot_id['mastername'] for bot_id in self._bot_ids)
79 for mastername in masternames: 79 for mastername in sorted(self._bots_dict):
80 test_spec = self._get_test_spec(chromium_tests_api, mastername)
81
82 # We manually thaw the path to the elements we are modifying, since the 80 # We manually thaw the path to the elements we are modifying, since the
83 # builders are frozen. 81 # builders are frozen.
84 master_dict = dict(self._bots_dict[mastername]) 82 master_dict = dict(self._bots_dict[mastername])
85 builders = master_dict['builders'] = dict(master_dict['builders']) 83
86 for loop_buildername in builders: 84 if mastername in masternames:
87 builder_dict = builders[loop_buildername] = ( 85 test_spec = self._get_test_spec(chromium_tests_api, mastername)
88 dict(builders[loop_buildername])) 86
89 builders[loop_buildername]['tests'] = ( 87 builders = master_dict['builders'] = dict(master_dict['builders'])
90 chromium_tests_api.generate_tests_from_test_spec( 88 for loop_buildername in builders:
91 chromium_tests_api.m, test_spec, builder_dict, 89 builder_dict = builders[loop_buildername] = (
92 loop_buildername, mastername, 90 dict(builders[loop_buildername]))
93 # TODO(phajdan.jr): Get enable_swarming value from builder_dict. 91 builders[loop_buildername]['tests'] = (
94 # Above should remove the need to get bot_config and buildername 92 chromium_tests_api.generate_tests_from_test_spec(
95 # in this method. 93 chromium_tests_api.m, test_spec, builder_dict,
96 self.get('enable_swarming', False), 94 loop_buildername, mastername,
97 builder_dict.get('swarming_dimensions', {}), 95 # TODO(phajdan.jr): Get enable_swarming value from
98 scripts_compile_targets, 96 # builder_dict. Above should remove the need to get
99 builder_dict.get('test_generators', []), 97 # bot_config and buildername in this method.
100 bot_update_step 98 self.get('enable_swarming', False),
101 )) 99 builder_dict.get('swarming_dimensions', {}),
100 scripts_compile_targets,
101 builder_dict.get('test_generators', []),
102 bot_update_step
103 ))
104 else:
105 test_spec = None
106
102 107
103 bot_db._add_master_dict_and_test_spec( 108 bot_db._add_master_dict_and_test_spec(
104 mastername, freeze(master_dict), freeze(test_spec)) 109 mastername, freeze(master_dict), freeze(test_spec))
105 110
106 def get_tests(self, bot_db): 111 def get_tests(self, bot_db):
107 tests = [] 112 tests = []
108 for bot_id in self._bot_ids: 113 for bot_id in self._bot_ids:
109 bot_config = bot_db.get_bot_config( 114 bot_config = bot_db.get_bot_config(
110 bot_id['mastername'], bot_id['buildername']) 115 bot_id['mastername'], bot_id['buildername'])
111 tests.extend([copy.deepcopy(t) for t in bot_config.get('tests', [])]) 116 tests.extend([copy.deepcopy(t) for t in bot_config.get('tests', [])])
112 117
113 if bot_id.get('tester'): 118 if bot_id.get('tester'):
114 bot_config = bot_db.get_bot_config( 119 bot_config = bot_db.get_bot_config(
115 bot_id['mastername'], bot_id['tester']) 120 bot_id['mastername'], bot_id['tester'])
116 tests.extend([copy.deepcopy(t) for t in bot_config.get('tests', [])]) 121 tests.extend([copy.deepcopy(t) for t in bot_config.get('tests', [])])
117 122
118 tests_including_triggered = list(tests) 123 tests_including_triggered = list(tests)
119 for bot_id in self._bot_ids: 124 for bot_id in self._bot_ids:
120 bot_config = bot_db.get_bot_config( 125 bot_config = bot_db.get_bot_config(
121 bot_id['mastername'], bot_id['buildername']) 126 bot_id['mastername'], bot_id['buildername'])
122 127
123 for _, test_bot in bot_db.bot_configs_matching_parent_buildername( 128 for _, _, test_bot in bot_db.bot_configs_matching_parent_buildername(
124 bot_id['mastername'], bot_id['buildername']): 129 bot_id['mastername'], bot_id['buildername']):
125 tests_including_triggered.extend(test_bot.get('tests', [])) 130 tests_including_triggered.extend(test_bot.get('tests', []))
126 131
127 return tests, tests_including_triggered 132 return tests, tests_including_triggered
128 133
129 def get_compile_targets(self, chromium_tests_api, bot_db, tests): 134 def get_compile_targets(self, chromium_tests_api, bot_db, tests):
130 compile_targets = set() 135 compile_targets = set()
131 for bot_id in self._bot_ids: 136 for bot_id in self._bot_ids:
132 bot_config = bot_db.get_bot_config( 137 bot_config = bot_db.get_bot_config(
133 bot_id['mastername'], bot_id['buildername']) 138 bot_id['mastername'], bot_id['buildername'])
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 'test_spec': test_spec } 180 'test_spec': test_spec }
176 181
177 def get_bot_config(self, mastername, buildername): 182 def get_bot_config(self, mastername, buildername):
178 return self._db[mastername]['master_dict'].get('builders', {}).get( 183 return self._db[mastername]['master_dict'].get('builders', {}).get(
179 buildername) 184 buildername)
180 185
181 def get_master_settings(self, mastername): 186 def get_master_settings(self, mastername):
182 return self._db[mastername]['master_dict'].get('settings', {}) 187 return self._db[mastername]['master_dict'].get('settings', {})
183 188
184 def bot_configs_matching_parent_buildername( 189 def bot_configs_matching_parent_buildername(
185 self, mastername, parent_buildername): 190 self, parent_mastername, parent_buildername):
186 """A generator of all the (buildername, bot_config) tuples whose 191 """A generator of all the (buildername, bot_config) tuples whose
187 parent_buildername is the passed one on the given master. 192 parent_buildername is the passed one on the given master.
188 """ 193 """
189 for buildername, bot_config in self._db[mastername]['master_dict'].get( 194 for mastername, master_config in self._db.iteritems():
190 'builders', {}).iteritems(): 195 master_dict = master_config['master_dict']
191 if bot_config.get('parent_buildername') == parent_buildername: 196 for buildername, bot_config in master_dict.get(
192 yield buildername, bot_config 197 'builders', {}).iteritems():
198 master_matches = (bot_config.get('parent_mastername', mastername) ==
199 parent_mastername)
200 builder_matches = (bot_config.get('parent_buildername') ==
201 parent_buildername)
202 if master_matches and builder_matches:
203 yield mastername, buildername, bot_config
193 204
194 def get_test_spec(self, mastername, buildername): 205 def get_test_spec(self, mastername, buildername):
195 return self._db[mastername]['test_spec'].get(buildername, {}) 206 return self._db[mastername]['test_spec'].get(buildername, {})
OLDNEW
« no previous file with comments | « scripts/slave/recipe_modules/chromium_tests/api.py ('k') | scripts/slave/recipe_modules/chromium_tests/chromium_perf_fyi.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698