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/waterfall/flake/test/recursive_flake_pipeline_test.py

Issue 2369333002: [Findit] Capture versionized metadata for master_flake_analysis (Closed)
Patch Set: 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
8 from model.flake.master_flake_analysis import MasterFlakeAnalysis 9 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 10 from waterfall.flake import recursive_flake_pipeline
11 from waterfall.flake.recursive_flake_pipeline import get_next_run 11 from waterfall.flake.recursive_flake_pipeline import get_next_run
12 from waterfall.flake.recursive_flake_pipeline import NextBuildNumberPipeline 12 from waterfall.flake.recursive_flake_pipeline import NextBuildNumberPipeline
13 from waterfall.flake.recursive_flake_pipeline import RecursiveFlakePipeline 13 from waterfall.flake.recursive_flake_pipeline import RecursiveFlakePipeline
14 from waterfall.flake.recursive_flake_pipeline import sequential_next_run 14 from waterfall.flake.recursive_flake_pipeline import sequential_next_run
15 from waterfall.test import wf_testcase 15 from waterfall.test import wf_testcase
16 16
17 17
18 class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase): 18 class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
19 app_module = pipeline_handlers._APP 19 app_module = pipeline_handlers._APP
20 20
21 def _CreateAndSaveMasterFlakeAnalysis( 21 def _CreateAndSaveMasterFlakeAnalysis(
22 self, master_name, builder_name, build_number, 22 self, master_name, builder_name, build_number,
23 step_name, test_name, status): 23 step_name, test_name, status):
24 analysis = MasterFlakeAnalysis.Create( 24 analysis = MasterFlakeAnalysis.Create(
25 master_name, builder_name, build_number, step_name, test_name) 25 master_name, builder_name, build_number, step_name, test_name)
26 analysis.status = status 26 analysis.status = status
27 analysis.put() 27 analysis.Save()
28 28
29 def _CreateAndSaveFlakeSwarmingTask( 29 def _CreateAndSaveFlakeSwarmingTask(
30 self, master_name, builder_name, build_number, 30 self, master_name, builder_name, build_number,
31 step_name, test_name, status): 31 step_name, test_name, status):
32 flake_swarming_task = FlakeSwarmingTask.Create( 32 flake_swarming_task = FlakeSwarmingTask.Create(
33 master_name, builder_name, build_number, step_name, test_name) 33 master_name, builder_name, build_number, step_name, test_name)
34 flake_swarming_task.status = status 34 flake_swarming_task.status = status
35 flake_swarming_task.put() 35 flake_swarming_task.put()
36 36
37 def testRecursiveFlakePipeline(self): 37 def testRecursiveFlakePipeline(self):
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 119
120 } 120 }
121 self._CreateAndSaveMasterFlakeAnalysis( 121 self._CreateAndSaveMasterFlakeAnalysis(
122 master_name, builder_name, build_number, step_name, 122 master_name, builder_name, build_number, step_name,
123 test_name, status=analysis_status.PENDING 123 test_name, status=analysis_status.PENDING
124 ) 124 )
125 self._CreateAndSaveFlakeSwarmingTask( 125 self._CreateAndSaveFlakeSwarmingTask(
126 master_name, builder_name, build_number, step_name, 126 master_name, builder_name, build_number, step_name,
127 test_name, status=analysis_status.COMPLETED 127 test_name, status=analysis_status.COMPLETED
128 ) 128 )
129 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 129 analysis = MasterFlakeAnalysis.GetVersion(
130 build_number, step_name, test_name) 130 master_name, builder_name, build_number, step_name, test_name)
131 analysis.success_rates.append(.08) 131 analysis.pass_rates.append(.08)
132 analysis.build_numbers.append(100) 132 analysis.build_numbers.append(100)
133 analysis.put() 133 analysis.put()
134 134
135 NextBuildNumberPipeline.run( 135 NextBuildNumberPipeline.run(
136 NextBuildNumberPipeline(), master_name, builder_name, 136 NextBuildNumberPipeline(), master_name, builder_name,
137 master_build_number, build_number, step_name, test_name, 137 master_build_number, build_number, step_name, test_name,
138 test_result_future, queue_name, flakiness_algorithm_results_dict) 138 test_result_future, queue_name, flakiness_algorithm_results_dict)
139 self.assertEquals(flakiness_algorithm_results_dict['flakes_in_a_row'], 1) 139 self.assertEquals(flakiness_algorithm_results_dict['flakes_in_a_row'], 1)
140 140
141 def testNextBuildPipelineForNewRecursionFirstStable(self): 141 def testNextBuildPipelineForNewRecursionFirstStable(self):
(...skipping 18 matching lines...) Expand all
160 160
161 } 161 }
162 self._CreateAndSaveMasterFlakeAnalysis( 162 self._CreateAndSaveMasterFlakeAnalysis(
163 master_name, builder_name, build_number, step_name, 163 master_name, builder_name, build_number, step_name,
164 test_name, status=analysis_status.PENDING 164 test_name, status=analysis_status.PENDING
165 ) 165 )
166 self._CreateAndSaveFlakeSwarmingTask( 166 self._CreateAndSaveFlakeSwarmingTask(
167 master_name, builder_name, build_number, step_name, 167 master_name, builder_name, build_number, step_name,
168 test_name, status=analysis_status.COMPLETED 168 test_name, status=analysis_status.COMPLETED
169 ) 169 )
170 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 170 analysis = MasterFlakeAnalysis.GetVersion(
171 build_number, step_name, test_name) 171 master_name, builder_name, build_number, step_name, test_name)
172 analysis.success_rates.append(0) 172 analysis.pass_rates.append(0)
173 analysis.build_numbers.append(100) 173 analysis.build_numbers.append(100)
174 analysis.put() 174 analysis.put()
175 175
176 NextBuildNumberPipeline.run( 176 NextBuildNumberPipeline.run(
177 NextBuildNumberPipeline(), master_name, builder_name, 177 NextBuildNumberPipeline(), master_name, builder_name,
178 master_build_number, build_number, step_name, 178 master_build_number, build_number, step_name,
179 test_name, test_result_future, queue_name, 179 test_name, test_result_future, queue_name,
180 flakiness_algorithm_results_dict) 180 flakiness_algorithm_results_dict)
181 self.assertEquals(flakiness_algorithm_results_dict['stable_in_a_row'], 1) 181 self.assertEquals(flakiness_algorithm_results_dict['stable_in_a_row'], 1)
182 182
(...skipping 19 matching lines...) Expand all
202 202
203 } 203 }
204 self._CreateAndSaveMasterFlakeAnalysis( 204 self._CreateAndSaveMasterFlakeAnalysis(
205 master_name, builder_name, build_number, step_name, 205 master_name, builder_name, build_number, step_name,
206 test_name, status=analysis_status.PENDING 206 test_name, status=analysis_status.PENDING
207 ) 207 )
208 self._CreateAndSaveFlakeSwarmingTask( 208 self._CreateAndSaveFlakeSwarmingTask(
209 master_name, builder_name, build_number, step_name, 209 master_name, builder_name, build_number, step_name,
210 test_name, status=analysis_status.COMPLETED 210 test_name, status=analysis_status.COMPLETED
211 ) 211 )
212 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 212 analysis = MasterFlakeAnalysis.GetVersion(
213 build_number, step_name, test_name) 213 master_name, builder_name, build_number, step_name, test_name)
214 analysis.success_rates.append(0) 214 analysis.pass_rates.append(0)
215 analysis.build_numbers.append(100) 215 analysis.build_numbers.append(100)
216 analysis.put() 216 analysis.put()
217 217
218 NextBuildNumberPipeline.run( 218 NextBuildNumberPipeline.run(
219 NextBuildNumberPipeline(), master_name, builder_name, 219 NextBuildNumberPipeline(), master_name, builder_name,
220 master_build_number, build_number, step_name, 220 master_build_number, build_number, step_name,
221 test_name, test_result_future, queue_name, 221 test_name, test_result_future, queue_name,
222 flakiness_algorithm_results_dict) 222 flakiness_algorithm_results_dict)
223 self.assertEquals(flakiness_algorithm_results_dict['stabled_out'], True) 223 self.assertEquals(flakiness_algorithm_results_dict['stabled_out'], True)
224 224
(...skipping 19 matching lines...) Expand all
244 244
245 } 245 }
246 self._CreateAndSaveMasterFlakeAnalysis( 246 self._CreateAndSaveMasterFlakeAnalysis(
247 master_name, builder_name, build_number, step_name, 247 master_name, builder_name, build_number, step_name,
248 test_name, status=analysis_status.PENDING 248 test_name, status=analysis_status.PENDING
249 ) 249 )
250 self._CreateAndSaveFlakeSwarmingTask( 250 self._CreateAndSaveFlakeSwarmingTask(
251 master_name, builder_name, build_number, step_name, 251 master_name, builder_name, build_number, step_name,
252 test_name, status=analysis_status.COMPLETED 252 test_name, status=analysis_status.COMPLETED
253 ) 253 )
254 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 254 analysis = MasterFlakeAnalysis.GetVersion(
255 build_number, step_name, test_name) 255 master_name, builder_name, build_number, step_name, test_name)
256 analysis.success_rates.append(.50) 256 analysis.pass_rates.append(.50)
257 analysis.build_numbers.append(100) 257 analysis.build_numbers.append(100)
258 analysis.put() 258 analysis.put()
259 259
260 NextBuildNumberPipeline.run( 260 NextBuildNumberPipeline.run(
261 NextBuildNumberPipeline(), master_name, builder_name, 261 NextBuildNumberPipeline(), master_name, builder_name,
262 master_build_number, build_number, step_name, 262 master_build_number, build_number, step_name,
263 test_name, test_result_future, queue_name, 263 test_name, test_result_future, queue_name,
264 flakiness_algorithm_results_dict) 264 flakiness_algorithm_results_dict)
265 self.assertEquals(flakiness_algorithm_results_dict['flaked_out'], True) 265 self.assertEquals(flakiness_algorithm_results_dict['flaked_out'], True)
266 266
267
268 def testNextBuildPipelineForNewRecursionLessThanLastBuildNumber(self): 267 def testNextBuildPipelineForNewRecursionLessThanLastBuildNumber(self):
269 master_name = 'm' 268 master_name = 'm'
270 builder_name = 'b' 269 builder_name = 'b'
271 master_build_number = 100 270 master_build_number = 100
272 build_number = 100 271 build_number = 100
273 step_name = 's' 272 step_name = 's'
274 test_name = 't' 273 test_name = 't'
275 test_result_future = 'trf' 274 test_result_future = 'trf'
276 queue_name = constants.DEFAULT_QUEUE 275 queue_name = constants.DEFAULT_QUEUE
277 flakiness_algorithm_results_dict = { 276 flakiness_algorithm_results_dict = {
278 'flakes_in_a_row': 0, 277 'flakes_in_a_row': 0,
279 'stable_in_a_row': 0, 278 'stable_in_a_row': 0,
280 'stabled_out': False, 279 'stabled_out': False,
281 'flaked_out': False, 280 'flaked_out': False,
282 'last_build_number': 200, 281 'last_build_number': 200,
283 'lower_boundary': None, 282 'lower_boundary': None,
284 'upper_boundary': None, 283 'upper_boundary': None,
285 'lower_boundary_result': None, 284 'lower_boundary_result': None,
286 'sequential_run_index': 0 285 'sequential_run_index': 0
287 } 286 }
288 self._CreateAndSaveMasterFlakeAnalysis( 287 self._CreateAndSaveMasterFlakeAnalysis(
289 master_name, builder_name, build_number, step_name, 288 master_name, builder_name, build_number, step_name,
290 test_name, status=analysis_status.PENDING 289 test_name, status=analysis_status.PENDING
291 ) 290 )
292 self._CreateAndSaveFlakeSwarmingTask( 291 self._CreateAndSaveFlakeSwarmingTask(
293 master_name, builder_name, build_number, step_name, 292 master_name, builder_name, build_number, step_name,
294 test_name, status=analysis_status.COMPLETED 293 test_name, status=analysis_status.COMPLETED
295 ) 294 )
296 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 295 analysis = MasterFlakeAnalysis.GetVersion(
297 build_number, step_name, test_name) 296 master_name, builder_name, build_number, step_name, test_name)
298 analysis.success_rates.append(.50) 297 analysis.pass_rates.append(.50)
299 analysis.build_numbers.append(100) 298 analysis.build_numbers.append(100)
300 analysis.put() 299 analysis.put()
301 300
302 queue_name = {'x': False} 301 queue_name = {'x': False}
303 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument 302 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
304 queue_name['x'] = True # pragma: no cover 303 queue_name['x'] = True # pragma: no cover
305 304
306 self.mock( 305 self.mock(
307 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) 306 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
308 NextBuildNumberPipeline.run( 307 NextBuildNumberPipeline.run(
(...skipping 24 matching lines...) Expand all
333 332
334 } 333 }
335 self._CreateAndSaveMasterFlakeAnalysis( 334 self._CreateAndSaveMasterFlakeAnalysis(
336 master_name, builder_name, build_number, step_name, 335 master_name, builder_name, build_number, step_name,
337 test_name, status=analysis_status.PENDING 336 test_name, status=analysis_status.PENDING
338 ) 337 )
339 self._CreateAndSaveFlakeSwarmingTask( 338 self._CreateAndSaveFlakeSwarmingTask(
340 master_name, builder_name, build_number, step_name, 339 master_name, builder_name, build_number, step_name,
341 test_name, status=analysis_status.ERROR 340 test_name, status=analysis_status.ERROR
342 ) 341 )
343 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 342 analysis = MasterFlakeAnalysis.GetVersion(
344 build_number, step_name, test_name) 343 master_name, builder_name, build_number, step_name, test_name)
345 analysis.success_rates.append(.50) 344 analysis.pass_rates.append(.50)
346 analysis.build_numbers.append(100) 345 analysis.build_numbers.append(100)
347 analysis.put() 346 analysis.put()
348 347
349 queue_name = {'x': False} 348 queue_name = {'x': False}
350 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument 349 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
351 queue_name['x'] = True # pragma: no cover 350 queue_name['x'] = True # pragma: no cover
352 351
353 self.mock( 352 self.mock(
354 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) 353 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
355 NextBuildNumberPipeline.run( 354 NextBuildNumberPipeline.run(
(...skipping 23 matching lines...) Expand all
379 'sequential_run_index': 0 378 'sequential_run_index': 0
380 } 379 }
381 self._CreateAndSaveMasterFlakeAnalysis( 380 self._CreateAndSaveMasterFlakeAnalysis(
382 master_name, builder_name, build_number, step_name, 381 master_name, builder_name, build_number, step_name,
383 test_name, status=analysis_status.PENDING 382 test_name, status=analysis_status.PENDING
384 ) 383 )
385 self._CreateAndSaveFlakeSwarmingTask( 384 self._CreateAndSaveFlakeSwarmingTask(
386 master_name, builder_name, build_number, step_name, 385 master_name, builder_name, build_number, step_name,
387 test_name, status=analysis_status.COMPLETED 386 test_name, status=analysis_status.COMPLETED
388 ) 387 )
389 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 388 analysis = MasterFlakeAnalysis.GetVersion(
390 build_number, step_name, test_name) 389 master_name, builder_name, build_number, step_name, test_name)
391 analysis.success_rates.append(.50) 390 analysis.pass_rates.append(.50)
392 analysis.build_numbers.append(100) 391 analysis.build_numbers.append(100)
393 analysis.put() 392 analysis.put()
394 393
395 queue_name = {'x': False} 394 queue_name = {'x': False}
396 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument 395 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
397 queue_name['x'] = True # pragma: no cover 396 queue_name['x'] = True # pragma: no cover
398 397
399 self.mock( 398 self.mock(
400 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) 399 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
401 NextBuildNumberPipeline.run( 400 NextBuildNumberPipeline.run(
402 NextBuildNumberPipeline(), master_name, builder_name, 401 NextBuildNumberPipeline(), master_name, builder_name,
403 master_build_number, build_number, step_name, test_name, 402 master_build_number, build_number, step_name, test_name,
404 test_result_future, queue_name, flakiness_algorithm_results_dict) 403 test_result_future, queue_name, flakiness_algorithm_results_dict)
405 self.assertTrue(queue_name['x']) 404 self.assertTrue(queue_name['x'])
406 405
407 def testGetNextRunSetStableLowerBoundary(self): 406 def testGetNextRunSetStableLowerBoundary(self):
408 master_name = 'm' 407 master_name = 'm'
409 builder_name = 'b' 408 builder_name = 'b'
410 build_number = 100 409 build_number = 100
411 step_name = 's' 410 step_name = 's'
412 test_name = 't' 411 test_name = 't'
413 self._CreateAndSaveMasterFlakeAnalysis( 412 self._CreateAndSaveMasterFlakeAnalysis(
414 master_name, builder_name, build_number, step_name, 413 master_name, builder_name, build_number, step_name,
415 test_name, status=analysis_status.PENDING 414 test_name, status=analysis_status.PENDING
416 ) 415 )
417 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 416 analysis = MasterFlakeAnalysis.GetVersion(
418 build_number, step_name, test_name) 417 master_name, builder_name, build_number, step_name, test_name)
419 analysis.success_rates.append(1) 418 analysis.pass_rates.append(1)
420 analysis.build_numbers.append(100) 419 analysis.build_numbers.append(100)
421 analysis.put() 420 analysis.put()
422 421
423 flakiness_algorithm_results_dict = { 422 flakiness_algorithm_results_dict = {
424 'flakes_in_a_row': 4, 423 'flakes_in_a_row': 4,
425 'stable_in_a_row': 0, 424 'stable_in_a_row': 0,
426 'stabled_out': False, 425 'stabled_out': False,
427 'flaked_out': True, 426 'flaked_out': True,
428 'last_build_number': 0, 427 'last_build_number': 0,
429 'lower_boundary': None, 428 'lower_boundary': None,
(...skipping 10 matching lines...) Expand all
440 def testGetNextRunSetFlakeLowerBoundary(self): 439 def testGetNextRunSetFlakeLowerBoundary(self):
441 master_name = 'm' 440 master_name = 'm'
442 builder_name = 'b' 441 builder_name = 'b'
443 build_number = 100 442 build_number = 100
444 step_name = 's' 443 step_name = 's'
445 test_name = 't' 444 test_name = 't'
446 self._CreateAndSaveMasterFlakeAnalysis( 445 self._CreateAndSaveMasterFlakeAnalysis(
447 master_name, builder_name, build_number, step_name, 446 master_name, builder_name, build_number, step_name,
448 test_name, status=analysis_status.PENDING 447 test_name, status=analysis_status.PENDING
449 ) 448 )
450 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 449 analysis = MasterFlakeAnalysis.GetVersion(
451 build_number, step_name, test_name) 450 master_name, builder_name, build_number, step_name, test_name)
452 analysis.success_rates.append(.5) 451 analysis.pass_rates.append(.5)
453 analysis.build_numbers.append(100) 452 analysis.build_numbers.append(100)
454 analysis.put() 453 analysis.put()
455 454
456 flakiness_algorithm_results_dict = { 455 flakiness_algorithm_results_dict = {
457 'flakes_in_a_row': 0, 456 'flakes_in_a_row': 0,
458 'stable_in_a_row': 0, 457 'stable_in_a_row': 0,
459 'stabled_out': True, 458 'stabled_out': True,
460 'flaked_out': False, 459 'flaked_out': False,
461 'last_build_number': 0, 460 'last_build_number': 0,
462 'lower_boundary': None, 461 'lower_boundary': None,
(...skipping 10 matching lines...) Expand all
473 def testSequentialNextRunFirstTime(self): 472 def testSequentialNextRunFirstTime(self):
474 master_name = 'm' 473 master_name = 'm'
475 builder_name = 'b' 474 builder_name = 'b'
476 build_number = 100 475 build_number = 100
477 step_name = 's' 476 step_name = 's'
478 test_name = 't' 477 test_name = 't'
479 self._CreateAndSaveMasterFlakeAnalysis( 478 self._CreateAndSaveMasterFlakeAnalysis(
480 master_name, builder_name, build_number, step_name, 479 master_name, builder_name, build_number, step_name,
481 test_name, status=analysis_status.PENDING 480 test_name, status=analysis_status.PENDING
482 ) 481 )
483 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 482 analysis = MasterFlakeAnalysis.GetVersion(
484 build_number, step_name, test_name) 483 master_name, builder_name, build_number, step_name, test_name)
485 analysis.success_rates.append(.5) 484 analysis.pass_rates.append(.5)
486 analysis.build_numbers.append(100) 485 analysis.build_numbers.append(100)
487 analysis.put() 486 analysis.put()
488 487
489 flakiness_algorithm_results_dict = { 488 flakiness_algorithm_results_dict = {
490 'flakes_in_a_row': 0, 489 'flakes_in_a_row': 0,
491 'stable_in_a_row': 0, 490 'stable_in_a_row': 0,
492 'stabled_out': True, 491 'stabled_out': True,
493 'flaked_out': True, 492 'flaked_out': True,
494 'last_build_number': 0, 493 'last_build_number': 0,
495 'lower_boundary': 100, 494 'lower_boundary': 100,
496 'upper_boundary': 110, 495 'upper_boundary': 110,
497 'lower_boundary_result': 'STABLE', 496 'lower_boundary_result': 'STABLE',
498 'sequential_run_index': 0 497 'sequential_run_index': 0
499 } 498 }
500 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) 499 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict)
501 self.assertEqual(next_run, 101) 500 self.assertEqual(next_run, 101)
502 501
503 def testSequentialFoundBorderFlake(self): 502 def testSequentialFoundBorderFlake(self):
504 master_name = 'm' 503 master_name = 'm'
505 builder_name = 'b' 504 builder_name = 'b'
506 build_number = 100 505 build_number = 100
507 step_name = 's' 506 step_name = 's'
508 test_name = 't' 507 test_name = 't'
509 self._CreateAndSaveMasterFlakeAnalysis( 508 self._CreateAndSaveMasterFlakeAnalysis(
510 master_name, builder_name, build_number, step_name, 509 master_name, builder_name, build_number, step_name,
511 test_name, status=analysis_status.PENDING 510 test_name, status=analysis_status.PENDING
512 ) 511 )
513 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 512 analysis = MasterFlakeAnalysis.GetVersion(
514 build_number, step_name, test_name) 513 master_name, builder_name, build_number, step_name, test_name)
515 analysis.success_rates.append(.5) 514 analysis.pass_rates.append(.5)
516 analysis.build_numbers.append(100) 515 analysis.build_numbers.append(100)
517 analysis.put() 516 analysis.put()
518 517
519 flakiness_algorithm_results_dict = { 518 flakiness_algorithm_results_dict = {
520 'flakes_in_a_row': 0, 519 'flakes_in_a_row': 0,
521 'stable_in_a_row': 0, 520 'stable_in_a_row': 0,
522 'stabled_out': True, 521 'stabled_out': True,
523 'flaked_out': True, 522 'flaked_out': True,
524 'last_build_number': 0, 523 'last_build_number': 0,
525 'lower_boundary': 100, 524 'lower_boundary': 100,
526 'upper_boundary': 110, 525 'upper_boundary': 110,
527 'lower_boundary_result': 'STABLE', 526 'lower_boundary_result': 'STABLE',
528 'sequential_run_index': 1 527 'sequential_run_index': 1
529 } 528 }
530 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) 529 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict)
531 self.assertEqual(next_run, False) 530 self.assertEqual(next_run, False)
532 self.assertEqual(analysis.suspected_flake_build_number, 101) 531 self.assertEqual(analysis.suspected_flake_build_number, 101)
533 532
534 def testSequentialFoundBorderStable(self): 533 def testSequentialFoundBorderStable(self):
535 master_name = 'm' 534 master_name = 'm'
536 builder_name = 'b' 535 builder_name = 'b'
537 build_number = 100 536 build_number = 100
538 step_name = 's' 537 step_name = 's'
539 test_name = 't' 538 test_name = 't'
540 self._CreateAndSaveMasterFlakeAnalysis( 539 self._CreateAndSaveMasterFlakeAnalysis(
541 master_name, builder_name, build_number, step_name, 540 master_name, builder_name, build_number, step_name,
542 test_name, status=analysis_status.PENDING 541 test_name, status=analysis_status.PENDING
543 ) 542 )
544 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 543 analysis = MasterFlakeAnalysis.GetVersion(
545 build_number, step_name, test_name) 544 master_name, builder_name, build_number, step_name, test_name)
546 analysis.success_rates.append(1) 545 analysis.pass_rates.append(1)
547 analysis.build_numbers.append(100) 546 analysis.build_numbers.append(100)
548 analysis.put() 547 analysis.put()
549 548
550 flakiness_algorithm_results_dict = { 549 flakiness_algorithm_results_dict = {
551 'flakes_in_a_row': 0, 550 'flakes_in_a_row': 0,
552 'stable_in_a_row': 0, 551 'stable_in_a_row': 0,
553 'stabled_out': True, 552 'stabled_out': True,
554 'flaked_out': True, 553 'flaked_out': True,
555 'last_build_number': 0, 554 'last_build_number': 0,
556 'lower_boundary': 100, 555 'lower_boundary': 100,
557 'upper_boundary': 110, 556 'upper_boundary': 110,
558 'lower_boundary_result': 'FLAKE', 557 'lower_boundary_result': 'FLAKE',
559 'sequential_run_index': 1 558 'sequential_run_index': 1
560 } 559 }
561 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) 560 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict)
562 self.assertEqual(next_run, False) 561 self.assertEqual(next_run, False)
563 self.assertEqual(analysis.suspected_flake_build_number, 101) 562 self.assertEqual(analysis.suspected_flake_build_number, 101)
564 563
565
566 def testSequentialDidntFindBorderStable(self): 564 def testSequentialDidntFindBorderStable(self):
567 master_name = 'm' 565 master_name = 'm'
568 builder_name = 'b' 566 builder_name = 'b'
569 build_number = 100 567 build_number = 100
570 step_name = 's' 568 step_name = 's'
571 test_name = 't' 569 test_name = 't'
572 self._CreateAndSaveMasterFlakeAnalysis( 570 self._CreateAndSaveMasterFlakeAnalysis(
573 master_name, builder_name, build_number, step_name, 571 master_name, builder_name, build_number, step_name,
574 test_name, status=analysis_status.PENDING 572 test_name, status=analysis_status.PENDING
575 ) 573 )
576 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 574 analysis = MasterFlakeAnalysis.GetVersion(
577 build_number, step_name, test_name) 575 master_name, builder_name, build_number, step_name, test_name)
578 analysis.success_rates.append(1) 576 analysis.pass_rates.append(1)
579 analysis.build_numbers.append(100) 577 analysis.build_numbers.append(100)
580 analysis.put() 578 analysis.put()
581 579
582 flakiness_algorithm_results_dict = { 580 flakiness_algorithm_results_dict = {
583 'flakes_in_a_row': 0, 581 'flakes_in_a_row': 0,
584 'stable_in_a_row': 0, 582 'stable_in_a_row': 0,
585 'stabled_out': True, 583 'stabled_out': True,
586 'flaked_out': True, 584 'flaked_out': True,
587 'last_build_number': 0, 585 'last_build_number': 0,
588 'lower_boundary': 100, 586 'lower_boundary': 100,
(...skipping 27 matching lines...) Expand all
616 614
617 } 615 }
618 self._CreateAndSaveMasterFlakeAnalysis( 616 self._CreateAndSaveMasterFlakeAnalysis(
619 master_name, builder_name, build_number, step_name, 617 master_name, builder_name, build_number, step_name,
620 test_name, status=analysis_status.PENDING 618 test_name, status=analysis_status.PENDING
621 ) 619 )
622 self._CreateAndSaveFlakeSwarmingTask( 620 self._CreateAndSaveFlakeSwarmingTask(
623 master_name, builder_name, build_number, step_name, 621 master_name, builder_name, build_number, step_name,
624 test_name, status=analysis_status.COMPLETED 622 test_name, status=analysis_status.COMPLETED
625 ) 623 )
626 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, 624 analysis = MasterFlakeAnalysis.GetVersion(
627 build_number, step_name, test_name) 625 master_name, builder_name, build_number, step_name, test_name)
628 analysis.success_rates.append(1) 626 analysis.pass_rates.append(1)
629 analysis.build_numbers.append(50) 627 analysis.build_numbers.append(50)
630 analysis.put() 628 analysis.put()
631 629
632 NextBuildNumberPipeline.run( 630 NextBuildNumberPipeline.run(
633 NextBuildNumberPipeline(), master_name, builder_name, 631 NextBuildNumberPipeline(), master_name, builder_name,
634 master_build_number, build_number, step_name, test_name, 632 master_build_number, build_number, step_name, test_name,
635 test_result_future, queue_name, flakiness_algorithm_results_dict) 633 test_result_future, queue_name, flakiness_algorithm_results_dict)
636 self.assertEquals( 634 self.assertEquals(
637 flakiness_algorithm_results_dict['sequential_run_index'], 1) 635 flakiness_algorithm_results_dict['sequential_run_index'], 1)
638 636
639 def testNextBuildWhenTestNotExistingAfterStableInARow(self): 637 def testNextBuildWhenTestNotExistingAfterStableInARow(self):
640 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't') 638 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't')
641 master.success_rates = [0.8, 1.0, 1.0, -1] 639 master.pass_rates = [0.8, 1.0, 1.0, -1]
642 master.build_numbers = [100, 80, 70, 60] 640 master.build_numbers = [100, 80, 70, 60]
643 flakiness_algorithm_results_dict = { 641 flakiness_algorithm_results_dict = {
644 'flakes_in_a_row': 0, 642 'flakes_in_a_row': 0,
645 'stable_in_a_row': 2, 643 'stable_in_a_row': 2,
646 'stabled_out': False, 644 'stabled_out': False,
647 'flaked_out': False, 645 'flaked_out': False,
648 'last_build_number': 0, 646 'last_build_number': 0,
649 'lower_boundary': None, 647 'lower_boundary': None,
650 'upper_boundary': None, 648 'upper_boundary': None,
651 'lower_boundary_result': None, 649 'lower_boundary_result': None,
652 'sequential_run_index': 0, 650 'sequential_run_index': 0,
653 } 651 }
654 652
655 next_run = get_next_run(master, flakiness_algorithm_results_dict) 653 next_run = get_next_run(master, flakiness_algorithm_results_dict)
656 self.assertEqual(81, next_run) 654 self.assertEqual(81, next_run)
657 self.assertTrue(flakiness_algorithm_results_dict['stabled_out']) 655 self.assertTrue(flakiness_algorithm_results_dict['stabled_out'])
658 self.assertTrue(flakiness_algorithm_results_dict['flaked_out']) 656 self.assertTrue(flakiness_algorithm_results_dict['flaked_out'])
659 self.assertEqual(80, flakiness_algorithm_results_dict['lower_boundary']) 657 self.assertEqual(80, flakiness_algorithm_results_dict['lower_boundary'])
660 self.assertEqual('STABLE', 658 self.assertEqual('STABLE',
661 flakiness_algorithm_results_dict['lower_boundary_result']) 659 flakiness_algorithm_results_dict['lower_boundary_result'])
662 660
663 def testNextBuildWhenTestNotExistingAfterFlakeInARow(self): 661 def testNextBuildWhenTestNotExistingAfterFlakeInARow(self):
664 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't') 662 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't')
665 master.success_rates = [0.8, 0.7, 0.75, -1] 663 master.pass_rates = [0.8, 0.7, 0.75, -1]
666 master.build_numbers = [100, 80, 70, 60] 664 master.build_numbers = [100, 80, 70, 60]
667 flakiness_algorithm_results_dict = { 665 flakiness_algorithm_results_dict = {
668 'flakes_in_a_row': 3, 666 'flakes_in_a_row': 3,
669 'stable_in_a_row': 0, 667 'stable_in_a_row': 0,
670 'stabled_out': False, 668 'stabled_out': False,
671 'flaked_out': False, 669 'flaked_out': False,
672 'last_build_number': 0, 670 'last_build_number': 0,
673 'lower_boundary': None, 671 'lower_boundary': None,
674 'upper_boundary': None, 672 'upper_boundary': None,
675 'lower_boundary_result': None, 673 'lower_boundary_result': None,
(...skipping 29 matching lines...) Expand all
705 'sequential_run_index': 0 703 'sequential_run_index': 0
706 } 704 }
707 self._CreateAndSaveMasterFlakeAnalysis( 705 self._CreateAndSaveMasterFlakeAnalysis(
708 master_name, builder_name, master_build_number, step_name, 706 master_name, builder_name, master_build_number, step_name,
709 test_name, status=analysis_status.RUNNING 707 test_name, status=analysis_status.RUNNING
710 ) 708 )
711 self._CreateAndSaveFlakeSwarmingTask( 709 self._CreateAndSaveFlakeSwarmingTask(
712 master_name, builder_name, build_number, step_name, 710 master_name, builder_name, build_number, step_name,
713 test_name, status=analysis_status.COMPLETED 711 test_name, status=analysis_status.COMPLETED
714 ) 712 )
715 analysis = MasterFlakeAnalysis.Get( 713 analysis = MasterFlakeAnalysis.GetVersion(
716 master_name, builder_name, 714 master_name, builder_name, master_build_number, step_name, test_name)
717 master_build_number, step_name, test_name) 715 analysis.pass_rates = [1.0, 1.0, 1.0, -1]
718 analysis.success_rates = [1.0, 1.0, 1.0, -1]
719 analysis.build_numbers = [100, 80, 70, 60] 716 analysis.build_numbers = [100, 80, 70, 60]
720 analysis.put() 717 analysis.put()
721 718
722 pipeline = NextBuildNumberPipeline() 719 pipeline = NextBuildNumberPipeline()
723 pipeline.run( 720 pipeline.run(
724 master_name, builder_name, 721 master_name, builder_name,
725 master_build_number, build_number, step_name, test_name, 722 master_build_number, build_number, step_name, test_name,
726 test_result_future, queue_name, flakiness_algorithm_results_dict) 723 test_result_future, queue_name, flakiness_algorithm_results_dict)
727 724
728 analysis = MasterFlakeAnalysis.Get( 725 analysis = MasterFlakeAnalysis.GetVersion(
729 master_name, builder_name, 726 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) 727 self.assertEqual(analysis_status.COMPLETED, analysis.status)
732 728
733 def testNextBuildNumberIsSmallerThanLastBuildNumber(self): 729 def testNextBuildNumberIsSmallerThanLastBuildNumber(self):
734 master_name = 'm' 730 master_name = 'm'
735 builder_name = 'b' 731 builder_name = 'b'
736 master_build_number = 100 732 master_build_number = 100
737 build_number = 60 733 build_number = 60
738 step_name = 's' 734 step_name = 's'
739 test_name = 't' 735 test_name = 't'
740 test_result_future = 'trf' 736 test_result_future = 'trf'
(...skipping 10 matching lines...) Expand all
751 'sequential_run_index': 0 747 'sequential_run_index': 0
752 } 748 }
753 self._CreateAndSaveMasterFlakeAnalysis( 749 self._CreateAndSaveMasterFlakeAnalysis(
754 master_name, builder_name, master_build_number, step_name, 750 master_name, builder_name, master_build_number, step_name,
755 test_name, status=analysis_status.RUNNING 751 test_name, status=analysis_status.RUNNING
756 ) 752 )
757 self._CreateAndSaveFlakeSwarmingTask( 753 self._CreateAndSaveFlakeSwarmingTask(
758 master_name, builder_name, build_number, step_name, 754 master_name, builder_name, build_number, step_name,
759 test_name, status=analysis_status.COMPLETED 755 test_name, status=analysis_status.COMPLETED
760 ) 756 )
761 analysis = MasterFlakeAnalysis.Get( 757 analysis = MasterFlakeAnalysis.GetVersion(
762 master_name, builder_name, 758 master_name, builder_name, master_build_number, step_name, test_name)
763 master_build_number, step_name, test_name) 759 analysis.pass_rates = [1.0, 1.0, 1.0, 1.0]
764 analysis.success_rates = [1.0, 1.0, 1.0, 1.0]
765 analysis.build_numbers = [100, 80, 70, 60] 760 analysis.build_numbers = [100, 80, 70, 60]
766 analysis.put() 761 analysis.put()
767 762
768 pipeline = NextBuildNumberPipeline() 763 pipeline = NextBuildNumberPipeline()
769 pipeline.run( 764 pipeline.run(
770 master_name, builder_name, 765 master_name, builder_name,
771 master_build_number, build_number, step_name, test_name, 766 master_build_number, build_number, step_name, test_name,
772 test_result_future, queue_name, flakiness_algorithm_results_dict) 767 test_result_future, queue_name, flakiness_algorithm_results_dict)
773 768
774 analysis = MasterFlakeAnalysis.Get( 769 analysis = MasterFlakeAnalysis.GetVersion(
775 master_name, builder_name, 770 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) 771 self.assertEqual(analysis_status.COMPLETED, analysis.status)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698