| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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) |
| OLD | NEW |