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

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

Issue 1622813003: [Findit] Adding support for extracting revisions from dict instead of list (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Addressing code review comments 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 common.git_repository import GitRepository 7 from common.git_repository import GitRepository
8 from model import wf_analysis_status 8 from model import wf_analysis_status
9 from model.wf_try_job import WfTryJob 9 from model.wf_try_job import WfTryJob
10 from waterfall.identify_try_job_culprit_pipeline import( 10 from waterfall.identify_try_job_culprit_pipeline import(
11 IdentifyTryJobCulpritPipeline) 11 IdentifyTryJobCulpritPipeline)
12 12
13 13
14 class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): 14 class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase):
15 15
16 def _MockGetChangeLog(self, revision): 16 def _MockGetChangeLog(self, revision):
17 class MockedChangeLog(object): 17 class MockedChangeLog(object):
18 18
19 def __init__(self, commit_position, code_review_url): 19 def __init__(self, commit_position, code_review_url):
20 self.commit_position = commit_position 20 self.commit_position = commit_position
21 self.code_review_url = code_review_url 21 self.code_review_url = code_review_url
22 22
23 mock_change_logs = {} 23 mock_change_logs = {}
24 mock_change_logs['rev2'] = MockedChangeLog('2', 'url_2') 24 mock_change_logs['rev2'] = MockedChangeLog('2', 'url_2')
25 return mock_change_logs.get(revision) 25 return mock_change_logs.get(revision)
26 26
27 def testGetFailedRevisionFromResultsDict(self):
28 self.assertIsNone(
29 IdentifyTryJobCulpritPipeline._GetFailedRevisionFromResultsDict({}))
30 self.assertEqual(
31 None,
32 IdentifyTryJobCulpritPipeline._GetFailedRevisionFromResultsDict(
33 {'rev1': 'passed'}))
34 self.assertEqual(
35 'rev1',
36 IdentifyTryJobCulpritPipeline._GetFailedRevisionFromResultsDict(
37 {'rev1': 'failed'}))
38 self.assertEqual(
39 'rev2',
40 IdentifyTryJobCulpritPipeline._GetFailedRevisionFromResultsDict(
41 {'rev1': 'passed', 'rev2': 'failed'}))
42
43 def testFindFailedRevisionFromCompileResult(self):
44 self.assertIsNone(
45 IdentifyTryJobCulpritPipeline._FindFailedRevisionFromCompileResult(
46 None))
47 self.assertIsNone(
48 IdentifyTryJobCulpritPipeline._FindFailedRevisionFromCompileResult(
49 {'analysis_info': {}}))
50 self.assertIsNone(
51 IdentifyTryJobCulpritPipeline._FindFailedRevisionFromCompileResult(
52 {
53 'analysis_info': {
54 'result': {
55 'rev1': 'passed'
56 }
57 }
58 }))
59 self.assertEqual(
60 'rev2',
61 IdentifyTryJobCulpritPipeline._FindFailedRevisionFromCompileResult(
62 {
63 'analysis_info': {
64 'result': {
65 'rev1': 'passed',
66 'rev2': 'failed'
67 }
68 }
69 }))
70
71 def testGetCulpritFromFailedRevision(self):
72 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
73 self.assertIsNone(
74 IdentifyTryJobCulpritPipeline._GetCulpritFromFailedRevision(None))
75 self.assertEqual(
76 {
77 'revision': 'rev2',
78 'commit_position': '2',
79 'review_url': 'url_2'
80 },
81 IdentifyTryJobCulpritPipeline._GetCulpritFromFailedRevision('rev2'))
82
27 def testIdentifyCulpritForCompileReturnNoneIfNoCompileResult(self): 83 def testIdentifyCulpritForCompileReturnNoneIfNoCompileResult(self):
28 master_name = 'm' 84 master_name = 'm'
29 builder_name = 'b' 85 builder_name = 'b'
30 build_number = 1 86 build_number = 1
31 try_job_id = '1' 87 try_job_id = '1'
32 compile_result = None 88 compile_result = None
33 89
34 WfTryJob.Create(master_name, builder_name, build_number).put() 90 WfTryJob.Create(master_name, builder_name, build_number).put()
35 pipeline = IdentifyTryJobCulpritPipeline() 91 pipeline = IdentifyTryJobCulpritPipeline()
36 culprit = pipeline.run( 92 culprit = pipeline.run(
37 master_name, builder_name, build_number, try_job_id, compile_result) 93 master_name, builder_name, build_number, try_job_id, compile_result)
38 try_job = WfTryJob.Get(master_name, builder_name, build_number) 94 try_job = WfTryJob.Get(master_name, builder_name, build_number)
39 95
40 self.assertIsNone(culprit) 96 self.assertIsNone(culprit)
41 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 97 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
42 98
43 def testIdentifyCulpritForCompileReturnNoneIfNoTryJobResultForCompile(self): 99 def testIdentifyCulpritForCompileReturnNoneIfNoTryJobResultForCompile(self):
44 master_name = 'm' 100 master_name = 'm'
45 builder_name = 'b' 101 builder_name = 'b'
46 build_number = 1 102 build_number = 1
47 try_job_id = '1' 103 try_job_id = '1'
48 compile_result = { 104 compile_result = {
49 'result': [], 105 'analysis_info': {
106 'result': {},
107 },
50 'url': 'url', 108 'url': 'url',
51 'try_job_id': '1', 109 'try_job_id': '1',
52 } 110 }
53 WfTryJob.Create(master_name, builder_name, build_number).put() 111 WfTryJob.Create(master_name, builder_name, build_number).put()
54 112
55 pipeline = IdentifyTryJobCulpritPipeline() 113 pipeline = IdentifyTryJobCulpritPipeline()
56 culprit = pipeline.run( 114 culprit = pipeline.run(
57 master_name, builder_name, build_number, try_job_id, compile_result) 115 master_name, builder_name, build_number, try_job_id, compile_result)
58 try_job = WfTryJob.Get(master_name, builder_name, build_number) 116 try_job = WfTryJob.Get(master_name, builder_name, build_number)
59 117
60 self.assertIsNone(culprit) 118 self.assertIsNone(culprit)
61 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 119 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
62 120
63 def testIdentifyCulpritForCompileReturnNoneIfAllPassed(self): 121 def testIdentifyCulpritForCompileReturnNoneIfAllPassed(self):
64 master_name = 'm' 122 master_name = 'm'
65 builder_name = 'b' 123 builder_name = 'b'
66 build_number = 1 124 build_number = 1
67 try_job_id = '1' 125 try_job_id = '1'
68 compile_result = { 126 compile_result = {
127 'analysis_info': {
128 'result': {
129 'rev1': 'passed',
130 'rev2': 'passed'
131 }
132 },
133 'url': 'url',
134 'try_job_id': '1',
135 }
136 WfTryJob.Create(master_name, builder_name, build_number).put()
137
138 pipeline = IdentifyTryJobCulpritPipeline()
139 culprit = pipeline.run(
140 master_name, builder_name, build_number, try_job_id, compile_result)
141 try_job = WfTryJob.Get(master_name, builder_name, build_number)
142
143 self.assertIsNone(culprit)
144 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
145
146 def testIdentifyCulpritForCompileReturnNoneIfNoChangeLog(self):
147 master_name = 'm'
148 builder_name = 'b'
149 build_number = 1
150 try_job_id = '1'
151 compile_result = {
152 'result': [
153 ['rev1', 'failed']
154 ],
155 'url': 'url',
156 'try_job_id': '1',
157 }
158
159 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
160 WfTryJob.Create(master_name, builder_name, build_number).put()
161
162 pipeline = IdentifyTryJobCulpritPipeline()
163 culprit = pipeline.run(
164 master_name, builder_name, build_number, try_job_id, compile_result)
165 try_job = WfTryJob.Get(master_name, builder_name, build_number)
166
167 self.assertIsNone(culprit)
168 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
169
170 def testIdentifyCulpritForCompileTryJobSuccess(self):
171 master_name = 'm'
172 builder_name = 'b'
173 build_number = 1
174 try_job_id = '1'
175 compile_result = {
176 'analysis_info': {
177 'result': {
178 'rev1': 'passed',
179 'rev2': 'failed'
180 }
181 },
182 'url': 'url',
183 'try_job_id': '1',
184 }
185
186 try_job = WfTryJob.Create(master_name, builder_name, build_number)
187 try_job.status = wf_analysis_status.ANALYZING
188 try_job.compile_results = [{
189 'analysis_info': {
190 'result': {
191 'rev1': 'passed',
192 'rev2': 'failed'
193 },
194 },
195 'url': 'url',
196 'try_job_id': '1',
197 }]
198 try_job.put()
199
200 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
201
202 pipeline = IdentifyTryJobCulpritPipeline()
203 culprit = pipeline.run(
204 master_name, builder_name, build_number, try_job_id, compile_result)
205
206 expected_compile_result = {
207 'analysis_info': {
208 'result': {
209 'rev1': 'passed',
210 'rev2': 'failed'
211 }
212 },
213 'url': 'url',
214 'try_job_id': '1',
215 'culprit': {
216 'revision': 'rev2',
217 'commit_position': '2',
218 'review_url': 'url_2'
219 }
220 }
221
222 self.assertEqual(expected_compile_result['culprit'], culprit)
223
224 try_job = WfTryJob.Get(master_name, builder_name, build_number)
225 self.assertEqual(expected_compile_result, try_job.compile_results[-1])
226 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
227
228 # TODO(lijeffrey): Deprecate all tests with compile_results whose 'result'
229 # key is a list once it is returned as a dict from the recipe.
230 def testIdentifyCulpritForCompileNoTryJobResultListForCompile(self):
231 master_name = 'm'
232 builder_name = 'b'
233 build_number = 1
234 try_job_id = '1'
235 compile_result = {
236 'result': [],
237 'url': 'url',
238 'try_job_id': '1',
239 }
240 WfTryJob.Create(master_name, builder_name, build_number).put()
241
242 pipeline = IdentifyTryJobCulpritPipeline()
243 culprit = pipeline.run(
244 master_name, builder_name, build_number, try_job_id, compile_result)
245 try_job = WfTryJob.Get(master_name, builder_name, build_number)
246
247 self.assertIsNone(culprit)
248 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
249
250 def testIdentifyCulpritForCompileListReturnNoneIfAllPassed(self):
251 master_name = 'm'
252 builder_name = 'b'
253 build_number = 1
254 try_job_id = '1'
255 compile_result = {
69 'result': [ 256 'result': [
70 ['rev1', 'passed'], 257 ['rev1', 'passed'],
71 ['rev2', 'passed'] 258 ['rev2', 'passed']
72 ], 259 ],
73 'url': 'url', 260 'url': 'url',
74 'try_job_id': '1', 261 'try_job_id': '1',
75 } 262 }
76 WfTryJob.Create(master_name, builder_name, build_number).put() 263 WfTryJob.Create(master_name, builder_name, build_number).put()
77 264
78 pipeline = IdentifyTryJobCulpritPipeline() 265 pipeline = IdentifyTryJobCulpritPipeline()
79 culprit = pipeline.run( 266 culprit = pipeline.run(
80 master_name, builder_name, build_number, try_job_id, compile_result) 267 master_name, builder_name, build_number, try_job_id, compile_result)
81 try_job = WfTryJob.Get(master_name, builder_name, build_number) 268 try_job = WfTryJob.Get(master_name, builder_name, build_number)
82 269
83 self.assertIsNone(culprit) 270 self.assertIsNone(culprit)
84 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 271 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
85 272
86 def testIdentifyCulpritForCompileReturnNoneIfNoChangeLog(self): 273 def testIdentifyCulpritForCompileListReturnNoneIfNoChangeLog(self):
87 master_name = 'm' 274 master_name = 'm'
88 builder_name = 'b' 275 builder_name = 'b'
89 build_number = 1 276 build_number = 1
90 try_job_id = '1' 277 try_job_id = '1'
91 compile_result = { 278 compile_result = {
92 'result': [ 279 'result': [
93 ['rev1', 'failed'] 280 ['rev1', 'failed']
94 ], 281 ],
95 'url': 'url', 282 'url': 'url',
96 'try_job_id': '1', 283 'try_job_id': '1',
97 } 284 }
98 285
99 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog) 286 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
100 WfTryJob.Create(master_name, builder_name, build_number).put() 287 WfTryJob.Create(master_name, builder_name, build_number).put()
101 288
102 pipeline = IdentifyTryJobCulpritPipeline() 289 pipeline = IdentifyTryJobCulpritPipeline()
103 culprit = pipeline.run( 290 culprit = pipeline.run(
104 master_name, builder_name, build_number, try_job_id, compile_result) 291 master_name, builder_name, build_number, try_job_id, compile_result)
105 try_job = WfTryJob.Get(master_name, builder_name, build_number) 292 try_job = WfTryJob.Get(master_name, builder_name, build_number)
106 293
107 self.assertIsNone(culprit) 294 self.assertIsNone(culprit)
108 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 295 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
109 296
110 def testIdentifyCulpritForCompileTryJobSuccess(self): 297 def testIdentifyCulpritForCompileListTryJobSuccess(self):
111 master_name = 'm' 298 master_name = 'm'
112 builder_name = 'b' 299 builder_name = 'b'
113 build_number = 1 300 build_number = 1
114 try_job_id = '1' 301 try_job_id = '1'
115 compile_result = { 302 compile_result = {
116 'result': [ 303 'result': [
117 ['rev1', 'passed'], 304 ['rev1', 'passed'],
118 ['rev2', 'failed'] 305 ['rev2', 'failed']
119 ], 306 ],
120 'url': 'url', 307 'url': 'url',
(...skipping 30 matching lines...) Expand all
151 'commit_position': '2', 338 'commit_position': '2',
152 'review_url': 'url_2' 339 'review_url': 'url_2'
153 } 340 }
154 } 341 }
155 342
156 self.assertEqual(expected_compile_result['culprit'], culprit) 343 self.assertEqual(expected_compile_result['culprit'], culprit)
157 344
158 try_job = WfTryJob.Get(master_name, builder_name, build_number) 345 try_job = WfTryJob.Get(master_name, builder_name, build_number)
159 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) 346 self.assertEqual(expected_compile_result, try_job.compile_results[-1])
160 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 347 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698