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

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

Issue 2369333002: [Findit] Capture versionized metadata for master_flake_analysis (Closed)
Patch Set: Fixing nits Created 4 years, 2 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 | « appengine/findit/waterfall/process_flake_swarming_task_result_pipeline.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 The Chromium Authors. All rights reserved. 1 # Copyright 2016 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 import datetime 5 import datetime
6 6
7 from model import analysis_status 7 from model import analysis_status
8 from model.flake.flake_swarming_task import FlakeSwarmingTask 8 from model.flake.flake_swarming_task import FlakeSwarmingTask
9 from model.flake.master_flake_analysis import MasterFlakeAnalysis 9 from model.flake.master_flake_analysis import MasterFlakeAnalysis
10 from waterfall import swarming_util 10 from waterfall import swarming_util
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 'other_info': 'N/A' 76 'other_info': 'N/A'
77 }, 77 },
78 { 78 {
79 'status': 'FAILURE', 79 'status': 'FAILURE',
80 'other_info': 'N/A' 80 'other_info': 'N/A'
81 } 81 }
82 ] 82 ]
83 } 83 }
84 ] 84 ]
85 } 85 }
86 _EXPECTED_TESTS_STATUESE = { 86 _EXPECTED_TEST_STATUS = {
87 'TestSuite1.test1': { 87 'TestSuite1.test1': {
88 'total_run': 2, 88 'total_run': 2,
89 'SUCCESS': 2 89 'SUCCESS': 2
90 }, 90 },
91 'TestSuite1.test2': { 91 'TestSuite1.test2': {
92 'total_run': 4, 92 'total_run': 4,
93 'SUCCESS': 2, 93 'SUCCESS': 2,
94 'FAILURE': 2 94 'FAILURE': 2
95 }, 95 },
96 'TestSuite1.test3': { 96 'TestSuite1.test3': {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 return mocked_result 130 return mocked_result
131 131
132 def setUp(self): 132 def setUp(self):
133 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp() 133 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp()
134 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline() 134 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline()
135 self.master_name = 'm' 135 self.master_name = 'm'
136 self.builder_name = 'b' 136 self.builder_name = 'b'
137 self.build_number = 121 137 self.build_number = 121
138 self.step_name = 'abc_tests on platform' 138 self.step_name = 'abc_tests on platform'
139 self.test_name = 'TestSuite1.test1' 139 self.test_name = 'TestSuite1.test1'
140 self.version_number = 1
140 self.mock(swarming_util, 'GetSwarmingTaskResultById', 141 self.mock(swarming_util, 'GetSwarmingTaskResultById',
141 self._MockedGetSwarmingTaskResultById) 142 self._MockedGetSwarmingTaskResultById)
142 143
143 def testCheckTestsRunStatusesNoOutPutJson(self): 144 def testCheckTestsRunStatusesNoOutPutJson(self):
144 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs( 145 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs(
145 self.pipeline, self.master_name, self.builder_name, 146 self.pipeline, self.master_name, self.builder_name,
146 self.build_number, self.step_name, self.build_number, 147 self.build_number, self.step_name, self.build_number,
147 self.test_name) 148 self.test_name, self.version_number)
148 tests_statuses = ( 149 tests_statuses = (
149 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses( 150 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses(
150 self.pipeline, None, *call_params 151 self.pipeline, None, *call_params))
151 ))
152 self.assertEqual({}, tests_statuses) 152 self.assertEqual({}, tests_statuses)
153 153
154 def testCheckTestsRunStatuses(self): 154 def testCheckTestsRunStatuses(self):
155 analysis = MasterFlakeAnalysis.Create( 155 analysis = MasterFlakeAnalysis.Create(
156 self.master_name, self.builder_name, 156 self.master_name, self.builder_name,
157 self.build_number, self.step_name, self.test_name) 157 self.build_number, self.step_name, self.test_name)
158 analysis.put() 158 analysis.Save()
159 159
160 task = FlakeSwarmingTask.Create( 160 task = FlakeSwarmingTask.Create(
161 self.master_name, self.builder_name, 161 self.master_name, self.builder_name,
162 self.build_number, self.step_name, self.test_name) 162 self.build_number, self.step_name, self.test_name)
163 task.put() 163 task.put()
164 164
165 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs( 165 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs(
166 self.pipeline, self.master_name, self.builder_name, 166 self.pipeline, self.master_name, self.builder_name,
167 self.build_number, self.step_name, self.build_number, 167 self.build_number, self.step_name, self.build_number,
168 self.test_name) 168 self.test_name, self.version_number)
169 169
170 tests_statuses = ( 170 tests_statuses = (
171 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses( 171 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses(
172 self.pipeline, 172 self.pipeline,
173 _SAMPLE_FAILURE_LOG, *call_params)) 173 _SAMPLE_FAILURE_LOG, *call_params))
174 self.assertEqual(_EXPECTED_TESTS_STATUESE, tests_statuses) 174 self.assertEqual(_EXPECTED_TEST_STATUS, tests_statuses)
175 175
176 def testCheckTestsRunStatusesWhenTestNotExist(self): 176 def testCheckTestsRunStatusesWhenTestDoesNotExist(self):
177 test_name = 'TestSuite1.new_test' 177 test_name = 'TestSuite1.new_test'
178 analysis = MasterFlakeAnalysis.Create( 178 analysis = MasterFlakeAnalysis.Create(
179 self.master_name, self.builder_name, 179 self.master_name, self.builder_name,
180 self.build_number, self.step_name, test_name) 180 self.build_number, self.step_name, test_name)
181 analysis.put() 181 analysis.Save()
182 182
183 task = FlakeSwarmingTask.Create( 183 task = FlakeSwarmingTask.Create(
184 self.master_name, self.builder_name, 184 self.master_name, self.builder_name,
185 self.build_number, self.step_name, test_name) 185 self.build_number, self.step_name, test_name)
186 task.put() 186 task.put()
187 187
188 pipeline = ProcessFlakeSwarmingTaskResultPipeline() 188 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
189 tests_statuses = pipeline._CheckTestsRunStatuses( 189 tests_statuses = pipeline._CheckTestsRunStatuses(
190 _SAMPLE_FAILURE_LOG, self.master_name, self.builder_name, 190 _SAMPLE_FAILURE_LOG, self.master_name, self.builder_name,
191 self.build_number, self.step_name, self.build_number, test_name) 191 self.build_number, self.step_name, self.build_number, test_name,
192 self.version_number)
192 193
193 self.assertEqual(_EXPECTED_TESTS_STATUESE, tests_statuses) 194 self.assertEqual(_EXPECTED_TEST_STATUS, tests_statuses)
194 195
195 task = FlakeSwarmingTask.Get( 196 task = FlakeSwarmingTask.Get(
196 self.master_name, self.builder_name, 197 self.master_name, self.builder_name,
197 self.build_number, self.step_name, test_name) 198 self.build_number, self.step_name, test_name)
198 self.assertEqual(0, task.tries) 199 self.assertEqual(0, task.tries)
199 self.assertEqual(0, task.successes) 200 self.assertEqual(0, task.successes)
200 201
201 analysis = MasterFlakeAnalysis.Get( 202 analysis = MasterFlakeAnalysis.GetVersion(
202 self.master_name, self.builder_name, 203 self.master_name, self.builder_name,
203 self.build_number, self.step_name, test_name) 204 self.build_number, self.step_name, test_name, self.version_number)
204 self.assertTrue(analysis.success_rates[-1] < 0) 205 self.assertTrue(analysis.data_points[-1].pass_rate < 0)
205 206
206 def _MockedGetSwarmingTaskFailureLog(self, *_): 207 def _MockedGetSwarmingTaskFailureLog(self, *_):
207 return _SAMPLE_FAILURE_LOG 208 return _SAMPLE_FAILURE_LOG
208 209
209 def testProcessFlakeSwarmingTaskResultPipeline(self): 210 def testProcessFlakeSwarmingTaskResultPipeline(self):
210 211
211 self.mock(swarming_util, 'GetSwarmingTaskFailureLog', 212 self.mock(swarming_util, 'GetSwarmingTaskFailureLog',
212 self._MockedGetSwarmingTaskFailureLog) 213 self._MockedGetSwarmingTaskFailureLog)
213 214
214 task = FlakeSwarmingTask.Create( 215 task = FlakeSwarmingTask.Create(
215 self.master_name, self.builder_name, 216 self.master_name, self.builder_name,
216 self.build_number, self.step_name, self.test_name) 217 self.build_number, self.step_name, self.test_name)
217 task.task_id = 'task_id1' 218 task.task_id = 'task_id1'
218 task.put() 219 task.put()
219 220
220 analysis = MasterFlakeAnalysis.Create( 221 analysis = MasterFlakeAnalysis.Create(
221 self.master_name, self.builder_name, 222 self.master_name, self.builder_name,
222 self.build_number, self.step_name, self.test_name) 223 self.build_number, self.step_name, self.test_name)
223 analysis.put() 224 analysis.Save()
224 225
225 pipeline = ProcessFlakeSwarmingTaskResultPipeline() 226 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
226 step_name, task_info = pipeline.run( 227 step_name, task_info = pipeline.run(
227 self.master_name, self.builder_name, 228 self.master_name, self.builder_name,
228 self.build_number, self.step_name, 229 self.build_number, self.step_name,
229 'task_id1', self.build_number, self.test_name) 230 'task_id1', self.build_number, self.test_name,
231 analysis.version_number)
230 self.assertEqual('abc_tests', task_info) 232 self.assertEqual('abc_tests', task_info)
231 self.assertEqual(self.step_name, step_name) 233 self.assertEqual(self.step_name, step_name)
232 234
233 task = FlakeSwarmingTask.Get( 235 task = FlakeSwarmingTask.Get(
234 self.master_name, self.builder_name, self.build_number, 236 self.master_name, self.builder_name, self.build_number,
235 self.step_name, self.test_name) 237 self.step_name, self.test_name)
236 238
237 self.assertEqual(analysis_status.COMPLETED, task.status) 239 self.assertEqual(analysis_status.COMPLETED, task.status)
238 self.assertEqual(_EXPECTED_TESTS_STATUESE, task.tests_statuses) 240 self.assertEqual(_EXPECTED_TEST_STATUS, task.tests_statuses)
239 241
240 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), 242 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220),
241 task.created_time) 243 task.created_time)
242 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), 244 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550),
243 task.started_time) 245 task.started_time)
244 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), 246 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9),
245 task.completed_time) 247 task.completed_time)
246 248
247 def testProcessFlakeSwarmingTaskResultPipelineTaskNotRunning(self): 249 def testProcessFlakeSwarmingTaskResultPipelineTaskNotRunning(self):
248 task = FlakeSwarmingTask.Create( 250 task = FlakeSwarmingTask.Create(
249 self.master_name, self.builder_name, 251 self.master_name, self.builder_name,
250 self.build_number, self.step_name, self.test_name) 252 self.build_number, self.step_name, self.test_name)
251 task.task_id = 'task_id2' 253 task.task_id = 'task_id2'
252 task.put() 254 task.put()
253 255
254 analysis = MasterFlakeAnalysis.Create( 256 analysis = MasterFlakeAnalysis.Create(
255 self.master_name, self.builder_name, 257 self.master_name, self.builder_name,
256 self.build_number, self.step_name, self.test_name) 258 self.build_number, self.step_name, self.test_name)
257 analysis.put() 259 analysis.Save()
258 260
259 pipeline = ProcessFlakeSwarmingTaskResultPipeline() 261 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
260 step_name, task_info = pipeline.run( 262 step_name, task_info = pipeline.run(
261 self.master_name, self.builder_name, 263 self.master_name, self.builder_name, self.build_number, self.step_name,
262 self.build_number, self.step_name, 264 'task_id2', self.build_number, self.test_name, analysis.version_number)
263 'task_id2', self.build_number, self.test_name)
264 self.assertEqual(None, task_info) 265 self.assertEqual(None, task_info)
265 self.assertEqual(self.step_name, step_name) 266 self.assertEqual(self.step_name, step_name)
266 267
267 task = FlakeSwarmingTask.Get( 268 task = FlakeSwarmingTask.Get(
268 self.master_name, self.builder_name, 269 self.master_name, self.builder_name, self.build_number, self.step_name,
269 self.build_number, self.step_name, self.test_name) 270 self.test_name)
270 271
271 self.assertEqual(analysis_status.ERROR, task.status) 272 self.assertEqual(analysis_status.ERROR, task.status)
272 273
273 def testProcessFlakeSwarmingTaskResultPipelineTaskTimeOut(self): 274 def testProcessFlakeSwarmingTaskResultPipelineTaskTimeOut(self):
274 # Override swarming config settings to force a timeout. 275 # Override swarming config settings to force a timeout.
275 override_swarming_settings = { 276 override_swarming_settings = {
276 'task_timeout_hours': -1 277 'task_timeout_hours': -1
277 } 278 }
278 self.UpdateUnitTestConfigSettings( 279 self.UpdateUnitTestConfigSettings(
279 'swarming_settings', override_swarming_settings) 280 'swarming_settings', override_swarming_settings)
280 281
281 task = FlakeSwarmingTask.Create( 282 task = FlakeSwarmingTask.Create(
282 self.master_name, self.builder_name, 283 self.master_name, self.builder_name, self.build_number, self.step_name,
283 self.build_number, self.step_name, self.test_name) 284 self.test_name)
284 task.task_id = 'task_id1' 285 task.task_id = 'task_id1'
285 task.put() 286 task.put()
286 287
287 pipeline = ProcessFlakeSwarmingTaskResultPipeline() 288 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
288 step_name, task_info = pipeline.run( 289 step_name, task_info = pipeline.run(
289 self.master_name, self.builder_name, 290 self.master_name, self.builder_name, self.build_number, self.step_name,
290 self.build_number, self.step_name, 291 'task_id1', self.build_number, self.test_name, self.version_number)
291 'task_id1', self.build_number, self.test_name)
292 self.assertEqual('abc_tests', task_info) 292 self.assertEqual('abc_tests', task_info)
293 self.assertEqual(self.step_name, step_name) 293 self.assertEqual(self.step_name, step_name)
294 294
295 task = FlakeSwarmingTask.Get( 295 task = FlakeSwarmingTask.Get(
296 self.master_name, self.builder_name, self.build_number, 296 self.master_name, self.builder_name, self.build_number, self.step_name,
297 self.step_name, self.test_name) 297 self.test_name)
298 self.assertEqual(analysis_status.ERROR, task.status) 298 self.assertEqual(analysis_status.ERROR, task.status)
299 self.assertEqual({}, task.tests_statuses) 299 self.assertEqual({}, task.tests_statuses)
OLDNEW
« no previous file with comments | « appengine/findit/waterfall/process_flake_swarming_task_result_pipeline.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698