OLD | NEW |
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 Loading... |
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 Loading... |
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, {}) |
OLD | NEW |