| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 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 import datetime | 5 import datetime |
| 6 import mock | 6 import mock |
| 7 import re | 7 import re |
| 8 | 8 |
| 9 import webapp2 | 9 import webapp2 |
| 10 import webtest | 10 import webtest |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 analysis.data_points.append(data_point) | 86 analysis.data_points.append(data_point) |
| 87 analysis.status = analysis_status.COMPLETED | 87 analysis.status = analysis_status.COMPLETED |
| 88 analysis.suspected_flake_build_number = 100 | 88 analysis.suspected_flake_build_number = 100 |
| 89 analysis.request_time = datetime.datetime(2016, 10, 01, 12, 10, 00) | 89 analysis.request_time = datetime.datetime(2016, 10, 01, 12, 10, 00) |
| 90 analysis.start_time = datetime.datetime(2016, 10, 01, 12, 10, 05) | 90 analysis.start_time = datetime.datetime(2016, 10, 01, 12, 10, 05) |
| 91 analysis.end_time = datetime.datetime(2016, 10, 01, 13, 10, 00) | 91 analysis.end_time = datetime.datetime(2016, 10, 01, 13, 10, 00) |
| 92 analysis.algorithm_parameters = {'iterations_to_rerun': 100} | 92 analysis.algorithm_parameters = {'iterations_to_rerun': 100} |
| 93 analysis.Save() | 93 analysis.Save() |
| 94 | 94 |
| 95 response = self.test_app.get('/waterfall/check-flake', params={ | 95 response = self.test_app.get('/waterfall/check-flake', params={ |
| 96 'master_name': master_name, | 96 'key': analysis.key.urlsafe(), |
| 97 'builder_name': builder_name, | |
| 98 'build_number': build_number, | |
| 99 'step_name': step_name, | |
| 100 'test_name': test_name, | |
| 101 'format': 'json'}) | 97 'format': 'json'}) |
| 102 | 98 |
| 103 expected_check_flake_result = { | 99 expected_check_flake_result = { |
| 104 'pass_rates': [[int(build_number), success_rate]], | 100 'pass_rates': [[int(build_number), success_rate]], |
| 105 'analysis_status': STATUS_TO_DESCRIPTION.get(analysis.status), | 101 'analysis_status': STATUS_TO_DESCRIPTION.get(analysis.status), |
| 106 'master_name': master_name, | 102 'master_name': master_name, |
| 107 'builder_name': builder_name, | 103 'builder_name': builder_name, |
| 108 'build_number': int(build_number), | 104 'build_number': int(build_number), |
| 109 'step_name': step_name, | 105 'step_name': step_name, |
| 110 'test_name': test_name, | 106 'test_name': test_name, |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 master_name = 'm' | 147 master_name = 'm' |
| 152 builder_name = 'b' | 148 builder_name = 'b' |
| 153 build_number = 123 | 149 build_number = 123 |
| 154 step_name = 's' | 150 step_name = 's' |
| 155 test_name = 't' | 151 test_name = 't' |
| 156 success_rate = 0.9 | 152 success_rate = 0.9 |
| 157 | 153 |
| 158 previous_analysis = MasterFlakeAnalysis.Create( | 154 previous_analysis = MasterFlakeAnalysis.Create( |
| 159 master_name, builder_name, build_number - 1, step_name, test_name) | 155 master_name, builder_name, build_number - 1, step_name, test_name) |
| 160 data_point = DataPoint() | 156 data_point = DataPoint() |
| 161 data_point.build_number = int(build_number) | 157 data_point.build_number = build_number - 1 |
| 162 data_point.pass_rate = success_rate | 158 data_point.pass_rate = success_rate |
| 163 previous_analysis.data_points.append(data_point) | 159 previous_analysis.data_points.append(data_point) |
| 164 previous_analysis.status = analysis_status.COMPLETED | 160 previous_analysis.status = analysis_status.COMPLETED |
| 165 previous_analysis.suspected_flake_build_number = 100 | 161 previous_analysis.suspected_flake_build_number = 100 |
| 166 previous_analysis.request_time = datetime.datetime(2016, 10, 01, 12, 10, 00) | 162 previous_analysis.request_time = datetime.datetime(2016, 10, 01, 12, 10, 00) |
| 167 previous_analysis.start_time = datetime.datetime(2016, 10, 01, 12, 10, 05) | 163 previous_analysis.start_time = datetime.datetime(2016, 10, 01, 12, 10, 05) |
| 168 previous_analysis.end_time = datetime.datetime(2016, 10, 01, 13, 10, 00) | 164 previous_analysis.end_time = datetime.datetime(2016, 10, 01, 13, 10, 00) |
| 169 previous_analysis.algorithm_parameters = {'iterations_to_rerun': 100} | 165 previous_analysis.algorithm_parameters = {'iterations_to_rerun': 100} |
| 170 previous_analysis.Save() | 166 previous_analysis.Save() |
| 171 | 167 |
| 172 previous_request = FlakeAnalysisRequest.Create(test_name, False, None) | 168 previous_request = FlakeAnalysisRequest.Create(test_name, False, None) |
| 173 previous_request.AddBuildStep( | 169 previous_request.AddBuildStep( |
| 174 master_name, builder_name, build_number, step_name, None) | 170 master_name, builder_name, build_number, step_name, None) |
| 175 previous_request.analyses.append(previous_analysis.key) | 171 previous_request.analyses.append(previous_analysis.key) |
| 176 previous_request.Save() | 172 previous_request.Save() |
| 177 | 173 |
| 178 response = self.test_app.get('/waterfall/check-flake', params={ | 174 response = self.test_app.get('/waterfall/check-flake', params={ |
| 179 'master_name': master_name, | 175 'master_name': master_name, |
| 180 'builder_name': builder_name, | 176 'builder_name': builder_name, |
| 181 'build_number': build_number, | 177 'build_number': build_number, |
| 182 'step_name': step_name, | 178 'step_name': step_name, |
| 183 'test_name': test_name, | 179 'test_name': test_name, |
| 184 'format': 'json'}) | 180 'format': 'json'}) |
| 185 | 181 |
| 186 expected_check_flake_result = { | 182 expected_check_flake_result = { |
| 187 'pass_rates': [[int(build_number), success_rate]], | 183 'pass_rates': [[build_number - 1, success_rate]], |
| 188 'analysis_status': STATUS_TO_DESCRIPTION.get(previous_analysis.status), | 184 'analysis_status': STATUS_TO_DESCRIPTION.get(previous_analysis.status), |
| 189 'master_name': master_name, | 185 'master_name': master_name, |
| 190 'builder_name': builder_name, | 186 'builder_name': builder_name, |
| 191 'build_number': int(build_number), | 187 'build_number': build_number - 1, |
| 192 'step_name': step_name, | 188 'step_name': step_name, |
| 193 'test_name': test_name, | 189 'test_name': test_name, |
| 194 'request_time': '2016-10-01 12:10:00 UTC', | 190 'request_time': '2016-10-01 12:10:00 UTC', |
| 195 'task_number': 1, | 191 'task_number': 1, |
| 196 'error': None, | 192 'error': None, |
| 197 'iterations_to_rerun': 100, | 193 'iterations_to_rerun': 100, |
| 198 'pending_time': '00:00:05', | 194 'pending_time': '00:00:05', |
| 199 'duration': '00:59:55', | 195 'duration': '00:59:55', |
| 200 'suspected_flake': { | 196 'suspected_flake': { |
| 201 'build_number': 100, | 197 'build_number': 100, |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 self.assertEqual( | 298 self.assertEqual( |
| 303 CheckFlake()._ValidateInput( | 299 CheckFlake()._ValidateInput( |
| 304 'm', 'b', '1', 's', None, '').get('data', {}).get('error_message'), | 300 'm', 'b', '1', 's', None, '').get('data', {}).get('error_message'), |
| 305 'Test name must be specified') | 301 'Test name must be specified') |
| 306 self.assertEqual( | 302 self.assertEqual( |
| 307 CheckFlake()._ValidateInput( | 303 CheckFlake()._ValidateInput( |
| 308 'm', 'b', '1', 's', 't', 'a').get('data', {}).get('error_message'), | 304 'm', 'b', '1', 's', 't', 'a').get('data', {}).get('error_message'), |
| 309 'Bug id (optional) must be an int') | 305 'Bug id (optional) must be an int') |
| 310 | 306 |
| 311 | 307 |
| OLD | NEW |