Chromium Code Reviews| Index: appengine/findit/waterfall/flake/test/initialize_flake_pipeline_test.py |
| diff --git a/appengine/findit/waterfall/flake/test/initialize_flake_pipeline_test.py b/appengine/findit/waterfall/flake/test/initialize_flake_pipeline_test.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bfba871179a40846403bcec5054a3000cdd183d1 |
| --- /dev/null |
| +++ b/appengine/findit/waterfall/flake/test/initialize_flake_pipeline_test.py |
| @@ -0,0 +1,109 @@ |
| +# Copyright 2015 The Chromium Authors. All rights reserved. |
|
chanli
2016/07/26 17:41:05
Nit: 2015 -> 2016
caiw
2016/07/26 20:19:44
Done.
|
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| +from common import constants |
| +from common.pipeline_wrapper import pipeline_handlers |
| +import mock |
|
chanli
2016/07/26 17:41:05
This import should be the first one and in a separ
caiw
2016/07/26 20:19:44
Got it - does that mean I shouldn't trust gpylint
|
| +from model import analysis_status |
| +from model.flake.master_flake_analysis import MasterFlakeAnalysis |
| +from waterfall.flake.initialize_flake_pipeline import NeedANewAnalysis |
| +from waterfall.flake.initialize_flake_pipeline import ScheduleAnalysisIfNeeded |
| +from waterfall.test import wf_testcase |
| + |
| + |
| +class InitializeFlakePipelineTest(wf_testcase.WaterfallTestCase): |
| + app_module = pipeline_handlers._APP |
| + |
| + def _CreateAndSaveMasterFlakeAnalysis( |
| + 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() |
| + |
| + def testAnalysisIsNeededWhenNoneExists(self): |
| + master_name = 'm' |
| + builder_name = 'b 1' |
| + build_number = 123 |
| + step_name = 's' |
| + test_name = 't' |
| + |
| + need_analysis = NeedANewAnalysis( |
| + master_name, builder_name, build_number, step_name, test_name) |
| + |
| + self.assertTrue(need_analysis) |
| + |
| + def testAnalysisIsNeededAfterCrashedAnalysis(self): |
| + master_name = 'm' |
| + builder_name = 'b 1' |
| + build_number = 123 |
| + step_name = 's' |
| + test_name = 't' |
| + status = analysis_status.ERROR |
| + self._CreateAndSaveMasterFlakeAnalysis( |
| + master_name, builder_name, build_number, step_name, |
| + test_name, status=status) |
| + |
| + need_analysis = NeedANewAnalysis( |
| + master_name, builder_name, build_number, step_name, test_name) |
| + |
| + self.assertTrue(need_analysis) |
| + |
| + def testAnalysisIsNotNeededAfterCompletedAnalysis(self): |
| + master_name = 'm' |
| + builder_name = 'b 1' |
| + build_number = 123 |
| + step_name = 's' |
| + test_name = 't' |
| + for status in [analysis_status.RUNNING, |
| + analysis_status.PENDING, |
| + analysis_status.COMPLETED]: |
|
chanli
2016/07/26 17:41:05
Maybe use different build_number or test_name to c
caiw
2016/07/26 20:19:44
Done.
|
| + self._CreateAndSaveMasterFlakeAnalysis( |
| + master_name, builder_name, build_number, |
| + step_name, test_name, status=status) |
| + |
| + need_analysis = NeedANewAnalysis( |
| + master_name, builder_name, build_number, step_name, test_name) |
| + |
| + self.assertFalse(need_analysis) |
| + |
| + @mock.patch( |
| + 'waterfall.flake.initialize_flake_pipeline.RecursiveFlakePipeline') |
| + def testStartPipelineForNewAnalysis(self, mocked_pipeline): |
| + master_name = 'm' |
| + builder_name = 'b' |
| + build_number = 124 |
| + step_name = 's' |
| + test_name = 't' |
| + |
| + ScheduleAnalysisIfNeeded( |
| + master_name, builder_name, build_number, |
| + step_name, test_name, |
| + queue_name=constants.DEFAULT_QUEUE) |
| + |
| + analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| + build_number, step_name, test_name) |
| + self.assertIsNotNone(analysis) |
| + mocked_pipeline.assert_has_calls( |
| + [mock.call().start(queue_name=constants.DEFAULT_QUEUE)]) |
| + |
| + @mock.patch( |
| + 'waterfall.flake.recursive_flake_pipeline.RecursiveFlakePipeline') |
| + def testNotStartPipelineForNewAnalysis(self, mocked_pipeline): |
| + master_name = 'm' |
| + builder_name = 'b' |
| + build_number = 124 |
| + step_name = 's' |
| + test_name = 't' |
| + |
| + self._CreateAndSaveMasterFlakeAnalysis( |
| + master_name, builder_name, build_number, step_name, test_name, |
| + status=analysis_status.COMPLETED) |
| + |
| + ScheduleAnalysisIfNeeded( |
| + master_name, builder_name, build_number, |
| + step_name, test_name, |
| + queue_name=constants.DEFAULT_QUEUE) |
| + |
| + self.assertFalse(mocked_pipeline.called) |