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

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

Issue 2139093002: [Findit] Trigger swarming tasks after detech_first_faliure_pipeline (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: . Created 4 years, 5 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 common.git_repository import GitRepository 7 from common.git_repository import GitRepository
8 from common.pipeline_wrapper import BasePipeline 8 from common.pipeline_wrapper import BasePipeline
9 from common.pipeline_wrapper import pipeline_handlers 9 from common.pipeline_wrapper import pipeline_handlers
10 from common.waterfall import buildbucket_client 10 from common.waterfall import buildbucket_client
11 from model import result_status 11 from model import result_status
12 from model.wf_analysis import WfAnalysis 12 from model.wf_analysis import WfAnalysis
13 from model.wf_swarming_task import WfSwarmingTask
13 from model.wf_try_job import WfTryJob 14 from model.wf_try_job import WfTryJob
14 from waterfall import send_notification_for_culprit_pipeline 15 from waterfall import send_notification_for_culprit_pipeline
15 from waterfall import swarming_util 16 from waterfall import swarming_util
16 from waterfall import trigger_swarming_task_pipeline 17 from waterfall import trigger_swarming_task_pipeline
17 from waterfall.swarming_task_request import SwarmingTaskRequest 18 from waterfall.swarming_task_request import SwarmingTaskRequest
18 from waterfall.swarming_tasks_to_try_job_pipeline import ( 19 from waterfall.swarming_tasks_to_try_job_pipeline import (
19 SwarmingTasksToTryJobPipeline) 20 SwarmingTasksToTryJobPipeline)
20 from waterfall.test import wf_testcase 21 from waterfall.test import wf_testcase
21 from waterfall.try_job_type import TryJobType 22 from waterfall.try_job_type import TryJobType
22 23
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 self.assertEqual(analysis.result_status, 256 self.assertEqual(analysis.result_status,
256 result_status.FOUND_UNTRIAGED) 257 result_status.FOUND_UNTRIAGED)
257 self.assertEqual(analysis.suspected_cls, 258 self.assertEqual(analysis.suspected_cls,
258 [expected_suspected_cl]) 259 [expected_suspected_cl])
259 260
260 def testSuccessfullyScheduleNewTryJobForTest(self): 261 def testSuccessfullyScheduleNewTryJobForTest(self):
261 master_name = 'm' 262 master_name = 'm'
262 builder_name = 'b' 263 builder_name = 'b'
263 build_number = 1 264 build_number = 1
264 targeted_tests = { 265 targeted_tests = {
265 'a_test': ['TestSuite1.PRE_test1', 'TestSuite1.test3'], 266 'a_test': ['TestSuite1.test1', 'TestSuite1.test3'],
266 'b_test': [], # Non-swarming test. 267 'b_test': [], # Non-swarming test.
267 } 268 }
268 269
269 # Mocks for TriggerSwarmingTaskPipeline.
270 def MockedDownloadSwarmingTaskData(*_):
271 return [{'task_id': '1'}, {'task_id': '2'}]
272 self.mock(swarming_util, 'ListSwarmingTasksDataByTags',
273 MockedDownloadSwarmingTaskData)
274
275 def MockedGetSwarmingTaskRequest(ref_task_id, *_):
276 self.assertEqual('1', ref_task_id)
277 return SwarmingTaskRequest.Deserialize({
278 'expiration_secs': 3600,
279 'name': 'ref_task_request',
280 'parent_task_id': 'pti',
281 'priority': 25,
282 'properties': {
283 'command': 'cmd',
284 'dimensions': [{'key': 'k', 'value': 'v'}],
285 'env': [
286 {'key': 'a', 'value': '1'},
287 {'key': 'GTEST_SHARD_INDEX', 'value': '1'},
288 {'key': 'GTEST_TOTAL_SHARDS', 'value': '5'},
289 ],
290 'execution_timeout_secs': 3600,
291 'extra_args': ['--flag=value', '--gtest_filter=d.f'],
292 'grace_period_secs': 30,
293 'idempotent': True,
294 'inputs_ref': {'a': 1},
295 'io_timeout_secs': 1200,
296 },
297 'tags': ['master:a', 'buildername:b'],
298 'user': 'user',
299 })
300 self.mock(swarming_util, 'GetSwarmingTaskRequest',
301 MockedGetSwarmingTaskRequest)
302
303 new_request_json = {}
304 def MockedTriggerSwarmingTask(new_request, *_):
305 self.assertEqual({}, new_request_json)
306 new_request_json.update(new_request.Serialize())
307 return 'task_id1'
308 self.mock(swarming_util, 'TriggerSwarmingTask', MockedTriggerSwarmingTask)
309
310 def MockedGetSwarmingTaskName(*_):
311 return 'new_task_name'
312 self.mock(trigger_swarming_task_pipeline, '_GetSwarmingTaskName',
313 MockedGetSwarmingTaskName)
314
315 # Mocks for ProcessSwarmingTaskResultPipeline. 270 # Mocks for ProcessSwarmingTaskResultPipeline.
316 def MockedGetSwarmingTaskResultById(task_id, _): 271 def MockedGetSwarmingTaskResultById(task_id, _):
317 swarming_task_results = { 272 swarming_task_results = {
318 'task_id1': { 273 'task_id1': {
319 'state': 'COMPLETED', 274 'state': 'COMPLETED',
320 'outputs_ref': { 275 'outputs_ref': {
321 'isolatedserver': _ISOLATED_SERVER, 276 'isolatedserver': _ISOLATED_SERVER,
322 'namespace': 'default-gzip', 277 'namespace': 'default-gzip',
323 'isolated': 'shard1_isolated' 278 'isolated': 'shard1_isolated'
324 } 279 }
(...skipping 17 matching lines...) Expand all
342 'url': 'url', 297 'url': 'url',
343 'status': 'SCHEDULED', 298 'status': 'SCHEDULED',
344 } 299 }
345 } 300 }
346 ] 301 ]
347 self._MockTriggerTryJobs(responses) 302 self._MockTriggerTryJobs(responses)
348 self._MockGetTryJobs('2') 303 self._MockGetTryJobs('2')
349 self._MockGetChangeLog('rev1') 304 self._MockGetChangeLog('rev1')
350 self._Mock_SendNotificationForCulpritPipeline() 305 self._Mock_SendNotificationForCulpritPipeline()
351 306
307 task = WfSwarmingTask.Create(
308 master_name, builder_name, build_number, 'a_test')
309 task.task_id = 'task_id1'
310 task.put()
352 WfTryJob.Create(master_name, builder_name, build_number).put() 311 WfTryJob.Create(master_name, builder_name, build_number).put()
353 analysis = WfAnalysis.Create(master_name, builder_name, build_number) 312 analysis = WfAnalysis.Create(master_name, builder_name, build_number)
354 analysis.put() 313 analysis.put()
355 314
356 root_pipeline = SwarmingTasksToTryJobPipeline( 315 root_pipeline = SwarmingTasksToTryJobPipeline(
357 master_name, builder_name, build_number, 'rev0', 'rev1', ['rev1'], 316 master_name, builder_name, build_number, 'rev0', 'rev1', ['rev1'],
358 TryJobType.TEST, None, targeted_tests) 317 TryJobType.TEST, None, targeted_tests)
359 root_pipeline.start() 318 root_pipeline.start()
360 self.execute_queued_tasks() 319 self.execute_queued_tasks()
361 320
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 } 358 }
400 } 359 }
401 } 360 }
402 } 361 }
403 ] 362 ]
404 363
405 self.assertEqual(expected_try_job_results, try_job.test_results) 364 self.assertEqual(expected_try_job_results, try_job.test_results)
406 self.assertEqual(analysis.result_status, 365 self.assertEqual(analysis.result_status,
407 result_status.FOUND_UNTRIAGED) 366 result_status.FOUND_UNTRIAGED)
408 self.assertEqual(analysis.suspected_cls, [expected_suspected_cl]) 367 self.assertEqual(analysis.suspected_cls, [expected_suspected_cl])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698