| 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 handlers import handlers_util |
| 6 | |
| 7 from handlers import result_status | 6 from handlers import result_status |
| 8 from handlers import handlers_util | |
| 9 from model import wf_analysis_status | 7 from model import wf_analysis_status |
| 10 from model.wf_analysis import WfAnalysis | 8 from model.wf_analysis import WfAnalysis |
| 11 from model.wf_swarming_task import WfSwarmingTask | 9 from model.wf_swarming_task import WfSwarmingTask |
| 12 from model.wf_try_job import WfTryJob | 10 from model.wf_try_job import WfTryJob |
| 13 from waterfall import buildbot | 11 from waterfall.test import wf_testcase |
| 14 from waterfall import waterfall_config | |
| 15 | 12 |
| 16 | 13 |
| 17 class HandlersUtilResultTest(testing.AppengineTestCase): | 14 class HandlersUtilResultTest(wf_testcase.WaterfallTestCase): |
| 18 | 15 |
| 19 def setUp(self): | 16 def setUp(self): |
| 20 super(HandlersUtilResultTest, self).setUp() | 17 super(HandlersUtilResultTest, self).setUp() |
| 21 self.master_name = 'm' | 18 self.master_name = 'm' |
| 22 self.builder_name = 'b' | 19 self.builder_name = 'b' |
| 23 self.build_number = 121 | 20 self.build_number = 121 |
| 24 | 21 |
| 25 def MockedGetSwarmingSettings(): | |
| 26 return {'server_host': 'chromium-swarm.appspot.com'} | |
| 27 self.mock( | |
| 28 waterfall_config, 'GetSwarmingSettings', MockedGetSwarmingSettings) | |
| 29 | |
| 30 def testGetSwarmingTaskInfoNoAnalysis(self): | 22 def testGetSwarmingTaskInfoNoAnalysis(self): |
| 31 data = handlers_util.GetSwarmingTaskInfo( | 23 data = handlers_util.GetSwarmingTaskInfo( |
| 32 self.master_name, self.builder_name, self.build_number) | 24 self.master_name, self.builder_name, self.build_number) |
| 33 | |
| 34 self.assertEqual({}, data) | 25 self.assertEqual({}, data) |
| 35 | 26 |
| 36 def testGetSwarmingTaskInfoReturnEmptyIfNoFailureMap(self): | 27 def testGetSwarmingTaskInfoReturnEmptyIfNoFailureMap(self): |
| 37 WfAnalysis.Create( | 28 WfAnalysis.Create( |
| 38 self.master_name, self.builder_name, self.build_number).put() | 29 self.master_name, self.builder_name, self.build_number).put() |
| 39 | 30 |
| 40 data = handlers_util.GetSwarmingTaskInfo( | 31 data = handlers_util.GetSwarmingTaskInfo( |
| 41 self.master_name, self.builder_name, self.build_number) | 32 self.master_name, self.builder_name, self.build_number) |
| 42 | 33 |
| 43 self.assertEqual({}, data) | 34 self.assertEqual({}, data) |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 'task_url': ('https://chromium-swarm.appspot.com/user' | 206 'task_url': ('https://chromium-swarm.appspot.com/user' |
| 216 '/task/task1') | 207 '/task/task1') |
| 217 }, | 208 }, |
| 218 'all_tests': ['test2', 'test3', 'test4'], | 209 'all_tests': ['test2', 'test3', 'test4'], |
| 219 'reliable_tests': ['test2'], | 210 'reliable_tests': ['test2'], |
| 220 'flaky_tests': ['test3', 'test4'], | 211 'flaky_tests': ['test3', 'test4'], |
| 221 'ref_name': 'step1' | 212 'ref_name': 'step1' |
| 222 }, | 213 }, |
| 223 'm/b/120': { | 214 'm/b/120': { |
| 224 'task_info': { | 215 'task_info': { |
| 225 'status': wf_analysis_status.ANALYZED, | 216 'status': wf_analysis_status.ANALYZED, |
| 226 'task_id': 'task0', | 217 'task_id': 'task0', |
| 227 'task_url': ( | 218 'task_url': ('https://chromium-swarm.appspot.com/user/' |
| 228 'https://chromium-swarm.appspot.com/user/task/task0') | 219 'task/task0') |
| 229 }, | 220 }, |
| 230 'all_tests': ['test1'], | 221 'all_tests': ['test1'], |
| 231 'reliable_tests': ['test1'], | 222 'reliable_tests': ['test1'], |
| 232 'flaky_tests': [], | 223 'flaky_tests': [], |
| 233 'ref_name': 'step1' | 224 'ref_name': 'step1' |
| 234 } | 225 } |
| 235 } | 226 } |
| 236 }, | 227 }, |
| 237 'step2': { | 228 'step2': { |
| 238 'swarming_tasks': { | 229 'swarming_tasks': { |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 try_job.compile_results = [ | 356 try_job.compile_results = [ |
| 366 { | 357 { |
| 367 'try_job_id': '1' | 358 'try_job_id': '1' |
| 368 } | 359 } |
| 369 ] | 360 ] |
| 370 try_job.put() | 361 try_job.put() |
| 371 | 362 |
| 372 result = handlers_util._GetTryJobResultForCompile({'compile': 'm/b/121'}) | 363 result = handlers_util._GetTryJobResultForCompile({'compile': 'm/b/121'}) |
| 373 | 364 |
| 374 expected_result = { | 365 expected_result = { |
| 375 'compile': { | 366 'compile': { |
| 376 'try_jobs': [ | 367 'try_jobs': [ |
| 377 { | 368 { |
| 378 'try_job_key': 'm/b/121', | 369 'try_job_key': 'm/b/121', |
| 379 'status': wf_analysis_status.ERROR | 370 'status': wf_analysis_status.ERROR |
| 380 } | 371 } |
| 381 ] | 372 ] |
| 382 } | 373 } |
| 383 } | 374 } |
| 384 | 375 |
| 385 self.assertEqual(expected_result, result) | 376 self.assertEqual(expected_result, result) |
| (...skipping 28 matching lines...) Expand all Loading... |
| 414 } | 405 } |
| 415 } | 406 } |
| 416 } | 407 } |
| 417 ] | 408 ] |
| 418 try_job.put() | 409 try_job.put() |
| 419 | 410 |
| 420 result = handlers_util.GetAllTryJobResults( | 411 result = handlers_util.GetAllTryJobResults( |
| 421 self.master_name, self.builder_name, self.build_number) | 412 self.master_name, self.builder_name, self.build_number) |
| 422 | 413 |
| 423 expected_result = { | 414 expected_result = { |
| 424 'compile': { | 415 'compile': { |
| 425 'try_jobs': [ | 416 'try_jobs': [ |
| 426 { | 417 { |
| 427 'try_job_key': 'm/b/121', | 418 'try_job_key': 'm/b/121', |
| 428 'status': wf_analysis_status.ANALYZED, | 419 'status': wf_analysis_status.ANALYZED, |
| 429 'try_job_build_number': 121, | 420 'try_job_build_number': 121, |
| 430 'try_job_url': ( | 421 'try_job_url': ( |
| 431 'http://build.chromium.org/p/tryserver.chromium.' | 422 'http://build.chromium.org/p/tryserver.chromium.' |
| 432 'linux/builders/linux_chromium_variable/builds/121'), | 423 'linux/builders/linux_chromium_variable/builds/121'), |
| 433 'culprit': { | 424 'culprit': { |
| 434 'revision': 'rev2', | 425 'revision': 'rev2', |
| (...skipping 29 matching lines...) Expand all Loading... |
| 464 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/' | 455 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/' |
| 465 'builders/linux_chromium_variable/builds/121') | 456 'builders/linux_chromium_variable/builds/121') |
| 466 } | 457 } |
| 467 ] | 458 ] |
| 468 try_job.put() | 459 try_job.put() |
| 469 | 460 |
| 470 result = handlers_util.GetAllTryJobResults( | 461 result = handlers_util.GetAllTryJobResults( |
| 471 self.master_name, self.builder_name, self.build_number) | 462 self.master_name, self.builder_name, self.build_number) |
| 472 | 463 |
| 473 expected_result = { | 464 expected_result = { |
| 474 'compile': { | 465 'compile': { |
| 475 'try_jobs': [ | 466 'try_jobs': [ |
| 476 { | 467 { |
| 477 'try_job_key': 'm/b/121', | 468 'try_job_key': 'm/b/121', |
| 478 'status': wf_analysis_status.ANALYZED, | 469 'status': wf_analysis_status.ANALYZED, |
| 479 'try_job_build_number': 121, | 470 'try_job_build_number': 121, |
| 480 'try_job_url': ( | 471 'try_job_url': ( |
| 481 'http://build.chromium.org/p/tryserver.chromium.' | 472 'http://build.chromium.org/p/tryserver.chromium.' |
| 482 'linux/builders/linux_chromium_variable/builds/121') | 473 'linux/builders/linux_chromium_variable/builds/121') |
| 483 } | 474 } |
| 484 ] | 475 ] |
| 485 } | 476 } |
| 486 } | 477 } |
| 487 | 478 |
| 488 self.assertEqual(expected_result, result) | 479 self.assertEqual(expected_result, result) |
| 489 | 480 |
| 490 def testGetAllTryJobResultsTestFailureNoTaskInfo(self): | 481 def testGetAllTryJobResultsTestFailureNoTaskInfo(self): |
| 491 analysis = WfAnalysis.Create( | 482 analysis = WfAnalysis.Create( |
| 492 self.master_name, self.builder_name, self.build_number) | 483 self.master_name, self.builder_name, self.build_number) |
| 493 analysis.failure_result_map = { | 484 analysis.failure_result_map = { |
| 494 'step1': { | 485 'step1': { |
| 495 'test1': 'm/b/118' | 486 'test1': 'm/b/118' |
| 496 } | 487 } |
| 497 } | 488 } |
| 498 analysis.put() | 489 analysis.put() |
| 499 | 490 |
| 500 result = handlers_util.GetAllTryJobResults( | 491 result = handlers_util.GetAllTryJobResults( |
| 501 self.master_name, self.builder_name, self.build_number) | 492 self.master_name, self.builder_name, self.build_number) |
| 502 | 493 |
| 503 expected_result = { | 494 expected_result = { |
| 504 'step1':{ | 495 'step1': { |
| 505 'try_jobs': [ | 496 'try_jobs': [ |
| 506 { | 497 { |
| 507 'try_job_key': 'm/b/118', | 498 'try_job_key': 'm/b/118', |
| 508 'status': ( | 499 'status': ( |
| 509 result_status.NO_TRY_JOB_REASON_MAP.get( | 500 result_status.NO_TRY_JOB_REASON_MAP.get( |
| 510 result_status.NO_SWARMING_TASK_FOUND)), | 501 result_status.NO_SWARMING_TASK_FOUND)), |
| 511 'tests': ['test1'] | 502 'tests': ['test1'] |
| 512 } | 503 } |
| 513 ] | 504 ] |
| 514 } | 505 } |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 'all_tests': ['test3'] | 577 'all_tests': ['test3'] |
| 587 } | 578 } |
| 588 } | 579 } |
| 589 } | 580 } |
| 590 } | 581 } |
| 591 | 582 |
| 592 result = handlers_util._GetAllTryJobResultsForTest( | 583 result = handlers_util._GetAllTryJobResultsForTest( |
| 593 failure_result_map, tasks_info) | 584 failure_result_map, tasks_info) |
| 594 | 585 |
| 595 expected_result = { | 586 expected_result = { |
| 596 'step1':{ | 587 'step1': { |
| 597 'try_jobs': [ | 588 'try_jobs': [ |
| 598 { | 589 { |
| 599 'try_job_key': 'm/b/118', | 590 'try_job_key': 'm/b/118', |
| 600 'status': result_status.NO_TRY_JOB_REASON_MAP[ | 591 'status': result_status.NO_TRY_JOB_REASON_MAP[ |
| 601 wf_analysis_status.PENDING], | 592 wf_analysis_status.PENDING], |
| 602 'tests': ['test1'] | 593 'tests': ['test1'] |
| 603 }, | 594 }, |
| 604 { | 595 { |
| 605 'try_job_key': 'm/b/119', | 596 'try_job_key': 'm/b/119', |
| 606 'status': result_status.NO_TRY_JOB_REASON_MAP[ | 597 'status': result_status.NO_TRY_JOB_REASON_MAP[ |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 } | 705 } |
| 715 } | 706 } |
| 716 } | 707 } |
| 717 ] | 708 ] |
| 718 try_job.put() | 709 try_job.put() |
| 719 | 710 |
| 720 result = handlers_util._GetAllTryJobResultsForTest( | 711 result = handlers_util._GetAllTryJobResultsForTest( |
| 721 failure_result_map, tasks_info) | 712 failure_result_map, tasks_info) |
| 722 | 713 |
| 723 expected_result = { | 714 expected_result = { |
| 724 'step1 on platform':{ | 715 'step1 on platform': { |
| 725 'try_jobs': [ | 716 'try_jobs': [ |
| 726 { | 717 { |
| 727 'ref_name': 'step1', | 718 'ref_name': 'step1', |
| 728 'try_job_key': 'm/b/119', | 719 'try_job_key': 'm/b/119', |
| 729 'status': wf_analysis_status.ANALYZED, | 720 'status': wf_analysis_status.ANALYZED, |
| 730 'try_job_url': ( | 721 'try_job_url': ( |
| 731 'http://build.chromium.org/p/tryserver.chromium.' | 722 'http://build.chromium.org/p/tryserver.chromium.' |
| 732 'linux/builders/linux_chromium_variable/builds/121'), | 723 'linux/builders/linux_chromium_variable/builds/121'), |
| 733 'try_job_build_number': 121, | 724 'try_job_build_number': 121, |
| 734 'culprit': { | 725 'culprit': { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 } | 807 } |
| 817 } | 808 } |
| 818 } | 809 } |
| 819 ] | 810 ] |
| 820 try_job.put() | 811 try_job.put() |
| 821 | 812 |
| 822 result = handlers_util._GetAllTryJobResultsForTest( | 813 result = handlers_util._GetAllTryJobResultsForTest( |
| 823 failure_result_map, tasks_info) | 814 failure_result_map, tasks_info) |
| 824 | 815 |
| 825 expected_result = { | 816 expected_result = { |
| 826 'step1 on platform':{ | 817 'step1 on platform': { |
| 827 'try_jobs': [ | 818 'try_jobs': [ |
| 828 { | 819 { |
| 829 'try_job_key': 'm/b/118', | 820 'try_job_key': 'm/b/118', |
| 830 'status': result_status.NO_TRY_JOB_REASON_MAP.get( | 821 'status': result_status.NO_TRY_JOB_REASON_MAP.get( |
| 831 result_status.NO_SWARMING_TASK_FOUND), | 822 result_status.NO_SWARMING_TASK_FOUND), |
| 832 'tests': ['test1'] | 823 'tests': ['test1'] |
| 833 }, | 824 }, |
| 834 { | 825 { |
| 835 'ref_name': 'step1', | 826 'ref_name': 'step1', |
| 836 'try_job_key': 'm/b/119', | 827 'try_job_key': 'm/b/119', |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 895 | 886 |
| 896 result = handlers_util._OrganizeTryJobResultByCulprits(try_job_culprits) | 887 result = handlers_util._OrganizeTryJobResultByCulprits(try_job_culprits) |
| 897 expected_result = { | 888 expected_result = { |
| 898 'rev1': { | 889 'rev1': { |
| 899 'revision': 'rev1', | 890 'revision': 'rev1', |
| 900 'commit_position': '1', | 891 'commit_position': '1', |
| 901 'review_url': 'url_1', | 892 'review_url': 'url_1', |
| 902 'failed_tests': ['a_test2', 'a_test1'] | 893 'failed_tests': ['a_test2', 'a_test1'] |
| 903 } | 894 } |
| 904 } | 895 } |
| 905 self.assertEqual(expected_result,result) | 896 self.assertEqual(expected_result, result) |
| 906 | 897 |
| 907 def testGetCulpritInfoForTryJobResultForTestTryJobNoResult(self): | 898 def testGetCulpritInfoForTryJobResultForTestTryJobNoResult(self): |
| 908 try_job_key = 'm/b/119' | 899 try_job_key = 'm/b/119' |
| 909 culprits_info = { | 900 culprits_info = { |
| 910 'step1 on platform':{ | 901 'step1 on platform': { |
| 911 'try_jobs': [ | 902 'try_jobs': [ |
| 912 { | 903 { |
| 913 'ref_name': 'step1', | 904 'ref_name': 'step1', |
| 914 'try_job_key': try_job_key, | 905 'try_job_key': try_job_key, |
| 915 'tests': ['test2', 'test3'] | 906 'tests': ['test2', 'test3'] |
| 916 } | 907 } |
| 917 ] | 908 ] |
| 918 } | 909 } |
| 919 } | 910 } |
| 920 WfTryJob.Create('m', 'b', '119').put() | 911 WfTryJob.Create('m', 'b', '119').put() |
| 921 handlers_util._GetCulpritInfoForTryJobResultForTest( | 912 handlers_util._GetCulpritInfoForTryJobResultForTest( |
| 922 try_job_key, culprits_info) | 913 try_job_key, culprits_info) |
| 923 | 914 |
| 924 expected_culprits_info = { | 915 expected_culprits_info = { |
| 925 'step1 on platform':{ | 916 'step1 on platform': { |
| 926 'try_jobs': [ | 917 'try_jobs': [ |
| 927 { | 918 { |
| 928 'ref_name': 'step1', | 919 'ref_name': 'step1', |
| 929 'try_job_key': try_job_key, | 920 'try_job_key': try_job_key, |
| 930 'tests': ['test2', 'test3'], | 921 'tests': ['test2', 'test3'], |
| 931 'status': wf_analysis_status.PENDING | 922 'status': wf_analysis_status.PENDING |
| 932 } | 923 } |
| 933 ] | 924 ] |
| 934 } | 925 } |
| 935 } | 926 } |
| 936 self.assertEqual(expected_culprits_info, culprits_info) | 927 self.assertEqual(expected_culprits_info, culprits_info) |
| 937 | 928 |
| 938 def testGetCulpritInfoForTryJobResultForTestTryJobRunning(self): | 929 def testGetCulpritInfoForTryJobResultForTestTryJobRunning(self): |
| 939 try_job_key = 'm/b/119' | 930 try_job_key = 'm/b/119' |
| 940 culprits_info = { | 931 culprits_info = { |
| 941 'step1 on platform':{ | 932 'step1 on platform': { |
| 942 'try_jobs': [ | 933 'try_jobs': [ |
| 943 { | 934 { |
| 944 'ref_name': 'step1', | 935 'ref_name': 'step1', |
| 945 'try_job_key': try_job_key, | 936 'try_job_key': try_job_key, |
| 946 'tests': ['test2', 'test3'] | 937 'tests': ['test2', 'test3'] |
| 947 } | 938 } |
| 948 ] | 939 ] |
| 949 } | 940 } |
| 950 } | 941 } |
| 951 try_job = WfTryJob.Create('m', 'b', '119') | 942 try_job = WfTryJob.Create('m', 'b', '119') |
| 952 try_job.status = wf_analysis_status.ANALYZING | 943 try_job.status = wf_analysis_status.ANALYZING |
| 953 try_job.test_results = [ | 944 try_job.test_results = [ |
| 954 { | 945 { |
| 955 'url': ('http://build.chromium.org/p/tryserver.chromium.' | 946 'url': ('http://build.chromium.org/p/tryserver.chromium.' |
| 956 'linux/builders/linux_chromium_variable/builds/121'), | 947 'linux/builders/linux_chromium_variable/builds/121'), |
| 957 'try_job_id': '121' | 948 'try_job_id': '121' |
| 958 } | 949 } |
| 959 ] | 950 ] |
| 960 try_job.put() | 951 try_job.put() |
| 961 handlers_util._GetCulpritInfoForTryJobResultForTest( | 952 handlers_util._GetCulpritInfoForTryJobResultForTest( |
| 962 try_job_key, culprits_info) | 953 try_job_key, culprits_info) |
| 963 | 954 |
| 964 expected_culprits_info = { | 955 expected_culprits_info = { |
| 965 'step1 on platform':{ | 956 'step1 on platform': { |
| 966 'try_jobs': [ | 957 'try_jobs': [ |
| 967 { | 958 { |
| 968 'ref_name': 'step1', | 959 'ref_name': 'step1', |
| 969 'try_job_key': try_job_key, | 960 'try_job_key': try_job_key, |
| 970 'tests': ['test2', 'test3'], | 961 'tests': ['test2', 'test3'], |
| 971 'status': wf_analysis_status.ANALYZING, | 962 'status': wf_analysis_status.ANALYZING, |
| 972 'try_job_url': ( | 963 'try_job_url': ( |
| 973 'http://build.chromium.org/p/tryserver.chromium.' | 964 'http://build.chromium.org/p/tryserver.chromium.' |
| 974 'linux/builders/linux_chromium_variable/builds/121'), | 965 'linux/builders/linux_chromium_variable/builds/121'), |
| 975 'try_job_build_number': 121 | 966 'try_job_build_number': 121 |
| 976 } | 967 } |
| 977 ] | 968 ] |
| 978 } | 969 } |
| 979 } | 970 } |
| 980 self.assertEqual(expected_culprits_info, culprits_info) | 971 self.assertEqual(expected_culprits_info, culprits_info) |
| OLD | NEW |