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

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

Issue 2130543004: Waterfall components of regression range finder. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: added another init whoooo Created 4 years, 4 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
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.flake.flake_swarming_task import FlakeSwarmingTask
9 from waterfall import process_swarming_task_result_pipeline 9 from model.flake.master_flake_analysis import MasterFlakeAnalysis
10 from waterfall import swarming_util 10 from waterfall import swarming_util
11 from waterfall.process_swarming_task_result_pipeline import ( 11 from waterfall.process_flake_swarming_task_result_pipeline import (
12 ProcessSwarmingTaskResultPipeline) 12 ProcessFlakeSwarmingTaskResultPipeline)
13 from waterfall.test import wf_testcase 13 from waterfall.test import wf_testcase
14 14
15 15
16 _ISOLATED_SERVER = 'https://isolateserver.appspot.com' 16 _ISOLATED_SERVER = 'https://isolateserver.appspot.com'
17 _ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com' 17 _ISOLATED_STORAGE_URL = 'isolateserver.storage.googleapis.com'
18 _SAMPLE_FAILURE_LOG = { 18 _SAMPLE_FAILURE_LOG = {
19 'per_iteration_data': [ 19 'per_iteration_data': [
20 { 20 {
21 'TestSuite1.test1': [ 21 'TestSuite1.test1': [
22 { 22 {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 'TestSuite1.test2': { 91 'TestSuite1.test2': {
92 'total_run': 4, 92 'total_run': 4,
93 'SUCCESS': 2, 93 'SUCCESS': 2,
94 'FAILURE': 2 94 'FAILURE': 2
95 }, 95 },
96 'TestSuite1.test3': { 96 'TestSuite1.test3': {
97 'total_run': 6, 97 'total_run': 6,
98 'FAILURE': 6 98 'FAILURE': 6
99 } 99 }
100 } 100 }
101 _EXPECTED_CLASSIFIED_TESTS = {
102 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'],
103 'reliable_tests': ['TestSuite1.test3']
104 }
105 101
106 102
107 class ProcessSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): 103 class ProcessFlakeSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase):
108 104
109 def _MockedGetSwarmingTaskResultById(self, task_id, _): 105 def _MockedGetSwarmingTaskResultById(self, task_id, _):
110 swarming_task_results = { 106 swarming_task_results = {
111 'task_id1': { 107 'task_id1': {
112 'state': 'COMPLETED', 108 'state': 'COMPLETED',
113 'tags': [ 109 'tags': [
114 'priority:25', 110 'priority:25',
115 'ref_name:abc_tests' 111 'ref_name:abc_tests'
116 ], 112 ],
117 'outputs_ref': { 113 'outputs_ref': {
118 'isolatedserver': _ISOLATED_SERVER, 114 'isolatedserver': _ISOLATED_SERVER,
119 'namespace': 'default-gzip', 115 'namespace': 'default-gzip',
120 'isolated': 'shard1_isolated' 116 'isolated': 'shard1_isolated'
121 }, 117 },
122 'created_ts': '2016-02-10T18:32:06.538220', 118 'created_ts': '2016-02-10T18:32:06.538220',
123 'started_ts': '2016-02-10T18:32:09.090550', 119 'started_ts': '2016-02-10T18:32:09.090550',
124 'completed_ts': '2016-02-10T18:33:09' 120 'completed_ts': '2016-02-10T18:33:09'
125 }, 121 },
126 'task_id2': { 122 'task_id2': {
127 'state': 'TIMED_OUT', 123 'state': 'TIMED_OUT',
128 'outputs_ref': None 124 'outputs_ref': None
129 } 125 }
130 } 126 }
131 127
132 mocked_result = swarming_task_results[task_id] 128 mocked_result = swarming_task_results[task_id]
133 return mocked_result 129 return mocked_result
134 130
135 def setUp(self): 131 def setUp(self):
136 super(ProcessSwarmingTaskResultPipelineTest, self).setUp() 132 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp()
133 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline()
137 self.master_name = 'm' 134 self.master_name = 'm'
138 self.builder_name = 'b' 135 self.builder_name = 'b'
139 self.build_number = 121 136 self.build_number = 121
140 self.step_name = 'abc_tests on platform' 137 self.step_name = 'abc_tests on platform'
138 self.test_name = 'test'
141 self.mock(swarming_util, 'GetSwarmingTaskResultById', 139 self.mock(swarming_util, 'GetSwarmingTaskResultById',
142 self._MockedGetSwarmingTaskResultById) 140 self._MockedGetSwarmingTaskResultById)
143 141
144 def testCheckTestsRunStatusesNoOutPutJson(self): 142 def testCheckTestsRunStatusesNoOutPutJson(self):
143 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs(
144 self.pipeline, self.master_name, self.builder_name,
145 self.build_number, self.step_name, self.build_number,
146 self.test_name)
145 tests_statuses = ( 147 tests_statuses = (
146 process_swarming_task_result_pipeline._CheckTestsRunStatuses(None)) 148 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses(
149 self.pipeline, None, *call_params
150 ))
147 self.assertEqual({}, tests_statuses) 151 self.assertEqual({}, tests_statuses)
148 152
149 def testCheckTestsRunStatuses(self): 153 def testCheckTestsRunStatuses(self):
154 analysis = MasterFlakeAnalysis.Create(
155 self.master_name, self.builder_name,
156 self.build_number, self.step_name, self.test_name)
157 analysis.put()
158
159 task = FlakeSwarmingTask.Create(
160 self.master_name, self.builder_name,
161 self.build_number, self.step_name, self.test_name)
162 task.put()
163
164 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs(
165 self.pipeline, self.master_name, self.builder_name,
166 self.build_number, self.step_name, self.build_number,
167 self.test_name)
168
150 tests_statuses = ( 169 tests_statuses = (
151 process_swarming_task_result_pipeline._CheckTestsRunStatuses( 170 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses(
152 _SAMPLE_FAILURE_LOG)) 171 self.pipeline,
172 _SAMPLE_FAILURE_LOG, *call_params))
153 self.assertEqual(_EXPECTED_TESTS_STATUESE, tests_statuses) 173 self.assertEqual(_EXPECTED_TESTS_STATUESE, tests_statuses)
154 174
155 def _MockedGetSwarmingTaskFailureLog(self, *_): 175 def _MockedGetSwarmingTaskFailureLog(self, *_):
156 return _SAMPLE_FAILURE_LOG 176 return _SAMPLE_FAILURE_LOG
157 177
158 def testProcessSwarmingTaskResultPipeline(self): 178 def testProcessFlakeSwarmingTaskResultPipeline(self):
159 179
160 self.mock(swarming_util, 'GetSwarmingTaskFailureLog', 180 self.mock(swarming_util, 'GetSwarmingTaskFailureLog',
161 self._MockedGetSwarmingTaskFailureLog) 181 self._MockedGetSwarmingTaskFailureLog)
162 182
163 task = WfSwarmingTask.Create( 183 task = FlakeSwarmingTask.Create(
164 self.master_name, self.builder_name, 184 self.master_name, self.builder_name,
165 self.build_number, self.step_name) 185 self.build_number, self.step_name, self.test_name)
166 task.task_id = 'task_id1' 186 task.task_id = 'task_id1'
167 task.put() 187 task.put()
168 188
169 pipeline = ProcessSwarmingTaskResultPipeline() 189 analysis = MasterFlakeAnalysis.Create(
190 self.master_name, self.builder_name,
191 self.build_number, self.step_name, self.test_name)
192 analysis.put()
193
194 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
170 step_name, task_info = pipeline.run( 195 step_name, task_info = pipeline.run(
171 self.master_name, self.builder_name, 196 self.master_name, self.builder_name,
172 self.build_number, self.step_name) 197 self.build_number, self.step_name,
198 'task_id1', self.build_number, self.test_name)
199 self.assertEqual('abc_tests', task_info)
200 self.assertEqual(self.step_name, step_name)
173 201
174 self.assertEqual(self.step_name, step_name) 202 task = FlakeSwarmingTask.Get(
175 self.assertEqual('abc_tests', task_info[0]) 203 self.master_name, self.builder_name, self.build_number,
176 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS, task_info[1]) 204 self.step_name, self.test_name)
177
178 task = WfSwarmingTask.Get(
179 self.master_name, self.builder_name, self.build_number, self.step_name)
180 205
181 self.assertEqual(analysis_status.COMPLETED, task.status) 206 self.assertEqual(analysis_status.COMPLETED, task.status)
182 self.assertEqual(_EXPECTED_TESTS_STATUESE, task.tests_statuses) 207 self.assertEqual(_EXPECTED_TESTS_STATUESE, task.tests_statuses)
183 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS, task.classified_tests) 208
184 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), 209 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220),
185 task.created_time) 210 task.created_time)
186 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), 211 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550),
187 task.started_time) 212 task.started_time)
188 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), 213 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9),
189 task.completed_time) 214 task.completed_time)
190 215 def testProcessFlakeSwarmingTaskResultPipelineTaskNotRunning(self):
191 def testProcessSwarmingTaskResultPipelineTaskNotRunning(self): 216 task = FlakeSwarmingTask.Create(
192
193 task = WfSwarmingTask.Create(
194 self.master_name, self.builder_name, 217 self.master_name, self.builder_name,
195 self.build_number, self.step_name) 218 self.build_number, self.step_name, self.test_name)
196 task.task_id = 'task_id2' 219 task.task_id = 'task_id2'
197 task.put() 220 task.put()
198 221
199 pipeline = ProcessSwarmingTaskResultPipeline() 222 analysis = MasterFlakeAnalysis.Create(
223 self.master_name, self.builder_name,
224 self.build_number, self.step_name, self.test_name)
225 analysis.put()
226
227 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
200 step_name, task_info = pipeline.run( 228 step_name, task_info = pipeline.run(
201 self.master_name, self.builder_name, 229 self.master_name, self.builder_name,
202 self.build_number, self.step_name) 230 self.build_number, self.step_name,
231 'task_id2', self.build_number, self.test_name)
232 self.assertEqual(None, task_info)
233 self.assertEqual(self.step_name, step_name)
203 234
204 self.assertEqual(self.step_name, step_name) 235 task = FlakeSwarmingTask.Get(
205 self.assertIsNone(task_info[0]) 236 self.master_name, self.builder_name,
206 self.assertEqual({}, task_info[1]) 237 self.build_number, self.step_name, self.test_name)
207
208 task = WfSwarmingTask.Get(
209 self.master_name, self.builder_name, self.build_number, self.step_name)
210 238
211 self.assertEqual(analysis_status.ERROR, task.status) 239 self.assertEqual(analysis_status.ERROR, task.status)
212 self.assertEqual({}, task.tests_statuses)
213 self.assertEqual({}, task.classified_tests)
214 240
215 def testProcessSwarmingTaskResultPipelineTaskTimeOut(self): 241 def testProcessFlakeSwarmingTaskResultPipelineTaskTimeOut(self):
216
217 # Override swarming config settings to force a timeout. 242 # Override swarming config settings to force a timeout.
218 override_swarming_settings = { 243 override_swarming_settings = {
219 'task_timeout_hours': -1 244 'task_timeout_hours': -1
220 } 245 }
221 self.UpdateUnitTestConfigSettings( 246 self.UpdateUnitTestConfigSettings(
222 'swarming_settings', override_swarming_settings) 247 'swarming_settings', override_swarming_settings)
223 248
224 task = WfSwarmingTask.Create( 249 task = FlakeSwarmingTask.Create(
225 self.master_name, self.builder_name, 250 self.master_name, self.builder_name,
226 self.build_number, self.step_name) 251 self.build_number, self.step_name, self.test_name)
227 task.task_id = 'task_id1' 252 task.task_id = 'task_id1'
228 task.put() 253 task.put()
229 254
230 pipeline = ProcessSwarmingTaskResultPipeline() 255 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
231 step_name, task_info = pipeline.run( 256 step_name, task_info = pipeline.run(
232 self.master_name, self.builder_name, 257 self.master_name, self.builder_name,
233 self.build_number, self.step_name) 258 self.build_number, self.step_name,
259 'task_id1', self.build_number, self.test_name)
260 self.assertEqual('abc_tests', task_info)
261 self.assertEqual(self.step_name, step_name)
234 262
235 self.assertEqual(self.step_name, step_name) 263 task = FlakeSwarmingTask.Get(
236 self.assertEqual('abc_tests', task_info[0]) 264 self.master_name, self.builder_name, self.build_number,
237 self.assertEqual({}, task_info[1]) 265 self.step_name, self.test_name)
238
239 task = WfSwarmingTask.Get(
240 self.master_name, self.builder_name, self.build_number, self.step_name)
241
242 self.assertEqual(analysis_status.ERROR, task.status) 266 self.assertEqual(analysis_status.ERROR, task.status)
243 self.assertEqual({}, task.tests_statuses) 267 self.assertEqual({}, task.tests_statuses)
244 self.assertEqual({}, task.classified_tests)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698