| Index: appengine/findit/waterfall/flake/test/recursive_flake_pipeline_test.py
|
| diff --git a/appengine/findit/waterfall/flake/test/recursive_flake_pipeline_test.py b/appengine/findit/waterfall/flake/test/recursive_flake_pipeline_test.py
|
| index 7d7f943eaab4d345d52f9ed71f071bf00c0f6720..fb407c4612fb00c277eb3cd8b55d88d01b9b3795 100644
|
| --- a/appengine/findit/waterfall/flake/test/recursive_flake_pipeline_test.py
|
| +++ b/appengine/findit/waterfall/flake/test/recursive_flake_pipeline_test.py
|
| @@ -5,8 +5,8 @@
|
| from common import constants
|
| from common.pipeline_wrapper import pipeline_handlers
|
| from model import analysis_status
|
| -from model.flake.master_flake_analysis import MasterFlakeAnalysis
|
| from model.flake.flake_swarming_task import FlakeSwarmingTask
|
| +from model.flake.master_flake_analysis import MasterFlakeAnalysis
|
| from waterfall.flake import recursive_flake_pipeline
|
| from waterfall.flake.recursive_flake_pipeline import get_next_run
|
| from waterfall.flake.recursive_flake_pipeline import NextBuildNumberPipeline
|
| @@ -19,12 +19,12 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| app_module = pipeline_handlers._APP
|
|
|
| def _CreateAndSaveMasterFlakeAnalysis(
|
| - self, master_name, builder_name, build_number,
|
| - step_name, test_name, status):
|
| + self, master_name, builder_name, build_number, step_name,
|
| + test_name, status):
|
| analysis = MasterFlakeAnalysis.Create(
|
| master_name, builder_name, build_number, step_name, test_name)
|
| analysis.status = status
|
| - analysis.put()
|
| + analysis.Save()
|
|
|
| def _CreateAndSaveFlakeSwarmingTask(
|
| self, master_name, builder_name, build_number,
|
| @@ -59,10 +59,10 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
|
|
| }
|
|
|
| - self._CreateAndSaveMasterFlakeAnalysis(
|
| - master_name, builder_name, master_build_number, step_name,
|
| - test_name, status=analysis_status.PENDING
|
| - )
|
| + analysis = MasterFlakeAnalysis.Create(
|
| + master_name, builder_name, master_build_number, step_name, test_name)
|
| + analysis.status = analysis_status.PENDING
|
| + analysis.Save()
|
|
|
| self.MockPipeline(
|
| recursive_flake_pipeline.TriggerFlakeSwarmingTaskPipeline,
|
| @@ -76,7 +76,8 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| 'test_result_future',
|
| expected_args=[master_name, builder_name,
|
| run_build_number, step_name, task_id,
|
| - master_build_number, test_name],
|
| + master_build_number, test_name,
|
| + analysis.version_number],
|
| expected_kwargs={})
|
|
|
| self.MockPipeline(
|
| @@ -84,15 +85,16 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| '',
|
| expected_args=[master_name, builder_name, master_build_number,
|
| build_number, step_name, test_name,
|
| + analysis.version_number,
|
| test_result_future, queue_name,
|
| flakiness_algorithm_results_dict],
|
| expected_kwargs={})
|
|
|
| - rfp = RecursiveFlakePipeline(master_name, builder_name, build_number,
|
| - step_name, test_name, master_build_number,
|
| - flakiness_algorithm_results_dict=
|
| - flakiness_algorithm_results_dict,
|
| - queue_name=queue_name)
|
| + rfp = RecursiveFlakePipeline(
|
| + master_name, builder_name, build_number, step_name, test_name,
|
| + analysis.version_number, master_build_number,
|
| + flakiness_algorithm_results_dict=flakiness_algorithm_results_dict,
|
| + queue_name=queue_name)
|
|
|
| rfp.start(queue_name=queue_name)
|
| self.execute_queued_tasks()
|
| @@ -126,16 +128,17 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.COMPLETED
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(.08)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(.08)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| NextBuildNumberPipeline.run(
|
| NextBuildNumberPipeline(), master_name, builder_name,
|
| master_build_number, build_number, step_name, test_name,
|
| - test_result_future, queue_name, flakiness_algorithm_results_dict)
|
| + analysis.version_number, test_result_future, queue_name,
|
| + flakiness_algorithm_results_dict)
|
| self.assertEquals(flakiness_algorithm_results_dict['flakes_in_a_row'], 1)
|
|
|
| def testNextBuildPipelineForNewRecursionFirstStable(self):
|
| @@ -167,16 +170,16 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.COMPLETED
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(0)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(0)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| NextBuildNumberPipeline.run(
|
| NextBuildNumberPipeline(), master_name, builder_name,
|
| master_build_number, build_number, step_name,
|
| - test_name, test_result_future, queue_name,
|
| + test_name, analysis.version_number, test_result_future, queue_name,
|
| flakiness_algorithm_results_dict)
|
| self.assertEquals(flakiness_algorithm_results_dict['stable_in_a_row'], 1)
|
|
|
| @@ -209,16 +212,16 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.COMPLETED
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(0)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(0)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| NextBuildNumberPipeline.run(
|
| NextBuildNumberPipeline(), master_name, builder_name,
|
| master_build_number, build_number, step_name,
|
| - test_name, test_result_future, queue_name,
|
| + test_name, analysis.version_number, test_result_future, queue_name,
|
| flakiness_algorithm_results_dict)
|
| self.assertEquals(flakiness_algorithm_results_dict['stabled_out'], True)
|
|
|
| @@ -251,20 +254,19 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.COMPLETED
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(.50)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(.50)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| NextBuildNumberPipeline.run(
|
| NextBuildNumberPipeline(), master_name, builder_name,
|
| master_build_number, build_number, step_name,
|
| - test_name, test_result_future, queue_name,
|
| + test_name, analysis.version_number, test_result_future, queue_name,
|
| flakiness_algorithm_results_dict)
|
| self.assertEquals(flakiness_algorithm_results_dict['flaked_out'], True)
|
|
|
| -
|
| def testNextBuildPipelineForNewRecursionLessThanLastBuildNumber(self):
|
| master_name = 'm'
|
| builder_name = 'b'
|
| @@ -293,9 +295,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.COMPLETED
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(.50)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(.50)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -308,7 +310,8 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| NextBuildNumberPipeline.run(
|
| NextBuildNumberPipeline(), master_name, builder_name,
|
| master_build_number, build_number, step_name, test_name,
|
| - test_result_future, queue_name, flakiness_algorithm_results_dict)
|
| + analysis.version_number, test_result_future, queue_name,
|
| + flakiness_algorithm_results_dict)
|
| self.assertFalse(queue_name['x'])
|
|
|
| def testNextBuildPipelineForFailedSwarmingTask(self):
|
| @@ -340,9 +343,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.ERROR
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(.50)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(.50)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -354,7 +357,7 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| recursive_flake_pipeline.RecursiveFlakePipeline, 'start', my_mocked_run)
|
| NextBuildNumberPipeline.run(
|
| NextBuildNumberPipeline(), master_name, builder_name,
|
| - master_build_number, build_number, step_name, test_name,
|
| + master_build_number, build_number, step_name, test_name, 1,
|
| test_result_future, queue_name, flakiness_algorithm_results_dict)
|
| self.assertFalse(queue_name['x'])
|
|
|
| @@ -386,9 +389,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.COMPLETED
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(.50)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(.50)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -401,7 +404,8 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| NextBuildNumberPipeline.run(
|
| NextBuildNumberPipeline(), master_name, builder_name,
|
| master_build_number, build_number, step_name, test_name,
|
| - test_result_future, queue_name, flakiness_algorithm_results_dict)
|
| + analysis.version_number, test_result_future, queue_name,
|
| + flakiness_algorithm_results_dict)
|
| self.assertTrue(queue_name['x'])
|
|
|
| def testGetNextRunSetStableLowerBoundary(self):
|
| @@ -414,9 +418,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.PENDING
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(1)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(1)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -447,9 +451,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.PENDING
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(.5)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(.5)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -480,9 +484,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.PENDING
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(.5)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(.5)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -510,9 +514,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.PENDING
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(.5)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(.5)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -541,9 +545,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.PENDING
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(1)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(1)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -562,7 +566,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| self.assertEqual(next_run, False)
|
| self.assertEqual(analysis.suspected_flake_build_number, 101)
|
|
|
| -
|
| def testSequentialDidntFindBorderStable(self):
|
| master_name = 'm'
|
| builder_name = 'b'
|
| @@ -573,9 +576,9 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.PENDING
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(1)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(1)
|
| analysis.build_numbers.append(100)
|
| analysis.put()
|
|
|
| @@ -623,22 +626,23 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| master_name, builder_name, build_number, step_name,
|
| test_name, status=analysis_status.COMPLETED
|
| )
|
| - analysis = MasterFlakeAnalysis.Get(master_name, builder_name,
|
| - build_number, step_name, test_name)
|
| - analysis.success_rates.append(1)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, build_number, step_name, test_name)
|
| + analysis.pass_rates.append(1)
|
| analysis.build_numbers.append(50)
|
| analysis.put()
|
|
|
| NextBuildNumberPipeline.run(
|
| NextBuildNumberPipeline(), master_name, builder_name,
|
| master_build_number, build_number, step_name, test_name,
|
| - test_result_future, queue_name, flakiness_algorithm_results_dict)
|
| + analysis.version_number, test_result_future, queue_name,
|
| + flakiness_algorithm_results_dict)
|
| self.assertEquals(
|
| flakiness_algorithm_results_dict['sequential_run_index'], 1)
|
|
|
| def testNextBuildWhenTestNotExistingAfterStableInARow(self):
|
| master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't')
|
| - master.success_rates = [0.8, 1.0, 1.0, -1]
|
| + master.pass_rates = [0.8, 1.0, 1.0, -1]
|
| master.build_numbers = [100, 80, 70, 60]
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| @@ -662,7 +666,7 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
|
|
| def testNextBuildWhenTestNotExistingAfterFlakeInARow(self):
|
| master = MasterFlakeAnalysis.Create('m', 'b', 100, 's', 't')
|
| - master.success_rates = [0.8, 0.7, 0.75, -1]
|
| + master.pass_rates = [0.8, 0.7, 0.75, -1]
|
| master.build_numbers = [100, 80, 70, 60]
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 3,
|
| @@ -706,16 +710,14 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| }
|
| self._CreateAndSaveMasterFlakeAnalysis(
|
| master_name, builder_name, master_build_number, step_name,
|
| - test_name, status=analysis_status.RUNNING
|
| - )
|
| + test_name, status=analysis_status.RUNNING)
|
| self._CreateAndSaveFlakeSwarmingTask(
|
| master_name, builder_name, build_number, step_name,
|
| - test_name, status=analysis_status.COMPLETED
|
| - )
|
| - analysis = MasterFlakeAnalysis.Get(
|
| - master_name, builder_name,
|
| - master_build_number, step_name, test_name)
|
| - analysis.success_rates = [1.0, 1.0, 1.0, -1]
|
| + test_name, status=analysis_status.COMPLETED)
|
| +
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, master_build_number, step_name, test_name)
|
| + analysis.pass_rates = [1.0, 1.0, 1.0, -1]
|
| analysis.build_numbers = [100, 80, 70, 60]
|
| analysis.put()
|
|
|
| @@ -723,11 +725,11 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| pipeline.run(
|
| master_name, builder_name,
|
| master_build_number, build_number, step_name, test_name,
|
| - test_result_future, queue_name, flakiness_algorithm_results_dict)
|
| + analysis.version_number, test_result_future, queue_name,
|
| + flakiness_algorithm_results_dict)
|
|
|
| - analysis = MasterFlakeAnalysis.Get(
|
| - master_name, builder_name,
|
| - master_build_number, step_name, test_name)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, master_build_number, step_name, test_name)
|
| self.assertEqual(analysis_status.COMPLETED, analysis.status)
|
|
|
| def testNextBuildNumberIsSmallerThanLastBuildNumber(self):
|
| @@ -750,28 +752,24 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| 'lower_boundary_result': None,
|
| 'sequential_run_index': 0
|
| }
|
| - self._CreateAndSaveMasterFlakeAnalysis(
|
| - master_name, builder_name, master_build_number, step_name,
|
| - test_name, status=analysis_status.RUNNING
|
| - )
|
| + analysis = MasterFlakeAnalysis.Create(
|
| + master_name, builder_name, master_build_number, step_name, test_name)
|
| + analysis.pass_rates = [1.0, 1.0, 1.0, 1.0]
|
| + analysis.build_numbers = [100, 80, 70, 60]
|
| + analysis.status = analysis_status.RUNNING
|
| + analysis.Save()
|
| +
|
| self._CreateAndSaveFlakeSwarmingTask(
|
| master_name, builder_name, build_number, step_name,
|
| - test_name, status=analysis_status.COMPLETED
|
| - )
|
| - analysis = MasterFlakeAnalysis.Get(
|
| - master_name, builder_name,
|
| - master_build_number, step_name, test_name)
|
| - analysis.success_rates = [1.0, 1.0, 1.0, 1.0]
|
| - analysis.build_numbers = [100, 80, 70, 60]
|
| - analysis.put()
|
| + test_name, status=analysis_status.COMPLETED)
|
|
|
| pipeline = NextBuildNumberPipeline()
|
| pipeline.run(
|
| master_name, builder_name,
|
| master_build_number, build_number, step_name, test_name,
|
| - test_result_future, queue_name, flakiness_algorithm_results_dict)
|
| + analysis.version_number, test_result_future, queue_name,
|
| + flakiness_algorithm_results_dict)
|
|
|
| - analysis = MasterFlakeAnalysis.Get(
|
| - master_name, builder_name,
|
| - master_build_number, step_name, test_name)
|
| + analysis = MasterFlakeAnalysis.GetVersion(
|
| + master_name, builder_name, master_build_number, step_name, test_name)
|
| self.assertEqual(analysis_status.COMPLETED, analysis.status)
|
|
|