| 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..f2073f4670d0b5336e1b9d1ff8ab3720f376b7ae 100644
|
| --- a/appengine/findit/waterfall/flake/test/recursive_flake_pipeline_test.py
|
| +++ b/appengine/findit/waterfall/flake/test/recursive_flake_pipeline_test.py
|
| @@ -2,6 +2,10 @@
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| +from datetime import datetime
|
| +
|
| +import pytz
|
| +
|
| from common import constants
|
| from common.pipeline_wrapper import pipeline_handlers
|
| from model import analysis_status
|
| @@ -34,6 +38,41 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| flake_swarming_task.status = status
|
| flake_swarming_task.put()
|
|
|
| + def testGetETAToStartAnalysisWhenManuallyTriggered(self):
|
| + mocked_utcnow = datetime.utcnow()
|
| + self.MockUTCNow(mocked_utcnow)
|
| + self.assertEqual(mocked_utcnow,
|
| + recursive_flake_pipeline._GetETAToStartAnalysis(True))
|
| +
|
| + def testGetETAToStartAnalysisWhenTriggeredOnPSTWeekend(self):
|
| + # Sunday 1pm in PST.
|
| + mocked_utcnow = datetime(2016, 9, 04, 20, 0, 0, 0, pytz.utc)
|
| + self.MockUTCNow(mocked_utcnow)
|
| + self.MockUTCNowWithTimezone(mocked_utcnow)
|
| + self.assertEqual(mocked_utcnow,
|
| + recursive_flake_pipeline._GetETAToStartAnalysis(False))
|
| +
|
| + def testGetETAToStartAnalysisWhenTriggeredOffPeakHoursOnPSTWeekday(self):
|
| + # Tuesday 1am in PST.
|
| + mocked_utcnow = datetime(2016, 9, 20, 8, 0, 0, 0, pytz.utc)
|
| + self.MockUTCNow(mocked_utcnow)
|
| + self.MockUTCNowWithTimezone(mocked_utcnow)
|
| + self.assertEqual(mocked_utcnow,
|
| + recursive_flake_pipeline._GetETAToStartAnalysis(False))
|
| +
|
| + def testGetETAToStartAnalysisWhenTriggeredInPeakHoursOnPSTWeekday(self):
|
| + # Tuesday 1pm in PST.
|
| + mocked_utcnow = datetime(2016, 9, 20, 20, 0, 0, 0, pytz.utc)
|
| + self.MockUTCNow(mocked_utcnow)
|
| + self.MockUTCNowWithTimezone(mocked_utcnow)
|
| + eta = recursive_flake_pipeline._GetETAToStartAnalysis(False)
|
| + self.assertEqual(2016, eta.year)
|
| + self.assertEqual(9, eta.month)
|
| + self.assertEqual(21, eta.day)
|
| + self.assertEqual(1, eta.hour)
|
| + seconds = eta.minute * 60 + eta.second
|
| + self.assertTrue(seconds >= 0 and seconds <= 30 * 60)
|
| +
|
| def testRecursiveFlakePipeline(self):
|
| master_name = 'm'
|
| builder_name = 'b'
|
| @@ -84,15 +123,13 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| '',
|
| expected_args=[master_name, builder_name, master_build_number,
|
| build_number, step_name, test_name,
|
| - test_result_future, queue_name,
|
| - flakiness_algorithm_results_dict],
|
| - expected_kwargs={})
|
| + test_result_future, flakiness_algorithm_results_dict],
|
| + expected_kwargs={'manually_triggered': False})
|
|
|
| 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)
|
| + flakiness_algorithm_results_dict)
|
|
|
| rfp.start(queue_name=queue_name)
|
| self.execute_queued_tasks()
|
| @@ -105,7 +142,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| 'stable_in_a_row': 0,
|
| @@ -135,7 +171,7 @@ 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)
|
| + test_result_future, flakiness_algorithm_results_dict)
|
| self.assertEquals(flakiness_algorithm_results_dict['flakes_in_a_row'], 1)
|
|
|
| def testNextBuildPipelineForNewRecursionFirstStable(self):
|
| @@ -146,7 +182,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| 'stable_in_a_row': 0,
|
| @@ -157,7 +192,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| 'upper_boundary': None,
|
| 'lower_boundary_result': None,
|
| 'sequential_run_index': 0
|
| -
|
| }
|
| self._CreateAndSaveMasterFlakeAnalysis(
|
| master_name, builder_name, build_number, step_name,
|
| @@ -176,7 +210,7 @@ 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,
|
| + test_name, test_result_future,
|
| flakiness_algorithm_results_dict)
|
| self.assertEquals(flakiness_algorithm_results_dict['stable_in_a_row'], 1)
|
|
|
| @@ -188,7 +222,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| 'stable_in_a_row': 4,
|
| @@ -218,7 +251,7 @@ 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,
|
| + test_name, test_result_future,
|
| flakiness_algorithm_results_dict)
|
| self.assertEquals(flakiness_algorithm_results_dict['stabled_out'], True)
|
|
|
| @@ -230,7 +263,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 4,
|
| 'stable_in_a_row': 0,
|
| @@ -260,7 +292,7 @@ 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,
|
| + test_name, test_result_future,
|
| flakiness_algorithm_results_dict)
|
| self.assertEquals(flakiness_algorithm_results_dict['flaked_out'], True)
|
|
|
| @@ -273,7 +305,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| 'stable_in_a_row': 0,
|
| @@ -300,7 +331,7 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| analysis.put()
|
|
|
| queue_name = {'x': False}
|
| - def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
|
| + def my_mocked_run(*_, **__):
|
| queue_name['x'] = True # pragma: no cover
|
|
|
| self.mock(
|
| @@ -308,7 +339,7 @@ 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)
|
| + test_result_future, flakiness_algorithm_results_dict)
|
| self.assertFalse(queue_name['x'])
|
|
|
| def testNextBuildPipelineForFailedSwarmingTask(self):
|
| @@ -319,7 +350,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| 'stable_in_a_row': 0,
|
| @@ -347,7 +377,7 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| analysis.put()
|
|
|
| queue_name = {'x': False}
|
| - def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
|
| + def my_mocked_run(*_, **__):
|
| queue_name['x'] = True # pragma: no cover
|
|
|
| self.mock(
|
| @@ -355,7 +385,7 @@ 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)
|
| + test_result_future, flakiness_algorithm_results_dict)
|
| self.assertFalse(queue_name['x'])
|
|
|
| def testNextBuildPipelineForNewRecursionStabledFlakedOut(self):
|
| @@ -393,7 +423,7 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| analysis.put()
|
|
|
| queue_name = {'x': False}
|
| - def my_mocked_run(arg1, queue_name): # pylint: disable=unused-argument
|
| + def my_mocked_run(*_, **__):
|
| queue_name['x'] = True # pragma: no cover
|
|
|
| self.mock(
|
| @@ -401,7 +431,7 @@ 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)
|
| + test_result_future, flakiness_algorithm_results_dict)
|
| self.assertTrue(queue_name['x'])
|
|
|
| def testGetNextRunSetStableLowerBoundary(self):
|
| @@ -602,7 +632,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| 'stable_in_a_row': 0,
|
| @@ -632,7 +661,7 @@ 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)
|
| + test_result_future, flakiness_algorithm_results_dict)
|
| self.assertEquals(
|
| flakiness_algorithm_results_dict['sequential_run_index'], 1)
|
|
|
| @@ -692,7 +721,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| 'stable_in_a_row': 3,
|
| @@ -723,7 +751,7 @@ 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)
|
| + test_result_future, flakiness_algorithm_results_dict)
|
|
|
| analysis = MasterFlakeAnalysis.Get(
|
| master_name, builder_name,
|
| @@ -738,7 +766,6 @@ class RecursiveFlakePipelineTest(wf_testcase.WaterfallTestCase):
|
| step_name = 's'
|
| test_name = 't'
|
| test_result_future = 'trf'
|
| - queue_name = constants.DEFAULT_QUEUE
|
| flakiness_algorithm_results_dict = {
|
| 'flakes_in_a_row': 0,
|
| 'stable_in_a_row': 3,
|
| @@ -769,7 +796,7 @@ 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)
|
| + test_result_future, flakiness_algorithm_results_dict)
|
|
|
| analysis = MasterFlakeAnalysis.Get(
|
| master_name, builder_name,
|
|
|