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

Side by Side Diff: appengine/findit/waterfall/flake/test/recursive_flake_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
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 from common import constants 5 from common import constants
6 from common.pipeline_wrapper import pipeline_handlers 6 from common.pipeline_wrapper import pipeline_handlers
7 from model import analysis_status 7 from model import analysis_status
8 from model.flake.flake_swarming_task import FlakeSwarmingTask
9 from model.flake.master_flake_analysis import DataPoint
8 from model.flake.master_flake_analysis import MasterFlakeAnalysis 10 from model.flake.master_flake_analysis import MasterFlakeAnalysis
9 from model.flake.flake_swarming_task import FlakeSwarmingTask
10 from waterfall.flake import recursive_flake_pipeline 11 from waterfall.flake import recursive_flake_pipeline
11 from waterfall.flake.recursive_flake_pipeline import get_next_run 12 from waterfall.flake.recursive_flake_pipeline import get_next_run
12 from waterfall.flake.recursive_flake_pipeline import NextBuildNumberPipeline 13 from waterfall.flake.recursive_flake_pipeline import NextBuildNumberPipeline
13 from waterfall.flake.recursive_flake_pipeline import RecursiveFlakePipeline 14 from waterfall.flake.recursive_flake_pipeline import RecursiveFlakePipeline
14 from waterfall.flake.recursive_flake_pipeline import sequential_next_run 15 from waterfall.flake.recursive_flake_pipeline import sequential_next_run
15 from waterfall.test import wf_testcase 16 from waterfall.test import wf_testcase
16 17
17 18
18 class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase): 19 class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
19 app_module = pipeline_handlers._APP 20 app_module = pipeline_handlers._APP
20 21
21 def _CreateAndSaveMasterFlakeAnalysis( 22 def _CreateAndSaveMasterFlakeAnalysis(
22 self, master_name, builder_name, build_number, 23 self, master_name, builder_name, build_number, step_name,
23 step_name, test_name, status): 24 test_name, status):
24 analysis = MasterFlakeAnalysis.Create( 25 analysis = MasterFlakeAnalysis.Create(
25 master_name, builder_name, build_number, step_name, test_name) 26 master_name, builder_name, build_number, step_name, test_name)
26 analysis.status = status 27 analysis.status = status
27 analysis.put() 28 analysis.Save()
28 29
29 def _CreateAndSaveFlakeSwarmingTask( 30 def _CreateAndSaveFlakeSwarmingTask(
30 self, master_name, builder_name, build_number, 31 self, master_name, builder_name, build_number,
31 step_name, test_name, status): 32 step_name, test_name, status):
32 flake_swarming_task = FlakeSwarmingTask.Create( 33 flake_swarming_task = FlakeSwarmingTask.Create(
33 master_name, builder_name, build_number, step_name, test_name) 34 master_name, builder_name, build_number, step_name, test_name)
34 flake_swarming_task.status = status 35 flake_swarming_task.status = status
35 flake_swarming_task.put() 36 flake_swarming_task.put()
36 37
38 def _GenerateDataPoints(self, pass_rates, build_numbers):
39 data_points = []
40 for i in range(0, len(pass_rates)):
41 data_point = DataPoint()
42 data_point.pass_rate = pass_rates[i]
43 data_point.build_number = build_numbers[i]
44 data_points.append(data_point)
45 return data_points
46
37 def testRecursiveFlakePipeline(self): 47 def testRecursiveFlakePipeline(self):
38 master_name = 'm' 48 master_name = 'm'
39 builder_name = 'b' 49 builder_name = 'b'
40 master_build_number = 100 50 master_build_number = 100
41 build_number = 100 51 build_number = 100
42 run_build_number = 100 52 run_build_number = 100
43 step_name = 's' 53 step_name = 's'
44 test_name = 't' 54 test_name = 't'
45 test_result_future = 'test_result_future' 55 test_result_future = 'test_result_future'
46 queue_name = constants.DEFAULT_QUEUE 56 queue_name = constants.DEFAULT_QUEUE
47 task_id = 'task_id' 57 task_id = 'task_id'
48 58
49 flakiness_algorithm_results_dict = { 59 flakiness_algorithm_results_dict = {
50 'flakes_in_a_row': 0, 60 'flakes_in_a_row': 0,
51 'stable_in_a_row': 0, 61 'stable_in_a_row': 0,
52 'stabled_out': False, 62 'stabled_out': False,
53 'flaked_out': False, 63 'flaked_out': False,
54 'last_build_number': 0, 64 'last_build_number': 0,
55 'lower_boundary': None, 65 'lower_boundary': None,
56 'upper_boundary': None, 66 'upper_boundary': None,
57 'lower_boundary_result': None, 67 'lower_boundary_result': None,
58 'sequential_run_index': 0 68 'sequential_run_index': 0
59 69
60 } 70 }
61 71
62 self._CreateAndSaveMasterFlakeAnalysis( 72 analysis = MasterFlakeAnalysis.Create(
63 master_name, builder_name, master_build_number, step_name, 73 master_name, builder_name, master_build_number, step_name, test_name)
64 test_name, status=analysis_status.PENDING 74 analysis.status = analysis_status.PENDING
65 ) 75 analysis.Save()
66 76
67 self.MockPipeline( 77 self.MockPipeline(
68 recursive_flake_pipeline.TriggerFlakeSwarmingTaskPipeline, 78 recursive_flake_pipeline.TriggerFlakeSwarmingTaskPipeline,
69 'task_id', 79 'task_id',
70 expected_args=[master_name, builder_name, 80 expected_args=[master_name, builder_name,
71 run_build_number, step_name, [test_name]], 81 run_build_number, step_name, [test_name]],
72 expected_kwargs={}) 82 expected_kwargs={})
73 83
74 self.MockPipeline( 84 self.MockPipeline(
75 recursive_flake_pipeline.ProcessFlakeSwarmingTaskResultPipeline, 85 recursive_flake_pipeline.ProcessFlakeSwarmingTaskResultPipeline,
76 'test_result_future', 86 'test_result_future',
77 expected_args=[master_name, builder_name, 87 expected_args=[master_name, builder_name,
78 run_build_number, step_name, task_id, 88 run_build_number, step_name, task_id,
79 master_build_number, test_name], 89 master_build_number, test_name,
90 analysis.version_number],
80 expected_kwargs={}) 91 expected_kwargs={})
81 92
82 self.MockPipeline( 93 self.MockPipeline(
83 recursive_flake_pipeline.NextBuildNumberPipeline, 94 recursive_flake_pipeline.NextBuildNumberPipeline,
84 '', 95 '',
85 expected_args=[master_name, builder_name, master_build_number, 96 expected_args=[master_name, builder_name, master_build_number,
86 build_number, step_name, test_name, 97 build_number, step_name, test_name,
98 analysis.version_number,
87 test_result_future, queue_name, 99 test_result_future, queue_name,
88 flakiness_algorithm_results_dict], 100 flakiness_algorithm_results_dict],
89 expected_kwargs={}) 101 expected_kwargs={})
90 102
91 rfp = RecursiveFlakePipeline(master_name, builder_name, build_number, 103 rfp = RecursiveFlakePipeline(
92 step_name, test_name, master_build_number, 104 master_name, builder_name, build_number, step_name, test_name,
93 flakiness_algorithm_results_dict= 105 analysis.version_number, master_build_number,
94 flakiness_algorithm_results_dict, 106 flakiness_algorithm_results_dict=flakiness_algorithm_results_dict,
95 queue_name=queue_name) 107 queue_name=queue_name)
96 108
97 rfp.start(queue_name=queue_name) 109 rfp.start(queue_name=queue_name)
98 self.execute_queued_tasks() 110 self.execute_queued_tasks()
99 111
100 def testNextBuildPipelineForNewRecursionFirstFlake(self): 112 def testNextBuildPipelineForNewRecursionFirstFlake(self):
101 master_name = 'm' 113 master_name = 'm'
102 builder_name = 'b' 114 builder_name = 'b'
103 master_build_number = 100 115 master_build_number = 100
104 build_number = 100 116 build_number = 100
105 step_name = 's' 117 step_name = 's'
(...skipping 13 matching lines...) Expand all
119 131
120 } 132 }
121 self._CreateAndSaveMasterFlakeAnalysis( 133 self._CreateAndSaveMasterFlakeAnalysis(
122 master_name, builder_name, build_number, step_name, 134 master_name, builder_name, build_number, step_name,
123 test_name, status=analysis_status.PENDING 135 test_name, status=analysis_status.PENDING
124 ) 136 )
125 self._CreateAndSaveFlakeSwarmingTask( 137 self._CreateAndSaveFlakeSwarmingTask(
126 master_name, builder_name, build_number, step_name, 138 master_name, builder_name, build_number, step_name,
127 test_name, status=analysis_status.COMPLETED 139 test_name, status=analysis_status.COMPLETED
128 ) 140 )
129 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 141 analysis = MasterFlakeAnalysis.GetVersion(
130 build_number, step_name, test_name) 142 master_name, builder_name, build_number, step_name, test_name)
131 analysis.success_rates.append(.08) 143
132 analysis.build_numbers.append(100) 144 data_point = DataPoint()
145 data_point.pass_rate = .08
146 data_point.build_number = 100
147 analysis.data_points.append(data_point)
133 analysis.put() 148 analysis.put()
134 149
135 NextBuildNumberPipeline.run( 150 NextBuildNumberPipeline.run(
136 NextBuildNumberPipeline(), master_name, builder_name, 151 NextBuildNumberPipeline(), master_name, builder_name,
137 master_build_number, build_number, step_name, test_name, 152 master_build_number, build_number, step_name, test_name,
138 test_result_future, queue_name, flakiness_algorithm_results_dict) 153 analysis.version_number, test_result_future, queue_name,
154 flakiness_algorithm_results_dict)
139 self.assertEquals(flakiness_algorithm_results_dict['flakes_in_a_row'], 1) 155 self.assertEquals(flakiness_algorithm_results_dict['flakes_in_a_row'], 1)
140 156
141 def testNextBuildPipelineForNewRecursionFirstStable(self): 157 def testNextBuildPipelineForNewRecursionFirstStable(self):
142 master_name = 'm' 158 master_name = 'm'
143 builder_name = 'b' 159 builder_name = 'b'
144 master_build_number = 100 160 master_build_number = 100
145 build_number = 100 161 build_number = 100
146 step_name = 's' 162 step_name = 's'
147 test_name = 't' 163 test_name = 't'
148 test_result_future = 'trf' 164 test_result_future = 'trf'
(...skipping 11 matching lines...) Expand all
160 176
161 } 177 }
162 self._CreateAndSaveMasterFlakeAnalysis( 178 self._CreateAndSaveMasterFlakeAnalysis(
163 master_name, builder_name, build_number, step_name, 179 master_name, builder_name, build_number, step_name,
164 test_name, status=analysis_status.PENDING 180 test_name, status=analysis_status.PENDING
165 ) 181 )
166 self._CreateAndSaveFlakeSwarmingTask( 182 self._CreateAndSaveFlakeSwarmingTask(
167 master_name, builder_name, build_number, step_name, 183 master_name, builder_name, build_number, step_name,
168 test_name, status=analysis_status.COMPLETED 184 test_name, status=analysis_status.COMPLETED
169 ) 185 )
170 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 186 analysis = MasterFlakeAnalysis.GetVersion(
171 build_number, step_name, test_name) 187 master_name, builder_name, build_number, step_name, test_name)
172 analysis.success_rates.append(0) 188 data_point = DataPoint()
173 analysis.build_numbers.append(100) 189 data_point.pass_rate = 0
190 data_point.build_number = 100
191 analysis.data_points.append(data_point)
174 analysis.put() 192 analysis.put()
175 193
176 NextBuildNumberPipeline.run( 194 NextBuildNumberPipeline.run(
177 NextBuildNumberPipeline(), master_name, builder_name, 195 NextBuildNumberPipeline(), master_name, builder_name,
178 master_build_number, build_number, step_name, 196 master_build_number, build_number, step_name,
179 test_name, test_result_future, queue_name, 197 test_name, analysis.version_number, test_result_future, queue_name,
180 flakiness_algorithm_results_dict) 198 flakiness_algorithm_results_dict)
181 self.assertEquals(flakiness_algorithm_results_dict['stable_in_a_row'], 1) 199 self.assertEquals(flakiness_algorithm_results_dict['stable_in_a_row'], 1)
182 200
183 def testNextBuildPipelineForNewRecursionFlakeInARow(self): 201 def testNextBuildPipelineForNewRecursionFlakeInARow(self):
184 master_name = 'm' 202 master_name = 'm'
185 builder_name = 'b' 203 builder_name = 'b'
186 master_build_number = 100 204 master_build_number = 100
187 build_number = 100 205 build_number = 100
188 step_name = 's' 206 step_name = 's'
189 test_name = 't' 207 test_name = 't'
(...skipping 12 matching lines...) Expand all
202 220
203 } 221 }
204 self._CreateAndSaveMasterFlakeAnalysis( 222 self._CreateAndSaveMasterFlakeAnalysis(
205 master_name, builder_name, build_number, step_name, 223 master_name, builder_name, build_number, step_name,
206 test_name, status=analysis_status.PENDING 224 test_name, status=analysis_status.PENDING
207 ) 225 )
208 self._CreateAndSaveFlakeSwarmingTask( 226 self._CreateAndSaveFlakeSwarmingTask(
209 master_name, builder_name, build_number, step_name, 227 master_name, builder_name, build_number, step_name,
210 test_name, status=analysis_status.COMPLETED 228 test_name, status=analysis_status.COMPLETED
211 ) 229 )
212 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 230 analysis = MasterFlakeAnalysis.GetVersion(
213 build_number, step_name, test_name) 231 master_name, builder_name, build_number, step_name, test_name)
214 analysis.success_rates.append(0) 232 data_point = DataPoint()
215 analysis.build_numbers.append(100) 233 data_point.pass_rate = 0
234 data_point.build_number = 100
235 analysis.data_points.append(data_point)
216 analysis.put() 236 analysis.put()
217 237
218 NextBuildNumberPipeline.run( 238 NextBuildNumberPipeline.run(
219 NextBuildNumberPipeline(), master_name, builder_name, 239 NextBuildNumberPipeline(), master_name, builder_name,
220 master_build_number, build_number, step_name, 240 master_build_number, build_number, step_name,
221 test_name, test_result_future, queue_name, 241 test_name, analysis.version_number, test_result_future, queue_name,
222 flakiness_algorithm_results_dict) 242 flakiness_algorithm_results_dict)
223 self.assertEquals(flakiness_algorithm_results_dict['stabled_out'], True) 243 self.assertEquals(flakiness_algorithm_results_dict['stabled_out'], True)
224 244
225 def testNextBuildPipelineForNewRecursionStableInARow(self): 245 def testNextBuildPipelineForNewRecursionStableInARow(self):
226 master_name = 'm' 246 master_name = 'm'
227 builder_name = 'b' 247 builder_name = 'b'
228 master_build_number = 100 248 master_build_number = 100
229 build_number = 100 249 build_number = 100
230 step_name = 's' 250 step_name = 's'
231 test_name = 't' 251 test_name = 't'
(...skipping 12 matching lines...) Expand all
244 264
245 } 265 }
246 self._CreateAndSaveMasterFlakeAnalysis( 266 self._CreateAndSaveMasterFlakeAnalysis(
247 master_name, builder_name, build_number, step_name, 267 master_name, builder_name, build_number, step_name,
248 test_name, status=analysis_status.PENDING 268 test_name, status=analysis_status.PENDING
249 ) 269 )
250 self._CreateAndSaveFlakeSwarmingTask( 270 self._CreateAndSaveFlakeSwarmingTask(
251 master_name, builder_name, build_number, step_name, 271 master_name, builder_name, build_number, step_name,
252 test_name, status=analysis_status.COMPLETED 272 test_name, status=analysis_status.COMPLETED
253 ) 273 )
254 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 274 analysis = MasterFlakeAnalysis.GetVersion(
255 build_number, step_name, test_name) 275 master_name, builder_name, build_number, step_name, test_name)
256 analysis.success_rates.append(.50) 276 data_point = DataPoint()
257 analysis.build_numbers.append(100) 277 data_point.pass_rate = .5
278 data_point.build_number = 100
279 analysis.data_points.append(data_point)
258 analysis.put() 280 analysis.put()
259 281
260 NextBuildNumberPipeline.run( 282 NextBuildNumberPipeline.run(
261 NextBuildNumberPipeline(), master_name, builder_name, 283 NextBuildNumberPipeline(), master_name, builder_name,
262 master_build_number, build_number, step_name, 284 master_build_number, build_number, step_name,
263 test_name, test_result_future, queue_name, 285 test_name, analysis.version_number, test_result_future, queue_name,
264 flakiness_algorithm_results_dict) 286 flakiness_algorithm_results_dict)
265 self.assertEquals(flakiness_algorithm_results_dict['flaked_out'], True) 287 self.assertEquals(flakiness_algorithm_results_dict['flaked_out'], True)
266 288
267
268 def testNextBuildPipelineForNewRecursionLessThanLastBuildNumber(self): 289 def testNextBuildPipelineForNewRecursionLessThanLastBuildNumber(self):
269 master_name = 'm' 290 master_name = 'm'
270 builder_name = 'b' 291 builder_name = 'b'
271 master_build_number = 100 292 master_build_number = 100
272 build_number = 100 293 build_number = 100
273 step_name = 's' 294 step_name = 's'
274 test_name = 't' 295 test_name = 't'
275 test_result_future = 'trf' 296 test_result_future = 'trf'
276 queue_name = constants.DEFAULT_QUEUE 297 queue_name = constants.DEFAULT_QUEUE
277 flakiness_algorithm_results_dict = { 298 flakiness_algorithm_results_dict = {
278 'flakes_in_a_row': 0, 299 'flakes_in_a_row': 0,
279 'stable_in_a_row': 0, 300 'stable_in_a_row': 0,
280 'stabled_out': False, 301 'stabled_out': False,
281 'flaked_out': False, 302 'flaked_out': False,
282 'last_build_number': 200, 303 'last_build_number': 200,
283 'lower_boundary': None, 304 'lower_boundary': None,
284 'upper_boundary': None, 305 'upper_boundary': None,
285 'lower_boundary_result': None, 306 'lower_boundary_result': None,
286 'sequential_run_index': 0 307 'sequential_run_index': 0
287 } 308 }
288 self._CreateAndSaveMasterFlakeAnalysis( 309 self._CreateAndSaveMasterFlakeAnalysis(
289 master_name, builder_name, build_number, step_name, 310 master_name, builder_name, build_number, step_name,
290 test_name, status=analysis_status.PENDING 311 test_name, status=analysis_status.PENDING
291 ) 312 )
292 self._CreateAndSaveFlakeSwarmingTask( 313 self._CreateAndSaveFlakeSwarmingTask(
293 master_name, builder_name, build_number, step_name, 314 master_name, builder_name, build_number, step_name,
294 test_name, status=analysis_status.COMPLETED 315 test_name, status=analysis_status.COMPLETED
295 ) 316 )
296 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 317 analysis = MasterFlakeAnalysis.GetVersion(
297 build_number, step_name, test_name) 318 master_name, builder_name, build_number, step_name, test_name)
298 analysis.success_rates.append(.50) 319 data_point = DataPoint()
299 analysis.build_numbers.append(100) 320 data_point.pass_rate = .5
321 data_point.build_number = 100
322 analysis.data_points.append(data_point)
300 analysis.put() 323 analysis.put()
301 324
302 queue_name = {'x': False} 325 queue_name = {'x': False}
303 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument 326 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
304 queue_name['x'] = True # pragma: no cover 327 queue_name['x'] = True # pragma: no cover
305 328
306 self.mock( 329 self.mock(
307 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) 330 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
308 NextBuildNumberPipeline.run( 331 NextBuildNumberPipeline.run(
309 NextBuildNumberPipeline(), master_name, builder_name, 332 NextBuildNumberPipeline(), master_name, builder_name,
310 master_build_number, build_number, step_name, test_name, 333 master_build_number, build_number, step_name, test_name,
311 test_result_future, queue_name, flakiness_algorithm_results_dict) 334 analysis.version_number, test_result_future, queue_name,
335 flakiness_algorithm_results_dict)
312 self.assertFalse(queue_name['x']) 336 self.assertFalse(queue_name['x'])
313 337
314 def testNextBuildPipelineForFailedSwarmingTask(self): 338 def testNextBuildPipelineForFailedSwarmingTask(self):
315 master_name = 'm' 339 master_name = 'm'
316 builder_name = 'b' 340 builder_name = 'b'
317 master_build_number = 100 341 master_build_number = 100
318 build_number = 100 342 build_number = 100
319 step_name = 's' 343 step_name = 's'
320 test_name = 't' 344 test_name = 't'
321 test_result_future = 'trf' 345 test_result_future = 'trf'
(...skipping 11 matching lines...) Expand all
333 357
334 } 358 }
335 self._CreateAndSaveMasterFlakeAnalysis( 359 self._CreateAndSaveMasterFlakeAnalysis(
336 master_name, builder_name, build_number, step_name, 360 master_name, builder_name, build_number, step_name,
337 test_name, status=analysis_status.PENDING 361 test_name, status=analysis_status.PENDING
338 ) 362 )
339 self._CreateAndSaveFlakeSwarmingTask( 363 self._CreateAndSaveFlakeSwarmingTask(
340 master_name, builder_name, build_number, step_name, 364 master_name, builder_name, build_number, step_name,
341 test_name, status=analysis_status.ERROR 365 test_name, status=analysis_status.ERROR
342 ) 366 )
343 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 367 analysis = MasterFlakeAnalysis.GetVersion(
344 build_number, step_name, test_name) 368 master_name, builder_name, build_number, step_name, test_name)
345 analysis.success_rates.append(.50) 369 data_point = DataPoint()
346 analysis.build_numbers.append(100) 370 data_point.pass_rate = .5
371 data_point.build_number = 100
372 analysis.data_points.append(data_point)
347 analysis.put() 373 analysis.put()
348 374
349 queue_name = {'x': False} 375 queue_name = {'x': False}
350 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument 376 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
351 queue_name['x'] = True # pragma: no cover 377 queue_name['x'] = True # pragma: no cover
352 378
353 self.mock( 379 self.mock(
354 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) 380 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
355 NextBuildNumberPipeline.run( 381 NextBuildNumberPipeline.run(
356 NextBuildNumberPipeline(), master_name, builder_name, 382 NextBuildNumberPipeline(), master_name, builder_name,
357 master_build_number, build_number, step_name, test_name, 383 master_build_number, build_number, step_name, test_name, 1,
358 test_result_future, queue_name, flakiness_algorithm_results_dict) 384 test_result_future, queue_name, flakiness_algorithm_results_dict)
359 self.assertFalse(queue_name['x']) 385 self.assertFalse(queue_name['x'])
360 386
361 def testNextBuildPipelineForNewRecursionStabledFlakedOut(self): 387 def testNextBuildPipelineForNewRecursionStabledFlakedOut(self):
362 master_name = 'm' 388 master_name = 'm'
363 builder_name = 'b' 389 builder_name = 'b'
364 master_build_number = 100 390 master_build_number = 100
365 build_number = 100 391 build_number = 100
366 step_name = 's' 392 step_name = 's'
367 test_name = 't' 393 test_name = 't'
(...skipping 11 matching lines...) Expand all
379 'sequential_run_index': 0 405 'sequential_run_index': 0
380 } 406 }
381 self._CreateAndSaveMasterFlakeAnalysis( 407 self._CreateAndSaveMasterFlakeAnalysis(
382 master_name, builder_name, build_number, step_name, 408 master_name, builder_name, build_number, step_name,
383 test_name, status=analysis_status.PENDING 409 test_name, status=analysis_status.PENDING
384 ) 410 )
385 self._CreateAndSaveFlakeSwarmingTask( 411 self._CreateAndSaveFlakeSwarmingTask(
386 master_name, builder_name, build_number, step_name, 412 master_name, builder_name, build_number, step_name,
387 test_name, status=analysis_status.COMPLETED 413 test_name, status=analysis_status.COMPLETED
388 ) 414 )
389 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 415 analysis = MasterFlakeAnalysis.GetVersion(
390 build_number, step_name, test_name) 416 master_name, builder_name, build_number, step_name, test_name)
391 analysis.success_rates.append(.50) 417 data_point = DataPoint()
392 analysis.build_numbers.append(100) 418 data_point.pass_rate = .5
419 data_point.build_number = 100
420 analysis.data_points.append(data_point)
393 analysis.put() 421 analysis.put()
394 422
395 queue_name = {'x': False} 423 queue_name = {'x': False}
396 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument 424 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
397 queue_name['x'] = True # pragma: no cover 425 queue_name['x'] = True # pragma: no cover
398 426
399 self.mock( 427 self.mock(
400 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) 428 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
401 NextBuildNumberPipeline.run( 429 NextBuildNumberPipeline.run(
402 NextBuildNumberPipeline(), master_name, builder_name, 430 NextBuildNumberPipeline(), master_name, builder_name,
403 master_build_number, build_number, step_name, test_name, 431 master_build_number, build_number, step_name, test_name,
404 test_result_future, queue_name, flakiness_algorithm_results_dict) 432 analysis.version_number, test_result_future, queue_name,
433 flakiness_algorithm_results_dict)
405 self.assertTrue(queue_name['x']) 434 self.assertTrue(queue_name['x'])
406 435
407 def testGetNextRunSetStableLowerBoundary(self): 436 def testGetNextRunSetStableLowerBoundary(self):
408 master_name = 'm' 437 master_name = 'm'
409 builder_name = 'b' 438 builder_name = 'b'
410 build_number = 100 439 build_number = 100
411 step_name = 's' 440 step_name = 's'
412 test_name = 't' 441 test_name = 't'
413 self._CreateAndSaveMasterFlakeAnalysis( 442 self._CreateAndSaveMasterFlakeAnalysis(
414 master_name, builder_name, build_number, step_name, 443 master_name, builder_name, build_number, step_name,
415 test_name, status=analysis_status.PENDING 444 test_name, status=analysis_status.PENDING
416 ) 445 )
417 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 446 analysis = MasterFlakeAnalysis.GetVersion(
418 build_number, step_name, test_name) 447 master_name, builder_name, build_number, step_name, test_name)
419 analysis.success_rates.append(1) 448 data_point = DataPoint()
420 analysis.build_numbers.append(100) 449 data_point.pass_rate = 1
450 data_point.build_number = 100
451 analysis.data_points.append(data_point)
421 analysis.put() 452 analysis.put()
422 453
423 flakiness_algorithm_results_dict = { 454 flakiness_algorithm_results_dict = {
424 'flakes_in_a_row': 4, 455 'flakes_in_a_row': 4,
425 'stable_in_a_row': 0, 456 'stable_in_a_row': 0,
426 'stabled_out': False, 457 'stabled_out': False,
427 'flaked_out': True, 458 'flaked_out': True,
428 'last_build_number': 0, 459 'last_build_number': 0,
429 'lower_boundary': None, 460 'lower_boundary': None,
430 'upper_boundary': 120, 461 'upper_boundary': 120,
431 'lower_boundary_result': None, 462 'lower_boundary_result': None,
432 'sequential_run_index': 0 463 'sequential_run_index': 0
433 } 464 }
465
434 get_next_run(analysis, flakiness_algorithm_results_dict) 466 get_next_run(analysis, flakiness_algorithm_results_dict)
435 self.assertEqual(flakiness_algorithm_results_dict['lower_boundary'], 467 self.assertEqual(flakiness_algorithm_results_dict['lower_boundary'],
436 build_number) 468 build_number)
437 self.assertEqual(flakiness_algorithm_results_dict['lower_boundary_result'], 469 self.assertEqual(flakiness_algorithm_results_dict['lower_boundary_result'],
438 'STABLE') 470 'STABLE')
439 471
440 def testGetNextRunSetFlakeLowerBoundary(self): 472 def testGetNextRunSetFlakeLowerBoundary(self):
441 master_name = 'm' 473 master_name = 'm'
442 builder_name = 'b' 474 builder_name = 'b'
443 build_number = 100 475 build_number = 100
444 step_name = 's' 476 step_name = 's'
445 test_name = 't' 477 test_name = 't'
446 self._CreateAndSaveMasterFlakeAnalysis( 478 self._CreateAndSaveMasterFlakeAnalysis(
447 master_name, builder_name, build_number, step_name, 479 master_name, builder_name, build_number, step_name,
448 test_name, status=analysis_status.PENDING 480 test_name, status=analysis_status.PENDING
449 ) 481 )
450 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 482 analysis = MasterFlakeAnalysis.GetVersion(
451 build_number, step_name, test_name) 483 master_name, builder_name, build_number, step_name, test_name)
452 analysis.success_rates.append(.5) 484 data_point = DataPoint()
453 analysis.build_numbers.append(100) 485 data_point.pass_rate = .5
486 data_point.build_number = 100
487 analysis.data_points.append(data_point)
454 analysis.put() 488 analysis.put()
455 489
456 flakiness_algorithm_results_dict = { 490 flakiness_algorithm_results_dict = {
457 'flakes_in_a_row': 0, 491 'flakes_in_a_row': 0,
458 'stable_in_a_row': 0, 492 'stable_in_a_row': 0,
459 'stabled_out': True, 493 'stabled_out': True,
460 'flaked_out': False, 494 'flaked_out': False,
461 'last_build_number': 0, 495 'last_build_number': 0,
462 'lower_boundary': None, 496 'lower_boundary': None,
463 'upper_boundary': None, 497 'upper_boundary': None,
464 'lower_boundary_result': None, 498 'lower_boundary_result': None,
465 'sequential_run_index': 0 499 'sequential_run_index': 0
466 } 500 }
467 get_next_run(analysis, flakiness_algorithm_results_dict) 501 get_next_run(analysis, flakiness_algorithm_results_dict)
468 self.assertEqual(flakiness_algorithm_results_dict['lower_boundary'], 502 self.assertEqual(flakiness_algorithm_results_dict['lower_boundary'],
469 build_number) 503 build_number)
470 self.assertEqual(flakiness_algorithm_results_dict['lower_boundary_result'], 504 self.assertEqual(flakiness_algorithm_results_dict['lower_boundary_result'],
471 'FLAKE') 505 'FLAKE')
472 506
473 def testSequentialNextRunFirstTime(self): 507 def testSequentialNextRunFirstTime(self):
474 master_name = 'm' 508 master_name = 'm'
475 builder_name = 'b' 509 builder_name = 'b'
476 build_number = 100 510 build_number = 100
477 step_name = 's' 511 step_name = 's'
478 test_name = 't' 512 test_name = 't'
479 self._CreateAndSaveMasterFlakeAnalysis( 513 self._CreateAndSaveMasterFlakeAnalysis(
480 master_name, builder_name, build_number, step_name, 514 master_name, builder_name, build_number, step_name,
481 test_name, status=analysis_status.PENDING 515 test_name, status=analysis_status.PENDING
482 ) 516 )
483 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 517 analysis = MasterFlakeAnalysis.GetVersion(
484 build_number, step_name, test_name) 518 master_name, builder_name, build_number, step_name, test_name)
485 analysis.success_rates.append(.5) 519 data_point = DataPoint()
486 analysis.build_numbers.append(100) 520 data_point.pass_rate = .5
521 data_point.build_number = 100
522 analysis.data_points.append(data_point)
487 analysis.put() 523 analysis.put()
488 524
489 flakiness_algorithm_results_dict = { 525 flakiness_algorithm_results_dict = {
490 'flakes_in_a_row': 0, 526 'flakes_in_a_row': 0,
491 'stable_in_a_row': 0, 527 'stable_in_a_row': 0,
492 'stabled_out': True, 528 'stabled_out': True,
493 'flaked_out': True, 529 'flaked_out': True,
494 'last_build_number': 0, 530 'last_build_number': 0,
495 'lower_boundary': 100, 531 'lower_boundary': 100,
496 'upper_boundary': 110, 532 'upper_boundary': 110,
497 'lower_boundary_result': 'STABLE', 533 'lower_boundary_result': 'STABLE',
498 'sequential_run_index': 0 534 'sequential_run_index': 0
499 } 535 }
500 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) 536 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict)
501 self.assertEqual(next_run, 101) 537 self.assertEqual(next_run, 101)
502 538
503 def testSequentialFoundBorderFlake(self): 539 def testSequentialFoundBorderFlake(self):
504 master_name = 'm' 540 master_name = 'm'
505 builder_name = 'b' 541 builder_name = 'b'
506 build_number = 100 542 build_number = 100
507 step_name = 's' 543 step_name = 's'
508 test_name = 't' 544 test_name = 't'
509 self._CreateAndSaveMasterFlakeAnalysis( 545 self._CreateAndSaveMasterFlakeAnalysis(
510 master_name, builder_name, build_number, step_name, 546 master_name, builder_name, build_number, step_name,
511 test_name, status=analysis_status.PENDING 547 test_name, status=analysis_status.PENDING
512 ) 548 )
513 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 549 analysis = MasterFlakeAnalysis.GetVersion(
514 build_number, step_name, test_name) 550 master_name, builder_name, build_number, step_name, test_name)
515 analysis.success_rates.append(.5) 551 data_point = DataPoint()
516 analysis.build_numbers.append(100) 552 data_point.pass_rate = .5
553 data_point.build_number = 100
554 analysis.data_points.append(data_point)
517 analysis.put() 555 analysis.put()
518 556
519 flakiness_algorithm_results_dict = { 557 flakiness_algorithm_results_dict = {
520 'flakes_in_a_row': 0, 558 'flakes_in_a_row': 0,
521 'stable_in_a_row': 0, 559 'stable_in_a_row': 0,
522 'stabled_out': True, 560 'stabled_out': True,
523 'flaked_out': True, 561 'flaked_out': True,
524 'last_build_number': 0, 562 'last_build_number': 0,
525 'lower_boundary': 100, 563 'lower_boundary': 100,
526 'upper_boundary': 110, 564 'upper_boundary': 110,
527 'lower_boundary_result': 'STABLE', 565 'lower_boundary_result': 'STABLE',
528 'sequential_run_index': 1 566 'sequential_run_index': 1
529 } 567 }
530 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) 568 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict)
531 self.assertEqual(next_run, False) 569 self.assertEqual(next_run, False)
532 self.assertEqual(analysis.suspected_flake_build_number, 101) 570 self.assertEqual(analysis.suspected_flake_build_number, 101)
533 571
534 def testSequentialFoundBorderStable(self): 572 def testSequentialFoundBorderStable(self):
535 master_name = 'm' 573 master_name = 'm'
536 builder_name = 'b' 574 builder_name = 'b'
537 build_number = 100 575 build_number = 100
538 step_name = 's' 576 step_name = 's'
539 test_name = 't' 577 test_name = 't'
540 self._CreateAndSaveMasterFlakeAnalysis( 578 self._CreateAndSaveMasterFlakeAnalysis(
541 master_name, builder_name, build_number, step_name, 579 master_name, builder_name, build_number, step_name,
542 test_name, status=analysis_status.PENDING 580 test_name, status=analysis_status.PENDING
543 ) 581 )
544 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 582 analysis = MasterFlakeAnalysis.GetVersion(
545 build_number, step_name, test_name) 583 master_name, builder_name, build_number, step_name, test_name)
546 analysis.success_rates.append(1) 584 data_point = DataPoint()
547 analysis.build_numbers.append(100) 585 data_point.pass_rate = 1
586 data_point.build_number = 100
587 analysis.data_points.append(data_point)
548 analysis.put() 588 analysis.put()
549 589
550 flakiness_algorithm_results_dict = { 590 flakiness_algorithm_results_dict = {
551 'flakes_in_a_row': 0, 591 'flakes_in_a_row': 0,
552 'stable_in_a_row': 0, 592 'stable_in_a_row': 0,
553 'stabled_out': True, 593 'stabled_out': True,
554 'flaked_out': True, 594 'flaked_out': True,
555 'last_build_number': 0, 595 'last_build_number': 0,
556 'lower_boundary': 100, 596 'lower_boundary': 100,
557 'upper_boundary': 110, 597 'upper_boundary': 110,
558 'lower_boundary_result': 'FLAKE', 598 'lower_boundary_result': 'FLAKE',
559 'sequential_run_index': 1 599 'sequential_run_index': 1
560 } 600 }
561 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) 601 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict)
562 self.assertEqual(next_run, False) 602 self.assertEqual(next_run, False)
563 self.assertEqual(analysis.suspected_flake_build_number, 101) 603 self.assertEqual(analysis.suspected_flake_build_number, 101)
564 604
565
566 def testSequentialDidntFindBorderStable(self): 605 def testSequentialDidntFindBorderStable(self):
567 master_name = 'm' 606 master_name = 'm'
568 builder_name = 'b' 607 builder_name = 'b'
569 build_number = 100 608 build_number = 100
570 step_name = 's' 609 step_name = 's'
571 test_name = 't' 610 test_name = 't'
572 self._CreateAndSaveMasterFlakeAnalysis( 611 self._CreateAndSaveMasterFlakeAnalysis(
573 master_name, builder_name, build_number, step_name, 612 master_name, builder_name, build_number, step_name,
574 test_name, status=analysis_status.PENDING 613 test_name, status=analysis_status.PENDING
575 ) 614 )
576 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 615 analysis = MasterFlakeAnalysis.GetVersion(
577 build_number, step_name, test_name) 616 master_name, builder_name, build_number, step_name, test_name)
578 analysis.success_rates.append(1) 617 data_point = DataPoint()
579 analysis.build_numbers.append(100) 618 data_point.pass_rate = 1
619 data_point.build_number = 100
620 analysis.data_points.append(data_point)
580 analysis.put() 621 analysis.put()
581 622
582 flakiness_algorithm_results_dict = { 623 flakiness_algorithm_results_dict = {
583 'flakes_in_a_row': 0, 624 'flakes_in_a_row': 0,
584 'stable_in_a_row': 0, 625 'stable_in_a_row': 0,
585 'stabled_out': True, 626 'stabled_out': True,
586 'flaked_out': True, 627 'flaked_out': True,
587 'last_build_number': 0, 628 'last_build_number': 0,
588 'lower_boundary': 100, 629 'lower_boundary': 100,
589 'upper_boundary': 110, 630 'upper_boundary': 110,
(...skipping 26 matching lines...) Expand all
616 657
617 } 658 }
618 self._CreateAndSaveMasterFlakeAnalysis( 659 self._CreateAndSaveMasterFlakeAnalysis(
619 master_name, builder_name, build_number, step_name, 660 master_name, builder_name, build_number, step_name,
620 test_name, status=analysis_status.PENDING 661 test_name, status=analysis_status.PENDING
621 ) 662 )
622 self._CreateAndSaveFlakeSwarmingTask( 663 self._CreateAndSaveFlakeSwarmingTask(
623 master_name, builder_name, build_number, step_name, 664 master_name, builder_name, build_number, step_name,
624 test_name, status=analysis_status.COMPLETED 665 test_name, status=analysis_status.COMPLETED
625 ) 666 )
626 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 667 analysis = MasterFlakeAnalysis.GetVersion(
627 build_number, step_name, test_name) 668 master_name, builder_name, build_number, step_name, test_name)
628 analysis.success_rates.append(1) 669 data_point = DataPoint()
629 analysis.build_numbers.append(50) 670 data_point.pass_rate = 1
671 data_point.build_number = 100
672 analysis.data_points.append(data_point)
630 analysis.put() 673 analysis.put()
631 674
632 NextBuildNumberPipeline.run( 675 NextBuildNumberPipeline.run(
633 NextBuildNumberPipeline(), master_name, builder_name, 676 NextBuildNumberPipeline(), master_name, builder_name,
634 master_build_number, build_number, step_name, test_name, 677 master_build_number, build_number, step_name, test_name,
635 test_result_future, queue_name, flakiness_algorithm_results_dict) 678 analysis.version_number, test_result_future, queue_name,
679 flakiness_algorithm_results_dict)
636 self.assertEquals( 680 self.assertEquals(
637 flakiness_algorithm_results_dict['sequential_run_index'], 1) 681 flakiness_algorithm_results_dict['sequential_run_index'], 1)
638 682
639 def testNextBuildWhenTestNotExistingAfterStableInARow(self): 683 def testNextBuildWhenTestNotExistingAfterStableInARow(self):
640 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't') 684 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't')
641 master.success_rates = [0.8, 1.0, 1.0, -1] 685 master.data_points = self._GenerateDataPoints(
642 master.build_numbers = [100, 80, 70, 60] 686 pass_rates=[0.8, 1.0, 1.0, -1], build_numbers=[100, 80, 70, 60])
687
643 flakiness_algorithm_results_dict = { 688 flakiness_algorithm_results_dict = {
644 'flakes_in_a_row': 0, 689 'flakes_in_a_row': 0,
645 'stable_in_a_row': 2, 690 'stable_in_a_row': 2,
646 'stabled_out': False, 691 'stabled_out': False,
647 'flaked_out': False, 692 'flaked_out': False,
648 'last_build_number': 0, 693 'last_build_number': 0,
649 'lower_boundary': None, 694 'lower_boundary': None,
650 'upper_boundary': None, 695 'upper_boundary': None,
651 'lower_boundary_result': None, 696 'lower_boundary_result': None,
652 'sequential_run_index': 0, 697 'sequential_run_index': 0,
653 } 698 }
654 699
655 next_run = get_next_run(master, flakiness_algorithm_results_dict) 700 next_run = get_next_run(master, flakiness_algorithm_results_dict)
656 self.assertEqual(81, next_run) 701 self.assertEqual(81, next_run)
657 self.assertTrue(flakiness_algorithm_results_dict['stabled_out']) 702 self.assertTrue(flakiness_algorithm_results_dict['stabled_out'])
658 self.assertTrue(flakiness_algorithm_results_dict['flaked_out']) 703 self.assertTrue(flakiness_algorithm_results_dict['flaked_out'])
659 self.assertEqual(80, flakiness_algorithm_results_dict['lower_boundary']) 704 self.assertEqual(80, flakiness_algorithm_results_dict['lower_boundary'])
660 self.assertEqual('STABLE', 705 self.assertEqual('STABLE',
661 flakiness_algorithm_results_dict['lower_boundary_result']) 706 flakiness_algorithm_results_dict['lower_boundary_result'])
662 707
663 def testNextBuildWhenTestNotExistingAfterFlakeInARow(self): 708 def testNextBuildWhenTestNotExistingAfterFlakeInARow(self):
664 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't') 709 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't')
665 master.success_rates = [0.8, 0.7, 0.75, -1] 710 master.data_points = self._GenerateDataPoints(
666 master.build_numbers = [100, 80, 70, 60] 711 pass_rates=[0.8, 0.7, 0.75, -1], build_numbers=[100, 80, 70, 60])
667 flakiness_algorithm_results_dict = { 712 flakiness_algorithm_results_dict = {
668 'flakes_in_a_row': 3, 713 'flakes_in_a_row': 3,
669 'stable_in_a_row': 0, 714 'stable_in_a_row': 0,
670 'stabled_out': False, 715 'stabled_out': False,
671 'flaked_out': False, 716 'flaked_out': False,
672 'last_build_number': 0, 717 'last_build_number': 0,
673 'lower_boundary': None, 718 'lower_boundary': None,
674 'upper_boundary': None, 719 'upper_boundary': None,
675 'lower_boundary_result': None, 720 'lower_boundary_result': None,
676 'sequential_run_index': 0, 721 'sequential_run_index': 0,
(...skipping 22 matching lines...) Expand all
699 'stabled_out': False, 744 'stabled_out': False,
700 'flaked_out': False, 745 'flaked_out': False,
701 'last_build_number': 0, 746 'last_build_number': 0,
702 'lower_boundary': None, 747 'lower_boundary': None,
703 'upper_boundary': None, 748 'upper_boundary': None,
704 'lower_boundary_result': None, 749 'lower_boundary_result': None,
705 'sequential_run_index': 0 750 'sequential_run_index': 0
706 } 751 }
707 self._CreateAndSaveMasterFlakeAnalysis( 752 self._CreateAndSaveMasterFlakeAnalysis(
708 master_name, builder_name, master_build_number, step_name, 753 master_name, builder_name, master_build_number, step_name,
709 test_name, status=analysis_status.RUNNING 754 test_name, status=analysis_status.RUNNING)
710 )
711 self._CreateAndSaveFlakeSwarmingTask( 755 self._CreateAndSaveFlakeSwarmingTask(
712 master_name, builder_name, build_number, step_name, 756 master_name, builder_name, build_number, step_name,
713 test_name, status=analysis_status.COMPLETED 757 test_name, status=analysis_status.COMPLETED)
714 ) 758
715 analysis = MasterFlakeAnalysis.Get( 759 analysis = MasterFlakeAnalysis.GetVersion(
716 master_name, builder_name, 760 master_name, builder_name, master_build_number, step_name, test_name)
717 master_build_number, step_name, test_name) 761 analysis.data_points = self._GenerateDataPoints(
718 analysis.success_rates = [1.0, 1.0, 1.0, -1] 762 pass_rates=[1.0, 1.0, 1.0, -1], build_numbers=[100, 80, 70, 60])
719 analysis.build_numbers = [100, 80, 70, 60]
720 analysis.put() 763 analysis.put()
721 764
722 pipeline = NextBuildNumberPipeline() 765 pipeline = NextBuildNumberPipeline()
723 pipeline.run( 766 pipeline.run(
724 master_name, builder_name, 767 master_name, builder_name,
725 master_build_number, build_number, step_name, test_name, 768 master_build_number, build_number, step_name, test_name,
726 test_result_future, queue_name, flakiness_algorithm_results_dict) 769 analysis.version_number, test_result_future, queue_name,
770 flakiness_algorithm_results_dict)
727 771
728 analysis = MasterFlakeAnalysis.Get( 772 analysis = MasterFlakeAnalysis.GetVersion(
729 master_name, builder_name, 773 master_name, builder_name, master_build_number, step_name, test_name)
730 master_build_number, step_name, test_name)
731 self.assertEqual(analysis_status.COMPLETED, analysis.status) 774 self.assertEqual(analysis_status.COMPLETED, analysis.status)
732 775
733 def testNextBuildNumberIsSmallerThanLastBuildNumber(self): 776 def testNextBuildNumberIsSmallerThanLastBuildNumber(self):
734 master_name = 'm' 777 master_name = 'm'
735 builder_name = 'b' 778 builder_name = 'b'
736 master_build_number = 100 779 master_build_number = 100
737 build_number = 60 780 build_number = 60
738 step_name = 's' 781 step_name = 's'
739 test_name = 't' 782 test_name = 't'
740 test_result_future = 'trf' 783 test_result_future = 'trf'
741 queue_name = constants.DEFAULT_QUEUE 784 queue_name = constants.DEFAULT_QUEUE
742 flakiness_algorithm_results_dict = { 785 flakiness_algorithm_results_dict = {
743 'flakes_in_a_row': 0, 786 'flakes_in_a_row': 0,
744 'stable_in_a_row': 3, 787 'stable_in_a_row': 3,
745 'stabled_out': False, 788 'stabled_out': False,
746 'flaked_out': False, 789 'flaked_out': False,
747 'last_build_number': 59, 790 'last_build_number': 59,
748 'lower_boundary': None, 791 'lower_boundary': None,
749 'upper_boundary': None, 792 'upper_boundary': None,
750 'lower_boundary_result': None, 793 'lower_boundary_result': None,
751 'sequential_run_index': 0 794 'sequential_run_index': 0
752 } 795 }
753 self._CreateAndSaveMasterFlakeAnalysis( 796 analysis = MasterFlakeAnalysis.Create(
754 master_name, builder_name, master_build_number, step_name, 797 master_name, builder_name, master_build_number, step_name, test_name)
755 test_name, status=analysis_status.RUNNING 798 analysis.data_points = self._GenerateDataPoints(
756 ) 799 pass_rates=[1.0, 1.0, 1.0, 1.0], build_numbers=[100, 80, 70, 60])
800 analysis.status = analysis_status.RUNNING
801 analysis.Save()
802
757 self._CreateAndSaveFlakeSwarmingTask( 803 self._CreateAndSaveFlakeSwarmingTask(
758 master_name, builder_name, build_number, step_name, 804 master_name, builder_name, build_number, step_name,
759 test_name, status=analysis_status.COMPLETED 805 test_name, status=analysis_status.COMPLETED)
760 )
761 analysis = MasterFlakeAnalysis.Get(
762 master_name, builder_name,
763 master_build_number, step_name, test_name)
764 analysis.success_rates = [1.0, 1.0, 1.0, 1.0]
765 analysis.build_numbers = [100, 80, 70, 60]
766 analysis.put()
767 806
768 pipeline = NextBuildNumberPipeline() 807 pipeline = NextBuildNumberPipeline()
769 pipeline.run( 808 pipeline.run(
770 master_name, builder_name, 809 master_name, builder_name,
771 master_build_number, build_number, step_name, test_name, 810 master_build_number, build_number, step_name, test_name,
772 test_result_future, queue_name, flakiness_algorithm_results_dict) 811 analysis.version_number, test_result_future, queue_name,
812 flakiness_algorithm_results_dict)
773 813
774 analysis = MasterFlakeAnalysis.Get( 814 analysis = MasterFlakeAnalysis.GetVersion(
775 master_name, builder_name, 815 master_name, builder_name, master_build_number, step_name, test_name)
776 master_build_number, step_name, test_name)
777 self.assertEqual(analysis_status.COMPLETED, analysis.status) 816 self.assertEqual(analysis_status.COMPLETED, analysis.status)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698