Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: appengine/findit/waterfall/test/build_failure_analysis_pipelines_test.py

Issue 1866883002: [Findit] A huge refactoring and some bug fixing. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Fix nit. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 import logging 5 import logging
6 6
7 from testing_utils import testing 7 from testing_utils import testing
8 8
9 from common import constants
9 from model.wf_analysis import WfAnalysis 10 from model.wf_analysis import WfAnalysis
10 from model import wf_analysis_status 11 from model import analysis_status
11 from pipeline_wrapper import pipeline_handlers 12 from pipeline_wrapper import pipeline_handlers
12 from waterfall import build_failure_analysis_pipelines 13 from waterfall import build_failure_analysis_pipelines
13 14
14 15
15 class _MockRootPipeline(object): 16 class _MockRootPipeline(object):
16 STARTED = False 17 STARTED = False
17 18
18 def __init__(self, master_name, builder_name, build_number, build_completed): 19 def __init__(self, master_name, builder_name, build_number, build_completed):
19 pass 20 pass
20 21
(...skipping 27 matching lines...) Expand all
48 master_name, builder_name, build_number, failed_steps, False, False) 49 master_name, builder_name, build_number, failed_steps, False, False)
49 50
50 self.assertTrue(need_analysis) 51 self.assertTrue(need_analysis)
51 52
52 def testNewAnalysisIsNotNeededWhenNotForcedAfterCompletedAnalysis(self): 53 def testNewAnalysisIsNotNeededWhenNotForcedAfterCompletedAnalysis(self):
53 master_name = 'm' 54 master_name = 'm'
54 builder_name = 'b 1' 55 builder_name = 'b 1'
55 build_number = 123 56 build_number = 123
56 not_passed_steps = ['a', 'b'] 57 not_passed_steps = ['a', 'b']
57 self._CreateAndSaveWfAnalysis(master_name, builder_name, build_number, 58 self._CreateAndSaveWfAnalysis(master_name, builder_name, build_number,
58 not_passed_steps, wf_analysis_status.ANALYZED) 59 not_passed_steps, analysis_status.COMPLETED)
59 60
60 failed_steps = ['a', 'b'] 61 failed_steps = ['a', 'b']
61 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 62 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
62 master_name, builder_name, build_number, failed_steps, False, False) 63 master_name, builder_name, build_number, failed_steps, False, False)
63 64
64 self.assertFalse(need_analysis) 65 self.assertFalse(need_analysis)
65 66
66 def testNewAnalysisIsNotNeededWhenForcedBeforeCompletedAnalysis(self): 67 def testNewAnalysisIsNotNeededWhenForcedBeforeCompletedAnalysis(self):
67 master_name = 'm' 68 master_name = 'm'
68 builder_name = 'b 1' 69 builder_name = 'b 1'
69 build_number = 123 70 build_number = 123
70 not_passed_steps = [] 71 not_passed_steps = []
71 self._CreateAndSaveWfAnalysis( 72 self._CreateAndSaveWfAnalysis(
72 master_name, builder_name, build_number, 73 master_name, builder_name, build_number,
73 not_passed_steps, wf_analysis_status.ANALYZING) 74 not_passed_steps, analysis_status.RUNNING)
74 75
75 failed_steps = ['a'] 76 failed_steps = ['a']
76 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 77 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
77 master_name, builder_name, build_number, failed_steps, False, True) 78 master_name, builder_name, build_number, failed_steps, False, True)
78 79
79 self.assertFalse(need_analysis) 80 self.assertFalse(need_analysis)
80 81
81 def testNewAnalysisIsNeededWhenForcedAfterCompletedAnalysis(self): 82 def testNewAnalysisIsNeededWhenForcedAfterCompletedAnalysis(self):
82 master_name = 'm' 83 master_name = 'm'
83 builder_name = 'b 1' 84 builder_name = 'b 1'
84 build_number = 123 85 build_number = 123
85 not_passed_steps = ['a'] 86 not_passed_steps = ['a']
86 self._CreateAndSaveWfAnalysis( 87 self._CreateAndSaveWfAnalysis(
87 master_name, builder_name, build_number, 88 master_name, builder_name, build_number,
88 not_passed_steps, wf_analysis_status.ANALYZED) 89 not_passed_steps, analysis_status.COMPLETED)
89 90
90 failed_steps = ['a'] 91 failed_steps = ['a']
91 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 92 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
92 master_name, builder_name, build_number, failed_steps, False, True) 93 master_name, builder_name, build_number, failed_steps, False, True)
93 94
94 self.assertTrue(need_analysis) 95 self.assertTrue(need_analysis)
95 96
96 def testNewAnalysisIsNotNeededWhenFailedStepsNotProvided(self): 97 def testNewAnalysisIsNotNeededWhenFailedStepsNotProvided(self):
97 master_name = 'm' 98 master_name = 'm'
98 builder_name = 'b 1' 99 builder_name = 'b 1'
99 build_number = 123 100 build_number = 123
100 not_passed_steps = ['a'] 101 not_passed_steps = ['a']
101 self._CreateAndSaveWfAnalysis( 102 self._CreateAndSaveWfAnalysis(
102 master_name, builder_name, build_number, 103 master_name, builder_name, build_number,
103 not_passed_steps, wf_analysis_status.ANALYZED) 104 not_passed_steps, analysis_status.COMPLETED)
104 105
105 failed_steps = None 106 failed_steps = None
106 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 107 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
107 master_name, builder_name, build_number, failed_steps, False, False) 108 master_name, builder_name, build_number, failed_steps, False, False)
108 109
109 self.assertFalse(need_analysis) 110 self.assertFalse(need_analysis)
110 111
111 def testNewAnalysisIsNotNeededWhenNewFailedStepsBeforeCompletedAnalysis(self): 112 def testNewAnalysisIsNotNeededWhenNewFailedStepsBeforeCompletedAnalysis(self):
112 master_name = 'm' 113 master_name = 'm'
113 builder_name = 'b 1' 114 builder_name = 'b 1'
114 build_number = 123 115 build_number = 123
115 not_passed_steps = ['a'] 116 not_passed_steps = ['a']
116 self._CreateAndSaveWfAnalysis( 117 self._CreateAndSaveWfAnalysis(
117 master_name, builder_name, build_number, 118 master_name, builder_name, build_number,
118 not_passed_steps, wf_analysis_status.ANALYZING) 119 not_passed_steps, analysis_status.RUNNING)
119 120
120 failed_steps = ['a', 'b'] 121 failed_steps = ['a', 'b']
121 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 122 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
122 master_name, builder_name, build_number, failed_steps, False, False) 123 master_name, builder_name, build_number, failed_steps, False, False)
123 124
124 self.assertFalse(need_analysis) 125 self.assertFalse(need_analysis)
125 126
126 def testNewAnalysisIsNeededWhenNewFailedStepsAfterCompletedAnalysis(self): 127 def testNewAnalysisIsNeededWhenNewFailedStepsAfterCompletedAnalysis(self):
127 master_name = 'm' 128 master_name = 'm'
128 builder_name = 'b 1' 129 builder_name = 'b 1'
129 build_number = 123 130 build_number = 123
130 not_passed_steps = ['a'] 131 not_passed_steps = ['a']
131 self._CreateAndSaveWfAnalysis( 132 self._CreateAndSaveWfAnalysis(
132 master_name, builder_name, build_number, 133 master_name, builder_name, build_number,
133 not_passed_steps, wf_analysis_status.ANALYZED) 134 not_passed_steps, analysis_status.COMPLETED)
134 135
135 failed_steps = ['a', 'b'] 136 failed_steps = ['a', 'b']
136 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 137 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
137 master_name, builder_name, build_number, failed_steps, False, False) 138 master_name, builder_name, build_number, failed_steps, False, False)
138 139
139 self.assertTrue(need_analysis) 140 self.assertTrue(need_analysis)
140 141
141 def testNewAnalysisIsNeededWhenBuildCompletedAfterLastAnalysis(self): 142 def testNewAnalysisIsNeededWhenBuildCompletedAfterLastAnalysis(self):
142 master_name = 'm' 143 master_name = 'm'
143 builder_name = 'b 1' 144 builder_name = 'b 1'
144 build_number = 123 145 build_number = 123
145 not_passed_steps = ['a'] 146 not_passed_steps = ['a']
146 self._CreateAndSaveWfAnalysis( 147 self._CreateAndSaveWfAnalysis(
147 master_name, builder_name, build_number, 148 master_name, builder_name, build_number,
148 not_passed_steps, wf_analysis_status.ANALYZED, build_completed=False) 149 not_passed_steps, analysis_status.COMPLETED, build_completed=False)
149 150
150 failed_steps = ['a'] 151 failed_steps = ['a']
151 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis( 152 need_analysis = build_failure_analysis_pipelines.NeedANewAnalysis(
152 master_name, builder_name, build_number, failed_steps, True, False) 153 master_name, builder_name, build_number, failed_steps, True, False)
153 154
154 self.assertTrue(need_analysis) 155 self.assertTrue(need_analysis)
155 156
156 def testStartPipelineForNewAnalysis(self): 157 def testStartPipelineForNewAnalysis(self):
157 master_name = 'm' 158 master_name = 'm'
158 builder_name = 'b' 159 builder_name = 'b'
159 build_number = 124 160 build_number = 124
160 161
161 self.mock(build_failure_analysis_pipelines.analyze_build_failure_pipeline, 162 self.mock(build_failure_analysis_pipelines.analyze_build_failure_pipeline,
162 'AnalyzeBuildFailurePipeline', 163 'AnalyzeBuildFailurePipeline',
163 _MockRootPipeline) 164 _MockRootPipeline)
164 _MockRootPipeline.STARTED = False 165 _MockRootPipeline.STARTED = False
165 166
166 build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded( 167 build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded(
167 master_name, builder_name, build_number, failed_steps=['a'], 168 master_name, builder_name, build_number, failed_steps=['a'],
168 build_completed=False, force=False, queue_name='default') 169 build_completed=False, force=False, queue_name=constants.DEFAULT_QUEUE)
169 170
170 analysis = WfAnalysis.Get(master_name, builder_name, build_number) 171 analysis = WfAnalysis.Get(master_name, builder_name, build_number)
171 172
172 self.assertTrue(_MockRootPipeline.STARTED) 173 self.assertTrue(_MockRootPipeline.STARTED)
173 self.assertIsNotNone(analysis) 174 self.assertIsNotNone(analysis)
174 175
175 def testNotStartPipelineForNewAnalysis(self): 176 def testNotStartPipelineForNewAnalysis(self):
176 master_name = 'm' 177 master_name = 'm'
177 builder_name = 'b' 178 builder_name = 'b'
178 build_number = 123 179 build_number = 123
179 not_passed_steps = ['a'] 180 not_passed_steps = ['a']
180 181
181 self._CreateAndSaveWfAnalysis( 182 self._CreateAndSaveWfAnalysis(
182 master_name, builder_name, build_number, 183 master_name, builder_name, build_number,
183 not_passed_steps, wf_analysis_status.ANALYZING) 184 not_passed_steps, analysis_status.RUNNING)
184 185
185 self.mock(build_failure_analysis_pipelines.analyze_build_failure_pipeline, 186 self.mock(build_failure_analysis_pipelines.analyze_build_failure_pipeline,
186 'AnalyzeBuildFailurePipeline', 187 'AnalyzeBuildFailurePipeline',
187 _MockRootPipeline) 188 _MockRootPipeline)
188 _MockRootPipeline.STARTED = False 189 _MockRootPipeline.STARTED = False
189 190
190 build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded( 191 build_failure_analysis_pipelines.ScheduleAnalysisIfNeeded(
191 master_name, builder_name, build_number, failed_steps=['a'], 192 master_name, builder_name, build_number, failed_steps=['a'],
192 build_completed=True, force=False, queue_name='default') 193 build_completed=True, force=False, queue_name=constants.DEFAULT_QUEUE)
193 194
194 self.assertFalse(_MockRootPipeline.STARTED) 195 self.assertFalse(_MockRootPipeline.STARTED)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698