| 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 from testing_utils import testing | 5 from testing_utils import testing |
| 6 | 6 |
| 7 from handlers import handlers_util | 7 from handlers import handlers_util |
| 8 from model.wf_analysis import WfAnalysis | 8 from model.wf_analysis import WfAnalysis |
| 9 from model import wf_analysis_status | 9 from model import wf_analysis_status |
| 10 from model.wf_swarming_task import WfSwarmingTask | 10 from model.wf_swarming_task import WfSwarmingTask |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 analysis.failure_result_map = { | 192 analysis.failure_result_map = { |
| 193 'compile': 'm/b/121' | 193 'compile': 'm/b/121' |
| 194 } | 194 } |
| 195 analysis.put() | 195 analysis.put() |
| 196 | 196 |
| 197 result = handlers_util.GetAllTryJobResults( | 197 result = handlers_util.GetAllTryJobResults( |
| 198 self.master_name, self.builder_name, self.build_number) | 198 self.master_name, self.builder_name, self.build_number) |
| 199 | 199 |
| 200 expected_result = { | 200 expected_result = { |
| 201 'compile': { | 201 'compile': { |
| 202 'step': 'compile', | 202 'step_name': 'compile', |
| 203 'test': 'N/A', | 203 'test_name': 'N/A', |
| 204 'try_job_key': 'm/b/121' | 204 'try_job_key': 'm/b/121' |
| 205 } | 205 } |
| 206 } | 206 } |
| 207 | 207 |
| 208 self.assertEqual(expected_result, result) | 208 self.assertEqual(expected_result, result) |
| 209 | 209 |
| 210 def testGetTryJobResultOnlyReturnStatusIfPending(self): | 210 def testGetTryJobResultOnlyReturnStatusIfPending(self): |
| 211 analysis = WfAnalysis.Create( | 211 analysis = WfAnalysis.Create( |
| 212 self.master_name, self.builder_name, self.build_number) | 212 self.master_name, self.builder_name, self.build_number) |
| 213 analysis.failure_result_map = { | 213 analysis.failure_result_map = { |
| 214 'compile': 'm/b/121' | 214 'compile': 'm/b/121' |
| 215 } | 215 } |
| 216 analysis.put() | 216 analysis.put() |
| 217 | 217 |
| 218 try_job = WfTryJob.Create( | 218 try_job = WfTryJob.Create( |
| 219 self.master_name, self.builder_name, self.build_number) | 219 self.master_name, self.builder_name, self.build_number) |
| 220 try_job.put() | 220 try_job.put() |
| 221 | 221 |
| 222 result = handlers_util.GetAllTryJobResults( | 222 result = handlers_util.GetAllTryJobResults( |
| 223 self.master_name, self.builder_name, self.build_number) | 223 self.master_name, self.builder_name, self.build_number) |
| 224 | 224 |
| 225 expected_result = { | 225 expected_result = { |
| 226 'compile': { | 226 'compile': { |
| 227 'step': 'compile', | 227 'step_name': 'compile', |
| 228 'test': 'N/A', | 228 'test_name': 'N/A', |
| 229 'try_job_key': 'm/b/121', | 229 'try_job_key': 'm/b/121', |
| 230 'status': 'Pending' | 230 'status': 'Pending' |
| 231 } | 231 } |
| 232 } | 232 } |
| 233 | 233 |
| 234 self.assertEqual(expected_result, result) | 234 self.assertEqual(expected_result, result) |
| 235 | 235 |
| 236 def testGetTryJobResultOnlyReturnUrlIfStarts(self): | 236 def testGetTryJobResultOnlyReturnUrlIfStarts(self): |
| 237 analysis = WfAnalysis.Create( | 237 analysis = WfAnalysis.Create( |
| 238 self.master_name, self.builder_name, self.build_number) | 238 self.master_name, self.builder_name, self.build_number) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 251 'builders/linux_chromium_variable/builds/121') | 251 'builders/linux_chromium_variable/builds/121') |
| 252 } | 252 } |
| 253 ] | 253 ] |
| 254 try_job.put() | 254 try_job.put() |
| 255 | 255 |
| 256 result = handlers_util.GetAllTryJobResults( | 256 result = handlers_util.GetAllTryJobResults( |
| 257 self.master_name, self.builder_name, self.build_number) | 257 self.master_name, self.builder_name, self.build_number) |
| 258 | 258 |
| 259 expected_result = { | 259 expected_result = { |
| 260 'compile': { | 260 'compile': { |
| 261 'step': 'compile', | 261 'step_name': 'compile', |
| 262 'test': 'N/A', | 262 'test_name': 'N/A', |
| 263 'try_job_key': 'm/b/121', | 263 'try_job_key': 'm/b/121', |
| 264 'status': 'Running', | 264 'status': 'Running', |
| 265 'try_job_build_number': 121, | 265 'try_job_build_number': 121, |
| 266 'try_job_url': ('http://build.chromium.org/p/tryserver.chromium.' | 266 'try_job_url': ('http://build.chromium.org/p/tryserver.chromium.' |
| 267 'linux/builders/linux_chromium_variable/builds/121') | 267 'linux/builders/linux_chromium_variable/builds/121') |
| 268 } | 268 } |
| 269 } | 269 } |
| 270 self.assertEqual(expected_result, result) | 270 self.assertEqual(expected_result, result) |
| 271 | 271 |
| 272 def testGetTryJobResultOnlyReturnStatusIfError(self): | 272 def testGetTryJobResultOnlyReturnStatusIfError(self): |
| (...skipping 12 matching lines...) Expand all Loading... |
| 285 'try_job_id': '1' | 285 'try_job_id': '1' |
| 286 } | 286 } |
| 287 ] | 287 ] |
| 288 try_job.put() | 288 try_job.put() |
| 289 | 289 |
| 290 result = handlers_util.GetAllTryJobResults( | 290 result = handlers_util.GetAllTryJobResults( |
| 291 self.master_name, self.builder_name, self.build_number) | 291 self.master_name, self.builder_name, self.build_number) |
| 292 | 292 |
| 293 expected_result = { | 293 expected_result = { |
| 294 'compile': { | 294 'compile': { |
| 295 'step': 'compile', | 295 'step_name': 'compile', |
| 296 'test': 'N/A', | 296 'test_name': 'N/A', |
| 297 'try_job_key': 'm/b/121', | 297 'try_job_key': 'm/b/121', |
| 298 'status': 'Error' | 298 'status': 'Error' |
| 299 } | 299 } |
| 300 } | 300 } |
| 301 | 301 |
| 302 self.assertEqual(expected_result, result) | 302 self.assertEqual(expected_result, result) |
| 303 | 303 |
| 304 def testGetTryJobResultWhenTryJobCompleted(self): | 304 def testGetTryJobResultWhenTryJobCompleted(self): |
| 305 analysis = WfAnalysis.Create( | 305 analysis = WfAnalysis.Create( |
| 306 self.master_name, self.builder_name, self.build_number) | 306 self.master_name, self.builder_name, self.build_number) |
| (...skipping 23 matching lines...) Expand all Loading... |
| 330 } | 330 } |
| 331 } | 331 } |
| 332 ] | 332 ] |
| 333 try_job.put() | 333 try_job.put() |
| 334 | 334 |
| 335 result = handlers_util.GetAllTryJobResults( | 335 result = handlers_util.GetAllTryJobResults( |
| 336 self.master_name, self.builder_name, self.build_number) | 336 self.master_name, self.builder_name, self.build_number) |
| 337 | 337 |
| 338 expected_result = { | 338 expected_result = { |
| 339 'compile': { | 339 'compile': { |
| 340 'step': 'compile', | 340 'step_name': 'compile', |
| 341 'test': 'N/A', | 341 'test_name': 'N/A', |
| 342 'try_job_key': 'm/b/121', | 342 'try_job_key': 'm/b/121', |
| 343 'try_job_build_number': 121, | 343 'try_job_build_number': 121, |
| 344 'status': 'Completed', | 344 'status': 'Completed', |
| 345 'try_job_url': ( | 345 'try_job_url': ( |
| 346 'http://build.chromium.org/p/tryserver.chromium.linux/' | 346 'http://build.chromium.org/p/tryserver.chromium.linux/' |
| 347 'builders/linux_chromium_variable/builds/121'), | 347 'builders/linux_chromium_variable/builds/121'), |
| 348 'revision': 'rev2', | 348 'revision': 'rev2', |
| 349 'commit_position': '2', | 349 'commit_position': '2', |
| 350 'review_url': 'url_2' | 350 'review_url': 'url_2' |
| 351 } | 351 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 374 'builders/linux_chromium_variable/builds/121') | 374 'builders/linux_chromium_variable/builds/121') |
| 375 } | 375 } |
| 376 ] | 376 ] |
| 377 try_job.put() | 377 try_job.put() |
| 378 | 378 |
| 379 result = handlers_util.GetAllTryJobResults( | 379 result = handlers_util.GetAllTryJobResults( |
| 380 self.master_name, self.builder_name, self.build_number) | 380 self.master_name, self.builder_name, self.build_number) |
| 381 | 381 |
| 382 expected_result = { | 382 expected_result = { |
| 383 'compile': { | 383 'compile': { |
| 384 'step': 'compile', | 384 'step_name': 'compile', |
| 385 'test': 'N/A', | 385 'test_name': 'N/A', |
| 386 'try_job_key': 'm/b/121', | 386 'try_job_key': 'm/b/121', |
| 387 'try_job_build_number': 121, | 387 'try_job_build_number': 121, |
| 388 'status': 'Completed', | 388 'status': 'Completed', |
| 389 'try_job_url': ( | 389 'try_job_url': ( |
| 390 'http://build.chromium.org/p/tryserver.chromium.linux/' | 390 'http://build.chromium.org/p/tryserver.chromium.linux/' |
| 391 'builders/linux_chromium_variable/builds/121') | 391 'builders/linux_chromium_variable/builds/121') |
| 392 } | 392 } |
| 393 } | 393 } |
| 394 | 394 |
| 395 self.assertEqual(expected_result, result) | 395 self.assertEqual(expected_result, result) |
| 396 | 396 |
| 397 def testGetTryJobResultWhenTryJobForTestCompleted(self): | 397 def testGetTryJobResultWhenTryJobForTestCompleted(self): |
| 398 analysis = WfAnalysis.Create( | 398 analysis = WfAnalysis.Create( |
| 399 self.master_name, self.builder_name, self.build_number) | 399 self.master_name, self.builder_name, self.build_number) |
| 400 analysis.failure_result_map = { | 400 analysis.failure_result_map = { |
| 401 'a_test': { | 401 'a_test on platform': { |
| 402 'a_test1': 'm/b/121', | 402 'a_test1': 'm/b/121', |
| 403 'a_test2': 'm/b/121', | 403 'a_test2': 'm/b/121', |
| 404 'a_test3': 'm/b/120', | 404 'a_test3': 'm/b/120', |
| 405 'a_test4': 'm/b/121' | 405 'a_test4': 'm/b/121' |
| 406 }, | 406 }, |
| 407 'b_test': { | 407 'b_test_on_platform': { |
| 408 'b_test1': 'm/b/121' | 408 'b_test1': 'm/b/121' |
| 409 }, | 409 }, |
| 410 'c_test': 'm/b/121', | 410 'c_test': 'm/b/121', |
| 411 'd_test': 'm/b/122' | 411 'd_test': 'm/b/122' |
| 412 } | 412 } |
| 413 analysis.put() | 413 analysis.put() |
| 414 | 414 |
| 415 task_120_a = WfSwarmingTask.Create( | 415 task_120_a = WfSwarmingTask.Create( |
| 416 self.master_name, self.builder_name, 120, 'a_test') | 416 self.master_name, self.builder_name, 120, 'a_test on platform') |
| 417 task_120_a.tests_statuses = { | 417 task_120_a.tests_statuses = { |
| 418 'a_test3': { | 418 'a_test3': { |
| 419 'total_run': 1, | 419 'total_run': 1, |
| 420 'FAILURE': 1 | 420 'FAILURE': 1 |
| 421 } | 421 } |
| 422 } | 422 } |
| 423 task_120_a.put() | 423 task_120_a.put() |
| 424 | 424 |
| 425 task_121_a = WfSwarmingTask.Create( | 425 task_121_a = WfSwarmingTask.Create( |
| 426 self.master_name, self.builder_name, self.build_number, 'a_test') | 426 self.master_name, self.builder_name, self.build_number, |
| 427 'a_test on platform') |
| 427 task_121_a.tests_statuses = { | 428 task_121_a.tests_statuses = { |
| 428 'a_test1': { | 429 'a_test1': { |
| 429 'total_run': 1, | 430 'total_run': 1, |
| 430 'FAILURE': 1 | 431 'FAILURE': 1 |
| 431 }, | 432 }, |
| 432 'a_test2': { | 433 'a_test2': { |
| 433 'total_run': 1, | 434 'total_run': 1, |
| 434 'FAILURE': 1 | 435 'FAILURE': 1 |
| 435 }, | 436 }, |
| 436 'a_test4': { | 437 'a_test4': { |
| 437 'total_run': 1, | 438 'total_run': 1, |
| 438 'SUCCESS': 1 | 439 'SUCCESS': 1 |
| 439 } | 440 } |
| 440 } | 441 } |
| 441 task_121_a.put() | 442 task_121_a.put() |
| 442 | 443 |
| 443 task_121_b = WfSwarmingTask.Create( | 444 task_121_b = WfSwarmingTask.Create( |
| 444 self.master_name, self.builder_name, self.build_number, 'b_test') | 445 self.master_name, self.builder_name, self.build_number, |
| 446 'b_test_on_platform') |
| 445 task_121_b.tests_statuses = { | 447 task_121_b.tests_statuses = { |
| 446 'b_test1': { | 448 'b_test1': { |
| 447 'total_run': 1, | 449 'total_run': 1, |
| 448 'SUCCESS': 1 | 450 'SUCCESS': 1 |
| 449 } | 451 } |
| 450 } | 452 } |
| 453 task_121_b.parameters = { |
| 454 'ref_name': 'b_test' |
| 455 } |
| 451 task_121_b.put() | 456 task_121_b.put() |
| 452 | 457 |
| 453 try_job_120 = WfTryJob.Create( | 458 try_job_120 = WfTryJob.Create( |
| 454 self.master_name, self.builder_name, 120) | 459 self.master_name, self.builder_name, 120) |
| 455 try_job_120.status = wf_analysis_status.ANALYZED | 460 try_job_120.status = wf_analysis_status.ANALYZED |
| 456 try_job_120.test_results = [ | 461 try_job_120.test_results = [ |
| 457 { | 462 { |
| 458 'result': { | 463 'result': { |
| 459 'rev0': { | 464 'rev0': { |
| 460 'a_test': { | 465 'a_test': { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 'builders/linux_chromium_variable/builds/122'), | 559 'builders/linux_chromium_variable/builds/122'), |
| 555 'try_job_id': '2' | 560 'try_job_id': '2' |
| 556 } | 561 } |
| 557 ] | 562 ] |
| 558 try_job_122.put() | 563 try_job_122.put() |
| 559 | 564 |
| 560 result = handlers_util.GetAllTryJobResults( | 565 result = handlers_util.GetAllTryJobResults( |
| 561 self.master_name, self.builder_name, self.build_number) | 566 self.master_name, self.builder_name, self.build_number) |
| 562 | 567 |
| 563 expected_result = { | 568 expected_result = { |
| 564 'a_test-a_test1': { | 569 'a_test on platform-a_test1': { |
| 565 'step': 'a_test', | 570 'step_name': 'a_test on platform', |
| 566 'test': 'a_test1', | 571 'test_name': 'a_test1', |
| 572 'step_no_platform': 'a_test', |
| 567 'try_job_key': 'm/b/121', | 573 'try_job_key': 'm/b/121', |
| 568 'try_job_build_number': 121, | 574 'try_job_build_number': 121, |
| 569 'status': 'Completed', | 575 'status': 'Completed', |
| 570 'try_job_url': ( | 576 'try_job_url': ( |
| 571 'http://build.chromium.org/p/tryserver.chromium.linux/' | 577 'http://build.chromium.org/p/tryserver.chromium.linux/' |
| 572 'builders/linux_chromium_variable/builds/121'), | 578 'builders/linux_chromium_variable/builds/121'), |
| 573 'revision': 'rev1', | 579 'revision': 'rev1', |
| 574 'commit_position': '1', | 580 'commit_position': '1', |
| 575 'review_url': 'url_1' | 581 'review_url': 'url_1' |
| 576 }, | 582 }, |
| 577 'a_test-a_test2': { | 583 'a_test on platform-a_test2': { |
| 578 'step': 'a_test', | 584 'step_name': 'a_test on platform', |
| 579 'test': 'a_test2', | 585 'test_name': 'a_test2', |
| 586 'step_no_platform': 'a_test', |
| 580 'try_job_key': 'm/b/121', | 587 'try_job_key': 'm/b/121', |
| 581 'status': 'Completed', | 588 'status': 'Completed', |
| 582 'try_job_build_number': 121, | 589 'try_job_build_number': 121, |
| 583 'try_job_url': ( | 590 'try_job_url': ( |
| 584 'http://build.chromium.org/p/tryserver.chromium.linux/' | 591 'http://build.chromium.org/p/tryserver.chromium.linux/' |
| 585 'builders/linux_chromium_variable/builds/121') | 592 'builders/linux_chromium_variable/builds/121') |
| 586 }, | 593 }, |
| 587 'a_test-a_test3': { | 594 'a_test on platform-a_test3': { |
| 588 'step': 'a_test', | 595 'step_name': 'a_test on platform', |
| 589 'test': 'a_test3', | 596 'test_name': 'a_test3', |
| 597 'step_no_platform': 'a_test', |
| 590 'try_job_key': 'm/b/120', | 598 'try_job_key': 'm/b/120', |
| 591 'try_job_build_number': 120, | 599 'try_job_build_number': 120, |
| 592 'status': 'Completed', | 600 'status': 'Completed', |
| 593 'try_job_url': ( | 601 'try_job_url': ( |
| 594 'http://build.chromium.org/p/tryserver.chromium.linux/' | 602 'http://build.chromium.org/p/tryserver.chromium.linux/' |
| 595 'builders/linux_chromium_variable/builds/120'), | 603 'builders/linux_chromium_variable/builds/120'), |
| 596 'revision': 'rev0', | 604 'revision': 'rev0', |
| 597 'commit_position': '0', | 605 'commit_position': '0', |
| 598 'review_url': 'url_0' | 606 'review_url': 'url_0' |
| 599 }, | 607 }, |
| 600 'a_test-a_test4': { | 608 'a_test on platform-a_test4': { |
| 601 'step': 'a_test', | 609 'step_name': 'a_test on platform', |
| 602 'test': 'a_test4', | 610 'test_name': 'a_test4', |
| 611 'step_no_platform': 'a_test', |
| 603 'try_job_key': 'm/b/121', | 612 'try_job_key': 'm/b/121', |
| 604 'status': 'Flaky' | 613 'status': 'Flaky' |
| 605 }, | 614 }, |
| 606 'b_test-b_test1': { | 615 'b_test_on_platform-b_test1': { |
| 607 'step': 'b_test', | 616 'step_name': 'b_test_on_platform', |
| 608 'test': 'b_test1', | 617 'test_name': 'b_test1', |
| 618 'step_no_platform': 'b_test', |
| 609 'try_job_key': 'm/b/121', | 619 'try_job_key': 'm/b/121', |
| 610 'status': 'Flaky' | 620 'status': 'Flaky' |
| 611 }, | 621 }, |
| 612 'c_test': { | 622 'c_test': { |
| 613 'step': 'c_test', | 623 'step_name': 'c_test', |
| 614 'test': 'N/A', | 624 'test_name': 'N/A', |
| 615 'try_job_key': 'm/b/121', | 625 'try_job_key': 'm/b/121', |
| 616 'try_job_build_number': 121, | 626 'try_job_build_number': 121, |
| 617 'status': 'Completed', | 627 'status': 'Completed', |
| 618 'try_job_url': ( | 628 'try_job_url': ( |
| 619 'http://build.chromium.org/p/tryserver.chromium.linux/' | 629 'http://build.chromium.org/p/tryserver.chromium.linux/' |
| 620 'builders/linux_chromium_variable/builds/121'), | 630 'builders/linux_chromium_variable/builds/121'), |
| 621 'revision': 'rev2', | 631 'revision': 'rev2', |
| 622 'commit_position': '2', | 632 'commit_position': '2', |
| 623 'review_url': 'url_2' | 633 'review_url': 'url_2' |
| 624 }, | 634 }, |
| 625 'd_test': { | 635 'd_test': { |
| 626 'step': 'd_test', | 636 'step_name': 'd_test', |
| 627 'test': 'N/A', | 637 'test_name': 'N/A', |
| 628 'try_job_key': 'm/b/122', | 638 'try_job_key': 'm/b/122', |
| 629 'try_job_build_number': 122, | 639 'try_job_build_number': 122, |
| 630 'status': 'Completed', | 640 'status': 'Completed', |
| 631 'try_job_url': ( | 641 'try_job_url': ( |
| 632 'http://build.chromium.org/p/tryserver.chromium.linux/' | 642 'http://build.chromium.org/p/tryserver.chromium.linux/' |
| 633 'builders/linux_chromium_variable/builds/122') | 643 'builders/linux_chromium_variable/builds/122') |
| 634 } | 644 } |
| 635 } | 645 } |
| 636 self.assertEqual(expected_result, result) | 646 self.assertEqual(expected_result, result) |
| 637 | 647 |
| 638 def testUpdateFlakinessNoTask(self): | 648 def testUpdateTryJobCulpritUsingSwarmingTaskNoTask(self): |
| 639 step_name = 's' | 649 step_name = 's' |
| 640 failure_key_set = ['m/b/1'] | 650 failure_key_set = ['m/b/1'] |
| 641 culprits_info = None | 651 culprits_info = None |
| 642 handlers_util._UpdateFlakiness(step_name, failure_key_set, culprits_info) | 652 handlers_util._UpdateTryJobCulpritUsingSwarmingTask( |
| 653 step_name, failure_key_set, culprits_info) |
| 643 self.assertIsNone(culprits_info) | 654 self.assertIsNone(culprits_info) |
| 644 | 655 |
| 645 def testGetCulpritInfoForTryJobResultStep(self): | 656 def testGetCulpritInfoForTryJobResultStep(self): |
| 646 try_job_key = 'm/b/120' | 657 try_job_key = 'm/b/120' |
| 647 culprits_info = { | 658 culprits_info = { |
| 648 'a_test': { | 659 'a_test on platform': { |
| 649 'step': 'a_test', | 660 'step_name': 'a_test on platform', |
| 650 'test': 'N/A', | 661 'test_name': 'N/A', |
| 651 'try_job_key': try_job_key | 662 'try_job_key': try_job_key |
| 652 } | 663 } |
| 653 } | 664 } |
| 654 | 665 |
| 655 try_job_120 = WfTryJob.Create( | 666 try_job_120 = WfTryJob.Create( |
| 656 self.master_name, self.builder_name, 120) | 667 self.master_name, self.builder_name, 120) |
| 657 try_job_120.status = wf_analysis_status.ANALYZED | 668 try_job_120.status = wf_analysis_status.ANALYZED |
| 658 try_job_120.test_results = [ | 669 try_job_120.test_results = [ |
| 659 { | 670 { |
| 660 'result': { | 671 'result': { |
| 661 'rev0': { | 672 'rev0': { |
| 662 'a_test': { | 673 'a_test on platform': { |
| 663 'status': 'failed', | 674 'status': 'failed', |
| 664 'valid': True, | 675 'valid': True, |
| 665 'failures': ['a_test3'] | 676 'failures': ['a_test3'] |
| 666 } | 677 } |
| 667 } | 678 } |
| 668 }, | 679 }, |
| 669 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/' | 680 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/' |
| 670 'builders/linux_chromium_variable/builds/120'), | 681 'builders/linux_chromium_variable/builds/120'), |
| 671 'try_job_id': '0', | 682 'try_job_id': '0', |
| 672 'culprit': { | 683 'culprit': { |
| 673 'a_test': { | 684 'a_test on platform': { |
| 674 'tests': { | 685 'tests': { |
| 675 'a_test3': { | 686 'a_test3': { |
| 676 'revision': 'rev0', | 687 'revision': 'rev0', |
| 677 'commit_position': '0', | 688 'commit_position': '0', |
| 678 'review_url': 'url_0' | 689 'review_url': 'url_0' |
| 679 } | 690 } |
| 680 } | 691 } |
| 681 } | 692 } |
| 682 } | 693 } |
| 683 } | 694 } |
| 684 ] | 695 ] |
| 685 try_job_120.put() | 696 try_job_120.put() |
| 686 | 697 |
| 687 handlers_util._GetCulpritInfoForTryJobResult(try_job_key, culprits_info) | 698 handlers_util._GetCulpritInfoForTryJobResult(try_job_key, culprits_info) |
| 688 | 699 |
| 689 expected_culprits_info = { | 700 expected_culprits_info = { |
| 690 'a_test-a_test3': { | 701 'a_test on platform-a_test3': { |
| 691 'step': 'a_test', | 702 'step_name': 'a_test on platform', |
| 692 'test': 'a_test3', | 703 'test_name': 'a_test3', |
| 693 'try_job_key': 'm/b/120', | 704 'try_job_key': 'm/b/120', |
| 694 'try_job_build_number': 120, | 705 'try_job_build_number': 120, |
| 695 'status': 'Completed', | 706 'status': 'Completed', |
| 696 'try_job_url': ( | 707 'try_job_url': ( |
| 697 'http://build.chromium.org/p/tryserver.chromium.linux/' | 708 'http://build.chromium.org/p/tryserver.chromium.linux/' |
| 698 'builders/linux_chromium_variable/builds/120'), | 709 'builders/linux_chromium_variable/builds/120'), |
| 699 'revision': 'rev0', | 710 'revision': 'rev0', |
| 700 'commit_position': '0', | 711 'commit_position': '0', |
| 701 'review_url': 'url_0' | 712 'review_url': 'url_0' |
| 702 } | 713 } |
| 703 } | 714 } |
| 704 | 715 |
| 705 self.assertEqual(expected_culprits_info, culprits_info) | 716 self.assertEqual(expected_culprits_info, culprits_info) |
| OLD | NEW |