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

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

Issue 2477343003: [Findit] Refactoring monitor swarming task pipelines (Closed)
Patch Set: Addressing nit 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
« no previous file with comments | « appengine/findit/waterfall/test/process_flake_swarming_task_result_pipeline_test.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 datetime 5 import datetime
6 6
7 from model import analysis_status 7 from model import analysis_status
8 from model.wf_swarming_task import WfSwarmingTask 8 from model.wf_swarming_task import WfSwarmingTask
9 from waterfall import process_swarming_task_result_pipeline
10 from waterfall import swarming_util 9 from waterfall import swarming_util
11 from waterfall.process_swarming_task_result_pipeline import ( 10 from waterfall.process_swarming_task_result_pipeline import (
12 ProcessSwarmingTaskResultPipeline) 11 ProcessSwarmingTaskResultPipeline)
12 from waterfall.test import (
13 process_base_swarming_task_result_pipeline_test as base_test)
13 from waterfall.test import wf_testcase 14 from waterfall.test import wf_testcase
14 15
15 16
16 _ISOLATED_SERVER = 'https://isolateserver.appspot.com'
17 _ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com'
18 _SAMPLE_FAILURE_LOG = {
19 'per_iteration_data': [
20 {
21 'TestSuite1.test1': [
22 {
23 'status': 'SUCCESS',
24 'other_info': 'N/A'
25 }
26 ],
27 'TestSuite1.test2': [
28 {
29 'status': 'FAILURE',
30 'other_info': 'N/A'
31 },
32 {
33 'status': 'FAILURE',
34 'other_info': 'N/A'
35 },
36 {
37 'status': 'SUCCESS',
38 'other_info': 'N/A'
39 }
40 ],
41 'TestSuite1.test3': [
42 {
43 'status': 'FAILURE',
44 'other_info': 'N/A'
45 },
46 {
47 'status': 'FAILURE',
48 'other_info': 'N/A'
49 },
50 {
51 'status': 'FAILURE',
52 'other_info': 'N/A'
53 }
54 ]
55 },
56 {
57 'TestSuite1.test1': [
58 {
59 'status': 'SUCCESS',
60 'other_info': 'N/A'
61 }
62 ],
63 'TestSuite1.test2': [
64 {
65 'status': 'SUCCESS',
66 'other_info': 'N/A'
67 }
68 ],
69 'TestSuite1.test3': [
70 {
71 'status': 'FAILURE',
72 'other_info': 'N/A'
73 },
74 {
75 'status': 'FAILURE',
76 'other_info': 'N/A'
77 },
78 {
79 'status': 'FAILURE',
80 'other_info': 'N/A'
81 }
82 ]
83 }
84 ]
85 }
86 _EXPECTED_TESTS_STATUESE = {
87 'TestSuite1.test1': {
88 'total_run': 2,
89 'SUCCESS': 2
90 },
91 'TestSuite1.test2': {
92 'total_run': 4,
93 'SUCCESS': 2,
94 'FAILURE': 2
95 },
96 'TestSuite1.test3': {
97 'total_run': 6,
98 'FAILURE': 6
99 }
100 }
101 _EXPECTED_CLASSIFIED_TESTS = {
102 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'],
103 'reliable_tests': ['TestSuite1.test3']
104 }
105
106
107 class ProcessSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): 17 class ProcessSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
108 18
109 def _MockedGetSwarmingTaskResultById(self, task_id, _): 19 def _MockedGetSwarmingTaskResultById(self, task_id, _):
110 swarming_task_results = { 20 return base_test._SWARMING_TASK_RESULTS[task_id]
111 'task_id1': {
112 'state': 'COMPLETED',
113 'exit_code': '1',
114 'tags': [
115 'priority:25',
116 'ref_name:abc_tests'
117 ],
118 'outputs_ref': {
119 'isolatedserver': _ISOLATED_SERVER,
120 'namespace': 'default-gzip',
121 'isolated': 'shard1_isolated'
122 },
123 'created_ts': '2016-02-10T18:32:06.538220',
124 'started_ts': '2016-02-10T18:32:09.090550',
125 'completed_ts': '2016-02-10T18:33:09'
126 },
127 'task_id2': {
128 'state': 'TIMED_OUT',
129 'outputs_ref': None
130 }
131 }
132
133 mocked_result = swarming_task_results[task_id]
134 return mocked_result
135 21
136 def setUp(self): 22 def setUp(self):
137 super(ProcessSwarmingTaskResultPipelineTest, self).setUp() 23 super(ProcessSwarmingTaskResultPipelineTest, self).setUp()
138 self.master_name = 'm' 24 self.master_name = 'm'
139 self.builder_name = 'b' 25 self.builder_name = 'b'
140 self.build_number = 121 26 self.build_number = 121
141 self.step_name = 'abc_tests on platform' 27 self.step_name = 'abc_tests on platform'
142 self.mock(swarming_util, 'GetSwarmingTaskResultById', 28 self.mock(swarming_util, 'GetSwarmingTaskResultById',
143 self._MockedGetSwarmingTaskResultById) 29 self._MockedGetSwarmingTaskResultById)
144 30
145 def testCheckTestsRunStatusesNoOutPutJson(self):
146 tests_statuses = (
147 process_swarming_task_result_pipeline._CheckTestsRunStatuses(None))
148 self.assertEqual({}, tests_statuses)
149
150 def testCheckTestsRunStatuses(self):
151 tests_statuses = (
152 process_swarming_task_result_pipeline._CheckTestsRunStatuses(
153 _SAMPLE_FAILURE_LOG))
154 self.assertEqual(_EXPECTED_TESTS_STATUESE, tests_statuses)
155
156 def _MockedGetSwarmingTaskFailureLog(self, *_): 31 def _MockedGetSwarmingTaskFailureLog(self, *_):
157 return _SAMPLE_FAILURE_LOG 32 return base_test._SAMPLE_FAILURE_LOG
158 33
159 def testProcessSwarmingTaskResultPipeline(self): 34 def testProcessSwarmingTaskResultPipeline(self):
160 35 # End to end test.
161 self.mock(swarming_util, 'GetSwarmingTaskFailureLog', 36 self.mock(swarming_util, 'GetSwarmingTaskFailureLog',
162 self._MockedGetSwarmingTaskFailureLog) 37 self._MockedGetSwarmingTaskFailureLog)
163 38
164 task = WfSwarmingTask.Create( 39 task = WfSwarmingTask.Create(
165 self.master_name, self.builder_name, 40 self.master_name, self.builder_name,
166 self.build_number, self.step_name) 41 self.build_number, self.step_name)
167 task.task_id = 'task_id1' 42 task.task_id = 'task_id1'
168 task.put() 43 task.put()
169 44
170 pipeline = ProcessSwarmingTaskResultPipeline() 45 pipeline = ProcessSwarmingTaskResultPipeline()
171 step_name, task_info = pipeline.run( 46 step_name, task_info = pipeline.run(
172 self.master_name, self.builder_name, 47 self.master_name, self.builder_name,
173 self.build_number, self.step_name) 48 self.build_number, self.step_name)
174 49
175 self.assertEqual(self.step_name, step_name) 50 self.assertEqual(self.step_name, step_name)
176 self.assertEqual('abc_tests', task_info[0]) 51 self.assertEqual('abc_tests', task_info[0])
177 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS['reliable_tests'], task_info[1]) 52 self.assertEqual(
53 base_test._EXPECTED_CLASSIFIED_TESTS['reliable_tests'], task_info[1])
178 54
179 task = WfSwarmingTask.Get( 55 task = WfSwarmingTask.Get(
180 self.master_name, self.builder_name, self.build_number, self.step_name) 56 self.master_name, self.builder_name, self.build_number, self.step_name)
181 57
182 self.assertEqual(analysis_status.COMPLETED, task.status) 58 self.assertEqual(analysis_status.COMPLETED, task.status)
183 self.assertEqual(_EXPECTED_TESTS_STATUESE, task.tests_statuses) 59 self.assertEqual(base_test._EXPECTED_TESTS_STATUS, task.tests_statuses)
184 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS, task.classified_tests) 60 self.assertEqual(
61 base_test._EXPECTED_CLASSIFIED_TESTS, task.classified_tests)
185 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), 62 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220),
186 task.created_time) 63 task.created_time)
187 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), 64 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550),
188 task.started_time) 65 task.started_time)
189 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), 66 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9),
190 task.completed_time) 67 task.completed_time)
191
192 def testProcessSwarmingTaskResultPipelineTaskNotRunning(self):
193
194 task = WfSwarmingTask.Create(
195 self.master_name, self.builder_name,
196 self.build_number, self.step_name)
197 task.task_id = 'task_id2'
198 task.put()
199
200 pipeline = ProcessSwarmingTaskResultPipeline()
201 step_name, task_info = pipeline.run(
202 self.master_name, self.builder_name,
203 self.build_number, self.step_name)
204
205 self.assertEqual(self.step_name, step_name)
206 self.assertIsNone(task_info[0])
207 self.assertEqual([], task_info[1])
208
209 task = WfSwarmingTask.Get(
210 self.master_name, self.builder_name, self.build_number, self.step_name)
211
212 self.assertEqual(analysis_status.ERROR, task.status)
213 self.assertEqual({}, task.tests_statuses)
214 self.assertEqual({}, task.classified_tests)
215
216 def testProcessSwarmingTaskResultPipelineTaskTimeOut(self):
217
218 # Override swarming config settings to force a timeout.
219 override_swarming_settings = {
220 'task_timeout_hours': -1
221 }
222 self.UpdateUnitTestConfigSettings(
223 'swarming_settings', override_swarming_settings)
224
225 task = WfSwarmingTask.Create(
226 self.master_name, self.builder_name,
227 self.build_number, self.step_name)
228 task.task_id = 'task_id1'
229 task.put()
230
231 pipeline = ProcessSwarmingTaskResultPipeline()
232 step_name, task_info = pipeline.run(
233 self.master_name, self.builder_name,
234 self.build_number, self.step_name)
235
236 self.assertEqual(self.step_name, step_name)
237 self.assertEqual('abc_tests', task_info[0])
238 self.assertEqual([], task_info[1])
239
240 task = WfSwarmingTask.Get(
241 self.master_name, self.builder_name, self.build_number, self.step_name)
242
243 self.assertEqual(analysis_status.ERROR, task.status)
244 self.assertEqual({}, task.tests_statuses)
245 self.assertEqual({}, task.classified_tests)
OLDNEW
« no previous file with comments | « appengine/findit/waterfall/test/process_flake_swarming_task_result_pipeline_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698