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

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

Issue 1836293002: [Findit] Adding central config test class for unit tests (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Addressing comments 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 2016 The Chromium Authors. All rights reserved. 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 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 json 5 import json
6 6
7 from testing_utils import testing
8
9 from common import buildbucket_client 7 from common import buildbucket_client
10 from common.git_repository import GitRepository 8 from common.git_repository import GitRepository
11 from model.wf_try_job import WfTryJob 9 from model.wf_try_job import WfTryJob
12 from pipeline_wrapper import pipeline_handlers 10 from pipeline_wrapper import pipeline_handlers
13 from waterfall import swarming_util 11 from waterfall import swarming_util
14 from waterfall import trigger_swarming_task_pipeline 12 from waterfall import trigger_swarming_task_pipeline
15 from waterfall import waterfall_config
16 from waterfall.swarming_task_request import SwarmingTaskRequest 13 from waterfall.swarming_task_request import SwarmingTaskRequest
17 from waterfall.swarming_tasks_to_try_job_pipeline import ( 14 from waterfall.swarming_tasks_to_try_job_pipeline import (
18 SwarmingTasksToTryJobPipeline) 15 SwarmingTasksToTryJobPipeline)
16 from waterfall.test import wf_configured_test_case
19 from waterfall.try_job_type import TryJobType 17 from waterfall.try_job_type import TryJobType
20 18
21 19
22 _ISOLATED_SERVER = 'https://isolateserver.appspot.com' 20 _ISOLATED_SERVER = 'https://isolateserver.appspot.com'
23 _ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com' 21 _ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com'
24 _SAMPLE_FAILURE_LOG = { 22 _SAMPLE_FAILURE_LOG = {
25 'per_iteration_data': [ 23 'per_iteration_data': [
26 { 24 {
27 'TestSuite1.test1': [ 25 'TestSuite1.test1': [
28 { 26 {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 'TestSuite1.test3': [ 73 'TestSuite1.test3': [
76 { 74 {
77 'status': 'FAILURE', 75 'status': 'FAILURE',
78 'other_info': 'N/A' 76 'other_info': 'N/A'
79 } 77 }
80 ] 78 ]
81 } 79 }
82 ] 80 ]
83 } 81 }
84 82
85 _MOCK_SWARMING_SETTINGS = {
86 'task_timeout_hours': 23,
87 'server_query_interval_seconds': 60,
88 'iterations_to_rerun': 10,
89 'server_host': 'chromium-swarm.appspot.com',
90 'default_request_priority': 150,
91 'isolated_storage_url': 'isolateserver.storage.googleapis.com',
92 'isolated_server': 'https://isolateserver.appspot.com',
93 'request_expiration_hours': 20
94 }
95 83
96 _MOCK_TRY_JOB_SETTINGS = { 84 class SwarmingTasksToTryJobPipelineTest(
97 'server_query_interval_seconds': 60, 85 wf_configured_test_case.WaterfallConfiguredTestCase):
98 'job_timeout_hours': 5,
99 'allowed_response_error_times': 1
100 }
101
102
103 class SwarmingTasksToTryJobPipelineTest(testing.AppengineTestCase):
104 app_module = pipeline_handlers._APP 86 app_module = pipeline_handlers._APP
105 87
106 def _MockGetTrybotForWaterfallBuilder(self, *_):
107 def MockedGetTrybotForWaterfallBuilder(*_):
108 return 'linux_chromium_variable', 'master.tryserver.chromium.linux'
109 self.mock(waterfall_config, 'GetTrybotForWaterfallBuilder',
110 MockedGetTrybotForWaterfallBuilder)
111
112 def _MockTriggerTryJobs(self, responses): 88 def _MockTriggerTryJobs(self, responses):
113 def MockedTriggerTryJobs(*_): 89 def MockedTriggerTryJobs(*_):
114 try_job_results = [] 90 try_job_results = []
115 for response in responses: 91 for response in responses:
116 if response.get('error'): # pragma: no cover 92 if response.get('error'): # pragma: no cover
117 try_job_results.append(( 93 try_job_results.append((
118 buildbucket_client.BuildbucketError(response['error']), None)) 94 buildbucket_client.BuildbucketError(response['error']), None))
119 else: 95 else:
120 try_job_results.append(( 96 try_job_results.append((
121 None, buildbucket_client.BuildbucketBuild(response['build']))) 97 None, buildbucket_client.BuildbucketBuild(response['build'])))
122 return try_job_results 98 return try_job_results
123 self.mock(buildbucket_client, 'TriggerTryJobs', MockedTriggerTryJobs) 99 self.mock(buildbucket_client, 'TriggerTryJobs', MockedTriggerTryJobs)
124 100
125 def _MockGetSwarmingSettings(self):
126 def _GetMockSwarmingSettings():
127 return _MOCK_SWARMING_SETTINGS
128 self.mock(waterfall_config, 'GetSwarmingSettings', _GetMockSwarmingSettings)
129
130 def _MockGetTryJobSettings(self):
131 def _GetMockTryJobSettings():
132 return _MOCK_TRY_JOB_SETTINGS
133 self.mock(waterfall_config, 'GetTryJobSettings', _GetMockTryJobSettings)
134
135 def _MockGetTryJobs(self, build_id): 101 def _MockGetTryJobs(self, build_id):
136 def MockedGetTryJobs(*_): 102 def MockedGetTryJobs(*_):
137 data = { 103 data = {
138 '1': { 104 '1': {
139 'build': { 105 'build': {
140 'id': '1', 106 'id': '1',
141 'url': 'url', 107 'url': 'url',
142 'status': 'COMPLETED', 108 'status': 'COMPLETED',
143 'result_details_json': json.dumps({ 109 'result_details_json': json.dumps({
144 'properties': { 110 'properties': {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 190
225 responses = [ 191 responses = [
226 { 192 {
227 'build': { 193 'build': {
228 'id': '1', 194 'id': '1',
229 'url': 'url', 195 'url': 'url',
230 'status': 'SCHEDULED', 196 'status': 'SCHEDULED',
231 } 197 }
232 } 198 }
233 ] 199 ]
234 self._MockGetTrybotForWaterfallBuilder(master_name, builder_name)
235 self._MockTriggerTryJobs(responses) 200 self._MockTriggerTryJobs(responses)
236 self._MockGetTryJobs('1') 201 self._MockGetTryJobs('1')
237 self._MockGetChangeLog('rev2') 202 self._MockGetChangeLog('rev2')
238 self._MockGetTryJobSettings()
239 203
240 WfTryJob.Create(master_name, builder_name, build_number).put() 204 WfTryJob.Create(master_name, builder_name, build_number).put()
241 205
242 root_pipeline = SwarmingTasksToTryJobPipeline( 206 root_pipeline = SwarmingTasksToTryJobPipeline(
243 master_name, builder_name, build_number, 'rev1', 'rev2', ['rev2'], 207 master_name, builder_name, build_number, 'rev1', 'rev2', ['rev2'],
244 TryJobType.COMPILE) 208 TryJobType.COMPILE)
245 root_pipeline.start() 209 root_pipeline.start()
246 self.execute_queued_tasks() 210 self.execute_queued_tasks()
247 211
248 try_job = WfTryJob.Get(master_name, builder_name, build_number) 212 try_job = WfTryJob.Get(master_name, builder_name, build_number)
(...skipping 24 matching lines...) Expand all
273 237
274 def testSuccessfullyScheduleNewTryJobForTest(self): 238 def testSuccessfullyScheduleNewTryJobForTest(self):
275 master_name = 'm' 239 master_name = 'm'
276 builder_name = 'b' 240 builder_name = 'b'
277 build_number = 1 241 build_number = 1
278 targeted_tests = { 242 targeted_tests = {
279 'a_test': ['TestSuite1.test1', 'TestSuite1.test3'], 243 'a_test': ['TestSuite1.test1', 'TestSuite1.test3'],
280 'b_test': [], # Non-swarming test. 244 'b_test': [], # Non-swarming test.
281 } 245 }
282 246
283 self._MockGetSwarmingSettings()
284 self._MockGetTryJobSettings()
285
286 # Mocks for TriggerSwarmingTaskPipeline. 247 # Mocks for TriggerSwarmingTaskPipeline.
287 def MockedDownloadSwarmingTaskData(*_): 248 def MockedDownloadSwarmingTaskData(*_):
288 return [{'task_id': '1'}, {'task_id': '2'}] 249 return [{'task_id': '1'}, {'task_id': '2'}]
289 self.mock(swarming_util, 'ListSwarmingTasksDataByTags', 250 self.mock(swarming_util, 'ListSwarmingTasksDataByTags',
290 MockedDownloadSwarmingTaskData) 251 MockedDownloadSwarmingTaskData)
291 252
292 def MockedGetSwarmingTaskRequest(ref_task_id, *_): 253 def MockedGetSwarmingTaskRequest(ref_task_id, *_):
293 self.assertEqual('1', ref_task_id) 254 self.assertEqual('1', ref_task_id)
294 return SwarmingTaskRequest.Deserialize({ 255 return SwarmingTaskRequest.Deserialize({
295 'expiration_secs': 3600, 256 'expiration_secs': 3600,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 # Mocks for try job pipelines. 315 # Mocks for try job pipelines.
355 responses = [ 316 responses = [
356 { 317 {
357 'build': { 318 'build': {
358 'id': '2', 319 'id': '2',
359 'url': 'url', 320 'url': 'url',
360 'status': 'SCHEDULED', 321 'status': 'SCHEDULED',
361 } 322 }
362 } 323 }
363 ] 324 ]
364 self._MockGetTrybotForWaterfallBuilder(master_name, builder_name)
365 self._MockTriggerTryJobs(responses) 325 self._MockTriggerTryJobs(responses)
366 self._MockGetTryJobs('2') 326 self._MockGetTryJobs('2')
367 self._MockGetChangeLog('rev1') 327 self._MockGetChangeLog('rev1')
368 328
369 WfTryJob.Create(master_name, builder_name, build_number).put() 329 WfTryJob.Create(master_name, builder_name, build_number).put()
370 330
371 root_pipeline = SwarmingTasksToTryJobPipeline( 331 root_pipeline = SwarmingTasksToTryJobPipeline(
372 master_name, builder_name, build_number, 'rev0', 'rev1', ['rev1'], 332 master_name, builder_name, build_number, 'rev0', 'rev1', ['rev1'],
373 TryJobType.TEST, None, targeted_tests) 333 TryJobType.TEST, None, targeted_tests)
374 root_pipeline.start() 334 root_pipeline.start()
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 'commit_position': '1', 367 'commit_position': '1',
408 'review_url': 'url_1' 368 'review_url': 'url_1'
409 } 369 }
410 } 370 }
411 } 371 }
412 } 372 }
413 } 373 }
414 ] 374 ]
415 375
416 self.assertEqual(expected_try_job_results, try_job.test_results) 376 self.assertEqual(expected_try_job_results, try_job.test_results)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698