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

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

Issue 1154593005: [Findit] Add a sub-pipeline to analyze failures caused by DEPS rolls. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Improve readability. Created 5 years, 6 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 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 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 os 5 import os
6 6
7 from pipeline_utils.appengine_third_party_pipeline_src_pipeline import handlers 7 from pipeline_utils.appengine_third_party_pipeline_src_pipeline import handlers
8 from testing_utils import testing 8 from testing_utils import testing
9 9
10 from common import chromium_deps
10 from model.wf_analysis import WfAnalysis 11 from model.wf_analysis import WfAnalysis
11 from model import wf_analysis_status 12 from model import wf_analysis_status
12 from waterfall import buildbot 13 from waterfall import buildbot
13 from waterfall.analyze_build_failure_pipeline import AnalyzeBuildFailurePipeline 14 from waterfall.analyze_build_failure_pipeline import AnalyzeBuildFailurePipeline
14 from waterfall import lock_util 15 from waterfall import lock_util
15 16
16 17
17 class AnalyzeBuildFailurePipelineTest(testing.AppengineTestCase): 18 class AnalyzeBuildFailurePipelineTest(testing.AppengineTestCase):
18 app_module = handlers._APP 19 app_module = handlers._APP
19 20
20 def _MockChangeLog( 21 def _MockChangeLog(
21 self, urlfetch, user_name, revision, commit_position, file_path): 22 self, urlfetch, user_name, revision, commit_position, file_path):
22 url = ('https://chromium.googlesource.com/chromium/src/+/%s?format=json' 23 url = ('https://chromium.googlesource.com/chromium/src/+/%s?format=json'
23 % revision) 24 % revision)
24 25
25 COMMIT_LOG_TEMPLATE = """)]}' 26 COMMIT_LOG_TEMPLATE = """)]}'
26 { 27 {
27 "commit": "REVISION", 28 "commit": "REVISION",
28 "tree": "tree_rev", 29 "tree": "tree_rev",
29 "parents": [ 30 "parents": [
(...skipping 22 matching lines...) Expand all
52 "new_path": "FILE_PATH" 53 "new_path": "FILE_PATH"
53 } 54 }
54 ] 55 ]
55 } 56 }
56 """ 57 """
57 commit_log = COMMIT_LOG_TEMPLATE.replace( 58 commit_log = COMMIT_LOG_TEMPLATE.replace(
58 'REVISION', revision).replace('USER_NAME', user_name).replace( 59 'REVISION', revision).replace('USER_NAME', user_name).replace(
59 'COMMIT_POSITION', str(commit_position)).replace('FILE_PATH', file_path) 60 'COMMIT_POSITION', str(commit_position)).replace('FILE_PATH', file_path)
60 urlfetch.register_handler(url, commit_log) 61 urlfetch.register_handler(url, commit_log)
61 62
62 def _Setup(self, master_name, builder_name, build_number): 63 def _Setup(self, master_name, builder_name, build_number):
63 analysis = WfAnalysis.Create(master_name, builder_name, build_number) 64 analysis = WfAnalysis.Create(master_name, builder_name, build_number)
64 analysis.status = wf_analysis_status.ANALYZING 65 analysis.status = wf_analysis_status.ANALYZING
65 analysis.put() 66 analysis.put()
66 67
67 def _WaitUntilDownloadAllowed(*_): 68 def MockWaitUntilDownloadAllowed(*_):
68 return True 69 return True
69 70 self.mock(
70 self.mock(lock_util, 'WaitUntilDownloadAllowed', _WaitUntilDownloadAllowed) 71 lock_util, 'WaitUntilDownloadAllowed', MockWaitUntilDownloadAllowed)
71 72
72 with self.mock_urlfetch() as urlfetch: 73 with self.mock_urlfetch() as urlfetch:
73 # Mock build data. 74 # Mock build data.
74 for i in range(2): 75 for i in range(2):
75 build_url = buildbot.CreateBuildUrl( 76 build_url = buildbot.CreateBuildUrl(
76 master_name, builder_name, build_number - i, json_api=True) 77 master_name, builder_name, build_number - i, json_api=True)
77 file_name = os.path.join(os.path.dirname(__file__), 'data', 78 file_name = os.path.join(os.path.dirname(__file__), 'data',
78 'm_b_%s.json' % (build_number - i)) 79 'm_b_%s.json' % (build_number - i))
79 with open(file_name, 'r') as f: 80 with open(file_name, 'r') as f:
80 urlfetch.register_handler(build_url, f.read()) 81 urlfetch.register_handler(build_url, f.read())
81 # Mock step log. 82 # Mock step log.
82 step_log_url = buildbot.CreateStdioLogUrl( 83 step_log_url = buildbot.CreateStdioLogUrl(
83 master_name, builder_name, build_number, 'a') 84 master_name, builder_name, build_number, 'a')
84 urlfetch.register_handler( 85 urlfetch.register_handler(
85 step_log_url, 'error in file a/b/x.cc:89 ...') 86 step_log_url, 'error in file a/b/x.cc:89 ...')
86 87
87 # Mock change logs. 88 # Mock change logs.
88 self._MockChangeLog(urlfetch, 'user1', 'some_git_hash', 8888, 'a/b/x.cc') 89 self._MockChangeLog(urlfetch, 'user1', 'some_git_hash', 8888, 'a/b/x.cc')
89 self._MockChangeLog( 90 self._MockChangeLog(
90 urlfetch, 'user1', '64c72819e898e952103b63eabc12772f9640af07', 91 urlfetch, 'user1', '64c72819e898e952103b63eabc12772f9640af07',
91 8887, 'd/e/y.cc') 92 8887, 'd/e/y.cc')
92 93
94 def MockGetChromeDependency(*_):
95 return {}
96 self.mock(chromium_deps, 'GetChromeDependency', MockGetChromeDependency)
97
93 def testBuildFailurePipeline(self): 98 def testBuildFailurePipeline(self):
94 master_name = 'm' 99 master_name = 'm'
95 builder_name = 'b' 100 builder_name = 'b'
96 build_number = 124 101 build_number = 124
97 102
98 self._Setup(master_name, builder_name, build_number) 103 self._Setup(master_name, builder_name, build_number)
99 104
100 root_pipeline = AnalyzeBuildFailurePipeline(master_name, 105 root_pipeline = AnalyzeBuildFailurePipeline(master_name,
101 builder_name, 106 builder_name,
102 build_number) 107 build_number)
(...skipping 30 matching lines...) Expand all
133 self.assertEqual(expected_analysis_result, analysis.result) 138 self.assertEqual(expected_analysis_result, analysis.result)
134 self.assertIsNotNone(analysis.result_status) 139 self.assertIsNotNone(analysis.result_status)
135 140
136 def testBuildFailurePipelineStartWithNoneResultStatus(self): 141 def testBuildFailurePipelineStartWithNoneResultStatus(self):
137 master_name = 'm' 142 master_name = 'm'
138 builder_name = 'b' 143 builder_name = 'b'
139 build_number = 124 144 build_number = 124
140 145
141 self._Setup(master_name, builder_name, build_number) 146 self._Setup(master_name, builder_name, build_number)
142 147
143 root_pipeline = AnalyzeBuildFailurePipeline(master_name, 148 root_pipeline = AnalyzeBuildFailurePipeline(master_name,
144 builder_name, 149 builder_name,
145 build_number) 150 build_number)
146 root_pipeline._ResetAnalysis(master_name, builder_name, build_number) 151 root_pipeline._ResetAnalysis(master_name, builder_name, build_number)
147 analysis = WfAnalysis.Get(master_name, builder_name, build_number) 152 analysis = WfAnalysis.Get(master_name, builder_name, build_number)
148 self.assertIsNotNone(analysis) 153 self.assertIsNotNone(analysis)
149 self.assertEqual(wf_analysis_status.ANALYZING, analysis.status) 154 self.assertEqual(wf_analysis_status.ANALYZING, analysis.status)
150 self.assertIsNone(analysis.result_status) 155 self.assertIsNone(analysis.result_status)
151 156
152 def testAnalyzeBuildFailurePipelineAbortedWithAnalysis(self): 157 def testAnalyzeBuildFailurePipelineAbortedWithAnalysis(self):
153 master_name = 'm' 158 master_name = 'm'
154 builder_name = 'b' 159 builder_name = 'b'
155 build_number = 124 160 build_number = 124
156 161
157 self._Setup(master_name, builder_name, build_number) 162 self._Setup(master_name, builder_name, build_number)
158 163
159 root_pipeline = AnalyzeBuildFailurePipeline(master_name, 164 root_pipeline = AnalyzeBuildFailurePipeline(master_name,
160 builder_name, 165 builder_name,
161 build_number) 166 build_number)
162 root_pipeline._LogUnexpectedAborting(True) 167 root_pipeline._LogUnexpectedAborting(True)
163 168
164 analysis = WfAnalysis.Get(master_name, builder_name, build_number) 169 analysis = WfAnalysis.Get(master_name, builder_name, build_number)
165 self.assertIsNotNone(analysis) 170 self.assertIsNotNone(analysis)
166 self.assertEqual(wf_analysis_status.ERROR, analysis.status) 171 self.assertEqual(wf_analysis_status.ERROR, analysis.status)
167 self.assertIsNone(analysis.result_status) 172 self.assertIsNone(analysis.result_status)
168 173
169 def testAnalyzeBuildFailurePipelineAbortedWithoutAnalysis(self): 174 def testAnalyzeBuildFailurePipelineAbortedWithoutAnalysis(self):
170 master_name = 'm' 175 master_name = 'm'
171 builder_name = 'b' 176 builder_name = 'b'
172 build_number = 124 177 build_number = 124
173 178
174 root_pipeline = AnalyzeBuildFailurePipeline(master_name, 179 root_pipeline = AnalyzeBuildFailurePipeline(master_name,
175 builder_name, 180 builder_name,
176 build_number) 181 build_number)
177 root_pipeline._LogUnexpectedAborting(True) 182 root_pipeline._LogUnexpectedAborting(True)
178 183
179 analysis = WfAnalysis.Get(master_name, builder_name, build_number) 184 analysis = WfAnalysis.Get(master_name, builder_name, build_number)
180 self.assertIsNone(analysis) 185 self.assertIsNone(analysis)
181 186
182 def testAnalyzeBuildFailurePipelineNotAborted(self): 187 def testAnalyzeBuildFailurePipelineNotAborted(self):
183 master_name = 'm' 188 master_name = 'm'
184 builder_name = 'b' 189 builder_name = 'b'
185 build_number = 124 190 build_number = 124
186 191
187 self._Setup(master_name, builder_name, build_number) 192 self._Setup(master_name, builder_name, build_number)
188 193
189 root_pipeline = AnalyzeBuildFailurePipeline(master_name, 194 root_pipeline = AnalyzeBuildFailurePipeline(master_name,
190 builder_name, 195 builder_name,
191 build_number) 196 build_number)
192 root_pipeline._LogUnexpectedAborting(False) 197 root_pipeline._LogUnexpectedAborting(False)
193 198
194 analysis = WfAnalysis.Get(master_name, builder_name, build_number) 199 analysis = WfAnalysis.Get(master_name, builder_name, build_number)
195 self.assertIsNotNone(analysis) 200 self.assertIsNotNone(analysis)
196 self.assertNotEqual(wf_analysis_status.ERROR, analysis.status) 201 self.assertNotEqual(wf_analysis_status.ERROR, analysis.status)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698