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

Side by Side Diff: appengine/findit/waterfall/test/trigger_swarming_tasks_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
(Empty)
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
3 # found in the LICENSE file.
4
5 from common.pipeline_wrapper import BasePipeline
6 from common.pipeline_wrapper import pipeline_handlers
7 from common.waterfall import failure_type
8 from model.wf_analysis import WfAnalysis
9 from waterfall import trigger_swarming_task_pipeline
10 from waterfall import trigger_swarming_tasks_pipeline
11 from waterfall.test import wf_testcase
12 from waterfall.trigger_swarming_tasks_pipeline import (
13 TriggerSwarmingTasksPipeline)
14 from waterfall.trigger_swarming_task_pipeline import TriggerSwarmingTaskPipeline
15
16
17 class _MockedTriggerSwarmingTaskPipeline(BasePipeline):
18 count = 0
19 def run(self, *_):
20 _MockedTriggerSwarmingTaskPipeline.count += 1
21
22
23 class TriggerSwarmingTasksPipelineTest(wf_testcase.WaterfallTestCase):
24 app_module = pipeline_handlers._APP
25
26 def testGetsStepsNeedToTriggerSwarmingTasksNoAnalysis(self):
27 result = (
28 trigger_swarming_tasks_pipeline._GetsStepsNeedToTriggerSwarmingTasks(
29 'm', 'b', 1, {}))
30 self.assertEqual(result, {})
31
32 def testGetsStepsNeedToTriggerSwarmingTasksNoFailureResultMap(self):
33 master_name = 'm'
34 builder_name = 'b'
35 build_number = 2
36 WfAnalysis.Create(master_name, builder_name, build_number).put()
37
38 failure_info = {
39 'failed': True,
40 'master_name': 'm',
41 'builder_name': 'b',
42 'build_number': 2,
43 'chromium_revision': None,
44 'builds': {
45 2: {
46 'blame_list': [],
47 'chromium_revision': None
48 }
49 },
50 'failed_steps': {
51 'abc_test': {
52 'current_failure': 2,
53 'first_failure': 1,
54 'last_pass': 0,
55 'tests': {
56 'Unittest2.Subtest1': {
57 'current_failure': 2,
58 'first_failure': 2,
59 'last_pass': 1,
60 'base_test_name': 'Unittest2.Subtest1'
61 },
62 'Unittest3.Subtest2': {
63 'current_failure': 2,
64 'first_failure': 1,
65 'last_pass': 0,
66 'base_test_name': 'Unittest3.Subtest2'
67 }
68 }
69 },
70 'a_test': {
71 'current_failure': 2,
72 'first_failure': 1,
73 'last_pass': 0,
74 }
75 },
76 'failure_type': failure_type.TEST
77 }
78
79 expected_result = {
80 'abc_test': ['Unittest2.Subtest1']
81 }
82 expected_failure_result_map = {
83 'abc_test': {
84 'Unittest2.Subtest1': '%s/%s/%d' % (
85 master_name, builder_name, build_number),
86 'Unittest3.Subtest2': '%s/%s/%d' % (
87 master_name, builder_name, 1)
88 }
89 }
90
91 result = (
92 trigger_swarming_tasks_pipeline._GetsStepsNeedToTriggerSwarmingTasks(
93 master_name, builder_name, build_number, failure_info))
94 analysis = WfAnalysis.Get(master_name, builder_name, build_number)
95
96 self.assertEqual(result, expected_result)
97 self.assertEqual(analysis.failure_result_map, expected_failure_result_map)
98
99 def testGetsStepsNeedToTriggerSwarmingTasks(self):
100 master_name = 'm'
101 builder_name = 'b'
102 build_number = 2
103 analysis = WfAnalysis.Create(master_name, builder_name, build_number)
104 analysis.failure_result_map = {
105 'a_tests': {
106 'Unittest1.Subtest1': 'm/b/1'
107 }
108 }
109 analysis.put()
110
111 failure_info = {
112 'failed': True,
113 'master_name': 'm',
114 'builder_name': 'b',
115 'build_number': 2,
116 'chromium_revision': None,
117 'builds': {
118 2: {
119 'blame_list': [],
120 'chromium_revision': None
121 }
122 },
123 'failed_steps': {
124 'abc_test': {
125 'current_failure': 2,
126 'first_failure': 1,
127 'last_pass': 0,
128 'tests': {
129 'Unittest2.Subtest1': {
130 'current_failure': 2,
131 'first_failure': 2,
132 'last_pass': 1,
133 'base_test_name': 'Unittest2.Subtest1'
134 },
135 'Unittest3.Subtest2': {
136 'current_failure': 2,
137 'first_failure': 1,
138 'last_pass': 0,
139 'base_test_name': 'Unittest3.Subtest2'
140 }
141 }
142 },
143 'a_tests': {
144 'current_failure': 2,
145 'first_failure': 1,
146 'last_pass': 0,
147 'tests': {
148 'Unittest1.Subtest1': {
149 'current_failure': 2,
150 'first_failure': 1,
151 'last_pass': 0,
152 'base_test_name': 'Unittest3.Subtest2'
153 }
154 }
155 }
156 },
157 'failure_type': failure_type.TEST
158 }
159
160 expected_result = {
161 'abc_test': ['Unittest2.Subtest1']
162 }
163 result = (
164 trigger_swarming_tasks_pipeline._GetsStepsNeedToTriggerSwarmingTasks(
165 master_name, builder_name, build_number, failure_info))
166 self.assertEqual(result, expected_result)
167
168 def testTriggerSwarmingTasksPipelineNoFailureInfo(self):
169 self.mock(trigger_swarming_task_pipeline, 'TriggerSwarmingTaskPipeline',
170 _MockedTriggerSwarmingTaskPipeline)
171 pipeline = TriggerSwarmingTasksPipeline('m', 'b', 1, {})
172 pipeline.start()
173 self.execute_queued_tasks()
174 self.assertEqual(_MockedTriggerSwarmingTaskPipeline.count, 0)
175
176 def testTriggerSwarmingTasksPipelineCompile(self):
177 self.mock(trigger_swarming_task_pipeline, 'TriggerSwarmingTaskPipeline',
178 _MockedTriggerSwarmingTaskPipeline)
179 failure_info = {
180 'failed': True,
181 'master_name': 'm',
182 'builder_name': 'b',
183 'build_number': 2,
184 'chromium_revision': None,
185 'builds': {
186 2: {
187 'blame_list': [],
188 'chromium_revision': None
189 }
190 },
191 'failed_steps': {
192 'compile': {
193 'current_failure': 2,
194 'first_failure': 1,
195 'last_pass': 0,
196 }
197 },
198 'failure_type': failure_type.COMPILE
199 }
200 pipeline = TriggerSwarmingTasksPipeline('m', 'b', 1, failure_info)
201 pipeline.start()
202 self.execute_queued_tasks()
203 self.assertEqual(_MockedTriggerSwarmingTaskPipeline.count, 0)
204
205 def testTriggerSwarmingTasksPipeline(self):
206 master_name = 'm'
207 builder_name = 'b'
208 build_number = 2
209 analysis = WfAnalysis.Create(master_name, builder_name, build_number)
210 analysis.failure_result_map = {
211 'a_tests': {
212 'Unittest1.Subtest1': 'm/b/1'
213 }
214 }
215 analysis.put()
216
217 failure_info = {
218 'failed': True,
219 'master_name': 'm',
220 'builder_name': 'b',
221 'build_number': 2,
222 'chromium_revision': None,
223 'builds': {
224 2: {
225 'blame_list': [],
226 'chromium_revision': None
227 }
228 },
229 'failed_steps': {
230 'abc_test': {
231 'current_failure': 2,
232 'first_failure': 1,
233 'last_pass': 0,
234 'tests': {
235 'Unittest2.Subtest1': {
236 'current_failure': 2,
237 'first_failure': 2,
238 'last_pass': 1,
239 'base_test_name': 'Unittest2.Subtest1'
240 },
241 'Unittest3.Subtest2': {
242 'current_failure': 2,
243 'first_failure': 1,
244 'last_pass': 0,
245 'base_test_name': 'Unittest3.Subtest2'
246 }
247 }
248 },
249 'a_tests': {
250 'current_failure': 2,
251 'first_failure': 1,
252 'last_pass': 0,
253 'tests': {
254 'Unittest1.Subtest1': {
255 'current_failure': 2,
256 'first_failure': 1,
257 'last_pass': 0,
258 'base_test_name': 'Unittest3.Subtest2'
259 }
260 }
261 }
262 },
263 'failure_type': failure_type.TEST
264 }
265
266 self.mock(trigger_swarming_task_pipeline, 'TriggerSwarmingTaskPipeline',
267 _MockedTriggerSwarmingTaskPipeline)
268 pipeline = TriggerSwarmingTasksPipeline(
269 master_name, builder_name, build_number, failure_info)
270 pipeline.start()
271 self.execute_queued_tasks()
272 self.assertEqual(_MockedTriggerSwarmingTaskPipeline.count, 1)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698