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

Side by Side Diff: appengine/findit/handlers/crash/test/fracas_dashboard_test.py

Issue 2147773002: [Findit] Fix flaky dashboard test. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 import base64 4 import base64
5 import copy 5 import copy
6 from datetime import datetime 6 from datetime import datetime
7 from datetime import time 7 from datetime import time
8 from datetime import timedelta 8 from datetime import timedelta
9 import json 9 import json
10 10
11 import webapp2 11 import webapp2
12 12
13 from testing_utils import testing 13 from testing_utils import testing
14 14
15 from common import time_util 15 from common import time_util
16 from handlers.crash import fracas_dashboard 16 from handlers.crash import fracas_dashboard
17 from model import analysis_status 17 from model import analysis_status
18 from model import result_status 18 from model import result_status
19 from model import triage_status 19 from model import triage_status
20 from model.crash.fracas_crash_analysis import FracasCrashAnalysis 20 from model.crash.fracas_crash_analysis import FracasCrashAnalysis
21 21
22 # TODO: Remove, see crbug.com/624998
23 #pylint: disable=unused-variable
24 22
25 class FracasDashBoardTest(testing.AppengineTestCase): 23 class FracasDashBoardTest(testing.AppengineTestCase):
26 app_module = webapp2.WSGIApplication( 24 app_module = webapp2.WSGIApplication(
27 [('/fracas-dashboard', fracas_dashboard.FracasDashBoard), ], debug=True) 25 [('/fracas-dashboard', fracas_dashboard.FracasDashBoard), ], debug=True)
28 26
29 def setUp(self): 27 def setUp(self):
30 super(FracasDashBoardTest, self).setUp() 28 super(FracasDashBoardTest, self).setUp()
31 self.keys = self._AddAnalysisResults() 29 self.keys = self._AddAnalysisResults()
32 self.fracas_crashes = [] 30 self.fracas_crashes = []
33 for key in self.keys: 31 for key in self.keys:
34 self.fracas_crashes.append(self._GenerateDisplayData(key)) 32 self.fracas_crashes.append(self._GenerateDisplayData(key))
35 33
36 midnight_today = datetime.combine(datetime.utcnow(), time.min) 34 self.default_start_date = datetime(2016, 7, 3, 0, 0, 0, 0)
37 midnight_yesterday = midnight_today - timedelta(days=1) 35 self.default_end_date = datetime(2016, 7, 5, 0, 0, 0, 0)
38 midnight_tomorrow = midnight_today + timedelta(days=1)
39 self.default_start_date = midnight_yesterday
40 self.default_end_date = midnight_tomorrow
41 36
42 def testFracasDashBoardHandler(self): 37 def testFracasDashBoardHandler(self):
43 response = self.test_app.get('/fracas-dashboard') 38 response = self.test_app.get('/fracas-dashboard')
44 self.assertEqual(200, response.status_int) 39 self.assertEqual(200, response.status_int)
45 40
46 def _CreateAnalysisResult(self, crash_identifiers): 41 def _CreateAnalysisResult(self, crash_identifiers):
47 analysis = FracasCrashAnalysis.Create(crash_identifiers) 42 analysis = FracasCrashAnalysis.Create(crash_identifiers)
48 analysis.status = analysis_status.RUNNING 43 analysis.status = analysis_status.RUNNING
49 return analysis 44 return analysis
50 45
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 'suspected_project': 'chromium', 107 'suspected_project': 'chromium',
113 'regression_range': ['53.0.2749.0', '53.0.2750.0']} 108 'regression_range': ['53.0.2749.0', '53.0.2750.0']}
114 analyses[3].found_suspects = True 109 analyses[3].found_suspects = True
115 analyses[4].result = {'found': False, 110 analyses[4].result = {'found': False,
116 'suspected_cls': [], 111 'suspected_cls': [],
117 'suspected_components': ['Blink>API', 'Blink>DOM'], 112 'suspected_components': ['Blink>API', 'Blink>DOM'],
118 'suspected_project': 'chromium', 113 'suspected_project': 'chromium',
119 'regression_range': ['53.0.2749.0', '53.0.2750.0']} 114 'regression_range': ['53.0.2749.0', '53.0.2750.0']}
120 analyses[4].found_suspects = False 115 analyses[4].found_suspects = False
121 116
122 start_request_time = datetime.utcnow()
123 for i, analysis in enumerate(analyses):
124 analysis.requested_time = (start_request_time +
125 timedelta(minutes=10 * i))
126
127 analysis.has_regression_range = not analysis.result[
128 'regression_range'] is None
129
130 self._SetResultsTriageStatus(analyses[0], triage_status.TRIAGED_INCORRECT) 117 self._SetResultsTriageStatus(analyses[0], triage_status.TRIAGED_INCORRECT)
131 self._SetResultsTriageStatus(analyses[1], triage_status.TRIAGED_CORRECT) 118 self._SetResultsTriageStatus(analyses[1], triage_status.TRIAGED_CORRECT)
132 self._SetResultsTriageStatus(analyses[3], triage_status.TRIAGED_CORRECT) 119 self._SetResultsTriageStatus(analyses[3], triage_status.TRIAGED_CORRECT)
133 self._SetResultsTriageStatus(analyses[4], triage_status.TRIAGED_UNSURE) 120 self._SetResultsTriageStatus(analyses[4], triage_status.TRIAGED_UNSURE)
134 121
135 for analysis in analyses: 122 for i, analysis in enumerate(analyses):
123 analysis.requested_time = (datetime(2016, 7, 4, 12, 50, 17, 0) +
124 timedelta(seconds=10 * i))
125 analysis.has_regression_range = not analysis.result[
126 'regression_range'] is None
136 analysis.put() 127 analysis.put()
137 128
138 return keys 129 return keys
139 130
140 def _GenerateDisplayData(self, crash_identifiers): 131 def _GenerateDisplayData(self, crash_identifiers):
141 crash = FracasCrashAnalysis.Get(crash_identifiers) 132 crash = FracasCrashAnalysis.Get(crash_identifiers)
142 return { 133 return {
143 'signature': crash.signature, 134 'signature': crash.signature,
144 'version': crash.crashed_version, 135 'version': crash.crashed_version,
145 'channel': crash.channel, 136 'channel': crash.channel,
(...skipping 16 matching lines...) Expand all
162 self.fracas_crashes[1], 153 self.fracas_crashes[1],
163 self.fracas_crashes[0]], 154 self.fracas_crashes[0]],
164 'end_date': time_util.FormatDatetime(self.default_end_date), 155 'end_date': time_util.FormatDatetime(self.default_end_date),
165 'regression_range_triage_status': '-1', 156 'regression_range_triage_status': '-1',
166 'suspected_cls_triage_status': '-1', 157 'suspected_cls_triage_status': '-1',
167 'found_suspects': '-1', 158 'found_suspects': '-1',
168 'has_regression_range': '-1', 159 'has_regression_range': '-1',
169 'start_date': time_util.FormatDatetime(self.default_start_date) 160 'start_date': time_util.FormatDatetime(self.default_start_date)
170 } 161 }
171 162
172 response_json = self.test_app.get('/fracas-dashboard?format=json') 163 response_json = self.test_app.get('/fracas-dashboard?format=json'
164 '&start_date=2016-07-03'
165 '&end_date=2016-07-05')
173 self.assertEqual(200, response_json.status_int) 166 self.assertEqual(200, response_json.status_int)
174 # TODO: Re-enable, see crbug.com/624998 167 self.assertEqual(expected_result, response_json.json_body)
175 # self.assertEqual(expected_result, response_json.json_body)
176 168
177 def testFilterWithFoundSuspects(self): 169 def testFilterWithFoundSuspects(self):
178 expected_result = { 170 expected_result = {
179 'fracas_crashes': [self.fracas_crashes[3], 171 'fracas_crashes': [self.fracas_crashes[3],
180 self.fracas_crashes[0]], 172 self.fracas_crashes[0]],
181 'end_date': time_util.FormatDatetime(self.default_end_date), 173 'end_date': time_util.FormatDatetime(self.default_end_date),
182 'regression_range_triage_status': '-1', 174 'regression_range_triage_status': '-1',
183 'suspected_cls_triage_status': '-1', 175 'suspected_cls_triage_status': '-1',
184 'found_suspects': 'yes', 176 'found_suspects': 'yes',
185 'has_regression_range': '-1', 177 'has_regression_range': '-1',
186 'start_date': time_util.FormatDatetime(self.default_start_date) 178 'start_date': time_util.FormatDatetime(self.default_start_date)
187 } 179 }
188 180
189 response_json = self.test_app.get( 181 response_json = self.test_app.get(
190 '/fracas-dashboard?found_suspects=yes&format=json') 182 '/fracas-dashboard?found_suspects=yes&format=json'
183 '&start_date=2016-07-03&end_date=2016-07-05')
191 self.assertEqual(200, response_json.status_int) 184 self.assertEqual(200, response_json.status_int)
192 self.assertEqual(expected_result, response_json.json_body) 185 self.assertEqual(expected_result, response_json.json_body)
193 186
194 def testFilterWithHasRegression(self): 187 def testFilterWithHasRegression(self):
195 expected_result = { 188 expected_result = {
196 'fracas_crashes': [self.fracas_crashes[4], 189 'fracas_crashes': [self.fracas_crashes[4],
197 self.fracas_crashes[3], 190 self.fracas_crashes[3],
198 self.fracas_crashes[2]], 191 self.fracas_crashes[2]],
199 'end_date': time_util.FormatDatetime(self.default_end_date), 192 'end_date': time_util.FormatDatetime(self.default_end_date),
200 'regression_range_triage_status': '-1', 193 'regression_range_triage_status': '-1',
201 'suspected_cls_triage_status': '-1', 194 'suspected_cls_triage_status': '-1',
202 'found_suspects': '-1', 195 'found_suspects': '-1',
203 'has_regression_range': 'yes', 196 'has_regression_range': 'yes',
204 'start_date': time_util.FormatDatetime(self.default_start_date) 197 'start_date': time_util.FormatDatetime(self.default_start_date)
205 } 198 }
206 199
207 response_json = self.test_app.get( 200 response_json = self.test_app.get(
208 '/fracas-dashboard?has_regression_range=yes&format=json') 201 '/fracas-dashboard?has_regression_range=yes&format=json'
202 '&start_date=2016-07-03&end_date=2016-07-05')
209 self.assertEqual(200, response_json.status_int) 203 self.assertEqual(200, response_json.status_int)
210 # TODO: Re-enable, see crbug.com/624998 204 self.assertEqual(expected_result, response_json.json_body)
211 # self.assertEqual(expected_result, response_json.json_body)
212 205
213 def testFilterWithSuspectsUntriaged(self): 206 def testFilterWithSuspectsUntriaged(self):
214 expected_result = { 207 expected_result = {
215 'fracas_crashes': [self.fracas_crashes[2]], 208 'fracas_crashes': [self.fracas_crashes[2]],
216 'end_date': time_util.FormatDatetime(self.default_end_date), 209 'end_date': time_util.FormatDatetime(self.default_end_date),
217 'regression_range_triage_status': '-1', 210 'regression_range_triage_status': '-1',
218 'suspected_cls_triage_status': str(triage_status.UNTRIAGED), 211 'suspected_cls_triage_status': str(triage_status.UNTRIAGED),
219 'found_suspects': '-1', 212 'found_suspects': '-1',
220 'has_regression_range': '-1', 213 'has_regression_range': '-1',
221 'start_date': time_util.FormatDatetime(self.default_start_date) 214 'start_date': time_util.FormatDatetime(self.default_start_date)
222 } 215 }
223 216
224 response_json = self.test_app.get( 217 response_json = self.test_app.get(
225 '/fracas-dashboard?suspected_cls_triage_status=%d&format=json' % 218 '/fracas-dashboard?suspected_cls_triage_status=%d&format=json'
226 triage_status.UNTRIAGED) 219 '&start_date=2016-07-03&end_date=2016-07-05' % triage_status.UNTRIAGED)
227 self.assertEqual(200, response_json.status_int) 220 self.assertEqual(200, response_json.status_int)
228 self.assertEqual(expected_result, response_json.json_body) 221 self.assertEqual(expected_result, response_json.json_body)
229 222
230 def testFilterWithSuspectsTriagedUnsure(self): 223 def testFilterWithSuspectsTriagedUnsure(self):
231 expected_result = { 224 expected_result = {
232 'fracas_crashes': [self.fracas_crashes[4]], 225 'fracas_crashes': [self.fracas_crashes[4]],
233 'end_date': time_util.FormatDatetime(self.default_end_date), 226 'end_date': time_util.FormatDatetime(self.default_end_date),
234 'regression_range_triage_status': '-1', 227 'regression_range_triage_status': '-1',
235 'suspected_cls_triage_status': str(triage_status.TRIAGED_UNSURE), 228 'suspected_cls_triage_status': str(triage_status.TRIAGED_UNSURE),
236 'found_suspects': '-1', 229 'found_suspects': '-1',
237 'has_regression_range': '-1', 230 'has_regression_range': '-1',
238 'start_date': time_util.FormatDatetime(self.default_start_date) 231 'start_date': time_util.FormatDatetime(self.default_start_date)
239 } 232 }
240 233
241 response_json = self.test_app.get( 234 response_json = self.test_app.get(
242 '/fracas-dashboard?suspected_cls_triage_status=%d&format=json' % 235 '/fracas-dashboard?suspected_cls_triage_status=%d&format=json'
236 '&start_date=2016-07-03&end_date=2016-07-05' %
243 triage_status.TRIAGED_UNSURE) 237 triage_status.TRIAGED_UNSURE)
244 self.assertEqual(200, response_json.status_int) 238 self.assertEqual(200, response_json.status_int)
245 # TODO: Re-enable, see crbug.com/624998 239 self.assertEqual(expected_result, response_json.json_body)
246 # self.assertEqual(expected_result, response_json.json_body)
247 240
248 def testFilterWithRegressionRangeTriagedUnsure(self): 241 def testFilterWithRegressionRangeTriagedUnsure(self):
249 expected_result = { 242 expected_result = {
250 'fracas_crashes': [self.fracas_crashes[4]], 243 'fracas_crashes': [self.fracas_crashes[4]],
251 'end_date': time_util.FormatDatetime(self.default_end_date), 244 'end_date': time_util.FormatDatetime(self.default_end_date),
252 'regression_range_triage_status': str(triage_status.TRIAGED_UNSURE), 245 'regression_range_triage_status': str(triage_status.TRIAGED_UNSURE),
253 'suspected_cls_triage_status': '-1', 246 'suspected_cls_triage_status': '-1',
254 'found_suspects': '-1', 247 'found_suspects': '-1',
255 'has_regression_range': '-1', 248 'has_regression_range': '-1',
256 'start_date': time_util.FormatDatetime(self.default_start_date) 249 'start_date': time_util.FormatDatetime(self.default_start_date)
257 } 250 }
258 251
259 response_json = self.test_app.get( 252 response_json = self.test_app.get(
260 '/fracas-dashboard?regression_range_triage_status=%d&format=json' % 253 '/fracas-dashboard?regression_range_triage_status=%d&format=json'
254 '&start_date=2016-07-03&end_date=2016-07-05' %
261 triage_status.TRIAGED_UNSURE) 255 triage_status.TRIAGED_UNSURE)
262 self.assertEqual(200, response_json.status_int) 256 self.assertEqual(200, response_json.status_int)
263 # TODO: Re-enable, see crbug.com/624998 257 self.assertEqual(expected_result, response_json.json_body)
264 # self.assertEqual(expected_result, response_json.json_body)
265 258
266 def testGetTopCountResults(self): 259 def testGetTopCountResults(self):
267 expected_result = { 260 expected_result = {
268 'fracas_crashes': [self.fracas_crashes[4], 261 'fracas_crashes': [self.fracas_crashes[4],
269 self.fracas_crashes[3]], 262 self.fracas_crashes[3]],
270 'end_date': time_util.FormatDatetime(self.default_end_date), 263 'end_date': time_util.FormatDatetime(self.default_end_date),
271 'regression_range_triage_status': '-1', 264 'regression_range_triage_status': '-1',
272 'suspected_cls_triage_status': '-1', 265 'suspected_cls_triage_status': '-1',
273 'found_suspects': '-1', 266 'found_suspects': '-1',
274 'has_regression_range': '-1', 267 'has_regression_range': '-1',
275 'start_date': time_util.FormatDatetime(self.default_start_date) 268 'start_date': time_util.FormatDatetime(self.default_start_date)
276 } 269 }
277 270
278 response_json = self.test_app.get('/fracas-dashboard?count=2&format=json') 271 response_json = self.test_app.get('/fracas-dashboard?count=2&format=json'
272 '&start_date=2016-07-03'
273 '&end_date=2016-07-05')
279 self.assertEqual(200, response_json.status_int) 274 self.assertEqual(200, response_json.status_int)
280 # TODO: Re-enable, see crbug.com/624998 275 self.assertEqual(expected_result, response_json.json_body)
281 # self.assertEqual(expected_result, response_json.json_body)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698