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

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

Issue 1591003002: [Findit] Modify tryjob pipelines to trigger try jobs for test failure. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 4 years, 11 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 testing_utils import testing 5 from testing_utils import testing
6 6
7 from model import wf_analysis_status 7 from model import wf_analysis_status
8 from model.wf_analysis import WfAnalysis 8 from model.wf_analysis import WfAnalysis
9 from model.wf_try_job import WfTryJob 9 from model.wf_try_job import WfTryJob
10 from waterfall import try_job_util 10 from waterfall import try_job_util
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 } 120 }
121 121
122 self.mock( 122 self.mock(
123 try_job_util.try_job_pipeline, 'TryJobPipeline', _MockRootPipeline) 123 try_job_util.try_job_pipeline, 'TryJobPipeline', _MockRootPipeline)
124 _MockRootPipeline.STARTED = False 124 _MockRootPipeline.STARTED = False
125 125
126 try_job_util.ScheduleTryJobIfNeeded(failure_info) 126 try_job_util.ScheduleTryJobIfNeeded(failure_info)
127 127
128 self.assertFalse(_MockRootPipeline.STARTED) 128 self.assertFalse(_MockRootPipeline.STARTED)
129 129
130 def testNotNeedANewTryJobIfNotCompileFailure(self):
131 master_name = 'm'
132 builder_name = 'b'
133 build_number = 223
134 failed_steps = {
135 'a': {
136 'current_failure': 223,
137 'first_failure': 223,
138 'last_pass': 222
139 }
140 }
141
142 need_try_job, failure_result_map, last_pass = try_job_util._NeedANewTryJob(
143 master_name, builder_name, build_number, failed_steps)
144
145 self.assertFalse(need_try_job)
146 self.assertEqual({}, failure_result_map)
147 self.assertIsNone(last_pass)
148
149 def testNotNeedANewTryJobIfOneWithResultExists(self): 130 def testNotNeedANewTryJobIfOneWithResultExists(self):
150 master_name = 'm' 131 master_name = 'm'
151 builder_name = 'b' 132 builder_name = 'b'
152 build_number = 223 133 build_number = 223
153 failed_steps = { 134 failed_steps = {
154 'compile': { 135 'compile': {
155 'current_failure': 223, 136 'current_failure': 223,
156 'first_failure': 223, 137 'first_failure': 223,
157 'last_pass': 220 138 'last_pass': 220
158 } 139 }
159 } 140 }
160 141
161 try_job = WfTryJob.Create(master_name, builder_name, build_number) 142 try_job = WfTryJob.Create(master_name, builder_name, build_number)
162 try_job.compile_results = [['rev', 'failed']] 143 try_job.compile_results = [['rev', 'failed']]
163 try_job.status = wf_analysis_status.ANALYZED 144 try_job.status = wf_analysis_status.ANALYZED
164 try_job.put() 145 try_job.put()
165 146
166 need_try_job, failure_result_map, last_pass = try_job_util._NeedANewTryJob( 147 failure_result_map = {}
167 master_name, builder_name, build_number, failed_steps) 148 need_try_job, last_pass, try_job_type, targeted_tests = (
149 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
150 failed_steps, failure_result_map))
168 151
169 expected_failure_result_map = { 152 expected_failure_result_map = {
170 'compile': 'm/b/223' 153 'compile': 'm/b/223'
171 } 154 }
172 155
173 self.assertFalse(need_try_job) 156 self.assertFalse(need_try_job)
174 self.assertEqual(expected_failure_result_map, failure_result_map) 157 self.assertEqual(expected_failure_result_map, failure_result_map)
175 self.assertEqual(220, last_pass) 158 self.assertEqual(220, last_pass)
159 self.assertEqual('compile', try_job_type)
160 self.assertIsNone(targeted_tests)
176 161
177 def testNeedANewTryJobIfExistingOneHasError(self): 162 def testNeedANewTryJobIfExistingOneHasError(self):
178 master_name = 'm' 163 master_name = 'm'
179 builder_name = 'b' 164 builder_name = 'b'
180 build_number = 223 165 build_number = 223
181 failed_steps = { 166 failed_steps = {
182 'compile': { 167 'compile': {
183 'current_failure': 223, 168 'current_failure': 223,
184 'first_failure': 223, 169 'first_failure': 223,
185 'last_pass': 220 170 'last_pass': 220
186 } 171 }
187 } 172 }
188 173
189 try_job = WfTryJob.Create(master_name, builder_name, build_number) 174 try_job = WfTryJob.Create(master_name, builder_name, build_number)
190 try_job.status = wf_analysis_status.ERROR 175 try_job.status = wf_analysis_status.ERROR
191 try_job.put() 176 try_job.put()
192 177
193 need_try_job, failure_result_map, last_pass = try_job_util._NeedANewTryJob( 178 failure_result_map = {}
194 master_name, builder_name, build_number, failed_steps) 179 need_try_job, last_pass, try_job_type, targeted_tests = (
180 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
181 failed_steps, failure_result_map))
195 182
196 expected_failure_result_map = { 183 expected_failure_result_map = {
197 'compile': 'm/b/223' 184 'compile': 'm/b/223'
198 } 185 }
199 self.assertTrue(need_try_job) 186 self.assertTrue(need_try_job)
200 self.assertEqual(expected_failure_result_map, failure_result_map) 187 self.assertEqual(expected_failure_result_map, failure_result_map)
201 self.assertEqual(220, last_pass) 188 self.assertEqual(220, last_pass)
189 self.assertEqual('compile', try_job_type)
190 self.assertIsNone(targeted_tests)
202 191
203 def testNotNeedANewTryJobIfLastPassCannotDetermine(self): 192 def testNotNeedANewTryJobIfLastPassCannotDetermine(self):
204 master_name = 'm' 193 master_name = 'm'
205 builder_name = 'b' 194 builder_name = 'b'
206 build_number = 223 195 build_number = 223
207 failed_steps = { 196 failed_steps = {
208 'compile': { 197 'compile': {
209 'current_failure': 223, 198 'current_failure': 223,
210 'first_failure': 223 199 'first_failure': 223
211 } 200 }
212 } 201 }
213 202
214 try_job = WfTryJob.Create(master_name, builder_name, build_number) 203 try_job = WfTryJob.Create(master_name, builder_name, build_number)
215 try_job.status = wf_analysis_status.ERROR 204 try_job.status = wf_analysis_status.ERROR
216 try_job.put() 205 try_job.put()
217 206
218 need_try_job, failure_result_map, last_pass = try_job_util._NeedANewTryJob( 207 failure_result_map = {}
219 master_name, builder_name, build_number, failed_steps) 208 need_try_job, last_pass, try_job_type, targeted_tests = (
209 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
210 failed_steps, failure_result_map))
220 211
221 self.assertFalse(need_try_job) 212 self.assertFalse(need_try_job)
222 self.assertEqual({}, failure_result_map) 213 self.assertEqual({}, failure_result_map)
223 self.assertIsNone(last_pass) 214 self.assertIsNone(last_pass)
215 self.assertEqual('compile', try_job_type)
216 self.assertIsNone(targeted_tests)
217
218 def testNeedANewTryJobIfTestFailureNonSwarming(self):
219 master_name = 'm'
220 builder_name = 'b'
221 build_number = 223
222 failed_steps = {
223 'a': {
224 'current_failure': 223,
225 'first_failure': 223,
226 'last_pass': 222
227 },
228 'b': {
229 'current_failure': 223,
230 'first_failure': 222,
231 'last_pass': 221
232 }
233 }
234
235 failure_result_map = {}
236 need_try_job, last_pass, try_job_type, targeted_tests = (
237 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
238 failed_steps, failure_result_map))
239
240 expected_failure_result_map = {
241 'a': 'm/b/223',
242 'b': 'm/b/222'
243 }
244
245 expected_targeted_tests = {
246 'a': []
247 }
248
249 self.assertTrue(need_try_job)
250 self.assertEqual(expected_failure_result_map, failure_result_map)
251 self.assertEqual(222, last_pass)
252 self.assertEqual('test', try_job_type)
253 self.assertEqual(expected_targeted_tests, targeted_tests)
254
255 def testNeedANewTryJobIfTestFailureSwarming(self):
256 master_name = 'm'
257 builder_name = 'b'
258 build_number = 223
259 failed_steps = {
260 'a': {
261 'current_failure': 223,
262 'first_failure': 222,
263 'last_pass': 221,
264 'tests': {
265 'a.t1': {
266 'current_failure': 223,
267 'first_failure': 223,
268 'last_pass': 221
269 },
270 'a.t2': {
271 'current_failure': 223,
272 'first_failure': 222,
273 'last_pass': 221
274 },
275 'a.t3': {
276 'current_failure': 223,
277 'first_failure': 223,
278 'last_pass': 222
279 }
280 }
281 },
282 'b': {
283 'current_failure': 223,
284 'first_failure': 222,
285 'last_pass': 221,
286 'tests': {
287 'b.t1': {
288 'current_failure': 223,
289 'first_failure': 222,
290 'last_pass': 221
291 },
292 'b.t2': {
293 'current_failure': 223,
294 'first_failure': 222,
295 'last_pass': 221
296 }
297 }
298 }
299 }
300
301 failure_result_map = {}
302 need_try_job, last_pass, try_job_type, targeted_tests = (
303 try_job_util._NeedANewTryJob(master_name, builder_name, build_number,
304 failed_steps, failure_result_map))
305
306 expected_failure_result_map = {
307 'a': {
308 'a.t1': 'm/b/223',
309 'a.t2': 'm/b/222',
310 'a.t3': 'm/b/223'
311 },
312 'b': {
313 'b.t1': 'm/b/222',
314 'b.t2': 'm/b/222'
315 },
316 }
317
318 expected_targeted_tests = {
319 'a': ['a.t1', 'a.t3']
320 }
321
322 self.assertTrue(need_try_job)
323 self.assertEqual(expected_failure_result_map, failure_result_map)
324 self.assertEqual(221, last_pass)
325 self.assertEqual('test', try_job_type)
326 self.assertEqual(expected_targeted_tests, targeted_tests)
224 327
225 def testNeedANewTryJob(self): 328 def testNeedANewTryJob(self):
226 master_name = 'm' 329 master_name = 'm'
227 builder_name = 'b' 330 builder_name = 'b'
228 build_number = 223 331 build_number = 223
229 failure_info = { 332 failure_info = {
230 'master_name': master_name, 333 'master_name': master_name,
231 'builder_name': builder_name, 334 'builder_name': builder_name,
232 'build_number': build_number, 335 'build_number': build_number,
233 'failed_steps': { 336 'failed_steps': {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 'failed_targets': [ 371 'failed_targets': [
269 {'target': 'a.exe'}, 372 {'target': 'a.exe'},
270 {'source': 'b.cc', 373 {'source': 'b.cc',
271 'target': 'b.o'}] 374 'target': 'b.o'}]
272 } 375 }
273 } 376 }
274 377
275 self.assertEqual( 378 self.assertEqual(
276 try_job_util._GetFailedTargetsFromSignals(signals), ['a.exe']) 379 try_job_util._GetFailedTargetsFromSignals(signals), ['a.exe'])
277 380
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698