Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 102 def expectation_for_type(self, type_char): | 102 def expectation_for_type(self, type_char): |
| 103 return self._json[self.builder_name][self.FAILURE_MAP_KEY][type_char] | 103 return self._json[self.builder_name][self.FAILURE_MAP_KEY][type_char] |
| 104 | 104 |
| 105 # Knowing how to parse the run-length-encoded values in results.json | 105 # Knowing how to parse the run-length-encoded values in results.json |
| 106 # is a detail of this class. | 106 # is a detail of this class. |
| 107 def occurances_and_type_from_result_item(self, item): | 107 def occurances_and_type_from_result_item(self, item): |
| 108 return item[self.RLE_LENGTH], item[self.RLE_VALUE] | 108 return item[self.RLE_LENGTH], item[self.RLE_VALUE] |
| 109 | 109 |
| 110 | 110 |
| 111 class BotTestExpectationsFactory(object): | 111 class BotTestExpectationsFactory(object): |
| 112 RESULTS_URL_PREFIX = 'http://test-results.appspot.com/testfile?master=Chromi umWebkit&testtype=webkit_tests&name=results-small.json&builder=' | 112 RESULTS_URL_PREFIX = 'http://test-results.appspot.com/testfile?master=Chromi umWebkit&testtype=webkit_tests&name=results-small.json&builder=' |
|
qyearsley
2016/07/08 17:55:03
Question, unrelated to this CL:
Do you know where
bokan
2016/07/08 21:12:59
Sorry, I don't. Ojan or someone more familiar with
| |
| 113 | 113 |
| 114 def __init__(self, builders): | 114 def __init__(self, builders): |
| 115 self.builders = builders | 115 self.builders = builders |
| 116 | 116 |
| 117 def _results_json_for_port(self, port_name, builder_category): | 117 def _results_json_for_port(self, port_name, builder_category): |
| 118 builder = self.builders.builder_name_for_port_name(port_name) | 118 builder = self.builders.builder_name_for_port_name(port_name) |
| 119 if not builder: | 119 if not builder: |
| 120 return None | 120 return None |
| 121 return self._results_json_for_builder(builder) | 121 return self._results_json_for_builder(builder) |
| 122 | 122 |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 220 additional_expectations = set(e for e in result_exp if not expected( e)) | 220 additional_expectations = set(e for e in result_exp if not expected( e)) |
| 221 | 221 |
| 222 # Test did not have unexpected results. | 222 # Test did not have unexpected results. |
| 223 if not additional_expectations: | 223 if not additional_expectations: |
| 224 continue | 224 continue |
| 225 | 225 |
| 226 expectations.update(additional_expectations) | 226 expectations.update(additional_expectations) |
| 227 unexpected_results_by_path[test_path] = sorted(map(exp_to_string, ex pectations)) | 227 unexpected_results_by_path[test_path] = sorted(map(exp_to_string, ex pectations)) |
| 228 return unexpected_results_by_path | 228 return unexpected_results_by_path |
| 229 | 229 |
| 230 def all_results_by_path(self): | |
| 231 results_by_path = {} | |
| 232 for test_path, entry in self.results_json.walk_results(): | |
| 233 results_dict = entry.get(self.results_json.RESULTS_KEY, {}) | |
| 234 | |
| 235 result_types = self._all_types_in_results(results_dict) | |
| 236 | |
| 237 if not result_types: | |
| 238 continue | |
| 239 | |
| 240 # Distinct results as non-encoded strings. | |
|
qyearsley
2016/07/08 17:55:03
Besides this comment, there are a couple ways that
bokan
2016/07/08 21:13:00
Done.
| |
| 241 result_strings = map(self.results_json.expectation_for_type, result_ types) | |
| 242 | |
| 243 results_by_path[test_path] = sorted(result_strings) | |
| 244 return results_by_path | |
| 245 | |
| 230 def expectation_lines(self, only_ignore_very_flaky): | 246 def expectation_lines(self, only_ignore_very_flaky): |
| 231 lines = [] | 247 lines = [] |
| 232 for test_path, entry in self.results_json.walk_results(): | 248 for test_path, entry in self.results_json.walk_results(): |
| 233 flaky_types = self._flaky_types_in_results(entry, only_ignore_very_f laky) | 249 flaky_types = self._flaky_types_in_results(entry, only_ignore_very_f laky) |
| 234 if len(flaky_types) > 1: | 250 if len(flaky_types) > 1: |
| 235 line = self._line_from_test_and_flaky_types(test_path, flaky_typ es) | 251 line = self._line_from_test_and_flaky_types(test_path, flaky_typ es) |
| 236 lines.append(line) | 252 lines.append(line) |
| 237 return lines | 253 return lines |
| 238 | 254 |
| 239 def _all_types_in_results(self, run_length_encoded_results): | 255 def _all_types_in_results(self, run_length_encoded_results): |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 296 # The only thing we lose by not fixing this is that a test that was flaky | 312 # The only thing we lose by not fixing this is that a test that was flaky |
| 297 # and got fixed will still get printed out until 100 runs have p assed. | 313 # and got fixed will still get printed out until 100 runs have p assed. |
| 298 if not TestExpectations.result_was_expected(result_enum, latest_ expectations, test_needs_rebaselining=False): | 314 if not TestExpectations.result_was_expected(result_enum, latest_ expectations, test_needs_rebaselining=False): |
| 299 has_unexpected_results = True | 315 has_unexpected_results = True |
| 300 break | 316 break |
| 301 | 317 |
| 302 if has_unexpected_results: | 318 if has_unexpected_results: |
| 303 flaky_results = flaky_results.union(set(result_types)) | 319 flaky_results = flaky_results.union(set(result_types)) |
| 304 | 320 |
| 305 return flaky_results | 321 return flaky_results |
| OLD | NEW |