| 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 | 4 |
| 5 from datetime import datetime | 5 from datetime import datetime |
| 6 from datetime import timedelta | 6 from datetime import timedelta |
| 7 import mock |
| 7 | 8 |
| 8 from common.waterfall import failure_type | 9 from common.waterfall import failure_type |
| 9 from model import analysis_status | 10 from model import analysis_status |
| 10 from model.wf_analysis import WfAnalysis | 11 from model.wf_analysis import WfAnalysis |
| 11 from model.wf_build import WfBuild | 12 from model.wf_build import WfBuild |
| 12 from model.wf_failure_group import WfFailureGroup | 13 from model.wf_failure_group import WfFailureGroup |
| 13 from model.wf_try_job import WfTryJob | 14 from model.wf_try_job import WfTryJob |
| 14 from waterfall import try_job_util | 15 from waterfall import try_job_util |
| 15 from waterfall.test import wf_testcase | 16 from waterfall.test import wf_testcase |
| 16 | 17 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 } | 62 } |
| 62 }, | 63 }, |
| 63 'failure_type': failure_type.COMPILE | 64 'failure_type': failure_type.COMPILE |
| 64 } | 65 } |
| 65 | 66 |
| 66 need_try_job = try_job_util.NeedANewTryJob( | 67 need_try_job = try_job_util.NeedANewTryJob( |
| 67 master_name, builder_name, build_number, failure_info, None, None) | 68 master_name, builder_name, build_number, failure_info, None, None) |
| 68 | 69 |
| 69 self.assertFalse(need_try_job) | 70 self.assertFalse(need_try_job) |
| 70 | 71 |
| 71 def testBailOutForTestTryJob(self): | 72 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 73 def testBailOutForTestTryJob(self, mock_fn): |
| 72 master_name = 'master2' | 74 master_name = 'master2' |
| 73 builder_name = 'builder2' | 75 builder_name = 'builder2' |
| 74 build_number = 223 | 76 build_number = 223 |
| 75 WfAnalysis.Create(master_name, builder_name, build_number).put() | 77 WfAnalysis.Create(master_name, builder_name, build_number).put() |
| 76 failure_info = { | 78 failure_info = { |
| 77 'master_name': master_name, | 79 'master_name': master_name, |
| 78 'builder_name': builder_name, | 80 'builder_name': builder_name, |
| 79 'build_number': build_number, | 81 'build_number': build_number, |
| 80 'failed_steps': { | 82 'failed_steps': { |
| 81 'a_test': {} | 83 'a_test': {} |
| 82 }, | 84 }, |
| 83 'failure_type': failure_type.TEST | 85 'failure_type': failure_type.TEST |
| 84 } | 86 } |
| 85 | 87 |
| 86 def _MockShouldBailOutForOutdatedBuild(*_): | 88 mock_fn.return_value = False |
| 87 return False | |
| 88 self.mock( | |
| 89 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 90 _MockShouldBailOutForOutdatedBuild) | |
| 91 | 89 |
| 92 need_try_job = try_job_util.NeedANewTryJob( | 90 need_try_job = try_job_util.NeedANewTryJob( |
| 93 master_name, builder_name, build_number, failure_info, None, None) | 91 master_name, builder_name, build_number, failure_info, None, None) |
| 94 | 92 |
| 95 self.assertFalse(need_try_job) | 93 self.assertFalse(need_try_job) |
| 96 | 94 |
| 97 def testBailOutForTryJobWithOutdatedTimestamp(self): | 95 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 96 def testBailOutForTryJobWithOutdatedTimestamp(self, mock_fn): |
| 98 master_name = 'master1' | 97 master_name = 'master1' |
| 99 builder_name = 'builder1' | 98 builder_name = 'builder1' |
| 100 build_number = 223 | 99 build_number = 223 |
| 101 WfAnalysis.Create(master_name, builder_name, build_number).put() | 100 WfAnalysis.Create(master_name, builder_name, build_number).put() |
| 102 failure_info = { | 101 failure_info = { |
| 103 'master_name': master_name, | 102 'master_name': master_name, |
| 104 'builder_name': builder_name, | 103 'builder_name': builder_name, |
| 105 'build_number': build_number, | 104 'build_number': build_number, |
| 106 'failed_steps': { | 105 'failed_steps': { |
| 107 'compile': { | 106 'compile': { |
| 108 'current_failure': 221, | 107 'current_failure': 221, |
| 109 'first_failure': 221, | 108 'first_failure': 221, |
| 110 'last_pass': 220 | 109 'last_pass': 220 |
| 111 } | 110 } |
| 112 }, | 111 }, |
| 113 'failure_type': failure_type.COMPILE | 112 'failure_type': failure_type.COMPILE |
| 114 } | 113 } |
| 115 | 114 |
| 116 yesterday = datetime.utcnow() - timedelta(days=1) | 115 yesterday = datetime.utcnow() - timedelta(days=1) |
| 117 build = WfBuild.Create(master_name, builder_name, build_number) | 116 build = WfBuild.Create(master_name, builder_name, build_number) |
| 118 build.start_time = yesterday | 117 build.start_time = yesterday |
| 119 build.put() | 118 build.put() |
| 120 | 119 |
| 121 def _MockShouldBailOutForOutdatedBuild(*_): | 120 mock_fn.return_value = True |
| 122 return True | |
| 123 | |
| 124 self.mock( | |
| 125 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 126 _MockShouldBailOutForOutdatedBuild) | |
| 127 | 121 |
| 128 need_try_job = try_job_util.NeedANewTryJob( | 122 need_try_job = try_job_util.NeedANewTryJob( |
| 129 master_name, builder_name, build_number, failure_info, None, None) | 123 master_name, builder_name, build_number, failure_info, None, None) |
| 130 | 124 |
| 131 self.assertFalse(need_try_job) | 125 self.assertFalse(need_try_job) |
| 132 | 126 |
| 133 def testNotNeedANewTryJobIfNotFirstTimeFailure(self): | 127 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 128 def testNotNeedANewTryJobIfNotFirstTimeFailure(self, mock_fn): |
| 134 master_name = 'm' | 129 master_name = 'm' |
| 135 builder_name = 'b' | 130 builder_name = 'b' |
| 136 build_number = 223 | 131 build_number = 223 |
| 137 WfAnalysis.Create(master_name, builder_name, build_number).put() | 132 WfAnalysis.Create(master_name, builder_name, build_number).put() |
| 138 failure_info = { | 133 failure_info = { |
| 139 'master_name': master_name, | 134 'master_name': master_name, |
| 140 'builder_name': builder_name, | 135 'builder_name': builder_name, |
| 141 'build_number': build_number, | 136 'build_number': build_number, |
| 142 'failed_steps': { | 137 'failed_steps': { |
| 143 'compile': { | 138 'compile': { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 162 '223': { | 157 '223': { |
| 163 'blame_list': ['223-1', '223-2', '223-3'], | 158 'blame_list': ['223-1', '223-2', '223-3'], |
| 164 'chromium_revision': '223-3' | 159 'chromium_revision': '223-3' |
| 165 } | 160 } |
| 166 }, | 161 }, |
| 167 'failure_type': failure_type.COMPILE | 162 'failure_type': failure_type.COMPILE |
| 168 } | 163 } |
| 169 | 164 |
| 170 WfAnalysis.Create(master_name, builder_name, build_number).put() | 165 WfAnalysis.Create(master_name, builder_name, build_number).put() |
| 171 | 166 |
| 172 def _MockShouldBailOutForOutdatedBuild(*_): | 167 mock_fn.return_value = False |
| 173 return False | |
| 174 self.mock( | |
| 175 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 176 _MockShouldBailOutForOutdatedBuild) | |
| 177 | 168 |
| 178 need_try_job = try_job_util.NeedANewTryJob( | 169 need_try_job = try_job_util.NeedANewTryJob( |
| 179 master_name, builder_name, build_number, failure_info, None, None) | 170 master_name, builder_name, build_number, failure_info, None, None) |
| 180 | 171 |
| 181 self.assertFalse(need_try_job) | 172 self.assertFalse(need_try_job) |
| 182 | 173 |
| 183 def testBlameListsIntersect(self): | 174 def testBlameListsIntersect(self): |
| 184 self.assertFalse(try_job_util._BlameListsIntersection(['0'], ['1'])) | 175 self.assertFalse(try_job_util._BlameListsIntersection(['0'], ['1'])) |
| 185 self.assertFalse(try_job_util._BlameListsIntersection(['1'], [])) | 176 self.assertFalse(try_job_util._BlameListsIntersection(['1'], [])) |
| 186 self.assertFalse(try_job_util._BlameListsIntersection([], [])) | 177 self.assertFalse(try_job_util._BlameListsIntersection([], [])) |
| (...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 796 | 787 |
| 797 WfAnalysis.Create(master_name_2, builder_name, build_number).put() | 788 WfAnalysis.Create(master_name_2, builder_name, build_number).put() |
| 798 # Run pipeline with signals that have different failed steps. | 789 # Run pipeline with signals that have different failed steps. |
| 799 # Observe new group creation. | 790 # Observe new group creation. |
| 800 self.assertTrue(try_job_util._IsBuildFailureUniqueAcrossPlatforms( | 791 self.assertTrue(try_job_util._IsBuildFailureUniqueAcrossPlatforms( |
| 801 master_name_2, builder_name, build_number, failure_type.TEST, | 792 master_name_2, builder_name, build_number, failure_type.TEST, |
| 802 blame_list, failed_steps_2, None, None)) | 793 blame_list, failed_steps_2, None, None)) |
| 803 self.assertTrue( | 794 self.assertTrue( |
| 804 WfFailureGroup.Get(master_name_2, builder_name, build_number)) | 795 WfFailureGroup.Get(master_name_2, builder_name, build_number)) |
| 805 | 796 |
| 806 def testNotNeedANewTryJobIfOneWithResultExists(self): | 797 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 798 def testNotNeedANewTryJobIfOneWithResultExists(self, mock_fn): |
| 807 master_name = 'm' | 799 master_name = 'm' |
| 808 builder_name = 'b' | 800 builder_name = 'b' |
| 809 build_number = 223 | 801 build_number = 223 |
| 810 failure_info = { | 802 failure_info = { |
| 811 'failed_steps': { | 803 'failed_steps': { |
| 812 'compile': { | 804 'compile': { |
| 813 'current_failure': 223, | 805 'current_failure': 223, |
| 814 'first_failure': 223, | 806 'first_failure': 223, |
| 815 'last_pass': 220 | 807 'last_pass': 220 |
| 816 } | 808 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 828 'failure_type': failure_type.COMPILE | 820 'failure_type': failure_type.COMPILE |
| 829 } | 821 } |
| 830 | 822 |
| 831 try_job = WfTryJob.Create(master_name, builder_name, build_number) | 823 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 832 try_job.compile_results = [['rev', 'failed']] | 824 try_job.compile_results = [['rev', 'failed']] |
| 833 try_job.status = analysis_status.COMPLETED | 825 try_job.status = analysis_status.COMPLETED |
| 834 try_job.put() | 826 try_job.put() |
| 835 | 827 |
| 836 WfAnalysis.Create(master_name, builder_name, build_number).put() | 828 WfAnalysis.Create(master_name, builder_name, build_number).put() |
| 837 | 829 |
| 838 def _MockShouldBailOutForOutdatedBuild(*_): | 830 mock_fn.return_value = False |
| 839 return False | |
| 840 self.mock( | |
| 841 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 842 _MockShouldBailOutForOutdatedBuild) | |
| 843 | 831 |
| 844 need_try_job = try_job_util.NeedANewTryJob( | 832 need_try_job = try_job_util.NeedANewTryJob( |
| 845 master_name, builder_name, build_number, failure_info, None, None) | 833 master_name, builder_name, build_number, failure_info, None, None) |
| 846 | 834 |
| 847 self.assertFalse(need_try_job) | 835 self.assertFalse(need_try_job) |
| 848 | 836 |
| 849 def testNeedANewTryJobIfExistingOneHasError(self): | 837 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 838 def testNeedANewTryJobIfExistingOneHasError(self, mock_fn): |
| 850 master_name = 'm' | 839 master_name = 'm' |
| 851 builder_name = 'b' | 840 builder_name = 'b' |
| 852 build_number = 223 | 841 build_number = 223 |
| 853 failure_info = { | 842 failure_info = { |
| 854 'failed_steps': { | 843 'failed_steps': { |
| 855 'compile': { | 844 'compile': { |
| 856 'current_failure': 223, | 845 'current_failure': 223, |
| 857 'first_failure': 223, | 846 'first_failure': 223, |
| 858 'last_pass': 220 | 847 'last_pass': 220 |
| 859 } | 848 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 870 }, | 859 }, |
| 871 'failure_type': failure_type.COMPILE | 860 'failure_type': failure_type.COMPILE |
| 872 } | 861 } |
| 873 | 862 |
| 874 try_job = WfTryJob.Create(master_name, builder_name, build_number) | 863 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 875 try_job.status = analysis_status.ERROR | 864 try_job.status = analysis_status.ERROR |
| 876 try_job.put() | 865 try_job.put() |
| 877 | 866 |
| 878 WfAnalysis.Create(master_name, builder_name, build_number).put() | 867 WfAnalysis.Create(master_name, builder_name, build_number).put() |
| 879 | 868 |
| 880 def _MockShouldBailOutForOutdatedBuild(*_): | 869 mock_fn.return_value = False |
| 881 return False | |
| 882 self.mock( | |
| 883 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 884 _MockShouldBailOutForOutdatedBuild) | |
| 885 | 870 |
| 886 need_try_job = try_job_util.NeedANewTryJob( | 871 need_try_job = try_job_util.NeedANewTryJob( |
| 887 master_name, builder_name, build_number, failure_info, None, None) | 872 master_name, builder_name, build_number, failure_info, None, None) |
| 888 | 873 |
| 889 self.assertTrue(need_try_job) | 874 self.assertTrue(need_try_job) |
| 890 | 875 |
| 891 def testNotNeedANewTryJobIfNoNewFailure(self): | 876 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 877 def testNotNeedANewTryJobIfNoNewFailure(self, mock_fn): |
| 892 master_name = 'm' | 878 master_name = 'm' |
| 893 builder_name = 'b' | 879 builder_name = 'b' |
| 894 build_number = 223 | 880 build_number = 223 |
| 895 failure_info = { | 881 failure_info = { |
| 896 'failed_steps': { | 882 'failed_steps': { |
| 897 'a': { | 883 'a': { |
| 898 'current_failure': 223, | 884 'current_failure': 223, |
| 899 'first_failure': 222, | 885 'first_failure': 222, |
| 900 'last_pass': 221, | 886 'last_pass': 221, |
| 901 'tests': { | 887 'tests': { |
| 902 'a.t2': { | 888 'a.t2': { |
| 903 'current_failure': 223, | 889 'current_failure': 223, |
| 904 'first_failure': 222, | 890 'first_failure': 222, |
| 905 'last_pass': 221 | 891 'last_pass': 221 |
| 906 } | 892 } |
| 907 } | 893 } |
| 908 } | 894 } |
| 909 }, | 895 }, |
| 910 'failure_type': failure_type.TEST | 896 'failure_type': failure_type.TEST |
| 911 } | 897 } |
| 912 | 898 |
| 913 analysis = WfAnalysis.Create(master_name, builder_name, build_number) | 899 analysis = WfAnalysis.Create(master_name, builder_name, build_number) |
| 914 analysis.failure_result_map = { | 900 analysis.failure_result_map = { |
| 915 'a': { | 901 'a': { |
| 916 'a.t2': 'm/b/222' | 902 'a.t2': 'm/b/222' |
| 917 } | 903 } |
| 918 } | 904 } |
| 919 analysis.put() | 905 analysis.put() |
| 920 | 906 |
| 921 def _MockShouldBailOutForOutdatedBuild(*_): | 907 mock_fn.return_value = False |
| 922 return False | |
| 923 self.mock( | |
| 924 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 925 _MockShouldBailOutForOutdatedBuild) | |
| 926 | 908 |
| 927 need_try_job = try_job_util.NeedANewTryJob( | 909 need_try_job = try_job_util.NeedANewTryJob( |
| 928 master_name, builder_name, build_number, failure_info, None, None) | 910 master_name, builder_name, build_number, failure_info, None, None) |
| 929 | 911 |
| 930 self.assertFalse(need_try_job) | 912 self.assertFalse(need_try_job) |
| 931 | 913 |
| 932 def testNeedANewTryJobIfTestFailureSwarming(self): | 914 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 915 def testNeedANewTryJobIfTestFailureSwarming(self, mock_fn): |
| 933 master_name = 'm' | 916 master_name = 'm' |
| 934 builder_name = 'b' | 917 builder_name = 'b' |
| 935 build_number = 223 | 918 build_number = 223 |
| 936 failure_info = { | 919 failure_info = { |
| 937 'failed_steps': { | 920 'failed_steps': { |
| 938 'a': { | 921 'a': { |
| 939 'current_failure': 223, | 922 'current_failure': 223, |
| 940 'first_failure': 222, | 923 'first_failure': 222, |
| 941 'last_pass': 221, | 924 'last_pass': 221, |
| 942 'tests': { | 925 'tests': { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 996 'a.t2': 'm/b/222', | 979 'a.t2': 'm/b/222', |
| 997 'a.t3': 'm/b/223' | 980 'a.t3': 'm/b/223' |
| 998 }, | 981 }, |
| 999 'b': { | 982 'b': { |
| 1000 'b.t1': 'm/b/222', | 983 'b.t1': 'm/b/222', |
| 1001 'b.t2': 'm/b/222' | 984 'b.t2': 'm/b/222' |
| 1002 } | 985 } |
| 1003 } | 986 } |
| 1004 analysis.put() | 987 analysis.put() |
| 1005 | 988 |
| 1006 def _MockShouldBailOutForOutdatedBuild(*_): | 989 mock_fn.return_value = False |
| 1007 return False | |
| 1008 self.mock( | |
| 1009 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 1010 _MockShouldBailOutForOutdatedBuild) | |
| 1011 | 990 |
| 1012 need_try_job = try_job_util.NeedANewTryJob( | 991 need_try_job = try_job_util.NeedANewTryJob( |
| 1013 master_name, builder_name, build_number, failure_info, None, None) | 992 master_name, builder_name, build_number, failure_info, None, None) |
| 1014 | 993 |
| 1015 self.assertTrue(need_try_job) | 994 self.assertTrue(need_try_job) |
| 1016 | 995 |
| 1017 def testNeedANewTryJob(self): | 996 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 997 def testNeedANewTryJob(self, mock_fn): |
| 1018 master_name = 'm' | 998 master_name = 'm' |
| 1019 builder_name = 'b' | 999 builder_name = 'b' |
| 1020 build_number = 223 | 1000 build_number = 223 |
| 1021 failure_info = { | 1001 failure_info = { |
| 1022 'master_name': master_name, | 1002 'master_name': master_name, |
| 1023 'builder_name': builder_name, | 1003 'builder_name': builder_name, |
| 1024 'build_number': build_number, | 1004 'build_number': build_number, |
| 1025 'failed_steps': { | 1005 'failed_steps': { |
| 1026 'compile': { | 1006 'compile': { |
| 1027 'current_failure': 223, | 1007 'current_failure': 223, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1041 }, | 1021 }, |
| 1042 'failure_type': failure_type.COMPILE | 1022 'failure_type': failure_type.COMPILE |
| 1043 } | 1023 } |
| 1044 | 1024 |
| 1045 analysis = WfAnalysis.Create(master_name, builder_name, build_number) | 1025 analysis = WfAnalysis.Create(master_name, builder_name, build_number) |
| 1046 analysis.failure_result_map = { | 1026 analysis.failure_result_map = { |
| 1047 'compile': 'm/b/223' | 1027 'compile': 'm/b/223' |
| 1048 } | 1028 } |
| 1049 analysis.put() | 1029 analysis.put() |
| 1050 | 1030 |
| 1051 def _MockShouldBailOutForOutdatedBuild(*_): | 1031 mock_fn.return_value = False |
| 1052 return False | |
| 1053 self.mock( | |
| 1054 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 1055 _MockShouldBailOutForOutdatedBuild) | |
| 1056 | 1032 |
| 1057 need_try_job = try_job_util.NeedANewTryJob( | 1033 need_try_job = try_job_util.NeedANewTryJob( |
| 1058 master_name, builder_name, build_number, failure_info, None, None) | 1034 master_name, builder_name, build_number, failure_info, None, None) |
| 1059 | 1035 |
| 1060 self.assertTrue(need_try_job) | 1036 self.assertTrue(need_try_job) |
| 1061 | 1037 |
| 1062 def testNotNeedANewTryJobForOtherType(self): | 1038 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 1039 def testNotNeedANewTryJobForOtherType(self, mock_fn): |
| 1063 master_name = 'm' | 1040 master_name = 'm' |
| 1064 builder_name = 'b' | 1041 builder_name = 'b' |
| 1065 build_number = 223 | 1042 build_number = 223 |
| 1066 failure_info = { | 1043 failure_info = { |
| 1067 'master_name': master_name, | 1044 'master_name': master_name, |
| 1068 'builder_name': builder_name, | 1045 'builder_name': builder_name, |
| 1069 'build_number': build_number, | 1046 'build_number': build_number, |
| 1070 'failed_steps': {}, | 1047 'failed_steps': {}, |
| 1071 'builds': { | 1048 'builds': { |
| 1072 '222': { | 1049 '222': { |
| 1073 'blame_list': ['222-1'], | 1050 'blame_list': ['222-1'], |
| 1074 'chromium_revision': '222-1' | 1051 'chromium_revision': '222-1' |
| 1075 }, | 1052 }, |
| 1076 '223': { | 1053 '223': { |
| 1077 'blame_list': ['223-1', '223-2', '223-3'], | 1054 'blame_list': ['223-1', '223-2', '223-3'], |
| 1078 'chromium_revision': '223-3' | 1055 'chromium_revision': '223-3' |
| 1079 } | 1056 } |
| 1080 }, | 1057 }, |
| 1081 'failure_type': failure_type.UNKNOWN | 1058 'failure_type': failure_type.UNKNOWN |
| 1082 } | 1059 } |
| 1083 | 1060 |
| 1084 def _MockShouldBailOutForOutdatedBuild(*_): | 1061 mock_fn.return_value = False |
| 1085 return False | |
| 1086 self.mock( | |
| 1087 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 1088 _MockShouldBailOutForOutdatedBuild) | |
| 1089 | 1062 |
| 1090 need_try_job = try_job_util.NeedANewTryJob( | 1063 need_try_job = try_job_util.NeedANewTryJob( |
| 1091 master_name, builder_name, build_number, failure_info, None, None) | 1064 master_name, builder_name, build_number, failure_info, None, None) |
| 1092 | 1065 |
| 1093 self.assertFalse(need_try_job) | 1066 self.assertFalse(need_try_job) |
| 1094 | 1067 |
| 1095 def testNotNeedANewTryJobForCompileTypeNoFailureInfo(self): | 1068 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild') |
| 1069 def testNotNeedANewTryJobForCompileTypeNoFailureInfo(self, mock_fn): |
| 1096 master_name = 'm' | 1070 master_name = 'm' |
| 1097 builder_name = 'b' | 1071 builder_name = 'b' |
| 1098 build_number = 223 | 1072 build_number = 223 |
| 1099 failure_info = { | 1073 failure_info = { |
| 1100 'master_name': master_name, | 1074 'master_name': master_name, |
| 1101 'builder_name': builder_name, | 1075 'builder_name': builder_name, |
| 1102 'build_number': build_number, | 1076 'build_number': build_number, |
| 1103 'failed_steps': {}, | 1077 'failed_steps': {}, |
| 1104 'builds': { | 1078 'builds': { |
| 1105 '222': { | 1079 '222': { |
| 1106 'blame_list': ['222-1'], | 1080 'blame_list': ['222-1'], |
| 1107 'chromium_revision': '222-1' | 1081 'chromium_revision': '222-1' |
| 1108 }, | 1082 }, |
| 1109 '223': { | 1083 '223': { |
| 1110 'blame_list': ['223-1', '223-2', '223-3'], | 1084 'blame_list': ['223-1', '223-2', '223-3'], |
| 1111 'chromium_revision': '223-3' | 1085 'chromium_revision': '223-3' |
| 1112 } | 1086 } |
| 1113 }, | 1087 }, |
| 1114 'failure_type': failure_type.COMPILE | 1088 'failure_type': failure_type.COMPILE |
| 1115 } | 1089 } |
| 1116 | 1090 |
| 1117 def _MockShouldBailOutForOutdatedBuild(*_): | 1091 mock_fn.return_value = False |
| 1118 return False | |
| 1119 self.mock( | |
| 1120 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 1121 _MockShouldBailOutForOutdatedBuild) | |
| 1122 | 1092 |
| 1123 need_try_job = try_job_util.NeedANewTryJob( | 1093 need_try_job = try_job_util.NeedANewTryJob( |
| 1124 master_name, builder_name, build_number, failure_info, None, None) | 1094 master_name, builder_name, build_number, failure_info, None, None) |
| 1125 | 1095 |
| 1126 self.assertFalse(need_try_job) | 1096 self.assertFalse(need_try_job) |
| 1127 | 1097 |
| 1128 def testForceTryJob(self): | 1098 def testForceTryJob(self): |
| 1129 master_name = 'm' | 1099 master_name = 'm' |
| 1130 builder_name = 'b' | 1100 builder_name = 'b' |
| 1131 build_number = 223 | 1101 build_number = 223 |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1290 'failed_targets': [ | 1260 'failed_targets': [ |
| 1291 {'source': 'b.cc', 'target': 'b.o'}, | 1261 {'source': 'b.cc', 'target': 'b.o'}, |
| 1292 ] | 1262 ] |
| 1293 } | 1263 } |
| 1294 } | 1264 } |
| 1295 | 1265 |
| 1296 self.assertEqual( | 1266 self.assertEqual( |
| 1297 try_job_util.GetFailedTargetsFromSignals( | 1267 try_job_util.GetFailedTargetsFromSignals( |
| 1298 signals, 'master1', 'builder1'), | 1268 signals, 'master1', 'builder1'), |
| 1299 ['b.o']) | 1269 ['b.o']) |
| OLD | NEW |