| 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 time | 5 import time |
| 6 | 6 |
| 7 from model import analysis_status | 7 from model import analysis_status |
| 8 from model.flake.flake_swarming_task import FlakeSwarmingTask |
| 8 from model.wf_swarming_task import WfSwarmingTask | 9 from model.wf_swarming_task import WfSwarmingTask |
| 9 from waterfall import swarming_util | 10 from waterfall import swarming_util |
| 10 from waterfall import trigger_swarming_task_pipeline | |
| 11 from waterfall import waterfall_config | 11 from waterfall import waterfall_config |
| 12 from waterfall.swarming_task_request import SwarmingTaskRequest | 12 from waterfall.swarming_task_request import SwarmingTaskRequest |
| 13 from waterfall.test import wf_testcase | 13 from waterfall.test import wf_testcase |
| 14 from waterfall.trigger_base_swarming_task_pipeline import ( |
| 15 TriggerBaseSwarmingTaskPipeline) |
| 16 from waterfall.trigger_flake_swarming_task_pipeline import ( |
| 17 TriggerFlakeSwarmingTaskPipeline) |
| 14 from waterfall.trigger_swarming_task_pipeline import TriggerSwarmingTaskPipeline | 18 from waterfall.trigger_swarming_task_pipeline import TriggerSwarmingTaskPipeline |
| 15 | 19 |
| 16 | 20 |
| 17 class TriggerSwarmingTaskPipelineTest(wf_testcase.WaterfallTestCase): | 21 class TriggerBaseSwarmingTaskPipelineTest(wf_testcase.WaterfallTestCase): |
| 18 | 22 |
| 19 def testNoNewSwarmingTaskIsNeeded(self): | 23 def testNoNewSwarmingTaskIsNeeded(self): |
| 20 master_name = 'm' | 24 master_name = 'm' |
| 21 builder_name = 'b' | 25 builder_name = 'b' |
| 22 build_number = 1 | 26 build_number = 1 |
| 23 step_name = 's' | 27 step_name = 's' |
| 24 tests = ['a.b'] | 28 tests = ['a.b'] |
| 25 | 29 |
| 26 def MockedListSwarmingTasksDataByTags(*_): | |
| 27 raise Exception('Fail.') # pragma: no cover. Should never be reached. | |
| 28 self.mock(swarming_util, 'ListSwarmingTasksDataByTags', | |
| 29 MockedListSwarmingTasksDataByTags) | |
| 30 swarming_task = WfSwarmingTask.Create( | 30 swarming_task = WfSwarmingTask.Create( |
| 31 master_name, builder_name, build_number, step_name) | 31 master_name, builder_name, build_number, step_name) |
| 32 swarming_task.status = analysis_status.RUNNING | 32 swarming_task.status = analysis_status.RUNNING |
| 33 swarming_task.task_id = 'task_id' | 33 swarming_task.task_id = 'task_id' |
| 34 swarming_task.put() | 34 swarming_task.put() |
| 35 | 35 |
| 36 pipeline = TriggerSwarmingTaskPipeline() | 36 pipeline = TriggerSwarmingTaskPipeline() |
| 37 task_id = pipeline.run( | 37 task_id = pipeline.run( |
| 38 master_name, builder_name, build_number, step_name, tests) | 38 master_name, builder_name, build_number, step_name, tests) |
| 39 self.assertEqual('task_id', task_id) | 39 self.assertEqual('task_id', task_id) |
| 40 | 40 |
| 41 def testWaitingForTheTaskId(self): | 41 def testWaitingForTheTaskId(self): |
| 42 master_name = 'm' | 42 master_name = 'm' |
| 43 builder_name = 'b' | 43 builder_name = 'b' |
| 44 build_number = 1 | 44 build_number = 1 |
| 45 step_name = 's' | 45 step_name = 's' |
| 46 tests = ['a.b'] | 46 tests = ['a.b'] |
| 47 | 47 |
| 48 swarming_task = WfSwarmingTask.Create( | 48 swarming_task = FlakeSwarmingTask.Create( |
| 49 master_name, builder_name, build_number, step_name) | 49 master_name, builder_name, build_number, step_name, tests[0]) |
| 50 swarming_task.status = analysis_status.PENDING | 50 swarming_task.status = analysis_status.PENDING |
| 51 swarming_task.put() | 51 swarming_task.put() |
| 52 | 52 |
| 53 def MockedSleep(*_): | 53 def MockedSleep(*_): |
| 54 swarming_task = WfSwarmingTask.Get( | 54 swarming_task = FlakeSwarmingTask.Get( |
| 55 master_name, builder_name, build_number, step_name) | 55 master_name, builder_name, build_number, step_name, tests[0]) |
| 56 self.assertEqual(analysis_status.PENDING, swarming_task.status) | 56 self.assertEqual(analysis_status.PENDING, swarming_task.status) |
| 57 swarming_task.status = analysis_status.RUNNING | 57 swarming_task.status = analysis_status.RUNNING |
| 58 swarming_task.task_id = 'task_id' | 58 swarming_task.task_id = 'task_id' |
| 59 swarming_task.put() | 59 swarming_task.put() |
| 60 self.mock(time, 'sleep', MockedSleep) | 60 self.mock(time, 'sleep', MockedSleep) |
| 61 | 61 |
| 62 pipeline = TriggerSwarmingTaskPipeline() | 62 pipeline = TriggerFlakeSwarmingTaskPipeline() |
| 63 task_id = pipeline.run( | 63 task_id = pipeline.run( |
| 64 master_name, builder_name, build_number, step_name, tests) | 64 master_name, builder_name, build_number, step_name, tests) |
| 65 self.assertEqual('task_id', task_id) | 65 self.assertEqual('task_id', task_id) |
| 66 | 66 |
| 67 def testTriggerANewSwarmingTask(self): | 67 def testTriggerANewSwarmingTask(self): |
| 68 def MockedDownloadSwarmingTaskData(*_): | 68 def MockedDownloadSwarmingTaskData(*_): |
| 69 return [{'task_id': '1'}, {'task_id': '2'}] | 69 return [{'task_id': '1'}, {'task_id': '2'}] |
| 70 self.mock(swarming_util, 'ListSwarmingTasksDataByTags', | 70 self.mock(swarming_util, 'ListSwarmingTasksDataByTags', |
| 71 MockedDownloadSwarmingTaskData) | 71 MockedDownloadSwarmingTaskData) |
| 72 | 72 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 99 MockedGetSwarmingTaskRequest) | 99 MockedGetSwarmingTaskRequest) |
| 100 | 100 |
| 101 new_request_json = {} | 101 new_request_json = {} |
| 102 def MockedTriggerSwarmingTask(new_request, *_): | 102 def MockedTriggerSwarmingTask(new_request, *_): |
| 103 new_request_json.update(new_request.Serialize()) | 103 new_request_json.update(new_request.Serialize()) |
| 104 return 'new_task_id' | 104 return 'new_task_id' |
| 105 self.mock(swarming_util, 'TriggerSwarmingTask', MockedTriggerSwarmingTask) | 105 self.mock(swarming_util, 'TriggerSwarmingTask', MockedTriggerSwarmingTask) |
| 106 | 106 |
| 107 def MockedGetSwarmingTaskName(*_): | 107 def MockedGetSwarmingTaskName(*_): |
| 108 return 'new_task_name' | 108 return 'new_task_name' |
| 109 self.mock(trigger_swarming_task_pipeline, '_GetSwarmingTaskName', | 109 self.mock(TriggerBaseSwarmingTaskPipeline, '_GetSwarmingTaskName', |
| 110 MockedGetSwarmingTaskName) | 110 MockedGetSwarmingTaskName) |
| 111 | 111 |
| 112 master_name = 'm' | 112 master_name = 'm' |
| 113 builder_name = 'b' | 113 builder_name = 'b' |
| 114 build_number = 234 | 114 build_number = 234 |
| 115 step_name = 'a_tests on platform' | 115 step_name = 'a_tests on platform' |
| 116 tests = ['a.b', 'a.c'] | 116 tests = ['a.b', 'a.c'] |
| 117 | 117 |
| 118 expected_new_request_json = { | 118 expected_new_request_json = { |
| 119 'expiration_secs': 3600, | 119 'expiration_secs': 3600, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 self.assertEqual(expected_new_request_json, new_request_json) | 152 self.assertEqual(expected_new_request_json, new_request_json) |
| 153 | 153 |
| 154 swarming_task = WfSwarmingTask.Get( | 154 swarming_task = WfSwarmingTask.Get( |
| 155 master_name, builder_name, build_number, step_name) | 155 master_name, builder_name, build_number, step_name) |
| 156 self.assertIsNotNone(swarming_task) | 156 self.assertIsNotNone(swarming_task) |
| 157 self.assertEqual('new_task_id', swarming_task.task_id) | 157 self.assertEqual('new_task_id', swarming_task.task_id) |
| 158 self.assertEqual(tests, swarming_task.parameters['tests']) | 158 self.assertEqual(tests, swarming_task.parameters['tests']) |
| 159 self.assertEqual( | 159 self.assertEqual( |
| 160 waterfall_config.GetSwarmingSettings()['iterations_to_rerun'], | 160 waterfall_config.GetSwarmingSettings()['iterations_to_rerun'], |
| 161 swarming_task.parameters['iterations_to_rerun']) | 161 swarming_task.parameters['iterations_to_rerun']) |
| OLD | NEW |