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 |