OLD | NEW |
---|---|
1 # Copyright (C) 2010 Google Inc. All rights reserved. | 1 # Copyright (C) 2010 Google Inc. All rights reserved. |
2 # Copyright (C) 2010 Gabor Rapcsanyi (rgabor@inf.u-szeged.hu), University of Sze ged | 2 # Copyright (C) 2010 Gabor Rapcsanyi (rgabor@inf.u-szeged.hu), University of Sze ged |
3 # | 3 # |
4 # Redistribution and use in source and binary forms, with or without | 4 # Redistribution and use in source and binary forms, with or without |
5 # modification, are permitted provided that the following conditions are | 5 # modification, are permitted provided that the following conditions are |
6 # met: | 6 # met: |
7 # | 7 # |
8 # * Redistributions of source code must retain the above copyright | 8 # * Redistributions of source code must retain the above copyright |
9 # notice, this list of conditions and the following disclaimer. | 9 # notice, this list of conditions and the following disclaimer. |
10 # * Redistributions in binary form must reproduce the above | 10 # * Redistributions in binary form must reproduce the above |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
160 # run was interrupted even before testing started. In those cases, d on't archive the folder. | 160 # run was interrupted even before testing started. In those cases, d on't archive the folder. |
161 # Simply override the current folder contents with new results. | 161 # Simply override the current folder contents with new results. |
162 import errno | 162 import errno |
163 if e.errno == errno.EEXIST: | 163 if e.errno == errno.EEXIST: |
164 _log.warning("No results.html file found in previous run, skippi ng it.") | 164 _log.warning("No results.html file found in previous run, skippi ng it.") |
165 return None | 165 return None |
166 archived_name = ''.join((self._filesystem.basename(self._results_directo ry), "_", timestamp)) | 166 archived_name = ''.join((self._filesystem.basename(self._results_directo ry), "_", timestamp)) |
167 archived_path = self._filesystem.join(self._filesystem.dirname(self._res ults_directory), archived_name) | 167 archived_path = self._filesystem.join(self._filesystem.dirname(self._res ults_directory), archived_name) |
168 self._filesystem.move(self._results_directory, archived_path) | 168 self._filesystem.move(self._results_directory, archived_path) |
169 | 169 |
170 def _clobber_old_archived_results(self): | 170 def _limit_archived_results_count(self): |
171 results_directory_path = self._filesystem.dirname(self._results_director y) | 171 results_directory_path = self._filesystem.dirname(self._results_director y) |
172 file_list = self._filesystem.listdir(results_directory_path) | 172 file_list = self._filesystem.listdir(results_directory_path) |
173 results_directories = [] | 173 results_directories = [] |
174 for dir in file_list: | 174 for dir in file_list: |
175 file_path = self._filesystem.join(results_directory_path, dir) | 175 file_path = self._filesystem.join(results_directory_path, dir) |
176 if self._filesystem.isdir(file_path): | 176 if self._filesystem.isdir(file_path): |
177 results_directories.append(file_path) | 177 results_directories.append(file_path) |
178 results_directories.sort(key=lambda x: self._filesystem.mtime(x)) | 178 results_directories.sort(key=lambda x: self._filesystem.mtime(x)) |
179 self._printer.write_update("Clobbering old archived results in %s" % res ults_directory_path) | 179 self._printer.write_update("Clobbering excess archived results in %s" % results_directory_path) |
180 for dir in results_directories[:-self.ARCHIVED_RESULTS_LIMIT]: | 180 for dir in results_directories[:-self.ARCHIVED_RESULTS_LIMIT]: |
181 self._filesystem.rmtree(dir) | 181 self._filesystem.rmtree(dir) |
182 | 182 |
183 def _set_up_run(self, test_names): | 183 def _set_up_run(self, test_names): |
184 self._printer.write_update("Checking build ...") | 184 self._printer.write_update("Checking build ...") |
185 if self._options.build: | 185 if self._options.build: |
186 exit_code = self._port.check_build(self.needs_servers(test_names), s elf._printer) | 186 exit_code = self._port.check_build(self.needs_servers(test_names), s elf._printer) |
187 if exit_code: | 187 if exit_code: |
188 _log.error("Build check failed") | 188 _log.error("Build check failed") |
189 return exit_code | 189 return exit_code |
190 | 190 |
191 # This must be started before we check the system dependencies, | 191 # This must be started before we check the system dependencies, |
192 # since the helper may do things to make the setup correct. | 192 # since the helper may do things to make the setup correct. |
193 if self._options.pixel_tests: | 193 if self._options.pixel_tests: |
194 self._printer.write_update("Starting pixel test helper ...") | 194 self._printer.write_update("Starting pixel test helper ...") |
195 self._port.start_helper() | 195 self._port.start_helper() |
196 | 196 |
197 # Check that the system dependencies (themes, fonts, ...) are correct. | 197 # Check that the system dependencies (themes, fonts, ...) are correct. |
198 if not self._options.nocheck_sys_deps: | 198 if not self._options.nocheck_sys_deps: |
199 self._printer.write_update("Checking system dependencies ...") | 199 self._printer.write_update("Checking system dependencies ...") |
200 exit_code = self._port.check_sys_deps(self.needs_servers(test_names) ) | 200 exit_code = self._port.check_sys_deps(self.needs_servers(test_names) ) |
201 if exit_code: | 201 if exit_code: |
202 self._port.stop_helper() | 202 self._port.stop_helper() |
203 return exit_code | 203 return exit_code |
204 | 204 |
205 if self._options.enable_versioned_results and self._filesystem.exists(se lf._results_directory): | 205 if self._options.clobber_old_results: |
206 if self._options.clobber_old_results: | 206 self._clobber_old_results() |
207 _log.warning("Flag --enable_versioned_results overrides --clobbe r-old-results.") | 207 elif self._filesystem.exists(self._results_directory): |
208 self._clobber_old_archived_results() | 208 self._limit_archived_results_count() |
209 # Rename the existing results folder for archiving. | 209 # Rename the existing results folder for archiving. |
210 self._rename_results_folder() | 210 self._rename_results_folder() |
211 elif self._options.clobber_old_results: | |
212 self._clobber_old_results() | |
213 | 211 |
214 # Create the output directory if it doesn't already exist. | 212 # Create the output directory if it doesn't already exist. |
215 self._port.host.filesystem.maybe_make_directory(self._results_directory) | 213 self._port.host.filesystem.maybe_make_directory(self._results_directory) |
216 | 214 |
217 self._port.setup_test_run() | 215 self._port.setup_test_run() |
218 return test_run_results.OK_EXIT_STATUS | 216 return test_run_results.OK_EXIT_STATUS |
219 | 217 |
220 def run(self, args): | 218 def run(self, args): |
221 """Run the tests and return a RunDetails object with the results.""" | 219 """Run the tests and return a RunDetails object with the results.""" |
222 start_time = time.time() | 220 start_time = time.time() |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
388 writer = TestResultWriter(self._port._filesystem, self._port, se lf._port.results_directory(), test) | 386 writer = TestResultWriter(self._port._filesystem, self._port, se lf._port.results_directory(), test) |
389 writer.copy_sample_file(sample_file) | 387 writer.copy_sample_file(sample_file) |
390 | 388 |
391 crash_logs = self._port.look_for_new_crash_logs(crashed_processes, start _time) | 389 crash_logs = self._port.look_for_new_crash_logs(crashed_processes, start _time) |
392 if crash_logs: | 390 if crash_logs: |
393 for test, crash_log in crash_logs.iteritems(): | 391 for test, crash_log in crash_logs.iteritems(): |
394 writer = TestResultWriter(self._port._filesystem, self._port, se lf._port.results_directory(), test) | 392 writer = TestResultWriter(self._port._filesystem, self._port, se lf._port.results_directory(), test) |
395 writer.write_crash_log(crash_log) | 393 writer.write_crash_log(crash_log) |
396 | 394 |
397 def _clobber_old_results(self): | 395 def _clobber_old_results(self): |
398 # Just clobber the actual test results directories since the other | 396 results_directory_path = self._filesystem.dirname(self._results_director y) |
399 # files in the results directory are explicitly used for cross-run | 397 file_list = self._filesystem.listdir(results_directory_path) |
400 # tracking. | 398 results_directories = [] |
401 self._printer.write_update("Clobbering old results in %s" % | 399 for dir in file_list: |
402 self._results_directory) | 400 file_path = self._filesystem.join(results_directory_path, dir) |
403 layout_tests_dir = self._port.layout_tests_dir() | 401 if self._filesystem.isdir(file_path): |
404 possible_dirs = self._port.test_dirs() | 402 results_directories.append(file_path) |
405 for dirname in possible_dirs: | 403 self._printer.write_update("Clobbering all archived results in %s" % res ults_directory_path) |
406 if self._filesystem.isdir(self._filesystem.join(layout_tests_dir, di rname)): | 404 for dir in results_directories: |
407 self._filesystem.rmtree(self._filesystem.join(self._results_dire ctory, dirname)) | 405 self._filesystem.rmtree(dir) |
Dirk Pranke
2014/08/20 19:05:10
I think this will delete *any* directory that exis
patro
2014/08/20 19:30:14
Assuming that the test results folder name results
| |
408 | |
409 # Port specific clean-up. | |
410 self._port.clobber_old_port_specific_results() | |
Dirk Pranke
2014/08/20 19:05:10
You should probably keep this call as well.
patro
2014/08/20 19:30:14
Done.
| |
411 | 406 |
412 def _tests_to_retry(self, run_results): | 407 def _tests_to_retry(self, run_results): |
413 return [result.test_name for result in run_results.unexpected_results_by _name.values() if result.type != test_expectations.PASS] | 408 return [result.test_name for result in run_results.unexpected_results_by _name.values() if result.type != test_expectations.PASS] |
414 | 409 |
415 def _write_json_files(self, summarized_full_results, summarized_failing_resu lts, initial_results): | 410 def _write_json_files(self, summarized_full_results, summarized_failing_resu lts, initial_results): |
416 _log.debug("Writing JSON files in %s." % self._results_directory) | 411 _log.debug("Writing JSON files in %s." % self._results_directory) |
417 | 412 |
418 # FIXME: Upload stats.json to the server and delete times_ms. | 413 # FIXME: Upload stats.json to the server and delete times_ms. |
419 times_trie = json_results_generator.test_timings_trie(initial_results.re sults_by_name.values()) | 414 times_trie = json_results_generator.test_timings_trie(initial_results.re sults_by_name.values()) |
420 times_json_path = self._filesystem.join(self._results_directory, "times_ ms.json") | 415 times_json_path = self._filesystem.join(self._results_directory, "times_ ms.json") |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
477 return int(worker_name.split('/')[1]) if worker_name else -1 | 472 return int(worker_name.split('/')[1]) if worker_name else -1 |
478 | 473 |
479 stats = {} | 474 stats = {} |
480 for result in initial_results.results_by_name.values(): | 475 for result in initial_results.results_by_name.values(): |
481 if result.type != test_expectations.SKIP: | 476 if result.type != test_expectations.SKIP: |
482 stats[result.test_name] = {'results': (_worker_number(result.wor ker_name), result.test_number, result.pid, int(result.test_run_time * 1000), int (result.total_run_time * 1000))} | 477 stats[result.test_name] = {'results': (_worker_number(result.wor ker_name), result.test_number, result.pid, int(result.test_run_time * 1000), int (result.total_run_time * 1000))} |
483 stats_trie = {} | 478 stats_trie = {} |
484 for name, value in stats.iteritems(): | 479 for name, value in stats.iteritems(): |
485 json_results_generator.add_path_to_trie(name, value, stats_trie) | 480 json_results_generator.add_path_to_trie(name, value, stats_trie) |
486 return stats_trie | 481 return stats_trie |
OLD | NEW |