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

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

Issue 2508603002: [Findit] Refactoring trigger swarming task pipelines (Closed)
Patch Set: Created 4 years, 1 month 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 time
6
7 from model import analysis_status
8 from model.wf_swarming_task import WfSwarmingTask 5 from model.wf_swarming_task import WfSwarmingTask
9 from waterfall import swarming_util
10 from waterfall import trigger_swarming_task_pipeline
11 from waterfall import waterfall_config
12 from waterfall.swarming_task_request import SwarmingTaskRequest
13 from waterfall.test import wf_testcase 6 from waterfall.test import wf_testcase
14 from waterfall.trigger_swarming_task_pipeline import TriggerSwarmingTaskPipeline 7 from waterfall.trigger_swarming_task_pipeline import TriggerSwarmingTaskPipeline
15 8
16 9
17 class TriggerSwarmingTaskPipelineTest(wf_testcase.WaterfallTestCase): 10 class TriggerSwarmingTaskPipelineTest(wf_testcase.WaterfallTestCase):
18 11
19 def testNoNewSwarmingTaskIsNeeded(self): 12 def testGetArgs(self):
20 master_name = 'm' 13 master_name = 'm'
21 builder_name = 'b' 14 builder_name = 'b'
22 build_number = 1 15 build_number = 123
23 step_name = 's' 16 step_name = 's'
24 tests = ['a.b'] 17 tests = []
25 18
26 def MockedListSwarmingTasksDataByTags(*_): 19 self.assertEqual(
27 raise Exception('Fail.') # pragma: no cover. Should never be reached. 20 (master_name, builder_name, build_number, step_name),
28 self.mock(swarming_util, 'ListSwarmingTasksDataByTags', 21 TriggerSwarmingTaskPipeline()._GetArgs(
29 MockedListSwarmingTasksDataByTags) 22 master_name, builder_name, build_number, step_name, tests))
30 swarming_task = WfSwarmingTask.Create(
31 master_name, builder_name, build_number, step_name)
32 swarming_task.status = analysis_status.RUNNING
33 swarming_task.task_id = 'task_id'
34 swarming_task.put()
35 23
36 pipeline = TriggerSwarmingTaskPipeline() 24 def testGetSwarmingTask(self):
37 task_id = pipeline.run(
38 master_name, builder_name, build_number, step_name, tests)
39 self.assertEqual('task_id', task_id)
40
41 def testWaitingForTheTaskId(self):
42 master_name = 'm' 25 master_name = 'm'
43 builder_name = 'b' 26 builder_name = 'b'
44 build_number = 1 27 build_number = 123
45 step_name = 's' 28 step_name = 's'
46 tests = ['a.b']
47 29
48 swarming_task = WfSwarmingTask.Create( 30 WfSwarmingTask.Create(
31 master_name, builder_name, build_number, step_name).put()
32
33 task = TriggerSwarmingTaskPipeline()._GetSwarmingTask(
49 master_name, builder_name, build_number, step_name) 34 master_name, builder_name, build_number, step_name)
50 swarming_task.status = analysis_status.PENDING
51 swarming_task.put()
52 35
53 def MockedSleep(*_): 36 self.assertEqual(master_name, task.master_name)
54 swarming_task = WfSwarmingTask.Get( 37 self.assertEqual(builder_name, task.builder_name)
55 master_name, builder_name, build_number, step_name) 38 self.assertEqual(build_number, task.build_number)
56 self.assertEqual(analysis_status.PENDING, swarming_task.status) 39 self.assertEqual(step_name, task.step_name)
57 swarming_task.status = analysis_status.RUNNING
58 swarming_task.task_id = 'task_id'
59 swarming_task.put()
60 self.mock(time, 'sleep', MockedSleep)
61 40
62 pipeline = TriggerSwarmingTaskPipeline() 41 def testCreateSwarmingTask(self):
63 task_id = pipeline.run(
64 master_name, builder_name, build_number, step_name, tests)
65 self.assertEqual('task_id', task_id)
66
67 def testTriggerANewSwarmingTask(self):
68 def MockedDownloadSwarmingTaskData(*_):
69 return [{'task_id': '1'}, {'task_id': '2'}]
70 self.mock(swarming_util, 'ListSwarmingTasksDataByTags',
71 MockedDownloadSwarmingTaskData)
72
73 def MockedGetSwarmingTaskRequest(ref_task_id, *_):
74 self.assertEqual('1', ref_task_id)
75 return SwarmingTaskRequest.Deserialize({
76 'expiration_secs': 3600,
77 'name': 'ref_task_request',
78 'parent_task_id': 'pti',
79 'priority': 25,
80 'properties': {
81 'command': 'cmd',
82 'dimensions': [{'key': 'k', 'value': 'v'}],
83 'env': [
84 {'key': 'a', 'value': '1'},
85 {'key': 'GTEST_SHARD_INDEX', 'value': '1'},
86 {'key': 'GTEST_TOTAL_SHARDS', 'value': '5'},
87 ],
88 'execution_timeout_secs': 3600,
89 'extra_args': ['--flag=value', '--gtest_filter=d.f'],
90 'grace_period_secs': 30,
91 'idempotent': True,
92 'inputs_ref': {'a': 1},
93 'io_timeout_secs': 1200,
94 },
95 'tags': ['master:a', 'buildername:b', 'name:a_tests'],
96 'user': 'user',
97 })
98 self.mock(swarming_util, 'GetSwarmingTaskRequest',
99 MockedGetSwarmingTaskRequest)
100
101 new_request_json = {}
102 def MockedTriggerSwarmingTask(new_request, *_):
103 new_request_json.update(new_request.Serialize())
104 return 'new_task_id'
105 self.mock(swarming_util, 'TriggerSwarmingTask', MockedTriggerSwarmingTask)
106
107 def MockedGetSwarmingTaskName(*_):
108 return 'new_task_name'
109 self.mock(trigger_swarming_task_pipeline, '_GetSwarmingTaskName',
110 MockedGetSwarmingTaskName)
111
112 master_name = 'm' 42 master_name = 'm'
113 builder_name = 'b' 43 builder_name = 'b'
114 build_number = 234 44 build_number = 123
115 step_name = 'a_tests on platform' 45 step_name = 's'
116 tests = ['a.b', 'a.c']
117 46
118 expected_new_request_json = { 47 task = TriggerSwarmingTaskPipeline()._CreateSwarmingTask(
119 'expiration_secs': 3600, 48 master_name, builder_name, build_number, step_name)
120 'name': 'new_task_name', 49 self.assertEqual(master_name, task.master_name)
121 'parent_task_id': '', 50 self.assertEqual(builder_name, task.builder_name)
122 'priority': 25, 51 self.assertEqual(build_number, task.build_number)
123 'properties': { 52 self.assertEqual(step_name, task.step_name)
124 'command': 'cmd',
125 'dimensions': [{'key': 'k', 'value': 'v'}],
126 'env': [
127 {'key': 'a', 'value': '1'},
128 ],
129 'execution_timeout_secs': 3600,
130 'extra_args': [
131 '--flag=value', '--gtest_repeat=10',
132 '--test-launcher-retry-limit=0',
133 '--gtest_filter=a.b:a.c'],
134 'grace_period_secs': 30,
135 'idempotent': False,
136 'inputs_ref': {'a': 1},
137 'io_timeout_secs': 1200,
138 },
139 'tags': ['purpose:deflake', 'ref_master:%s' % master_name,
140 'ref_buildername:%s' % builder_name,
141 'ref_buildnumber:%s' % build_number,
142 'ref_stepname:%s' % step_name,
143 'ref_task_id:1',
144 'ref_name:a_tests'],
145 'user': '',
146 }
147 53
148 pipeline = TriggerSwarmingTaskPipeline() 54 def testGetIterationsToRerun(self):
149 new_task_id = pipeline.run( 55 expected_iterations = 50
150 master_name, builder_name, build_number, step_name, tests) 56 self.UpdateUnitTestConfigSettings(
151 self.assertEqual('new_task_id', new_task_id) 57 config_property='swarming_settings',
152 self.assertEqual(expected_new_request_json, new_request_json) 58 override_data={'iterations_to_rerun': expected_iterations})
59 self.assertEqual(
60 expected_iterations,
61 TriggerSwarmingTaskPipeline()._GetIterationsToRerun())
153 62
154 swarming_task = WfSwarmingTask.Get( 63
155 master_name, builder_name, build_number, step_name) 64
156 self.assertIsNotNone(swarming_task)
157 self.assertEqual('new_task_id', swarming_task.task_id)
158 self.assertEqual(tests, swarming_task.parameters['tests'])
159 self.assertEqual(
160 waterfall_config.GetSwarmingSettings()['iterations_to_rerun'],
161 swarming_task.parameters['iterations_to_rerun'])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698