| 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 |