Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Side by Side Diff: appengine/findit/waterfall/test/try_job_util_test.py

Issue 2203643002: [Findit] Use new mock for unittests. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@0708-pipeline-refactor
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 781
791 WfAnalysis.Create(master_name_2, builder_name, build_number).put() 782 WfAnalysis.Create(master_name_2, builder_name, build_number).put()
792 # Run pipeline with signals that have different failed steps. 783 # Run pipeline with signals that have different failed steps.
793 # Observe new group creation. 784 # Observe new group creation.
794 self.assertTrue(try_job_util._IsBuildFailureUniqueAcrossPlatforms( 785 self.assertTrue(try_job_util._IsBuildFailureUniqueAcrossPlatforms(
795 master_name_2, builder_name, build_number, failure_type.TEST, 786 master_name_2, builder_name, build_number, failure_type.TEST,
796 blame_list, failed_steps_2, None, None)) 787 blame_list, failed_steps_2, None, None))
797 self.assertTrue( 788 self.assertTrue(
798 WfFailureGroup.Get(master_name_2, builder_name, build_number)) 789 WfFailureGroup.Get(master_name_2, builder_name, build_number))
799 790
800 def testNotNeedANewTryJobIfOneWithResultExists(self): 791 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild')
792 def testNotNeedANewTryJobIfOneWithResultExists(self, mock_fn):
801 master_name = 'm' 793 master_name = 'm'
802 builder_name = 'b' 794 builder_name = 'b'
803 build_number = 223 795 build_number = 223
804 failure_info = { 796 failure_info = {
805 'failed_steps': { 797 'failed_steps': {
806 'compile': { 798 'compile': {
807 'current_failure': 223, 799 'current_failure': 223,
808 'first_failure': 223, 800 'first_failure': 223,
809 'last_pass': 220 801 'last_pass': 220
810 } 802 }
(...skipping 11 matching lines...) Expand all
822 'failure_type': failure_type.COMPILE 814 'failure_type': failure_type.COMPILE
823 } 815 }
824 816
825 try_job = WfTryJob.Create(master_name, builder_name, build_number) 817 try_job = WfTryJob.Create(master_name, builder_name, build_number)
826 try_job.compile_results = [['rev', 'failed']] 818 try_job.compile_results = [['rev', 'failed']]
827 try_job.status = analysis_status.COMPLETED 819 try_job.status = analysis_status.COMPLETED
828 try_job.put() 820 try_job.put()
829 821
830 WfAnalysis.Create(master_name, builder_name, build_number).put() 822 WfAnalysis.Create(master_name, builder_name, build_number).put()
831 823
832 def _MockShouldBailOutForOutdatedBuild(*_): 824 mock_fn.return_value = False
833 return False
834 self.mock(
835 try_job_util, '_ShouldBailOutForOutdatedBuild',
836 _MockShouldBailOutForOutdatedBuild)
837 825
838 need_try_job = try_job_util.NeedANewTryJob( 826 need_try_job = try_job_util.NeedANewTryJob(
839 master_name, builder_name, build_number, failure_info, None, None) 827 master_name, builder_name, build_number, failure_info, None, None)
840 828
841 self.assertFalse(need_try_job) 829 self.assertFalse(need_try_job)
842 830
843 def testNeedANewTryJobIfExistingOneHasError(self): 831 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild')
832 def testNeedANewTryJobIfExistingOneHasError(self, mock_fn):
844 master_name = 'm' 833 master_name = 'm'
845 builder_name = 'b' 834 builder_name = 'b'
846 build_number = 223 835 build_number = 223
847 failure_info = { 836 failure_info = {
848 'failed_steps': { 837 'failed_steps': {
849 'compile': { 838 'compile': {
850 'current_failure': 223, 839 'current_failure': 223,
851 'first_failure': 223, 840 'first_failure': 223,
852 'last_pass': 220 841 'last_pass': 220
853 } 842 }
(...skipping 10 matching lines...) Expand all
864 }, 853 },
865 'failure_type': failure_type.COMPILE 854 'failure_type': failure_type.COMPILE
866 } 855 }
867 856
868 try_job = WfTryJob.Create(master_name, builder_name, build_number) 857 try_job = WfTryJob.Create(master_name, builder_name, build_number)
869 try_job.status = analysis_status.ERROR 858 try_job.status = analysis_status.ERROR
870 try_job.put() 859 try_job.put()
871 860
872 WfAnalysis.Create(master_name, builder_name, build_number).put() 861 WfAnalysis.Create(master_name, builder_name, build_number).put()
873 862
874 def _MockShouldBailOutForOutdatedBuild(*_): 863 mock_fn.return_value = False
875 return False
876 self.mock(
877 try_job_util, '_ShouldBailOutForOutdatedBuild',
878 _MockShouldBailOutForOutdatedBuild)
879 864
880 need_try_job = try_job_util.NeedANewTryJob( 865 need_try_job = try_job_util.NeedANewTryJob(
881 master_name, builder_name, build_number, failure_info, None, None) 866 master_name, builder_name, build_number, failure_info, None, None)
882 867
883 self.assertTrue(need_try_job) 868 self.assertTrue(need_try_job)
884 869
885 def testNotNeedANewTryJobIfNoNewFailure(self): 870 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild')
871 def testNotNeedANewTryJobIfNoNewFailure(self, mock_fn):
886 master_name = 'm' 872 master_name = 'm'
887 builder_name = 'b' 873 builder_name = 'b'
888 build_number = 223 874 build_number = 223
889 failure_info = { 875 failure_info = {
890 'failed_steps': { 876 'failed_steps': {
891 'a': { 877 'a': {
892 'current_failure': 223, 878 'current_failure': 223,
893 'first_failure': 222, 879 'first_failure': 222,
894 'last_pass': 221, 880 'last_pass': 221,
895 'tests': { 881 'tests': {
896 'a.t2': { 882 'a.t2': {
897 'current_failure': 223, 883 'current_failure': 223,
898 'first_failure': 222, 884 'first_failure': 222,
899 'last_pass': 221 885 'last_pass': 221
900 } 886 }
901 } 887 }
902 } 888 }
903 }, 889 },
904 'failure_type': failure_type.TEST 890 'failure_type': failure_type.TEST
905 } 891 }
906 892
907 analysis = WfAnalysis.Create(master_name, builder_name, build_number) 893 analysis = WfAnalysis.Create(master_name, builder_name, build_number)
908 analysis.failure_result_map = { 894 analysis.failure_result_map = {
909 'a': { 895 'a': {
910 'a.t2': 'm/b/222' 896 'a.t2': 'm/b/222'
911 } 897 }
912 } 898 }
913 analysis.put() 899 analysis.put()
914 900
915 def _MockShouldBailOutForOutdatedBuild(*_): 901 mock_fn.return_value = False
916 return False
917 self.mock(
918 try_job_util, '_ShouldBailOutForOutdatedBuild',
919 _MockShouldBailOutForOutdatedBuild)
920 902
921 need_try_job = try_job_util.NeedANewTryJob( 903 need_try_job = try_job_util.NeedANewTryJob(
922 master_name, builder_name, build_number, failure_info, None, None) 904 master_name, builder_name, build_number, failure_info, None, None)
923 905
924 self.assertFalse(need_try_job) 906 self.assertFalse(need_try_job)
925 907
926 def testNeedANewTryJobIfTestFailureSwarming(self): 908 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild')
909 def testNeedANewTryJobIfTestFailureSwarming(self, mock_fn):
927 master_name = 'm' 910 master_name = 'm'
928 builder_name = 'b' 911 builder_name = 'b'
929 build_number = 223 912 build_number = 223
930 failure_info = { 913 failure_info = {
931 'failed_steps': { 914 'failed_steps': {
932 'a': { 915 'a': {
933 'current_failure': 223, 916 'current_failure': 223,
934 'first_failure': 222, 917 'first_failure': 222,
935 'last_pass': 221, 918 'last_pass': 221,
936 'tests': { 919 'tests': {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
990 'a.t2': 'm/b/222', 973 'a.t2': 'm/b/222',
991 'a.t3': 'm/b/223' 974 'a.t3': 'm/b/223'
992 }, 975 },
993 'b': { 976 'b': {
994 'b.t1': 'm/b/222', 977 'b.t1': 'm/b/222',
995 'b.t2': 'm/b/222' 978 'b.t2': 'm/b/222'
996 } 979 }
997 } 980 }
998 analysis.put() 981 analysis.put()
999 982
1000 def _MockShouldBailOutForOutdatedBuild(*_): 983 mock_fn.return_value = False
1001 return False
1002 self.mock(
1003 try_job_util, '_ShouldBailOutForOutdatedBuild',
1004 _MockShouldBailOutForOutdatedBuild)
1005 984
1006 need_try_job = try_job_util.NeedANewTryJob( 985 need_try_job = try_job_util.NeedANewTryJob(
1007 master_name, builder_name, build_number, failure_info, None, None) 986 master_name, builder_name, build_number, failure_info, None, None)
1008 987
1009 self.assertTrue(need_try_job) 988 self.assertTrue(need_try_job)
1010 989
1011 def testNeedANewTryJob(self): 990 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild')
991 def testNeedANewTryJob(self, mock_fn):
1012 master_name = 'm' 992 master_name = 'm'
1013 builder_name = 'b' 993 builder_name = 'b'
1014 build_number = 223 994 build_number = 223
1015 failure_info = { 995 failure_info = {
1016 'master_name': master_name, 996 'master_name': master_name,
1017 'builder_name': builder_name, 997 'builder_name': builder_name,
1018 'build_number': build_number, 998 'build_number': build_number,
1019 'failed_steps': { 999 'failed_steps': {
1020 'compile': { 1000 'compile': {
1021 'current_failure': 223, 1001 'current_failure': 223,
(...skipping 13 matching lines...) Expand all
1035 }, 1015 },
1036 'failure_type': failure_type.COMPILE 1016 'failure_type': failure_type.COMPILE
1037 } 1017 }
1038 1018
1039 analysis = WfAnalysis.Create(master_name, builder_name, build_number) 1019 analysis = WfAnalysis.Create(master_name, builder_name, build_number)
1040 analysis.failure_result_map = { 1020 analysis.failure_result_map = {
1041 'compile': 'm/b/223' 1021 'compile': 'm/b/223'
1042 } 1022 }
1043 analysis.put() 1023 analysis.put()
1044 1024
1045 def _MockShouldBailOutForOutdatedBuild(*_): 1025 mock_fn.return_value = False
1046 return False
1047 self.mock(
1048 try_job_util, '_ShouldBailOutForOutdatedBuild',
1049 _MockShouldBailOutForOutdatedBuild)
1050 1026
1051 need_try_job = try_job_util.NeedANewTryJob( 1027 need_try_job = try_job_util.NeedANewTryJob(
1052 master_name, builder_name, build_number, failure_info, None, None) 1028 master_name, builder_name, build_number, failure_info, None, None)
1053 1029
1054 self.assertTrue(need_try_job) 1030 self.assertTrue(need_try_job)
1055 1031
1056 def testNotNeedANewTryJobForOtherType(self): 1032 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild')
1033 def testNotNeedANewTryJobForOtherType(self, mock_fn):
1057 master_name = 'm' 1034 master_name = 'm'
1058 builder_name = 'b' 1035 builder_name = 'b'
1059 build_number = 223 1036 build_number = 223
1060 failure_info = { 1037 failure_info = {
1061 'master_name': master_name, 1038 'master_name': master_name,
1062 'builder_name': builder_name, 1039 'builder_name': builder_name,
1063 'build_number': build_number, 1040 'build_number': build_number,
1064 'failed_steps': {}, 1041 'failed_steps': {},
1065 'builds': { 1042 'builds': {
1066 '222': { 1043 '222': {
1067 'blame_list': ['222-1'], 1044 'blame_list': ['222-1'],
1068 'chromium_revision': '222-1' 1045 'chromium_revision': '222-1'
1069 }, 1046 },
1070 '223': { 1047 '223': {
1071 'blame_list': ['223-1', '223-2', '223-3'], 1048 'blame_list': ['223-1', '223-2', '223-3'],
1072 'chromium_revision': '223-3' 1049 'chromium_revision': '223-3'
1073 } 1050 }
1074 }, 1051 },
1075 'failure_type': failure_type.UNKNOWN 1052 'failure_type': failure_type.UNKNOWN
1076 } 1053 }
1077 1054
1078 def _MockShouldBailOutForOutdatedBuild(*_): 1055 mock_fn.return_value = False
1079 return False
1080 self.mock(
1081 try_job_util, '_ShouldBailOutForOutdatedBuild',
1082 _MockShouldBailOutForOutdatedBuild)
1083 1056
1084 need_try_job = try_job_util.NeedANewTryJob( 1057 need_try_job = try_job_util.NeedANewTryJob(
1085 master_name, builder_name, build_number, failure_info, None, None) 1058 master_name, builder_name, build_number, failure_info, None, None)
1086 1059
1087 self.assertFalse(need_try_job) 1060 self.assertFalse(need_try_job)
1088 1061
1089 def testNotNeedANewTryJobForCompileTypeNoFailureInfo(self): 1062 @mock.patch.object(try_job_util, '_ShouldBailOutForOutdatedBuild')
1063 def testNotNeedANewTryJobForCompileTypeNoFailureInfo(self, mock_fn):
1090 master_name = 'm' 1064 master_name = 'm'
1091 builder_name = 'b' 1065 builder_name = 'b'
1092 build_number = 223 1066 build_number = 223
1093 failure_info = { 1067 failure_info = {
1094 'master_name': master_name, 1068 'master_name': master_name,
1095 'builder_name': builder_name, 1069 'builder_name': builder_name,
1096 'build_number': build_number, 1070 'build_number': build_number,
1097 'failed_steps': {}, 1071 'failed_steps': {},
1098 'builds': { 1072 'builds': {
1099 '222': { 1073 '222': {
1100 'blame_list': ['222-1'], 1074 'blame_list': ['222-1'],
1101 'chromium_revision': '222-1' 1075 'chromium_revision': '222-1'
1102 }, 1076 },
1103 '223': { 1077 '223': {
1104 'blame_list': ['223-1', '223-2', '223-3'], 1078 'blame_list': ['223-1', '223-2', '223-3'],
1105 'chromium_revision': '223-3' 1079 'chromium_revision': '223-3'
1106 } 1080 }
1107 }, 1081 },
1108 'failure_type': failure_type.COMPILE 1082 'failure_type': failure_type.COMPILE
1109 } 1083 }
1110 1084
1111 def _MockShouldBailOutForOutdatedBuild(*_): 1085 mock_fn.return_value = False
1112 return False
1113 self.mock(
1114 try_job_util, '_ShouldBailOutForOutdatedBuild',
1115 _MockShouldBailOutForOutdatedBuild)
1116 1086
1117 need_try_job = try_job_util.NeedANewTryJob( 1087 need_try_job = try_job_util.NeedANewTryJob(
1118 master_name, builder_name, build_number, failure_info, None, None) 1088 master_name, builder_name, build_number, failure_info, None, None)
1119 1089
1120 self.assertFalse(need_try_job) 1090 self.assertFalse(need_try_job)
1121 1091
1122 def testForceTryJob(self): 1092 def testForceTryJob(self):
1123 master_name = 'm' 1093 master_name = 'm'
1124 builder_name = 'b' 1094 builder_name = 'b'
1125 build_number = 223 1095 build_number = 223
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1284 'failed_targets': [ 1254 'failed_targets': [
1285 {'source': 'b.cc', 'target': 'b.o'}, 1255 {'source': 'b.cc', 'target': 'b.o'},
1286 ] 1256 ]
1287 } 1257 }
1288 } 1258 }
1289 1259
1290 self.assertEqual( 1260 self.assertEqual(
1291 try_job_util.GetFailedTargetsFromSignals( 1261 try_job_util.GetFailedTargetsFromSignals(
1292 signals, 'master1', 'builder1'), 1262 signals, 'master1', 'builder1'),
1293 ['b.o']) 1263 ['b.o'])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698