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

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: 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 pipeline = IdentifyTryJobCulpritPipeline()
29 self.assertEqual(
30 None,
31 pipeline._getFailedRevisionFromResultsDict({}))
qyearsley 2016/01/24 21:01:06 Instead of self.assertEqual(None, ...), it's a lit
lijeffrey 2016/01/26 00:34:52 Done.
32 self.assertEqual(
33 None,
34 pipeline._getFailedRevisionFromResultsDict(
35 {'rev1': 'passed'}))
36 self.assertEqual(
37 'rev1',
38 pipeline._getFailedRevisionFromResultsDict(
39 {'rev1': 'failed'}))
40 self.assertEqual(
41 'rev2',
42 pipeline._getFailedRevisionFromResultsDict(
43 {'rev1': 'passed', 'rev2': 'failed'}))
44
27 def testIdentifyCulpritForCompileReturnNoneIfNoCompileResult(self): 45 def testIdentifyCulpritForCompileReturnNoneIfNoCompileResult(self):
28 master_name = 'm' 46 master_name = 'm'
29 builder_name = 'b' 47 builder_name = 'b'
30 build_number = 1 48 build_number = 1
31 try_job_id = '1' 49 try_job_id = '1'
32 compile_result = None 50 compile_result = None
33 51
34 WfTryJob.Create(master_name, builder_name, build_number).put() 52 WfTryJob.Create(master_name, builder_name, build_number).put()
35 pipeline = IdentifyTryJobCulpritPipeline() 53 pipeline = IdentifyTryJobCulpritPipeline()
36 culprit = pipeline.run( 54 culprit = pipeline.run(
37 master_name, builder_name, build_number, try_job_id, compile_result) 55 master_name, builder_name, build_number, try_job_id, compile_result)
38 try_job = WfTryJob.Get(master_name, builder_name, build_number) 56 try_job = WfTryJob.Get(master_name, builder_name, build_number)
39 57
40 self.assertIsNone(culprit) 58 self.assertIsNone(culprit)
41 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 59 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
42 60
43 def testIdentifyCulpritForCompileReturnNoneIfNoTryJobResultForCompile(self): 61 def testIdentifyCulpritForCompileReturnNoneIfNoTryJobResultForCompile(self):
44 master_name = 'm' 62 master_name = 'm'
45 builder_name = 'b' 63 builder_name = 'b'
46 build_number = 1 64 build_number = 1
47 try_job_id = '1' 65 try_job_id = '1'
48 compile_result = { 66 compile_result = {
49 'result': [], 67 'analysis_info': {
68 'result': {},
69 },
50 'url': 'url', 70 'url': 'url',
51 'try_job_id': '1', 71 'try_job_id': '1',
52 } 72 }
53 WfTryJob.Create(master_name, builder_name, build_number).put() 73 WfTryJob.Create(master_name, builder_name, build_number).put()
54 74
55 pipeline = IdentifyTryJobCulpritPipeline() 75 pipeline = IdentifyTryJobCulpritPipeline()
56 culprit = pipeline.run( 76 culprit = pipeline.run(
57 master_name, builder_name, build_number, try_job_id, compile_result) 77 master_name, builder_name, build_number, try_job_id, compile_result)
58 try_job = WfTryJob.Get(master_name, builder_name, build_number) 78 try_job = WfTryJob.Get(master_name, builder_name, build_number)
59 79
60 self.assertIsNone(culprit) 80 self.assertIsNone(culprit)
61 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 81 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
62 82
63 def testIdentifyCulpritForCompileReturnNoneIfAllPassed(self): 83 def testIdentifyCulpritForCompileReturnNoneIfAllPassed(self):
64 master_name = 'm' 84 master_name = 'm'
65 builder_name = 'b' 85 builder_name = 'b'
66 build_number = 1 86 build_number = 1
67 try_job_id = '1' 87 try_job_id = '1'
68 compile_result = { 88 compile_result = {
89 'analysis_info': {
90 'result': {
91 'rev1': 'passed',
92 'rev2': 'passed'
93 }
94 },
95 'url': 'url',
96 'try_job_id': '1',
97 }
98 WfTryJob.Create(master_name, builder_name, build_number).put()
99
100 pipeline = IdentifyTryJobCulpritPipeline()
101 culprit = pipeline.run(
102 master_name, builder_name, build_number, try_job_id, compile_result)
103 try_job = WfTryJob.Get(master_name, builder_name, build_number)
104
105 self.assertIsNone(culprit)
106 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
107
108 def testIdentifyCulpritForCompileReturnNoneIfNoChangeLog(self):
109 master_name = 'm'
110 builder_name = 'b'
111 build_number = 1
112 try_job_id = '1'
113 compile_result = {
114 'result': [
115 ['rev1', 'failed']
116 ],
117 'url': 'url',
118 'try_job_id': '1',
119 }
120
121 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
122 WfTryJob.Create(master_name, builder_name, build_number).put()
123
124 pipeline = IdentifyTryJobCulpritPipeline()
125 culprit = pipeline.run(
126 master_name, builder_name, build_number, try_job_id, compile_result)
127 try_job = WfTryJob.Get(master_name, builder_name, build_number)
128
129 self.assertIsNone(culprit)
130 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
131
132 def testIdentifyCulpritForCompileTryJobSuccess(self):
133 master_name = 'm'
134 builder_name = 'b'
135 build_number = 1
136 try_job_id = '1'
137 compile_result = {
138 'analysis_info': {
139 'result': {
140 'rev1': 'passed',
141 'rev2': 'failed'
142 }
143 },
144 'url': 'url',
145 'try_job_id': '1',
146 }
147
148 try_job = WfTryJob.Create(master_name, builder_name, build_number)
149 try_job.status = wf_analysis_status.ANALYZING
150 try_job.compile_results = [{
151 'analysis_info': {
152 'result': {
153 'rev1': 'passed',
154 'rev2': 'failed'
155 },
156 },
157 'url': 'url',
158 'try_job_id': '1',
159 }]
160 try_job.put()
161
162 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
163
164 pipeline = IdentifyTryJobCulpritPipeline()
165 culprit = pipeline.run(
166 master_name, builder_name, build_number, try_job_id, compile_result)
167
168 expected_compile_result = {
169 'analysis_info': {
170 'result': {
171 'rev1': 'passed',
172 'rev2': 'failed'
173 }
174 },
175 'url': 'url',
176 'try_job_id': '1',
177 'culprit': {
178 'revision': 'rev2',
179 'commit_position': '2',
180 'review_url': 'url_2'
181 }
182 }
183
184 self.assertEqual(expected_compile_result['culprit'], culprit)
185
186 try_job = WfTryJob.Get(master_name, builder_name, build_number)
187 self.assertEqual(expected_compile_result, try_job.compile_results[-1])
188 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
189
190 # TODO(lijeffrey): Deprecate all tests with compile_results whose 'result'
191 # key is a list once it is returned as a dict from the recipe.
192 def testIdentifyCulpritForCompileNoTryJobResultListForCompile(self):
193 master_name = 'm'
194 builder_name = 'b'
195 build_number = 1
196 try_job_id = '1'
197 compile_result = {
198 'result': [],
199 'url': 'url',
200 'try_job_id': '1',
201 }
202 WfTryJob.Create(master_name, builder_name, build_number).put()
203
204 pipeline = IdentifyTryJobCulpritPipeline()
205 culprit = pipeline.run(
206 master_name, builder_name, build_number, try_job_id, compile_result)
207 try_job = WfTryJob.Get(master_name, builder_name, build_number)
208
209 self.assertIsNone(culprit)
210 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
211
212 def testIdentifyCulpritForCompileListReturnNoneIfAllPassed(self):
213 master_name = 'm'
214 builder_name = 'b'
215 build_number = 1
216 try_job_id = '1'
217 compile_result = {
69 'result': [ 218 'result': [
70 ['rev1', 'passed'], 219 ['rev1', 'passed'],
71 ['rev2', 'passed'] 220 ['rev2', 'passed']
72 ], 221 ],
73 'url': 'url', 222 'url': 'url',
74 'try_job_id': '1', 223 'try_job_id': '1',
75 } 224 }
76 WfTryJob.Create(master_name, builder_name, build_number).put() 225 WfTryJob.Create(master_name, builder_name, build_number).put()
77 226
78 pipeline = IdentifyTryJobCulpritPipeline() 227 pipeline = IdentifyTryJobCulpritPipeline()
79 culprit = pipeline.run( 228 culprit = pipeline.run(
80 master_name, builder_name, build_number, try_job_id, compile_result) 229 master_name, builder_name, build_number, try_job_id, compile_result)
81 try_job = WfTryJob.Get(master_name, builder_name, build_number) 230 try_job = WfTryJob.Get(master_name, builder_name, build_number)
82 231
83 self.assertIsNone(culprit) 232 self.assertIsNone(culprit)
84 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 233 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
85 234
86 def testIdentifyCulpritForCompileReturnNoneIfNoChangeLog(self): 235 def testIdentifyCulpritForCompileListReturnNoneIfNoChangeLog(self):
87 master_name = 'm' 236 master_name = 'm'
88 builder_name = 'b' 237 builder_name = 'b'
89 build_number = 1 238 build_number = 1
90 try_job_id = '1' 239 try_job_id = '1'
91 compile_result = { 240 compile_result = {
92 'result': [ 241 'result': [
93 ['rev1', 'failed'] 242 ['rev1', 'failed']
94 ], 243 ],
95 'url': 'url', 244 'url': 'url',
96 'try_job_id': '1', 245 'try_job_id': '1',
97 } 246 }
98 247
99 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog) 248 self.mock(GitRepository, 'GetChangeLog', self._MockGetChangeLog)
100 WfTryJob.Create(master_name, builder_name, build_number).put() 249 WfTryJob.Create(master_name, builder_name, build_number).put()
101 250
102 pipeline = IdentifyTryJobCulpritPipeline() 251 pipeline = IdentifyTryJobCulpritPipeline()
103 culprit = pipeline.run( 252 culprit = pipeline.run(
104 master_name, builder_name, build_number, try_job_id, compile_result) 253 master_name, builder_name, build_number, try_job_id, compile_result)
105 try_job = WfTryJob.Get(master_name, builder_name, build_number) 254 try_job = WfTryJob.Get(master_name, builder_name, build_number)
106 255
107 self.assertIsNone(culprit) 256 self.assertIsNone(culprit)
108 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 257 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
109 258
110 def testIdentifyCulpritForCompileTryJobSuccess(self): 259 def testIdentifyCulpritForCompileListTryJobSuccess(self):
111 master_name = 'm' 260 master_name = 'm'
112 builder_name = 'b' 261 builder_name = 'b'
113 build_number = 1 262 build_number = 1
114 try_job_id = '1' 263 try_job_id = '1'
115 compile_result = { 264 compile_result = {
116 'result': [ 265 'result': [
117 ['rev1', 'passed'], 266 ['rev1', 'passed'],
118 ['rev2', 'failed'] 267 ['rev2', 'failed']
119 ], 268 ],
120 'url': 'url', 269 'url': 'url',
(...skipping 30 matching lines...) Expand all
151 'commit_position': '2', 300 'commit_position': '2',
152 'review_url': 'url_2' 301 'review_url': 'url_2'
153 } 302 }
154 } 303 }
155 304
156 self.assertEqual(expected_compile_result['culprit'], culprit) 305 self.assertEqual(expected_compile_result['culprit'], culprit)
157 306
158 try_job = WfTryJob.Get(master_name, builder_name, build_number) 307 try_job = WfTryJob.Get(master_name, builder_name, build_number)
159 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) 308 self.assertEqual(expected_compile_result, try_job.compile_results[-1])
160 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) 309 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698