| OLD | NEW |
| (Empty) | |
| 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 |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import mock |
| 6 |
| 7 from common import constants |
| 8 from common.pipeline_wrapper import pipeline_handlers |
| 9 from model import analysis_status |
| 10 from model.flake.master_flake_analysis import MasterFlakeAnalysis |
| 11 from waterfall.flake.initialize_flake_pipeline import NeedANewAnalysis |
| 12 from waterfall.flake.initialize_flake_pipeline import ScheduleAnalysisIfNeeded |
| 13 from waterfall.test import wf_testcase |
| 14 |
| 15 |
| 16 class InitializeFlakePipelineTest(wf_testcase.WaterfallTestCase): |
| 17 app_module = pipeline_handlers._APP |
| 18 |
| 19 def _CreateAndSaveMasterFlakeAnalysis( |
| 20 self, master_name, builder_name, build_number, |
| 21 step_name, test_name, status): |
| 22 analysis = MasterFlakeAnalysis.Create( |
| 23 master_name, builder_name, build_number, step_name, test_name) |
| 24 analysis.status = status |
| 25 analysis.put() |
| 26 |
| 27 def testAnalysisIsNeededWhenNoneExists(self): |
| 28 master_name = 'm' |
| 29 builder_name = 'b 1' |
| 30 build_number = 123 |
| 31 step_name = 's' |
| 32 test_name = 't' |
| 33 |
| 34 need_analysis = NeedANewAnalysis( |
| 35 master_name, builder_name, build_number, step_name, test_name) |
| 36 |
| 37 self.assertTrue(need_analysis) |
| 38 |
| 39 def testAnalysisIsNeededAfterCrashedAnalysis(self): |
| 40 master_name = 'm' |
| 41 builder_name = 'b 1' |
| 42 build_number = 123 |
| 43 step_name = 's' |
| 44 test_name = 't' |
| 45 status = analysis_status.ERROR |
| 46 self._CreateAndSaveMasterFlakeAnalysis( |
| 47 master_name, builder_name, build_number, step_name, |
| 48 test_name, status=status) |
| 49 |
| 50 need_analysis = NeedANewAnalysis( |
| 51 master_name, builder_name, build_number, step_name, test_name) |
| 52 |
| 53 self.assertTrue(need_analysis) |
| 54 |
| 55 def testAnalysisIsNotNeededAfterCompletedAnalysis(self): |
| 56 master_name = 'm' |
| 57 builder_name = 'b 1' |
| 58 build_number = 123 |
| 59 step_name = 's' |
| 60 test_name = 't' |
| 61 for status in [analysis_status.RUNNING, |
| 62 analysis_status.PENDING, |
| 63 analysis_status.COMPLETED]: |
| 64 self._CreateAndSaveMasterFlakeAnalysis( |
| 65 master_name, builder_name, build_number, |
| 66 step_name, test_name, status=status) |
| 67 |
| 68 need_analysis = NeedANewAnalysis( |
| 69 master_name, builder_name, build_number, step_name, test_name) |
| 70 |
| 71 self.assertFalse(need_analysis) |
| 72 |
| 73 def testAnalysisIsNeededAfterCompletedDifferentAnalysis(self): |
| 74 master_name = 'm' |
| 75 builder_name = 'b 1' |
| 76 build_number = 123 |
| 77 step_name = 's' |
| 78 test_name = 't' |
| 79 for status in [analysis_status.RUNNING, |
| 80 analysis_status.PENDING, |
| 81 analysis_status.COMPLETED]: |
| 82 self._CreateAndSaveMasterFlakeAnalysis( |
| 83 master_name, builder_name, build_number, |
| 84 step_name, test_name, status=status) |
| 85 |
| 86 dif_test_name = 'd' |
| 87 need_analysis = NeedANewAnalysis( |
| 88 master_name, builder_name, build_number, step_name, dif_test_name) |
| 89 |
| 90 self.assertTrue(need_analysis) |
| 91 |
| 92 @mock.patch( |
| 93 'waterfall.flake.initialize_flake_pipeline.RecursiveFlakePipeline') |
| 94 def testStartPipelineForNewAnalysis(self, mocked_pipeline): |
| 95 master_name = 'm' |
| 96 builder_name = 'b' |
| 97 build_number = 124 |
| 98 step_name = 's' |
| 99 test_name = 't' |
| 100 |
| 101 ScheduleAnalysisIfNeeded( |
| 102 master_name, builder_name, build_number, |
| 103 step_name, test_name, |
| 104 queue_name=constants.DEFAULT_QUEUE) |
| 105 |
| 106 analysis = MasterFlakeAnalysis.Get(master_name, builder_name, |
| 107 build_number, step_name, test_name) |
| 108 self.assertIsNotNone(analysis) |
| 109 mocked_pipeline.assert_has_calls( |
| 110 [mock.call().start(queue_name=constants.DEFAULT_QUEUE)]) |
| 111 |
| 112 @mock.patch( |
| 113 'waterfall.flake.recursive_flake_pipeline.RecursiveFlakePipeline') |
| 114 def testNotStartPipelineForNewAnalysis(self, mocked_pipeline): |
| 115 master_name = 'm' |
| 116 builder_name = 'b' |
| 117 build_number = 124 |
| 118 step_name = 's' |
| 119 test_name = 't' |
| 120 |
| 121 self._CreateAndSaveMasterFlakeAnalysis( |
| 122 master_name, builder_name, build_number, step_name, test_name, |
| 123 status=analysis_status.COMPLETED) |
| 124 |
| 125 ScheduleAnalysisIfNeeded( |
| 126 master_name, builder_name, build_number, |
| 127 step_name, test_name, |
| 128 queue_name=constants.DEFAULT_QUEUE) |
| 129 |
| 130 self.assertFalse(mocked_pipeline.called) |
| OLD | NEW |