| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 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 """Uploads the results to the flakiness dashboard server.""" | 5 """Uploads the results to the flakiness dashboard server.""" |
| 6 # pylint: disable=E1002,R0201 | 6 # pylint: disable=E1002,R0201 |
| 7 | 7 |
| 8 import logging | 8 import logging |
| 9 import os | 9 import os |
| 10 import shutil | 10 import shutil |
| 11 import sys | |
| 12 import tempfile | 11 import tempfile |
| 13 import xml | 12 import xml |
| 14 | 13 |
| 15 | 14 |
| 16 # Include path when ran from a Chromium checkout. | |
| 17 sys.path.append( | |
| 18 os.path.abspath(os.path.join(os.path.dirname(__file__), | |
| 19 os.pardir, os.pardir, os.pardir, os.pardir, | |
| 20 'third_party', 'WebKit', 'Tools', 'Scripts'))) | |
| 21 | |
| 22 # Include path when ran from a WebKit checkout. | |
| 23 sys.path.append( | |
| 24 os.path.abspath(os.path.join(os.path.dirname(__file__), | |
| 25 os.pardir, os.pardir, os.pardir, os.pardir, | |
| 26 os.pardir, os.pardir, os.pardir, | |
| 27 'Tools', 'Scripts'))) | |
| 28 | |
| 29 # pylint: disable=F0401 | |
| 30 from webkitpy.common.system import executive, filesystem | |
| 31 from webkitpy.layout_tests.layout_package import json_results_generator | |
| 32 # pylint: enable=F0401 | |
| 33 | |
| 34 #TODO(craigdh): pylib/utils/ should not depend on pylib/. | 15 #TODO(craigdh): pylib/utils/ should not depend on pylib/. |
| 35 from pylib import cmd_helper | 16 from pylib import cmd_helper |
| 36 from pylib import constants | 17 from pylib import constants |
| 18 from pylib.utils import json_results_generator |
| 37 from pylib.utils import repo_utils | 19 from pylib.utils import repo_utils |
| 38 | 20 |
| 39 | 21 |
| 40 # The JSONResultsGenerator gets the filesystem.join operation from the Port | |
| 41 # object. Creating a Port object requires specifying information that only | |
| 42 # makes sense for running WebKit layout tests, so we provide a dummy object | |
| 43 # that contains the fields required by the generator. | |
| 44 class PortDummy(object): | |
| 45 def __init__(self): | |
| 46 self._executive = executive.Executive() | |
| 47 self._filesystem = filesystem.FileSystem() | |
| 48 | |
| 49 | 22 |
| 50 class JSONResultsGenerator(json_results_generator.JSONResultsGeneratorBase): | 23 class JSONResultsGenerator(json_results_generator.JSONResultsGeneratorBase): |
| 51 """Writes test results to a JSON file and handles uploading that file to | 24 """Writes test results to a JSON file and handles uploading that file to |
| 52 the test results server. | 25 the test results server. |
| 53 """ | 26 """ |
| 54 def __init__(self, port, builder_name, build_name, build_number, tmp_folder, | 27 def __init__(self, builder_name, build_name, build_number, tmp_folder, |
| 55 test_results_map, test_results_server, test_type, master_name): | 28 test_results_map, test_results_server, test_type, master_name): |
| 56 super(JSONResultsGenerator, self).__init__( | 29 super(JSONResultsGenerator, self).__init__( |
| 57 port=port, | |
| 58 builder_name=builder_name, | 30 builder_name=builder_name, |
| 59 build_name=build_name, | 31 build_name=build_name, |
| 60 build_number=build_number, | 32 build_number=build_number, |
| 61 results_file_base_path=tmp_folder, | 33 results_file_base_path=tmp_folder, |
| 62 builder_base_url=None, | 34 builder_base_url=None, |
| 63 test_results_map=test_results_map, | 35 test_results_map=test_results_map, |
| 64 svn_repositories=(('webkit', 'third_party/WebKit'), | 36 svn_repositories=(('webkit', 'third_party/WebKit'), |
| 65 ('chrome', '.')), | 37 ('chrome', '.')), |
| 66 test_results_server=test_results_server, | 38 test_results_server=test_results_server, |
| 67 test_type=test_type, | 39 test_type=test_type, |
| 68 master_name=master_name) | 40 master_name=master_name) |
| 69 | 41 |
| 70 #override | 42 #override |
| 71 def _get_modifier_char(self, test_name): | 43 def _GetModifierChar(self, test_name): |
| 72 if test_name not in self._test_results_map: | 44 if test_name not in self._test_results_map: |
| 73 return self.__class__.NO_DATA_RESULT | 45 return self.__class__.NO_DATA_RESULT |
| 74 | 46 |
| 75 return self._test_results_map[test_name].modifier | 47 return self._test_results_map[test_name].modifier |
| 76 | 48 |
| 77 #override | 49 #override |
| 78 def _get_svn_revision(self, in_directory): | 50 def _GetSVNRevision(self, in_directory): |
| 79 """Returns the git/svn revision for the given directory. | 51 """Returns the git/svn revision for the given directory. |
| 80 | 52 |
| 81 Args: | 53 Args: |
| 82 in_directory: The directory relative to src. | 54 in_directory: The directory relative to src. |
| 83 """ | 55 """ |
| 84 def _is_git_directory(in_directory): | 56 def _is_git_directory(in_directory): |
| 85 """Returns true if the given directory is in a git repository. | 57 """Returns true if the given directory is in a git repository. |
| 86 | 58 |
| 87 Args: | 59 Args: |
| 88 in_directory: The directory path to be tested. | 60 in_directory: The directory path to be tested. |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 self._test_results_map[single_test_result.GetName()] = test_result | 140 self._test_results_map[single_test_result.GetName()] = test_result |
| 169 | 141 |
| 170 def Upload(self, test_results_server): | 142 def Upload(self, test_results_server): |
| 171 if not self._test_results_map: | 143 if not self._test_results_map: |
| 172 return | 144 return |
| 173 | 145 |
| 174 tmp_folder = tempfile.mkdtemp() | 146 tmp_folder = tempfile.mkdtemp() |
| 175 | 147 |
| 176 try: | 148 try: |
| 177 results_generator = JSONResultsGenerator( | 149 results_generator = JSONResultsGenerator( |
| 178 port=PortDummy(), | |
| 179 builder_name=self._builder_name, | 150 builder_name=self._builder_name, |
| 180 build_name=self._build_name, | 151 build_name=self._build_name, |
| 181 build_number=self._build_number, | 152 build_number=self._build_number, |
| 182 tmp_folder=tmp_folder, | 153 tmp_folder=tmp_folder, |
| 183 test_results_map=self._test_results_map, | 154 test_results_map=self._test_results_map, |
| 184 test_results_server=test_results_server, | 155 test_results_server=test_results_server, |
| 185 test_type=self._tests_type, | 156 test_type=self._tests_type, |
| 186 master_name=self._master_name) | 157 master_name=self._master_name) |
| 187 | 158 |
| 188 json_files = ["incremental_results.json", "times_ms.json"] | 159 json_files = ["incremental_results.json", "times_ms.json"] |
| 189 results_generator.generate_json_output() | 160 results_generator.GenerateJSONOutput() |
| 190 results_generator.generate_times_ms_file() | 161 results_generator.GenerateTimesMSFile() |
| 191 results_generator.upload_json_files(json_files) | 162 results_generator.UploadJSONFiles(json_files) |
| 192 except Exception as e: | 163 except Exception as e: |
| 193 logging.error("Uploading results to test server failed: %s." % e) | 164 logging.error("Uploading results to test server failed: %s." % e) |
| 194 finally: | 165 finally: |
| 195 shutil.rmtree(tmp_folder) | 166 shutil.rmtree(tmp_folder) |
| 196 | 167 |
| 197 | 168 |
| 198 def Upload(results, flakiness_dashboard_server, test_type): | 169 def Upload(results, flakiness_dashboard_server, test_type): |
| 199 """Reports test results to the flakiness dashboard for Chrome for Android. | 170 """Reports test results to the flakiness dashboard for Chrome for Android. |
| 200 | 171 |
| 201 Args: | 172 Args: |
| 202 results: test results. | 173 results: test results. |
| 203 flakiness_dashboard_server: the server to upload the results to. | 174 flakiness_dashboard_server: the server to upload the results to. |
| 204 test_type: the type of the tests (as displayed by the flakiness dashboard). | 175 test_type: the type of the tests (as displayed by the flakiness dashboard). |
| 205 """ | 176 """ |
| 206 uploader = ResultsUploader(test_type) | 177 uploader = ResultsUploader(test_type) |
| 207 uploader.AddResults(results) | 178 uploader.AddResults(results) |
| 208 uploader.Upload(flakiness_dashboard_server) | 179 uploader.Upload(flakiness_dashboard_server) |
| OLD | NEW |