| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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]) |
| OLD | NEW |