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

Side by Side Diff: Tools/Scripts/webkitpy/layout_tests/controllers/manager.py

Issue 23496003: User interruption should still create results.html for run-webkit-tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rework-patchset3 Created 7 years, 3 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 (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 20 matching lines...) Expand all
31 The Manager runs a series of tests (TestType interface) against a set 31 The Manager runs a series of tests (TestType interface) against a set
32 of test files. If a test file fails a TestType, it returns a list of TestFailur e 32 of test files. If a test file fails a TestType, it returns a list of TestFailur e
33 objects to the Manager. The Manager then aggregates the TestFailures to 33 objects to the Manager. The Manager then aggregates the TestFailures to
34 create a final report. 34 create a final report.
35 """ 35 """
36 36
37 import datetime 37 import datetime
38 import json 38 import json
39 import logging 39 import logging
40 import random 40 import random
41 import signal
41 import sys 42 import sys
42 import time 43 import time
43 44
44 from webkitpy.common.net.file_uploader import FileUploader 45 from webkitpy.common.net.file_uploader import FileUploader
45 from webkitpy.layout_tests.controllers.layout_test_finder import LayoutTestFinde r 46 from webkitpy.layout_tests.controllers.layout_test_finder import LayoutTestFinde r
46 from webkitpy.layout_tests.controllers.layout_test_runner import LayoutTestRunne r 47 from webkitpy.layout_tests.controllers.layout_test_runner import LayoutTestRunne r
47 from webkitpy.layout_tests.controllers.test_result_writer import TestResultWrite r 48 from webkitpy.layout_tests.controllers.test_result_writer import TestResultWrite r
48 from webkitpy.layout_tests.layout_package import json_results_generator 49 from webkitpy.layout_tests.layout_package import json_results_generator
49 from webkitpy.layout_tests.models import test_expectations 50 from webkitpy.layout_tests.models import test_expectations
50 from webkitpy.layout_tests.models import test_failures 51 from webkitpy.layout_tests.models import test_failures
51 from webkitpy.layout_tests.models import test_run_results 52 from webkitpy.layout_tests.models import test_run_results
52 from webkitpy.layout_tests.models.test_input import TestInput 53 from webkitpy.layout_tests.models.test_input import TestInput
53 54
55 # This mirrors what the shell normally does.
56 INTERRUPTED_EXIT_STATUS = signal.SIGINT + 128
57
54 _log = logging.getLogger(__name__) 58 _log = logging.getLogger(__name__)
55 59
56 # Builder base URL where we have the archived test results. 60 # Builder base URL where we have the archived test results.
57 BUILDER_BASE_URL = "http://build.chromium.org/buildbot/layout_test_results/" 61 BUILDER_BASE_URL = "http://build.chromium.org/buildbot/layout_test_results/"
58 62
59 TestExpectations = test_expectations.TestExpectations 63 TestExpectations = test_expectations.TestExpectations
60 64
61 65
62 66
63 class Manager(object): 67 class Manager(object):
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 summarized_full_results = test_run_results.summarize_results(self._port, self._expectations, initial_results, retry_results, enabled_pixel_tests_in_retr y) 246 summarized_full_results = test_run_results.summarize_results(self._port, self._expectations, initial_results, retry_results, enabled_pixel_tests_in_retr y)
243 summarized_failing_results = test_run_results.summarize_results(self._po rt, self._expectations, initial_results, retry_results, enabled_pixel_tests_in_r etry, only_include_failing=True) 247 summarized_failing_results = test_run_results.summarize_results(self._po rt, self._expectations, initial_results, retry_results, enabled_pixel_tests_in_r etry, only_include_failing=True)
244 248
245 exit_code = summarized_failing_results['num_regressions'] 249 exit_code = summarized_failing_results['num_regressions']
246 if not self._options.dry_run: 250 if not self._options.dry_run:
247 self._write_json_files(summarized_full_results, summarized_failing_r esults, initial_results) 251 self._write_json_files(summarized_full_results, summarized_failing_r esults, initial_results)
248 self._upload_json_files() 252 self._upload_json_files()
249 253
250 results_path = self._filesystem.join(self._results_directory, "resul ts.html") 254 results_path = self._filesystem.join(self._results_directory, "resul ts.html")
251 self._copy_results_html_file(results_path) 255 self._copy_results_html_file(results_path)
252 if self._options.show_results and (exit_code or (self._options.full_ results_html and initial_results.total_failures)): 256 if initial_results.interrupted:
253 self._port.show_results_html_file(results_path) 257 exit_code = INTERRUPTED_EXIT_STATUS
254 258 else:
255 self._printer.print_results(time.time() - start_time, initial_results, s ummarized_failing_results) 259 if self._options.show_results and (exit_code or (self._options.f ull_results_html and initial_results.total_failures)):
260 self._port.show_results_html_file(results_path)
261 self._printer.print_results(time.time() - start_time, initial_re sults, summarized_failing_results)
Dirk Pranke 2013/09/03 20:55:27 I see that you've changed this so that printer.pri
256 return test_run_results.RunDetails(exit_code, summarized_full_results, s ummarized_failing_results, initial_results, retry_results, enabled_pixel_tests_i n_retry) 262 return test_run_results.RunDetails(exit_code, summarized_full_results, s ummarized_failing_results, initial_results, retry_results, enabled_pixel_tests_i n_retry)
257 263
258 def _run_tests(self, tests_to_run, tests_to_skip, repeat_each, iterations, n um_workers, retrying): 264 def _run_tests(self, tests_to_run, tests_to_skip, repeat_each, iterations, n um_workers, retrying):
259 265
260 test_inputs = [] 266 test_inputs = []
261 for _ in xrange(iterations): 267 for _ in xrange(iterations):
262 for test in tests_to_run: 268 for test in tests_to_run:
263 for _ in xrange(repeat_each): 269 for _ in xrange(repeat_each):
264 test_inputs.append(self._test_input_for_file(test)) 270 test_inputs.append(self._test_input_for_file(test))
265 return self._runner.run_tests(self._expectations, test_inputs, tests_to_ skip, num_workers, retrying) 271 return self._runner.run_tests(self._expectations, test_inputs, tests_to_ skip, num_workers, retrying)
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 return int(worker_name.split('/')[1]) if worker_name else -1 421 return int(worker_name.split('/')[1]) if worker_name else -1
416 422
417 stats = {} 423 stats = {}
418 for result in initial_results.results_by_name.values(): 424 for result in initial_results.results_by_name.values():
419 if result.type != test_expectations.SKIP: 425 if result.type != test_expectations.SKIP:
420 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))} 426 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))}
421 stats_trie = {} 427 stats_trie = {}
422 for name, value in stats.iteritems(): 428 for name, value in stats.iteritems():
423 json_results_generator.add_path_to_trie(name, value, stats_trie) 429 json_results_generator.add_path_to_trie(name, value, stats_trie)
424 return stats_trie 430 return stats_trie
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698