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

Side by Side Diff: appengine/findit/handlers/test/try_job_result_test.py

Issue 1652603003: [Findit] Modify result page to display tryjob result for test failure. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@1228-try-job-pipeline-for-test-failure
Patch Set: . Created 4 years, 10 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
« no previous file with comments | « no previous file | appengine/findit/handlers/try_job_result.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 import json
5 import webapp2 5 import webapp2
6 6
7 from testing_utils import testing 7 from testing_utils import testing
8 8
9 from handlers import try_job_result 9 from handlers import try_job_result
10 from model.wf_analysis import WfAnalysis 10 from model.wf_analysis import WfAnalysis
11 from model import wf_analysis_status 11 from model import wf_analysis_status
12 from model.wf_try_job import WfTryJob 12 from model.wf_try_job import WfTryJob
13 from waterfall import buildbot 13 from waterfall import buildbot
14 14
15 15
16 class TryJobResultTest(testing.AppengineTestCase): 16 class TryJobResultTest(testing.AppengineTestCase):
17 app_module = webapp2.WSGIApplication([ 17 app_module = webapp2.WSGIApplication([
18 ('/try-job-result', try_job_result.TryJobResult), ], debug=True) 18 ('/try-job-result', try_job_result.TryJobResult),], debug=True)
19 19
20 def setUp(self): 20 def setUp(self):
21 super(TryJobResultTest, self).setUp() 21 super(TryJobResultTest, self).setUp()
22 self.master_name = 'm' 22 self.master_name = 'm'
23 self.builder_name = 'b' 23 self.builder_name = 'b'
24 self.build_number = 121 24 self.build_number = 121
25 self.mock_current_user(user_email='test@chromium.org', is_admin=True) 25 self.mock_current_user(user_email='test@chromium.org', is_admin=True)
26 26
27 def testGetTryJobResultReturnNoneIfNoFailureResultMap(self): 27 def testGetTryJobResultReturnNoneIfNoFailureResultMap(self):
28 analysis = WfAnalysis.Create( 28 analysis = WfAnalysis.Create(
29 self.master_name, self.builder_name, self.build_number) 29 self.master_name, self.builder_name, self.build_number)
30 analysis.put() 30 analysis.put()
31 31
32 result = try_job_result._GetTryJobResult( 32 result = try_job_result._GetAllTryJobResults(
33 self.master_name, self.builder_name, self.build_number) 33 self.master_name, self.builder_name, self.build_number)
34 34
35 self.assertEqual({}, result) 35 self.assertEqual({}, result)
36
37 def testGetTryJobResultReturnNoneIfNoCompileFailure(self):
38 analysis = WfAnalysis.Create(
39 self.master_name, self.builder_name, self.build_number)
40 analysis.failure_result_map = {
41 'browser_tests': 'm/b/121'
42 }
43 analysis.put()
44
45 result = try_job_result._GetTryJobResult(
46 self.master_name, self.builder_name, self.build_number)
47
48 self.assertEqual({}, result)
49 36
50 def testGetTryJobResultReturnNoneIfNoTryJob(self): 37 def testGetTryJobResultReturnNoneIfNoTryJob(self):
51 analysis = WfAnalysis.Create( 38 analysis = WfAnalysis.Create(
52 self.master_name, self.builder_name, self.build_number) 39 self.master_name, self.builder_name, self.build_number)
53 analysis.failure_result_map = { 40 analysis.failure_result_map = {
54 'compile': 'm/b/121' 41 'compile': 'm/b/121'
55 } 42 }
56 analysis.put() 43 analysis.put()
57 44
58 result = try_job_result._GetTryJobResult( 45 result = try_job_result._GetAllTryJobResults(
59 self.master_name, self.builder_name, self.build_number) 46 self.master_name, self.builder_name, self.build_number)
60 47
61 self.assertEqual({}, result) 48 expected_result = {
49 'compile': {
50 'step': 'compile',
51 'test': 'N/A',
52 'try_job_key': 'm/b/121'
53 }
54 }
62 55
56 self.assertEqual(expected_result, result)
63 57
64 def testGetTryJobResultOnlyReturnStatusIfPending(self): 58 def testGetTryJobResultOnlyReturnStatusIfPending(self):
65 analysis = WfAnalysis.Create( 59 analysis = WfAnalysis.Create(
66 self.master_name, self.builder_name, self.build_number) 60 self.master_name, self.builder_name, self.build_number)
67 analysis.failure_result_map = { 61 analysis.failure_result_map = {
68 'compile': 'm/b/121' 62 'compile': 'm/b/121'
69 } 63 }
70 analysis.put() 64 analysis.put()
71 65
72 try_job = WfTryJob.Create( 66 try_job = WfTryJob.Create(
73 self.master_name, self.builder_name, self.build_number) 67 self.master_name, self.builder_name, self.build_number)
74 try_job.put() 68 try_job.put()
75 69
76 result = try_job_result._GetTryJobResult( 70 result = try_job_result._GetAllTryJobResults(
77 self.master_name, self.builder_name, self.build_number) 71 self.master_name, self.builder_name, self.build_number)
78 72
79 expected_result = { 73 expected_result = {
80 'status': 'Pending' 74 'compile': {
75 'step': 'compile',
76 'test': 'N/A',
77 'try_job_key': 'm/b/121',
78 'status': 'Pending'
79 }
81 } 80 }
82 81
83 self.assertEqual(expected_result, result) 82 self.assertEqual(expected_result, result)
84 83
85 def testGetTryJobResultOnlyReturnUrlIfStarts(self): 84 def testGetTryJobResultOnlyReturnUrlIfStarts(self):
86 analysis = WfAnalysis.Create( 85 analysis = WfAnalysis.Create(
87 self.master_name, self.builder_name, self.build_number) 86 self.master_name, self.builder_name, self.build_number)
88 analysis.failure_result_map = { 87 analysis.failure_result_map = {
89 'compile': 'm/b/121' 88 'compile': 'm/b/121'
90 } 89 }
91 analysis.put() 90 analysis.put()
92 91
93 try_job = WfTryJob.Create( 92 try_job = WfTryJob.Create(
94 self.master_name, self.builder_name, self.build_number) 93 self.master_name, self.builder_name, self.build_number)
95 try_job.status = wf_analysis_status.ANALYZING 94 try_job.status = wf_analysis_status.ANALYZING
96 try_job.compile_results = [ 95 try_job.compile_results = [
97 { 96 {
98 'result': None, 97 'result': None,
99 'url': 'url' 98 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/'
99 'builders/linux_chromium_variable/builds/121')
100 } 100 }
101 ] 101 ]
102 try_job.put() 102 try_job.put()
103 103
104 result = try_job_result._GetTryJobResult( 104 result = try_job_result._GetAllTryJobResults(
105 self.master_name, self.builder_name, self.build_number) 105 self.master_name, self.builder_name, self.build_number)
106 106
107 expected_result = { 107 expected_result = {
108 'status': 'Analyzing', 108 'compile': {
109 'try_job_url': 'url' 109 'step': 'compile',
110 'test': 'N/A',
111 'try_job_key': 'm/b/121',
112 'status': 'Running',
113 'try_job_build_number': 121,
114 'try_job_url': ('http://build.chromium.org/p/tryserver.chromium.'
115 'linux/builders/linux_chromium_variable/builds/121')
116 }
110 } 117 }
111
112 self.assertEqual(expected_result, result) 118 self.assertEqual(expected_result, result)
113 119
114 def testGetTryJobResultOnlyReturnStatusIfError(self): 120 def testGetTryJobResultOnlyReturnStatusIfError(self):
115 analysis = WfAnalysis.Create( 121 analysis = WfAnalysis.Create(
116 self.master_name, self.builder_name, self.build_number) 122 self.master_name, self.builder_name, self.build_number)
117 analysis.failure_result_map = { 123 analysis.failure_result_map = {
118 'compile': 'm/b/121' 124 'compile': 'm/b/121'
119 } 125 }
120 analysis.put() 126 analysis.put()
121 127
122 try_job = WfTryJob.Create( 128 try_job = WfTryJob.Create(
123 self.master_name, self.builder_name, self.build_number) 129 self.master_name, self.builder_name, self.build_number)
124 try_job.status = wf_analysis_status.ERROR 130 try_job.status = wf_analysis_status.ERROR
125 try_job.compile_results = [ 131 try_job.compile_results = [
126 { 132 {
127 'try_job_id': '1' 133 'try_job_id': '1'
128 } 134 }
129 ] 135 ]
130 try_job.put() 136 try_job.put()
131 137
132 result = try_job_result._GetTryJobResult( 138 result = try_job_result._GetAllTryJobResults(
133 self.master_name, self.builder_name, self.build_number) 139 self.master_name, self.builder_name, self.build_number)
134 140
135 expected_result = { 141 expected_result = {
136 'status': 'Error' 142 'compile': {
143 'step': 'compile',
144 'test': 'N/A',
145 'try_job_key': 'm/b/121',
146 'status': 'Error'
147 }
137 } 148 }
138 149
139 self.assertEqual(expected_result, result) 150 self.assertEqual(expected_result, result)
140 151
141 def testGetTryJobResultWhenTryJobCompleted(self): 152 def testGetTryJobResultWhenTryJobCompleted(self):
142 analysis = WfAnalysis.Create( 153 analysis = WfAnalysis.Create(
143 self.master_name, self.builder_name, self.build_number) 154 self.master_name, self.builder_name, self.build_number)
144 analysis.failure_result_map = { 155 analysis.failure_result_map = {
145 'compile': 'm/b/121' 156 'compile': 'm/b/121'
146 } 157 }
147 analysis.put() 158 analysis.put()
148 159
149 try_job = WfTryJob.Create( 160 try_job = WfTryJob.Create(
150 self.master_name, self.builder_name, self.build_number) 161 self.master_name, self.builder_name, self.build_number)
151 try_job.status = wf_analysis_status.ANALYZED 162 try_job.status = wf_analysis_status.ANALYZED
152 try_job.compile_results = [ 163 try_job.compile_results = [
153 { 164 {
154 'result': [ 165 'result': [
155 ['rev1', 'passed'], 166 ['rev1', 'passed'],
156 ['rev2', 'failed'] 167 ['rev2', 'failed']
157 ], 168 ],
158 'url': 'url', 169 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/'
170 'builders/linux_chromium_variable/builds/121'),
159 'try_job_id': '1', 171 'try_job_id': '1',
160 'culprit': { 172 'culprit': {
161 'revision': 'rev2', 173 'compile': {
162 'commit_position': '2', 174 'revision': 'rev2',
163 'review_url': 'url_2' 175 'commit_position': '2',
176 'review_url': 'url_2'
177 }
164 } 178 }
165 } 179 }
166 ] 180 ]
167 try_job.put() 181 try_job.put()
168 182
169 result = try_job_result._GetTryJobResult( 183 result = try_job_result._GetAllTryJobResults(
170 self.master_name, self.builder_name, self.build_number) 184 self.master_name, self.builder_name, self.build_number)
171 185
172 expected_result = { 186 expected_result = {
173 'status': 'Analyzed', 187 'compile': {
174 'try_job_url': 'url', 188 'step': 'compile',
175 'revision': 'rev2', 189 'test': 'N/A',
176 'commit_position': '2', 190 'try_job_key': 'm/b/121',
177 'review_url': 'url_2' 191 'try_job_build_number': 121,
192 'status': 'Completed',
193 'try_job_url': (
194 'http://build.chromium.org/p/tryserver.chromium.linux/'
195 'builders/linux_chromium_variable/builds/121'),
196 'revision': 'rev2',
197 'commit_position': '2',
198 'review_url': 'url_2'
199 }
178 } 200 }
179 201
180 self.assertEqual(expected_result, result) 202 self.assertEqual(expected_result, result)
181 203
182 def testGetTryJobResultWhenTryJobCompletedAllPassed(self): 204 def testGetTryJobResultWhenTryJobCompletedAllPassed(self):
183 analysis = WfAnalysis.Create( 205 analysis = WfAnalysis.Create(
184 self.master_name, self.builder_name, self.build_number) 206 self.master_name, self.builder_name, self.build_number)
185 analysis.failure_result_map = { 207 analysis.failure_result_map = {
186 'compile': 'm/b/121' 208 'compile': 'm/b/121'
187 } 209 }
188 analysis.put() 210 analysis.put()
189 211
190 try_job = WfTryJob.Create( 212 try_job = WfTryJob.Create(
191 self.master_name, self.builder_name, self.build_number) 213 self.master_name, self.builder_name, self.build_number)
192 try_job.status = wf_analysis_status.ANALYZED 214 try_job.status = wf_analysis_status.ANALYZED
193 try_job.compile_results = [ 215 try_job.compile_results = [
194 { 216 {
195 'result': [ 217 'result': [
196 ['rev1', 'passed'], 218 ['rev1', 'passed'],
197 ['rev2', 'passed'] 219 ['rev2', 'passed']
198 ], 220 ],
199 'url': 'url' 221 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/'
222 'builders/linux_chromium_variable/builds/121')
200 } 223 }
201 ] 224 ]
202 try_job.put() 225 try_job.put()
203 226
204 result = try_job_result._GetTryJobResult( 227 result = try_job_result._GetAllTryJobResults(
205 self.master_name, self.builder_name, self.build_number) 228 self.master_name, self.builder_name, self.build_number)
206 229
207 expected_result = { 230 expected_result = {
208 'status': 'Analyzed', 231 'compile': {
209 'try_job_url': 'url' 232 'step': 'compile',
233 'test': 'N/A',
234 'try_job_key': 'm/b/121',
235 'try_job_build_number': 121,
236 'status': 'Completed',
237 'try_job_url': (
238 'http://build.chromium.org/p/tryserver.chromium.linux/'
239 'builders/linux_chromium_variable/builds/121')
240 }
210 } 241 }
211 242
212 self.assertEqual(expected_result, result) 243 self.assertEqual(expected_result, result)
213 244
214 def testTryJobResultHandler(self): 245 def testTryJobResultHandler(self):
215 build_url = buildbot.CreateBuildUrl( 246 build_url = buildbot.CreateBuildUrl(
216 self.master_name, self.builder_name, self.build_number) 247 self.master_name, self.builder_name, self.build_number)
217 response = self.test_app.get('/try-job-result', params={'url': build_url}) 248 response = self.test_app.get('/try-job-result', params={'url': build_url})
218 expected_results = {} 249 expected_results = {}
219 250
220 self.assertEqual(200, response.status_int) 251 self.assertEqual(200, response.status_int)
221 self.assertEqual(expected_results, response.json_body) 252 self.assertEqual(expected_results, response.json_body)
253
254 def testGetTryJobResultWhenTryJobForTestCompleted(self):
255 analysis = WfAnalysis.Create(
256 self.master_name, self.builder_name, self.build_number)
257 analysis.failure_result_map = {
258 'a_test': {
259 'a_test1': 'm/b/121',
260 'a_test2': 'm/b/121',
261 'a_test3': 'm/b/120'
262 },
263 'b_test': {
264 'b_test1': 'm/b/121'
265 },
266 'c_test': 'm/b/121',
267 'd_test': 'm/b/122'
268 }
269 analysis.put()
270
271 try_job_120 = WfTryJob.Create(
272 self.master_name, self.builder_name, 120)
273 try_job_120.status = wf_analysis_status.ANALYZED
274 try_job_120.test_results = [
275 {
276 'result': {
277 'rev0': {
278 'a_test': {
279 'status': 'failed',
280 'valid': True,
281 'failures': ['a_test3']
282 }
283 }
284 },
285 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/'
286 'builders/linux_chromium_variable/builds/120'),
287 'try_job_id': '0',
288 'culprit': {
289 'a_test': {
290 'tests': {
291 'a_test3': {
292 'revision': 'rev0',
293 'commit_position': '0',
294 'review_url': 'url_0'
295 }
296 }
297 }
298 }
299 }
300 ]
301 try_job_120.put()
302
303 try_job_121 = WfTryJob.Create(
304 self.master_name, self.builder_name, self.build_number)
305 try_job_121.status = wf_analysis_status.ANALYZED
306 try_job_121.test_results = [
307 {
308 'result': {
309 'rev1': {
310 'a_test': {
311 'status': 'failed',
312 'valid': True,
313 'failures': ['a_test1']
314 },
315 'b_test': {
316 'status': 'failed',
317 'valid': True,
318 'failures': ['b_test1']
319 },
320 'c_test': {
321 'status': 'passed',
322 'valid': True
323 }
324 },
325 'rev2': {
326 'a_test': {
327 'status': 'failed',
328 'valid': True,
329 'failures': ['a_test1']
330 },
331 'b_test': {
332 'status': 'passed',
333 'valid': True
334 },
335 'c_test': {
336 'status': 'failed',
337 'valid': True,
338 'failures': []
339 }
340 }
341 },
342 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/'
343 'builders/linux_chromium_variable/builds/121'),
344 'try_job_id': '1',
345 'culprit': {
346 'a_test': {
347 'tests': {
348 'a_test1': {
349 'revision': 'rev1',
350 'commit_position': '1',
351 'review_url': 'url_1'
352 }
353 }
354 },
355 'b_test': {
356 'tests': {
357 'b_test1': {
358 'revision': 'rev1',
359 'commit_position': '1',
360 'review_url': 'url_1'
361 }
362 }
363 },
364 'c_test': {
365 'revision': 'rev2',
366 'commit_position': '2',
367 'review_url': 'url_2',
368 'tests': {}
369 }
370 }
371 }
372 ]
373 try_job_121.put()
374
375 try_job_122 = WfTryJob.Create(
376 self.master_name, self.builder_name, 122)
377 try_job_122.status = wf_analysis_status.ANALYZED
378 try_job_122.test_results = [
379 {
380 'result': {
381 'rev3': {
382 'd_test': {
383 'status': 'passed',
384 'valid': True,
385 'failures': []
386 }
387 }
388 },
389 'url': ('http://build.chromium.org/p/tryserver.chromium.linux/'
390 'builders/linux_chromium_variable/builds/122'),
391 'try_job_id': '2'
392 }
393 ]
394 try_job_122.put()
395
396 result = try_job_result._GetAllTryJobResults(
397 self.master_name, self.builder_name, self.build_number)
398
399 expected_result = {
400 'a_test-a_test1': {
401 'step': 'a_test',
402 'test': 'a_test1',
403 'try_job_key': 'm/b/121',
404 'try_job_build_number': 121,
405 'status': 'Completed',
406 'try_job_url': (
407 'http://build.chromium.org/p/tryserver.chromium.linux/'
408 'builders/linux_chromium_variable/builds/121'),
409 'revision': 'rev1',
410 'commit_position': '1',
411 'review_url': 'url_1'
412 },
413 'a_test-a_test2': {
414 'step': 'a_test',
415 'test': 'a_test2',
416 'try_job_key': 'm/b/121',
417 'status': 'Completed',
418 'try_job_build_number': 121,
419 'try_job_url': (
420 'http://build.chromium.org/p/tryserver.chromium.linux/'
421 'builders/linux_chromium_variable/builds/121'),
422 },
423 'a_test-a_test3': {
424 'step': 'a_test',
425 'test': 'a_test3',
426 'try_job_key': 'm/b/120',
427 'try_job_build_number': 120,
428 'status': 'Completed',
429 'try_job_url': (
430 'http://build.chromium.org/p/tryserver.chromium.linux/'
431 'builders/linux_chromium_variable/builds/120'),
432 'revision': 'rev0',
433 'commit_position': '0',
434 'review_url': 'url_0'
435 },
436 'b_test-b_test1': {
437 'step': 'b_test',
438 'test': 'b_test1',
439 'try_job_key': 'm/b/121',
440 'try_job_build_number': 121,
441 'status': 'Completed',
442 'try_job_url': (
443 'http://build.chromium.org/p/tryserver.chromium.linux/'
444 'builders/linux_chromium_variable/builds/121'),
445 'revision': 'rev1',
446 'commit_position': '1',
447 'review_url': 'url_1'
448 },
449 'c_test': {
450 'step': 'c_test',
451 'test': 'N/A',
452 'try_job_key': 'm/b/121',
453 'try_job_build_number': 121,
454 'status': 'Completed',
455 'try_job_url': (
456 'http://build.chromium.org/p/tryserver.chromium.linux/'
457 'builders/linux_chromium_variable/builds/121'),
458 'revision': 'rev2',
459 'commit_position': '2',
460 'review_url': 'url_2'
461 },
462 'd_test': {
463 'step': 'd_test',
464 'test': 'N/A',
465 'try_job_key': 'm/b/122',
466 'try_job_build_number': 122,
467 'status': 'Completed',
468 'try_job_url': (
469 'http://build.chromium.org/p/tryserver.chromium.linux/'
470 'builders/linux_chromium_variable/builds/122')
471 }
472 }
473 print json.dumps(result, indent=4, sort_keys=True)
474 print json.dumps(expected_result, indent=4, sort_keys=True)
475 self.assertEqual(expected_result, result)
OLDNEW
« no previous file with comments | « no previous file | appengine/findit/handlers/try_job_result.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698