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 |