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

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 comments 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 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)
13 from waterfall.test import wf_testcase 12 from waterfall.test import wf_testcase
14 13
15 14
16 _ISOLATED_SERVER = 'https://isolateserver.appspot.com' 15 _ISOLATED_SERVER = 'https://isolateserver.appspot.com'
17 _ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com' 16 _ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com'
18 _SAMPLE_FAILURE_LOG = { 17 _SAMPLE_FAILURE_LOG = {
19 'per_iteration_data': [ 18 'per_iteration_data': [
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 'other_info': 'N/A' 75 'other_info': 'N/A'
77 }, 76 },
78 { 77 {
79 'status': 'FAILURE', 78 'status': 'FAILURE',
80 'other_info': 'N/A' 79 'other_info': 'N/A'
81 } 80 }
82 ] 81 ]
83 } 82 }
84 ] 83 ]
85 } 84 }
86 _EXPECTED_TESTS_STATUESE = { 85
86
87 _EXPECTED_TESTS_STATUS = {
87 'TestSuite1.test1': { 88 'TestSuite1.test1': {
88 'total_run': 2, 89 'total_run': 2,
89 'SUCCESS': 2 90 'SUCCESS': 2
90 }, 91 },
91 'TestSuite1.test2': { 92 'TestSuite1.test2': {
92 'total_run': 4, 93 'total_run': 4,
93 'SUCCESS': 2, 94 'SUCCESS': 2,
94 'FAILURE': 2 95 'FAILURE': 2
95 }, 96 },
96 'TestSuite1.test3': { 97 'TestSuite1.test3': {
97 'total_run': 6, 98 'total_run': 6,
98 'FAILURE': 6 99 'FAILURE': 6
99 } 100 }
100 } 101 }
102
103
101 _EXPECTED_CLASSIFIED_TESTS = { 104 _EXPECTED_CLASSIFIED_TESTS = {
102 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'], 105 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'],
103 'reliable_tests': ['TestSuite1.test3'] 106 'reliable_tests': ['TestSuite1.test3']
104 } 107 }
105 108
106 109
107 class ProcessSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): 110 class ProcessSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
108 111
109 def _MockedGetSwarmingTaskResultById(self, task_id, _): 112 def _MockedGetSwarmingTaskResultById(self, task_id, _):
110 swarming_task_results = { 113 swarming_task_results = {
(...skipping 26 matching lines...) Expand all
137 super(ProcessSwarmingTaskResultPipelineTest, self).setUp() 140 super(ProcessSwarmingTaskResultPipelineTest, self).setUp()
138 self.master_name = 'm' 141 self.master_name = 'm'
139 self.builder_name = 'b' 142 self.builder_name = 'b'
140 self.build_number = 121 143 self.build_number = 121
141 self.step_name = 'abc_tests on platform' 144 self.step_name = 'abc_tests on platform'
142 self.mock(swarming_util, 'GetSwarmingTaskResultById', 145 self.mock(swarming_util, 'GetSwarmingTaskResultById',
143 self._MockedGetSwarmingTaskResultById) 146 self._MockedGetSwarmingTaskResultById)
144 147
145 def testCheckTestsRunStatusesNoOutPutJson(self): 148 def testCheckTestsRunStatusesNoOutPutJson(self):
146 tests_statuses = ( 149 tests_statuses = (
147 process_swarming_task_result_pipeline._CheckTestsRunStatuses(None)) 150 ProcessSwarmingTaskResultPipeline()._CheckTestsRunStatuses(None))
148 self.assertEqual({}, tests_statuses) 151 self.assertEqual({}, tests_statuses)
149 152
150 def testCheckTestsRunStatuses(self): 153 def testCheckTestsRunStatuses(self):
151 tests_statuses = ( 154 tests_statuses = (
152 process_swarming_task_result_pipeline._CheckTestsRunStatuses( 155 ProcessSwarmingTaskResultPipeline()._CheckTestsRunStatuses(
153 _SAMPLE_FAILURE_LOG)) 156 _SAMPLE_FAILURE_LOG))
154 self.assertEqual(_EXPECTED_TESTS_STATUESE, tests_statuses) 157 self.assertEqual(_EXPECTED_TESTS_STATUS, tests_statuses)
155 158
156 def _MockedGetSwarmingTaskFailureLog(self, *_): 159 def _MockedGetSwarmingTaskFailureLog(self, *_):
157 return _SAMPLE_FAILURE_LOG 160 return _SAMPLE_FAILURE_LOG
158 161
159 def testProcessSwarmingTaskResultPipeline(self): 162 def testProcessSwarmingTaskResultPipeline(self):
160 163 # End to end test.
161 self.mock(swarming_util, 'GetSwarmingTaskFailureLog', 164 self.mock(swarming_util, 'GetSwarmingTaskFailureLog',
162 self._MockedGetSwarmingTaskFailureLog) 165 self._MockedGetSwarmingTaskFailureLog)
163 166
164 task = WfSwarmingTask.Create( 167 task = WfSwarmingTask.Create(
165 self.master_name, self.builder_name, 168 self.master_name, self.builder_name,
166 self.build_number, self.step_name) 169 self.build_number, self.step_name)
167 task.task_id = 'task_id1' 170 task.task_id = 'task_id1'
168 task.put() 171 task.put()
169 172
170 pipeline = ProcessSwarmingTaskResultPipeline() 173 pipeline = ProcessSwarmingTaskResultPipeline()
171 step_name, task_info = pipeline.run( 174 step_name, task_info = pipeline.run(
172 self.master_name, self.builder_name, 175 self.master_name, self.builder_name,
173 self.build_number, self.step_name) 176 self.build_number, self.step_name)
174 177
175 self.assertEqual(self.step_name, step_name) 178 self.assertEqual(self.step_name, step_name)
176 self.assertEqual('abc_tests', task_info[0]) 179 self.assertEqual('abc_tests', task_info[0])
177 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS['reliable_tests'], task_info[1]) 180 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS['reliable_tests'], task_info[1])
178 181
179 task = WfSwarmingTask.Get( 182 task = WfSwarmingTask.Get(
180 self.master_name, self.builder_name, self.build_number, self.step_name) 183 self.master_name, self.builder_name, self.build_number, self.step_name)
181 184
182 self.assertEqual(analysis_status.COMPLETED, task.status) 185 self.assertEqual(analysis_status.COMPLETED, task.status)
183 self.assertEqual(_EXPECTED_TESTS_STATUESE, task.tests_statuses) 186 self.assertEqual(_EXPECTED_TESTS_STATUS, task.tests_statuses)
184 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS, task.classified_tests) 187 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS, task.classified_tests)
185 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), 188 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220),
186 task.created_time) 189 task.created_time)
187 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), 190 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550),
188 task.started_time) 191 task.started_time)
189 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), 192 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9),
190 task.completed_time) 193 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

Powered by Google App Engine
This is Rietveld 408576698