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

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

Issue 1591003002: [Findit] Modify tryjob pipelines to trigger try jobs for test failure. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: . Created 4 years, 10 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 from datetime import datetime 5 from datetime import datetime
6 import json 6 import json
7 from testing_utils import testing 7 from testing_utils import testing
8 8
9 from common import buildbucket_client 9 from common import buildbucket_client
10 from model import wf_analysis_status 10 from model import wf_analysis_status
11 from model.wf_try_job import WfTryJob 11 from model.wf_try_job import WfTryJob
12 from model.wf_try_job_data import WfTryJobData 12 from model.wf_try_job_data import WfTryJobData
13 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline 13 from waterfall.monitor_try_job_pipeline import MonitorTryJobPipeline
14 from waterfall.try_job_type import TryJobType
14 15
15 16
16 class MonitorTryJobPipelineTest(testing.AppengineTestCase): 17 class MonitorTryJobPipelineTest(testing.AppengineTestCase):
17 18
18 def _Mock_GetTryJobs(self, build_id): 19 def _Mock_GetTryJobs(self, build_id):
19 def Mocked_GetTryJobs(*_): 20 def Mocked_GetTryJobs(*_):
20 data = { 21 data = {
21 '1': { 22 '1': {
22 'build': { 23 'build': {
23 'id': '1', 24 'id': '1',
(...skipping 12 matching lines...) Expand all
36 } 37 }
37 } 38 }
38 }) 39 })
39 } 40 }
40 }, 41 },
41 '2': { 42 '2': {
42 'error': { 43 'error': {
43 'reason': 'BUILD_NOT_FOUND', 44 'reason': 'BUILD_NOT_FOUND',
44 'message': 'message', 45 'message': 'message',
45 } 46 }
47 },
48 '3': {
49 'build': {
50 'id': '3',
51 'url': 'url',
52 'status': 'COMPLETED',
53 'result_details_json': (
54 '{"properties": {"result": {"rev1": {"a_test": {"status":'
55 ' "passed", "valid": true}}, "rev2": {"a_test": '
56 '{"status": "failed", "valid": true, "failures": ["test1"'
57 ', "test2"]}}}}}')
58 }
46 } 59 }
47 } 60 }
48 compile_results = [] 61 try_job_results = []
49 build_error = data.get(build_id) 62 build_error = data.get(build_id)
50 if build_error.get('error'): # pragma: no cover 63 if build_error.get('error'): # pragma: no cover
51 compile_results.append(( 64 try_job_results.append((
52 buildbucket_client.BuildbucketError(build_error['error']), None)) 65 buildbucket_client.BuildbucketError(build_error['error']), None))
53 else: 66 else:
54 compile_results.append(( 67 try_job_results.append((
55 None, buildbucket_client.BuildbucketBuild(build_error['build']))) 68 None, buildbucket_client.BuildbucketBuild(build_error['build'])))
56 return compile_results 69 return try_job_results
57 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs) 70 self.mock(buildbucket_client, 'GetTryJobs', Mocked_GetTryJobs)
58 71
59 def testMicrosecondsToDatetime(self): 72 def testMicrosecondsToDatetime(self):
60 self.assertEqual( 73 self.assertEqual(
61 datetime(2016, 2, 1, 14, 59, 34, 0), 74 datetime(2016, 2, 1, 14, 59, 34, 0),
62 MonitorTryJobPipeline._MicrosecondsToDatetime(1454367574000000)) 75 MonitorTryJobPipeline._MicrosecondsToDatetime(1454367574000000))
63 self.assertIsNone(MonitorTryJobPipeline._MicrosecondsToDatetime(None)) 76 self.assertIsNone(MonitorTryJobPipeline._MicrosecondsToDatetime(None))
64 77
65 def testUpdateTryJobMetadataForBuildError(self): 78 def testUpdateTryJobMetadataForBuildError(self):
66 error_data = { 79 error_data = {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 'url': 'url', 146 'url': 'url',
134 'try_job_id': '1', 147 'try_job_id': '1',
135 } 148 }
136 ] 149 ]
137 try_job.status = wf_analysis_status.ANALYZING 150 try_job.status = wf_analysis_status.ANALYZING
138 try_job.put() 151 try_job.put()
139 self._Mock_GetTryJobs(try_job_id) 152 self._Mock_GetTryJobs(try_job_id)
140 153
141 pipeline = MonitorTryJobPipeline() 154 pipeline = MonitorTryJobPipeline()
142 compile_result = pipeline.run( 155 compile_result = pipeline.run(
143 master_name, builder_name, build_number, try_job_id) 156 master_name, builder_name, build_number, TryJobType.COMPILE,
157 try_job_id)
144 158
145 expected_compile_result = { 159 expected_compile_result = {
146 'report': { 160 'report': {
147 'result': { 161 'result': {
148 'rev1': 'passed', 162 'rev1': 'passed',
149 'rev2': 'failed' 163 'rev2': 'failed'
150 }, 164 },
151 'metadata': { 165 'metadata': {
152 'regression_range_size': regression_range_size 166 'regression_range_size': regression_range_size
153 } 167 }
154 }, 168 },
155 'url': 'url', 169 'url': 'url',
156 'try_job_id': '1', 170 'try_job_id': '1',
157 } 171 }
158 172
159 self.assertEqual(expected_compile_result, compile_result) 173 self.assertEqual(expected_compile_result, compile_result)
160 174
161 try_job = WfTryJob.Get(master_name, builder_name, build_number) 175 try_job = WfTryJob.Get(master_name, builder_name, build_number)
162 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) 176 self.assertEqual(expected_compile_result, try_job.compile_results[-1])
163 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status) 177 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status)
164 178
165 try_job_data = WfTryJobData.Get(try_job_id) 179 try_job_data = WfTryJobData.Get(try_job_id)
166 self.assertEqual(try_job_data.regression_range_size, regression_range_size) 180 self.assertEqual(try_job_data.regression_range_size, regression_range_size)
181
182 def testGetTryJobsForTestSuccess(self):
183 master_name = 'm'
184 builder_name = 'b'
185 build_number = 1
186 try_job_id = '3'
187
188 try_job = WfTryJob.Create(master_name, builder_name, build_number)
189 try_job.test_results = [
190 {
191 'report': None,
192 'url': 'url',
193 'try_job_id': '3',
194 }
195 ]
196 try_job.status = wf_analysis_status.ANALYZING
197 try_job.put()
198 self._Mock_GetTryJobs(try_job_id)
199
200 pipeline = MonitorTryJobPipeline()
201 test_result = pipeline.run(
202 master_name, builder_name, build_number, TryJobType.TEST,
203 try_job_id)
204
205 expected_test_result = {
206 'report': {
207 'rev1': {
208 'a_test': {
209 'status': 'passed',
210 'valid': True
211 }
212 },
213 'rev2': {
214 'a_test': {
215 'status': 'failed',
216 'valid': True,
217 'failures': ['test1', 'test2']
218 }
219 }
220 },
221 'url': 'url',
222 'try_job_id': '3',
223 }
224 self.assertEqual(expected_test_result, test_result)
225
226 try_job = WfTryJob.Get(master_name, builder_name, build_number)
227 self.assertEqual(expected_test_result, try_job.test_results[-1])
228 self.assertEqual(wf_analysis_status.ANALYZING, try_job.status)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698