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

Side by Side Diff: appengine/findit/handlers/test/list_analyses_test.py

Issue 1866883002: [Findit] A huge refactoring and some bug fixing. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Fix nit. Created 4 years, 8 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
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 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 datetime 4 import datetime
5 5
6 import webapp2 6 import webapp2
7 7
8 from testing_utils import testing 8 from testing_utils import testing
9 9
10 from handlers import list_analyses 10 from handlers import list_analyses
11 from model.wf_analysis import WfAnalysis 11 from model.wf_analysis import WfAnalysis
12 from model import wf_analysis_status 12 from model import analysis_status
13 from model import wf_analysis_result_status 13 from model import result_status
14 from waterfall import identify_culprit_pipeline 14 from waterfall import identify_culprit_pipeline
15 15
16 16
17 class ListAnalysesTest(testing.AppengineTestCase): 17 class ListAnalysesTest(testing.AppengineTestCase):
18 app_module = webapp2.WSGIApplication( 18 app_module = webapp2.WSGIApplication(
19 [('/list-analyses', list_analyses.ListAnalyses), ], debug=True) 19 [('/list-analyses', list_analyses.ListAnalyses), ], debug=True)
20 20
21 def setUp(self): 21 def setUp(self):
22 super(ListAnalysesTest, self).setUp() 22 super(ListAnalysesTest, self).setUp()
23 23
24 self.stored_dates = self._AddAnalysisResults() 24 self.stored_dates = self._AddAnalysisResults()
25 25
26 def testListAnalysesHandler(self): 26 def testListAnalysesHandler(self):
27 response = self.test_app.get('/list-analyses') 27 response = self.test_app.get('/list-analyses')
28 self.assertEqual(200, response.status_int) 28 self.assertEqual(200, response.status_int)
29 29
30 def _AddAnalysisResult(self, master_name, builder_name, build_number): 30 def _AddAnalysisResult(self, master_name, builder_name, build_number):
31 analysis = WfAnalysis.Create(master_name, builder_name, build_number) 31 analysis = WfAnalysis.Create(master_name, builder_name, build_number)
32 analysis.status = wf_analysis_status.ANALYZING 32 analysis.status = analysis_status.RUNNING
33 analysis.put() 33 analysis.put()
34 return analysis 34 return analysis
35 35
36 def _AddAnalysisResults(self): 36 def _AddAnalysisResults(self):
37 """Create and store dummy data.""" 37 """Create and store dummy data."""
38 analyses = [] 38 analyses = []
39 stored_dates = {} 39 stored_dates = {}
40 def StoreTestBuildDate(analysis_number, start_time): 40 def StoreTestBuildDate(analysis_number, start_time):
41 if datetime: # pragma: no cover 41 if datetime: # pragma: no cover
42 stored_dates[analysis_number] = start_time.strftime( 42 stored_dates[analysis_number] = start_time.strftime(
43 '%Y-%m-%d %H:%M:%S UTC') 43 '%Y-%m-%d %H:%M:%S UTC')
44 44
45 for i in range(0, 10): 45 for i in range(0, 10):
46 analyses.append(self._AddAnalysisResult('m', 'b', i)) 46 analyses.append(self._AddAnalysisResult('m', 'b', i))
47 47
48 self._AddAnalysisResult('chromium.linux', 'Linux GN', 26120) 48 self._AddAnalysisResult('chromium.linux', 'Linux GN', 26120)
49 analyses.append(WfAnalysis.Get('chromium.linux', 'Linux GN', 26120)) 49 analyses.append(WfAnalysis.Get('chromium.linux', 'Linux GN', 26120))
50 50
51 analyses[1].status = wf_analysis_status.ANALYZED 51 analyses[1].status = analysis_status.COMPLETED
52 analyses[2].status = wf_analysis_status.ANALYZED 52 analyses[2].status = analysis_status.COMPLETED
53 analyses[3].status = wf_analysis_status.ANALYZED 53 analyses[3].status = analysis_status.COMPLETED
54 analyses[4].status = wf_analysis_status.ERROR 54 analyses[4].status = analysis_status.ERROR
55 analyses[7].status = wf_analysis_status.ANALYZED 55 analyses[7].status = analysis_status.COMPLETED
56 analyses[9].status = wf_analysis_status.ANALYZED 56 analyses[9].status = analysis_status.COMPLETED
57 analyses[10].status = wf_analysis_status.ANALYZED 57 analyses[10].status = analysis_status.COMPLETED
58 58
59 analyses[2].build_start_time = datetime.datetime.utcnow() 59 analyses[2].build_start_time = datetime.datetime.utcnow()
60 StoreTestBuildDate(2, analyses[2].build_start_time) 60 StoreTestBuildDate(2, analyses[2].build_start_time)
61 analyses[7].build_start_time = (datetime.datetime.utcnow() 61 analyses[7].build_start_time = (datetime.datetime.utcnow()
62 - datetime.timedelta(6)) 62 - datetime.timedelta(6))
63 StoreTestBuildDate(7, analyses[7].build_start_time) 63 StoreTestBuildDate(7, analyses[7].build_start_time)
64 analyses[10].build_start_time = (datetime.datetime.utcnow() 64 analyses[10].build_start_time = (datetime.datetime.utcnow()
65 - datetime.timedelta(4)) 65 - datetime.timedelta(4))
66 StoreTestBuildDate(10, analyses[10].build_start_time) 66 StoreTestBuildDate(10, analyses[10].build_start_time)
67 67
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 ] 244 ]
245 } 245 }
246 246
247 for analysis in analyses: 247 for analysis in analyses:
248 analysis.suspected_cls = identify_culprit_pipeline._GetSuspectedCLs( 248 analysis.suspected_cls = identify_culprit_pipeline._GetSuspectedCLs(
249 analysis.result) 249 analysis.result)
250 analysis.result_status = (identify_culprit_pipeline. 250 analysis.result_status = (identify_culprit_pipeline.
251 _GetResultAnalysisStatus(analysis.result)) 251 _GetResultAnalysisStatus(analysis.result))
252 analysis.put() 252 analysis.put()
253 253
254 analyses[1].result_status = wf_analysis_result_status.FOUND_INCORRECT 254 analyses[1].result_status = result_status.FOUND_INCORRECT
255 analyses[1].put() 255 analyses[1].put()
256 analyses[3].result_status = wf_analysis_result_status.NOT_FOUND_INCORRECT 256 analyses[3].result_status = result_status.NOT_FOUND_INCORRECT
257 analyses[3].put() 257 analyses[3].put()
258 analyses[10].result_status = wf_analysis_result_status.FOUND_CORRECT 258 analyses[10].result_status = result_status.FOUND_CORRECT
259 analyses[10].put() 259 analyses[10].put()
260 260
261 return stored_dates 261 return stored_dates
262 262
263 def testDisplayAggregatedBuildAnalysisResults(self): 263 def testDisplayAggregatedBuildAnalysisResults(self):
264 """Basic test case, no parameters.""" 264 """Basic test case, no parameters."""
265 expected_result = { 265 expected_result = {
266 'analyses': [ 266 'analyses': [
267 { 267 {
268 'master_name': 'chromium.linux', 268 'master_name': 'chromium.linux',
269 'builder_name': 'Linux GN', 269 'builder_name': 'Linux GN',
270 'build_number': 26120, 270 'build_number': 26120,
271 'build_start_time': self.stored_dates.get(10), 271 'build_start_time': self.stored_dates.get(10),
272 'status': 70, 272 'status': 70,
273 'status_description': 'Analyzed', 273 'status_description': 'Completed',
274 'suspected_cls': [ 274 'suspected_cls': [
275 { 275 {
276 'repo_name': 'chromium', 276 'repo_name': 'chromium',
277 'revision': 'r99_10', 277 'revision': 'r99_10',
278 'commit_position': None, 278 'commit_position': None,
279 'url': None 279 'url': None
280 } 280 }
281 ], 281 ],
282 'result_status': 'Correct - Found' 282 'result_status': 'Correct - Found'
283 }, 283 },
284 { 284 {
285 'master_name': 'm', 285 'master_name': 'm',
286 'builder_name': 'b', 286 'builder_name': 'b',
287 'build_number': 1, 287 'build_number': 1,
288 'build_start_time': None, 288 'build_start_time': None,
289 'status': 70, 289 'status': 70,
290 'status_description': 'Analyzed', 290 'status_description': 'Completed',
291 'suspected_cls': [ 291 'suspected_cls': [
292 { 292 {
293 'repo_name': 'chromium', 293 'repo_name': 'chromium',
294 'revision': 'r99_1', 294 'revision': 'r99_1',
295 'commit_position': None, 295 'commit_position': None,
296 'url': None 296 'url': None
297 } 297 }
298 ], 298 ],
299 'result_status': 'Incorrect - Found' 299 'result_status': 'Incorrect - Found'
300 }, 300 },
301 { 301 {
302 'master_name': 'm', 302 'master_name': 'm',
303 'builder_name': 'b', 303 'builder_name': 'b',
304 'build_number': 3, 304 'build_number': 3,
305 'build_start_time': None, 305 'build_start_time': None,
306 'status': 70, 306 'status': 70,
307 'status_description': 'Analyzed', 307 'status_description': 'Completed',
308 'suspected_cls': [], 308 'suspected_cls': [],
309 'result_status': 'Incorrect - Not Found' 309 'result_status': 'Incorrect - Not Found'
310 } 310 }
311 ], 311 ],
312 'triage': '-1', 312 'triage': '-1',
313 'days': '-1', 313 'days': '-1',
314 'count': '-1', 314 'count': '-1',
315 'result_status': '-1' 315 'result_status': '-1'
316 } 316 }
317 317
318 response_json = self.test_app.get('/list-analyses?format=json') 318 response_json = self.test_app.get('/list-analyses?format=json')
319 self.assertEqual(200, response_json.status_int) 319 self.assertEqual(200, response_json.status_int)
320 self.assertEqual(expected_result, response_json.json_body) 320 self.assertEqual(expected_result, response_json.json_body)
321 321
322 def testDisplayAggregatedBuildAnalysisResultsTriage(self): 322 def testDisplayAggregatedBuildAnalysisResultsTriage(self):
323 """Test for parameter triage.""" 323 """Test for parameter triage."""
324 expected_result = { 324 expected_result = {
325 'analyses': [ 325 'analyses': [
326 { 326 {
327 'master_name': 'm', 327 'master_name': 'm',
328 'builder_name': 'b', 328 'builder_name': 'b',
329 'build_number': 1, 329 'build_number': 1,
330 'build_start_time': None, 330 'build_start_time': None,
331 'status': 70, 331 'status': 70,
332 'status_description': 'Analyzed', 332 'status_description': 'Completed',
333 'suspected_cls': [ 333 'suspected_cls': [
334 { 334 {
335 'repo_name': 'chromium', 335 'repo_name': 'chromium',
336 'revision': 'r99_1', 336 'revision': 'r99_1',
337 'commit_position': None, 337 'commit_position': None,
338 'url': None 338 'url': None
339 } 339 }
340 ], 340 ],
341 'result_status': 'Incorrect - Found' 341 'result_status': 'Incorrect - Found'
342 }, 342 },
343 { 343 {
344 'master_name': 'm', 344 'master_name': 'm',
345 'builder_name': 'b', 345 'builder_name': 'b',
346 'build_number': 3, 346 'build_number': 3,
347 'build_start_time': None, 347 'build_start_time': None,
348 'status': 70, 348 'status': 70,
349 'status_description': 'Analyzed', 349 'status_description': 'Completed',
350 'suspected_cls': [], 350 'suspected_cls': [],
351 'result_status': 'Incorrect - Not Found' 351 'result_status': 'Incorrect - Not Found'
352 }, 352 },
353 { 353 {
354 'master_name': 'm', 354 'master_name': 'm',
355 'builder_name': 'b', 355 'builder_name': 'b',
356 'build_number': 7, 356 'build_number': 7,
357 'build_start_time': self.stored_dates.get(7), 357 'build_start_time': self.stored_dates.get(7),
358 'status': 70, 358 'status': 70,
359 'status_description': 'Analyzed', 359 'status_description': 'Completed',
360 'suspected_cls': [ 360 'suspected_cls': [
361 { 361 {
362 'repo_name': 'chromium', 362 'repo_name': 'chromium',
363 'revision': 'r99_2', 363 'revision': 'r99_2',
364 'commit_position': None, 364 'commit_position': None,
365 'url': None 365 'url': None
366 }, 366 },
367 { 367 {
368 'repo_name': 'chromium', 368 'repo_name': 'chromium',
369 'revision': 'r99_6', 369 'revision': 'r99_6',
370 'commit_position': None, 370 'commit_position': None,
371 'url': None 371 'url': None
372 }, 372 },
373 { 373 {
374 'repo_name': 'chromium', 374 'repo_name': 'chromium',
375 'revision': 'r99_1', 375 'revision': 'r99_1',
376 'commit_position': None, 376 'commit_position': None,
377 'url': 'https://chromium.googlesource.com' 377 'url': 'https://chromium.googlesource.com'
378 '/chromium/src/r99_1' 378 '/chromium/src/r99_1'
379 } 379 }
380 ], 380 ],
381 'result_status': 'Untriaged - Found' 381 'result_status': 'Untriaged - Found'
382 }, 382 },
383 { 383 {
384 'master_name': 'm', 384 'master_name': 'm',
385 'builder_name': 'b', 385 'builder_name': 'b',
386 'build_number': 9, 386 'build_number': 9,
387 'build_start_time': None, 387 'build_start_time': None,
388 'status': 70, 388 'status': 70,
389 'status_description': 'Analyzed', 389 'status_description': 'Completed',
390 'suspected_cls': [ 390 'suspected_cls': [
391 { 391 {
392 'repo_name': 'chromium', 392 'repo_name': 'chromium',
393 'revision': 'r99_9', 393 'revision': 'r99_9',
394 'commit_position': None, 394 'commit_position': None,
395 'url': None 395 'url': None
396 } 396 }
397 ], 397 ],
398 'result_status': 'Untriaged - Found' 398 'result_status': 'Untriaged - Found'
399 }, 399 },
400 { 400 {
401 'master_name': 'm', 401 'master_name': 'm',
402 'builder_name': 'b', 402 'builder_name': 'b',
403 'build_number': 2, 403 'build_number': 2,
404 'build_start_time': self.stored_dates.get(2), 404 'build_start_time': self.stored_dates.get(2),
405 'status': 70, 405 'status': 70,
406 'status_description': 'Analyzed', 406 'status_description': 'Completed',
407 'suspected_cls': [], 407 'suspected_cls': [],
408 'result_status': 'Untriaged - Not Found' 408 'result_status': 'Untriaged - Not Found'
409 } 409 }
410 ], 410 ],
411 'triage': '1', 411 'triage': '1',
412 'days': '-1', 412 'days': '-1',
413 'count': '-1', 413 'count': '-1',
414 'result_status': '-1' 414 'result_status': '-1'
415 } 415 }
416 416
417 response_json = self.test_app.get('/list-analyses?format=json&triage=1') 417 response_json = self.test_app.get('/list-analyses?format=json&triage=1')
418 self.assertEqual(200, response_json.status_int) 418 self.assertEqual(200, response_json.status_int)
419 self.assertEqual(expected_result, response_json.json_body) 419 self.assertEqual(expected_result, response_json.json_body)
420 420
421 def testDisplayAggregatedBuildAnalysisResultsCount(self): 421 def testDisplayAggregatedBuildAnalysisResultsCount(self):
422 """Test for parameter count.""" 422 """Test for parameter count."""
423 expected_result = { 423 expected_result = {
424 'analyses': [ 424 'analyses': [
425 { 425 {
426 'master_name': 'chromium.linux', 426 'master_name': 'chromium.linux',
427 'builder_name': 'Linux GN', 427 'builder_name': 'Linux GN',
428 'build_number': 26120, 428 'build_number': 26120,
429 'build_start_time': self.stored_dates.get(10), 429 'build_start_time': self.stored_dates.get(10),
430 'status': 70, 430 'status': 70,
431 'status_description': 'Analyzed', 431 'status_description': 'Completed',
432 'suspected_cls': [ 432 'suspected_cls': [
433 { 433 {
434 'repo_name': 'chromium', 434 'repo_name': 'chromium',
435 'revision': 'r99_10', 435 'revision': 'r99_10',
436 'commit_position': None, 436 'commit_position': None,
437 'url': None 437 'url': None
438 } 438 }
439 ], 439 ],
440 'result_status': 'Correct - Found' 440 'result_status': 'Correct - Found'
441 }, 441 },
442 { 442 {
443 'master_name': 'm', 443 'master_name': 'm',
444 'builder_name': 'b', 444 'builder_name': 'b',
445 'build_number': 1, 445 'build_number': 1,
446 'build_start_time': None, 446 'build_start_time': None,
447 'status': 70, 447 'status': 70,
448 'status_description': 'Analyzed', 448 'status_description': 'Completed',
449 'suspected_cls': [ 449 'suspected_cls': [
450 { 450 {
451 'repo_name': 'chromium', 451 'repo_name': 'chromium',
452 'revision': 'r99_1', 452 'revision': 'r99_1',
453 'commit_position': None, 453 'commit_position': None,
454 'url': None 454 'url': None
455 } 455 }
456 ], 456 ],
457 'result_status': 'Incorrect - Found' 457 'result_status': 'Incorrect - Found'
458 } 458 }
(...skipping 11 matching lines...) Expand all
470 def testDisplayAggregatedBuildAnalysisResultsResultStatus(self): 470 def testDisplayAggregatedBuildAnalysisResultsResultStatus(self):
471 """Test for parameter result_status.""" 471 """Test for parameter result_status."""
472 expected_result = { 472 expected_result = {
473 'analyses': [ 473 'analyses': [
474 { 474 {
475 'master_name': 'm', 475 'master_name': 'm',
476 'builder_name': 'b', 476 'builder_name': 'b',
477 'build_number': 1, 477 'build_number': 1,
478 'build_start_time': None, 478 'build_start_time': None,
479 'status': 70, 479 'status': 70,
480 'status_description': 'Analyzed', 480 'status_description': 'Completed',
481 'suspected_cls': [ 481 'suspected_cls': [
482 { 482 {
483 'repo_name': 'chromium', 483 'repo_name': 'chromium',
484 'revision': 'r99_1', 484 'revision': 'r99_1',
485 'commit_position': None, 485 'commit_position': None,
486 'url': None 486 'url': None
487 } 487 }
488 ], 488 ],
489 'result_status': 'Incorrect - Found' 489 'result_status': 'Incorrect - Found'
490 } 490 }
(...skipping 15 matching lines...) Expand all
506 This test case will only run locally, because it may cause flaky failure. 506 This test case will only run locally, because it may cause flaky failure.
507 """ 507 """
508 expected_result = { 508 expected_result = {
509 'analyses': [ 509 'analyses': [
510 { 510 {
511 'master_name': 'm', 511 'master_name': 'm',
512 'builder_name': 'b', 512 'builder_name': 'b',
513 'build_number': 2, 513 'build_number': 2,
514 'build_start_time': self.stored_dates.get(2), 514 'build_start_time': self.stored_dates.get(2),
515 'status': 70, 515 'status': 70,
516 'status_description': 'Analyzed', 516 'status_description': 'Completed',
517 'suspected_cls': [], 517 'suspected_cls': [],
518 'result_status': 'Untriaged - Not Found' 518 'result_status': 'Untriaged - Not Found'
519 }, 519 },
520 { 520 {
521 'master_name': 'chromium.linux', 521 'master_name': 'chromium.linux',
522 'builder_name': 'Linux GN', 522 'builder_name': 'Linux GN',
523 'build_number': 26120, 523 'build_number': 26120,
524 'build_start_time': self.stored_dates.get(10), 524 'build_start_time': self.stored_dates.get(10),
525 'status': 70, 525 'status': 70,
526 'status_description': 'Analyzed', 526 'status_description': 'Completed',
527 'suspected_cls': [ 527 'suspected_cls': [
528 { 528 {
529 'repo_name': 'chromium', 529 'repo_name': 'chromium',
530 'revision': 'r99_10', 530 'revision': 'r99_10',
531 'commit_position': None, 531 'commit_position': None,
532 'url': None 532 'url': None
533 } 533 }
534 ], 534 ],
535 'result_status': 'Correct - Found' 535 'result_status': 'Correct - Found'
536 } 536 }
(...skipping 15 matching lines...) Expand all
552 This test case will only run locally, because it may cause flaky failure. 552 This test case will only run locally, because it may cause flaky failure.
553 """ 553 """
554 expected_result = { 554 expected_result = {
555 'analyses': [ 555 'analyses': [
556 { 556 {
557 'master_name': 'chromium.linux', 557 'master_name': 'chromium.linux',
558 'builder_name': 'Linux GN', 558 'builder_name': 'Linux GN',
559 'build_number': 26120, 559 'build_number': 26120,
560 'build_start_time': self.stored_dates.get(10), 560 'build_start_time': self.stored_dates.get(10),
561 'status': 70, 561 'status': 70,
562 'status_description': 'Analyzed', 562 'status_description': 'Completed',
563 'suspected_cls': [ 563 'suspected_cls': [
564 { 564 {
565 'repo_name': 'chromium', 565 'repo_name': 'chromium',
566 'revision': 'r99_10', 566 'revision': 'r99_10',
567 'commit_position': None, 567 'commit_position': None,
568 'url': None 568 'url': None
569 } 569 }
570 ], 570 ],
571 'result_status': 'Correct - Found' 571 'result_status': 'Correct - Found'
572 } 572 }
573 ], 573 ],
574 'triage': '-1', 574 'triage': '-1',
575 'days': '6', 575 'days': '6',
576 'count': '-1', 576 'count': '-1',
577 'result_status': '0' 577 'result_status': '0'
578 } 578 }
579 579
580 response_json = self.test_app.get( 580 response_json = self.test_app.get(
581 '/list-analyses?format=json&result_status=0&days=6') 581 '/list-analyses?format=json&result_status=0&days=6')
582 self.assertEqual(200, response_json.status_int) 582 self.assertEqual(200, response_json.status_int)
583 self.assertEqual(expected_result, response_json.json_body) 583 self.assertEqual(expected_result, response_json.json_body)
OLDNEW
« no previous file with comments | « appengine/findit/handlers/test/handlers_util_test.py ('k') | appengine/findit/handlers/test/monitor_alerts_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698