| OLD | NEW |
| 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.master_flake_analysis import MasterFlakeAnalysis | 8 from model.flake.master_flake_analysis import MasterFlakeAnalysis |
| 9 from model.flake.flake_swarming_task import FlakeSwarmingTask | 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 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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.Get(master_name, builder_name, |
| 130 build_number, step_name, test_name) | 130 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 20 matching lines...) Expand all Loading... |
| 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.Get(master_name, builder_name, |
| 171 build_number, step_name, test_name) | 171 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 21 matching lines...) Expand all Loading... |
| 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.Get(master_name, builder_name, |
| 213 build_number, step_name, test_name) | 213 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 21 matching lines...) Expand all Loading... |
| 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.Get(master_name, builder_name, |
| 255 build_number, step_name, test_name) | 255 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 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 288 self._CreateAndSaveMasterFlakeAnalysis( | 288 self._CreateAndSaveMasterFlakeAnalysis( |
| 289 master_name, builder_name, build_number, step_name, | 289 master_name, builder_name, build_number, step_name, |
| 290 test_name, status=analysis_status.PENDING | 290 test_name, status=analysis_status.PENDING |
| 291 ) | 291 ) |
| 292 self._CreateAndSaveFlakeSwarmingTask( | 292 self._CreateAndSaveFlakeSwarmingTask( |
| 293 master_name, builder_name, build_number, step_name, | 293 master_name, builder_name, build_number, step_name, |
| 294 test_name, status=analysis_status.COMPLETED | 294 test_name, status=analysis_status.COMPLETED |
| 295 ) | 295 ) |
| 296 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 296 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 297 build_number, step_name, test_name) | 297 build_number, step_name, test_name) |
| 298 analysis.success_rates.append(.50) | 298 analysis.pass_rates.append(.50) |
| 299 analysis.build_numbers.append(100) | 299 analysis.build_numbers.append(100) |
| 300 analysis.put() | 300 analysis.put() |
| 301 | 301 |
| 302 queue_name = {'x': False} | 302 queue_name = {'x': False} |
| 303 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument | 303 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument |
| 304 queue_name['x'] = True # pragma: no cover | 304 queue_name['x'] = True # pragma: no cover |
| 305 | 305 |
| 306 self.mock( | 306 self.mock( |
| 307 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) | 307 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) |
| 308 NextBuildNumberPipeline.run( | 308 NextBuildNumberPipeline.run( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 335 self._CreateAndSaveMasterFlakeAnalysis( | 335 self._CreateAndSaveMasterFlakeAnalysis( |
| 336 master_name, builder_name, build_number, step_name, | 336 master_name, builder_name, build_number, step_name, |
| 337 test_name, status=analysis_status.PENDING | 337 test_name, status=analysis_status.PENDING |
| 338 ) | 338 ) |
| 339 self._CreateAndSaveFlakeSwarmingTask( | 339 self._CreateAndSaveFlakeSwarmingTask( |
| 340 master_name, builder_name, build_number, step_name, | 340 master_name, builder_name, build_number, step_name, |
| 341 test_name, status=analysis_status.ERROR | 341 test_name, status=analysis_status.ERROR |
| 342 ) | 342 ) |
| 343 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 343 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 344 build_number, step_name, test_name) | 344 build_number, step_name, test_name) |
| 345 analysis.success_rates.append(.50) | 345 analysis.pass_rates.append(.50) |
| 346 analysis.build_numbers.append(100) | 346 analysis.build_numbers.append(100) |
| 347 analysis.put() | 347 analysis.put() |
| 348 | 348 |
| 349 queue_name = {'x': False} | 349 queue_name = {'x': False} |
| 350 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument | 350 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument |
| 351 queue_name['x'] = True # pragma: no cover | 351 queue_name['x'] = True # pragma: no cover |
| 352 | 352 |
| 353 self.mock( | 353 self.mock( |
| 354 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) | 354 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) |
| 355 NextBuildNumberPipeline.run( | 355 NextBuildNumberPipeline.run( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 381 self._CreateAndSaveMasterFlakeAnalysis( | 381 self._CreateAndSaveMasterFlakeAnalysis( |
| 382 master_name, builder_name, build_number, step_name, | 382 master_name, builder_name, build_number, step_name, |
| 383 test_name, status=analysis_status.PENDING | 383 test_name, status=analysis_status.PENDING |
| 384 ) | 384 ) |
| 385 self._CreateAndSaveFlakeSwarmingTask( | 385 self._CreateAndSaveFlakeSwarmingTask( |
| 386 master_name, builder_name, build_number, step_name, | 386 master_name, builder_name, build_number, step_name, |
| 387 test_name, status=analysis_status.COMPLETED | 387 test_name, status=analysis_status.COMPLETED |
| 388 ) | 388 ) |
| 389 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 389 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 390 build_number, step_name, test_name) | 390 build_number, step_name, test_name) |
| 391 analysis.success_rates.append(.50) | 391 analysis.pass_rates.append(.50) |
| 392 analysis.build_numbers.append(100) | 392 analysis.build_numbers.append(100) |
| 393 analysis.put() | 393 analysis.put() |
| 394 | 394 |
| 395 queue_name = {'x': False} | 395 queue_name = {'x': False} |
| 396 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument | 396 def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument |
| 397 queue_name['x'] = True # pragma: no cover | 397 queue_name['x'] = True # pragma: no cover |
| 398 | 398 |
| 399 self.mock( | 399 self.mock( |
| 400 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) | 400 recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run) |
| 401 NextBuildNumberPipeline.run( | 401 NextBuildNumberPipeline.run( |
| 402 NextBuildNumberPipeline(), master_name, builder_name, | 402 NextBuildNumberPipeline(), master_name, builder_name, |
| 403 master_build_number, build_number, step_name, test_name, | 403 master_build_number, build_number, step_name, test_name, |
| 404 test_result_future, queue_name, flakiness_algorithm_results_dict) | 404 test_result_future, queue_name, flakiness_algorithm_results_dict) |
| 405 self.assertTrue(queue_name['x']) | 405 self.assertTrue(queue_name['x']) |
| 406 | 406 |
| 407 def testGetNextRunSetStableLowerBoundary(self): | 407 def testGetNextRunSetStableLowerBoundary(self): |
| 408 master_name = 'm' | 408 master_name = 'm' |
| 409 builder_name = 'b' | 409 builder_name = 'b' |
| 410 build_number = 100 | 410 build_number = 100 |
| 411 step_name = 's' | 411 step_name = 's' |
| 412 test_name = 't' | 412 test_name = 't' |
| 413 self._CreateAndSaveMasterFlakeAnalysis( | 413 self._CreateAndSaveMasterFlakeAnalysis( |
| 414 master_name, builder_name, build_number, step_name, | 414 master_name, builder_name, build_number, step_name, |
| 415 test_name, status=analysis_status.PENDING | 415 test_name, status=analysis_status.PENDING |
| 416 ) | 416 ) |
| 417 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 417 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 418 build_number, step_name, test_name) | 418 build_number, step_name, test_name) |
| 419 analysis.success_rates.append(1) | 419 analysis.pass_rates.append(1) |
| 420 analysis.build_numbers.append(100) | 420 analysis.build_numbers.append(100) |
| 421 analysis.put() | 421 analysis.put() |
| 422 | 422 |
| 423 flakiness_algorithm_results_dict = { | 423 flakiness_algorithm_results_dict = { |
| 424 'flakes_in_a_row': 4, | 424 'flakes_in_a_row': 4, |
| 425 'stable_in_a_row': 0, | 425 'stable_in_a_row': 0, |
| 426 'stabled_out': False, | 426 'stabled_out': False, |
| 427 'flaked_out': True, | 427 'flaked_out': True, |
| 428 'last_build_number': 0, | 428 'last_build_number': 0, |
| 429 'lower_boundary': None, | 429 'lower_boundary': None, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 442 builder_name = 'b' | 442 builder_name = 'b' |
| 443 build_number = 100 | 443 build_number = 100 |
| 444 step_name = 's' | 444 step_name = 's' |
| 445 test_name = 't' | 445 test_name = 't' |
| 446 self._CreateAndSaveMasterFlakeAnalysis( | 446 self._CreateAndSaveMasterFlakeAnalysis( |
| 447 master_name, builder_name, build_number, step_name, | 447 master_name, builder_name, build_number, step_name, |
| 448 test_name, status=analysis_status.PENDING | 448 test_name, status=analysis_status.PENDING |
| 449 ) | 449 ) |
| 450 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 450 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 451 build_number, step_name, test_name) | 451 build_number, step_name, test_name) |
| 452 analysis.success_rates.append(.5) | 452 analysis.pass_rates.append(.5) |
| 453 analysis.build_numbers.append(100) | 453 analysis.build_numbers.append(100) |
| 454 analysis.put() | 454 analysis.put() |
| 455 | 455 |
| 456 flakiness_algorithm_results_dict = { | 456 flakiness_algorithm_results_dict = { |
| 457 'flakes_in_a_row': 0, | 457 'flakes_in_a_row': 0, |
| 458 'stable_in_a_row': 0, | 458 'stable_in_a_row': 0, |
| 459 'stabled_out': True, | 459 'stabled_out': True, |
| 460 'flaked_out': False, | 460 'flaked_out': False, |
| 461 'last_build_number': 0, | 461 'last_build_number': 0, |
| 462 'lower_boundary': None, | 462 'lower_boundary': None, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 475 builder_name = 'b' | 475 builder_name = 'b' |
| 476 build_number = 100 | 476 build_number = 100 |
| 477 step_name = 's' | 477 step_name = 's' |
| 478 test_name = 't' | 478 test_name = 't' |
| 479 self._CreateAndSaveMasterFlakeAnalysis( | 479 self._CreateAndSaveMasterFlakeAnalysis( |
| 480 master_name, builder_name, build_number, step_name, | 480 master_name, builder_name, build_number, step_name, |
| 481 test_name, status=analysis_status.PENDING | 481 test_name, status=analysis_status.PENDING |
| 482 ) | 482 ) |
| 483 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 483 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 484 build_number, step_name, test_name) | 484 build_number, step_name, test_name) |
| 485 analysis.success_rates.append(.5) | 485 analysis.pass_rates.append(.5) |
| 486 analysis.build_numbers.append(100) | 486 analysis.build_numbers.append(100) |
| 487 analysis.put() | 487 analysis.put() |
| 488 | 488 |
| 489 flakiness_algorithm_results_dict = { | 489 flakiness_algorithm_results_dict = { |
| 490 'flakes_in_a_row': 0, | 490 'flakes_in_a_row': 0, |
| 491 'stable_in_a_row': 0, | 491 'stable_in_a_row': 0, |
| 492 'stabled_out': True, | 492 'stabled_out': True, |
| 493 'flaked_out': True, | 493 'flaked_out': True, |
| 494 'last_build_number': 0, | 494 'last_build_number': 0, |
| 495 'lower_boundary': 100, | 495 'lower_boundary': 100, |
| 496 'upper_boundary': 110, | 496 'upper_boundary': 110, |
| 497 'lower_boundary_result': 'STABLE', | 497 'lower_boundary_result': 'STABLE', |
| 498 'sequential_run_index': 0 | 498 'sequential_run_index': 0 |
| 499 } | 499 } |
| 500 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) | 500 next_run = sequential_next_run(analysis, flakiness_algorithm_results_dict) |
| 501 self.assertEqual(next_run, 101) | 501 self.assertEqual(next_run, 101) |
| 502 | 502 |
| 503 def testSequentialFoundBorderFlake(self): | 503 def testSequentialFoundBorderFlake(self): |
| 504 master_name = 'm' | 504 master_name = 'm' |
| 505 builder_name = 'b' | 505 builder_name = 'b' |
| 506 build_number = 100 | 506 build_number = 100 |
| 507 step_name = 's' | 507 step_name = 's' |
| 508 test_name = 't' | 508 test_name = 't' |
| 509 self._CreateAndSaveMasterFlakeAnalysis( | 509 self._CreateAndSaveMasterFlakeAnalysis( |
| 510 master_name, builder_name, build_number, step_name, | 510 master_name, builder_name, build_number, step_name, |
| 511 test_name, status=analysis_status.PENDING | 511 test_name, status=analysis_status.PENDING |
| 512 ) | 512 ) |
| 513 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 513 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 514 build_number, step_name, test_name) | 514 build_number, step_name, test_name) |
| 515 analysis.success_rates.append(.5) | 515 analysis.pass_rates.append(.5) |
| 516 analysis.build_numbers.append(100) | 516 analysis.build_numbers.append(100) |
| 517 analysis.put() | 517 analysis.put() |
| 518 | 518 |
| 519 flakiness_algorithm_results_dict = { | 519 flakiness_algorithm_results_dict = { |
| 520 'flakes_in_a_row': 0, | 520 'flakes_in_a_row': 0, |
| 521 'stable_in_a_row': 0, | 521 'stable_in_a_row': 0, |
| 522 'stabled_out': True, | 522 'stabled_out': True, |
| 523 'flaked_out': True, | 523 'flaked_out': True, |
| 524 'last_build_number': 0, | 524 'last_build_number': 0, |
| 525 'lower_boundary': 100, | 525 'lower_boundary': 100, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 536 builder_name = 'b' | 536 builder_name = 'b' |
| 537 build_number = 100 | 537 build_number = 100 |
| 538 step_name = 's' | 538 step_name = 's' |
| 539 test_name = 't' | 539 test_name = 't' |
| 540 self._CreateAndSaveMasterFlakeAnalysis( | 540 self._CreateAndSaveMasterFlakeAnalysis( |
| 541 master_name, builder_name, build_number, step_name, | 541 master_name, builder_name, build_number, step_name, |
| 542 test_name, status=analysis_status.PENDING | 542 test_name, status=analysis_status.PENDING |
| 543 ) | 543 ) |
| 544 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 544 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 545 build_number, step_name, test_name) | 545 build_number, step_name, test_name) |
| 546 analysis.success_rates.append(1) | 546 analysis.pass_rates.append(1) |
| 547 analysis.build_numbers.append(100) | 547 analysis.build_numbers.append(100) |
| 548 analysis.put() | 548 analysis.put() |
| 549 | 549 |
| 550 flakiness_algorithm_results_dict = { | 550 flakiness_algorithm_results_dict = { |
| 551 'flakes_in_a_row': 0, | 551 'flakes_in_a_row': 0, |
| 552 'stable_in_a_row': 0, | 552 'stable_in_a_row': 0, |
| 553 'stabled_out': True, | 553 'stabled_out': True, |
| 554 'flaked_out': True, | 554 'flaked_out': True, |
| 555 'last_build_number': 0, | 555 'last_build_number': 0, |
| 556 'lower_boundary': 100, | 556 'lower_boundary': 100, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 568 builder_name = 'b' | 568 builder_name = 'b' |
| 569 build_number = 100 | 569 build_number = 100 |
| 570 step_name = 's' | 570 step_name = 's' |
| 571 test_name = 't' | 571 test_name = 't' |
| 572 self._CreateAndSaveMasterFlakeAnalysis( | 572 self._CreateAndSaveMasterFlakeAnalysis( |
| 573 master_name, builder_name, build_number, step_name, | 573 master_name, builder_name, build_number, step_name, |
| 574 test_name, status=analysis_status.PENDING | 574 test_name, status=analysis_status.PENDING |
| 575 ) | 575 ) |
| 576 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 576 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 577 build_number, step_name, test_name) | 577 build_number, step_name, test_name) |
| 578 analysis.success_rates.append(1) | 578 analysis.pass_rates.append(1) |
| 579 analysis.build_numbers.append(100) | 579 analysis.build_numbers.append(100) |
| 580 analysis.put() | 580 analysis.put() |
| 581 | 581 |
| 582 flakiness_algorithm_results_dict = { | 582 flakiness_algorithm_results_dict = { |
| 583 'flakes_in_a_row': 0, | 583 'flakes_in_a_row': 0, |
| 584 'stable_in_a_row': 0, | 584 'stable_in_a_row': 0, |
| 585 'stabled_out': True, | 585 'stabled_out': True, |
| 586 'flaked_out': True, | 586 'flaked_out': True, |
| 587 'last_build_number': 0, | 587 'last_build_number': 0, |
| 588 'lower_boundary': 100, | 588 'lower_boundary': 100, |
| (...skipping 29 matching lines...) Expand all Loading... |
| 618 self._CreateAndSaveMasterFlakeAnalysis( | 618 self._CreateAndSaveMasterFlakeAnalysis( |
| 619 master_name, builder_name, build_number, step_name, | 619 master_name, builder_name, build_number, step_name, |
| 620 test_name, status=analysis_status.PENDING | 620 test_name, status=analysis_status.PENDING |
| 621 ) | 621 ) |
| 622 self._CreateAndSaveFlakeSwarmingTask( | 622 self._CreateAndSaveFlakeSwarmingTask( |
| 623 master_name, builder_name, build_number, step_name, | 623 master_name, builder_name, build_number, step_name, |
| 624 test_name, status=analysis_status.COMPLETED | 624 test_name, status=analysis_status.COMPLETED |
| 625 ) | 625 ) |
| 626 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, | 626 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 627 build_number, step_name, test_name) | 627 build_number, step_name, test_name) |
| 628 analysis.success_rates.append(1) | 628 analysis.pass_rates.append(1) |
| 629 analysis.build_numbers.append(50) | 629 analysis.build_numbers.append(50) |
| 630 analysis.put() | 630 analysis.put() |
| 631 | 631 |
| 632 NextBuildNumberPipeline.run( | 632 NextBuildNumberPipeline.run( |
| 633 NextBuildNumberPipeline(), master_name, builder_name, | 633 NextBuildNumberPipeline(), master_name, builder_name, |
| 634 master_build_number, build_number, step_name, test_name, | 634 master_build_number, build_number, step_name, test_name, |
| 635 test_result_future, queue_name, flakiness_algorithm_results_dict) | 635 test_result_future, queue_name, flakiness_algorithm_results_dict) |
| 636 self.assertEquals( | 636 self.assertEquals( |
| 637 flakiness_algorithm_results_dict['sequential_run_index'], 1) | 637 flakiness_algorithm_results_dict['sequential_run_index'], 1) |
| 638 | 638 |
| 639 def testNextBuildWhenTestNotExistingAfterStableInARow(self): | 639 def testNextBuildWhenTestNotExistingAfterStableInARow(self): |
| 640 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't') | 640 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't') |
| 641 master.success_rates = [0.8, 1.0, 1.0, -1] | 641 master.pass_rates = [0.8, 1.0, 1.0, -1] |
| 642 master.build_numbers = [100, 80, 70, 60] | 642 master.build_numbers = [100, 80, 70, 60] |
| 643 flakiness_algorithm_results_dict = { | 643 flakiness_algorithm_results_dict = { |
| 644 'flakes_in_a_row': 0, | 644 'flakes_in_a_row': 0, |
| 645 'stable_in_a_row': 2, | 645 'stable_in_a_row': 2, |
| 646 'stabled_out': False, | 646 'stabled_out': False, |
| 647 'flaked_out': False, | 647 'flaked_out': False, |
| 648 'last_build_number': 0, | 648 'last_build_number': 0, |
| 649 'lower_boundary': None, | 649 'lower_boundary': None, |
| 650 'upper_boundary': None, | 650 'upper_boundary': None, |
| 651 'lower_boundary_result': None, | 651 'lower_boundary_result': None, |
| 652 'sequential_run_index': 0, | 652 'sequential_run_index': 0, |
| 653 } | 653 } |
| 654 | 654 |
| 655 next_run = get_next_run(master, flakiness_algorithm_results_dict) | 655 next_run = get_next_run(master, flakiness_algorithm_results_dict) |
| 656 self.assertEqual(81, next_run) | 656 self.assertEqual(81, next_run) |
| 657 self.assertTrue(flakiness_algorithm_results_dict['stabled_out']) | 657 self.assertTrue(flakiness_algorithm_results_dict['stabled_out']) |
| 658 self.assertTrue(flakiness_algorithm_results_dict['flaked_out']) | 658 self.assertTrue(flakiness_algorithm_results_dict['flaked_out']) |
| 659 self.assertEqual(80, flakiness_algorithm_results_dict['lower_boundary']) | 659 self.assertEqual(80, flakiness_algorithm_results_dict['lower_boundary']) |
| 660 self.assertEqual('STABLE', | 660 self.assertEqual('STABLE', |
| 661 flakiness_algorithm_results_dict['lower_boundary_result']) | 661 flakiness_algorithm_results_dict['lower_boundary_result']) |
| 662 | 662 |
| 663 def testNextBuildWhenTestNotExistingAfterFlakeInARow(self): | 663 def testNextBuildWhenTestNotExistingAfterFlakeInARow(self): |
| 664 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't') | 664 master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't') |
| 665 master.success_rates = [0.8, 0.7, 0.75, -1] | 665 master.pass_rates = [0.8, 0.7, 0.75, -1] |
| 666 master.build_numbers = [100, 80, 70, 60] | 666 master.build_numbers = [100, 80, 70, 60] |
| 667 flakiness_algorithm_results_dict = { | 667 flakiness_algorithm_results_dict = { |
| 668 'flakes_in_a_row': 3, | 668 'flakes_in_a_row': 3, |
| 669 'stable_in_a_row': 0, | 669 'stable_in_a_row': 0, |
| 670 'stabled_out': False, | 670 'stabled_out': False, |
| 671 'flaked_out': False, | 671 'flaked_out': False, |
| 672 'last_build_number': 0, | 672 'last_build_number': 0, |
| 673 'lower_boundary': None, | 673 'lower_boundary': None, |
| 674 'upper_boundary': None, | 674 'upper_boundary': None, |
| 675 'lower_boundary_result': None, | 675 'lower_boundary_result': None, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 master_name, builder_name, master_build_number, step_name, | 708 master_name, builder_name, master_build_number, step_name, |
| 709 test_name, status=analysis_status.RUNNING | 709 test_name, status=analysis_status.RUNNING |
| 710 ) | 710 ) |
| 711 self._CreateAndSaveFlakeSwarmingTask( | 711 self._CreateAndSaveFlakeSwarmingTask( |
| 712 master_name, builder_name, build_number, step_name, | 712 master_name, builder_name, build_number, step_name, |
| 713 test_name, status=analysis_status.COMPLETED | 713 test_name, status=analysis_status.COMPLETED |
| 714 ) | 714 ) |
| 715 analysis = MasterFlakeAnalysis.Get( | 715 analysis = MasterFlakeAnalysis.Get( |
| 716 master_name, builder_name, | 716 master_name, builder_name, |
| 717 master_build_number, step_name, test_name) | 717 master_build_number, step_name, test_name) |
| 718 analysis.success_rates = [1.0, 1.0, 1.0, -1] | 718 analysis.pass_rates = [1.0, 1.0, 1.0, -1] |
| 719 analysis.build_numbers = [100, 80, 70, 60] | 719 analysis.build_numbers = [100, 80, 70, 60] |
| 720 analysis.put() | 720 analysis.put() |
| 721 | 721 |
| 722 pipeline = NextBuildNumberPipeline() | 722 pipeline = NextBuildNumberPipeline() |
| 723 pipeline.run( | 723 pipeline.run( |
| 724 master_name, builder_name, | 724 master_name, builder_name, |
| 725 master_build_number, build_number, step_name, test_name, | 725 master_build_number, build_number, step_name, test_name, |
| 726 test_result_future, queue_name, flakiness_algorithm_results_dict) | 726 test_result_future, queue_name, flakiness_algorithm_results_dict) |
| 727 | 727 |
| 728 analysis = MasterFlakeAnalysis.Get( | 728 analysis = MasterFlakeAnalysis.Get( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 754 master_name, builder_name, master_build_number, step_name, | 754 master_name, builder_name, master_build_number, step_name, |
| 755 test_name, status=analysis_status.RUNNING | 755 test_name, status=analysis_status.RUNNING |
| 756 ) | 756 ) |
| 757 self._CreateAndSaveFlakeSwarmingTask( | 757 self._CreateAndSaveFlakeSwarmingTask( |
| 758 master_name, builder_name, build_number, step_name, | 758 master_name, builder_name, build_number, step_name, |
| 759 test_name, status=analysis_status.COMPLETED | 759 test_name, status=analysis_status.COMPLETED |
| 760 ) | 760 ) |
| 761 analysis = MasterFlakeAnalysis.Get( | 761 analysis = MasterFlakeAnalysis.Get( |
| 762 master_name, builder_name, | 762 master_name, builder_name, |
| 763 master_build_number, step_name, test_name) | 763 master_build_number, step_name, test_name) |
| 764 analysis.success_rates = [1.0, 1.0, 1.0, 1.0] | 764 analysis.pass_rates = [1.0, 1.0, 1.0, 1.0] |
| 765 analysis.build_numbers = [100, 80, 70, 60] | 765 analysis.build_numbers = [100, 80, 70, 60] |
| 766 analysis.put() | 766 analysis.put() |
| 767 | 767 |
| 768 pipeline = NextBuildNumberPipeline() | 768 pipeline = NextBuildNumberPipeline() |
| 769 pipeline.run( | 769 pipeline.run( |
| 770 master_name, builder_name, | 770 master_name, builder_name, |
| 771 master_build_number, build_number, step_name, test_name, | 771 master_build_number, build_number, step_name, test_name, |
| 772 test_result_future, queue_name, flakiness_algorithm_results_dict) | 772 test_result_future, queue_name, flakiness_algorithm_results_dict) |
| 773 | 773 |
| 774 analysis = MasterFlakeAnalysis.Get( | 774 analysis = MasterFlakeAnalysis.Get( |
| 775 master_name, builder_name, | 775 master_name, builder_name, |
| 776 master_build_number, step_name, test_name) | 776 master_build_number, step_name, test_name) |
| 777 self.assertEqual(analysis_status.COMPLETED, analysis.status) | 777 self.assertEqual(analysis_status.COMPLETED, analysis.status) |
| OLD | NEW |