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

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: linted, tests 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
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 task_id = 'task_id1'
160 179
161 self.mock(swarming_util, 'GetSwarmingTaskFailureLog', 180 self.mock(swarming_util, 'GetSwarmingTaskFailureLog',
162 self._MockedGetSwarmingTaskFailureLog) 181 self._MockedGetSwarmingTaskFailureLog)
163 182
164 WfSwarmingTask.Create( 183 task = FlakeSwarmingTask.Create(
165 self.master_name, self.builder_name, 184 self.master_name, self.builder_name,
166 self.build_number, self.step_name).put() 185 self.build_number, self.step_name, self.test_name)
186 task.task_id = 'task_id1'
187 task.put()
167 188
168 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()
169 step_name, task_info = pipeline.run( 195 step_name, task_info = pipeline.run(
170 self.master_name, self.builder_name, 196 self.master_name, self.builder_name,
171 self.build_number, self.step_name, task_id) 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)
172 201
173 self.assertEqual(self.step_name, step_name) 202 task = FlakeSwarmingTask.Get(
174 self.assertEqual('abc_tests', task_info[0]) 203 self.master_name, self.builder_name, self.build_number,
175 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS, task_info[1]) 204 self.step_name, self.test_name)
176
177 task = WfSwarmingTask.Get(
178 self.master_name, self.builder_name, self.build_number, self.step_name)
179 205
180 self.assertEqual(analysis_status.COMPLETED, task.status) 206 self.assertEqual(analysis_status.COMPLETED, task.status)
181 self.assertEqual(_EXPECTED_TESTS_STATUESE, task.tests_statuses) 207 self.assertEqual(_EXPECTED_TESTS_STATUESE, task.tests_statuses)
182 self.assertEqual(_EXPECTED_CLASSIFIED_TESTS, task.classified_tests) 208
183 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), 209 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220),
184 task.created_time) 210 task.created_time)
185 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), 211 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550),
186 task.started_time) 212 task.started_time)
187 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), 213 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9),
188 task.completed_time) 214 task.completed_time)
189 215
190 def testProcessSwarmingTaskResultPipelineTaskNotRunning(self): 216 def testProcessFlakeSwarmingTaskResultPipelineTaskNotRunning(self):
191 task_id = 'task_id2' 217 task = FlakeSwarmingTask.Create(
218 self.master_name, self.builder_name,
219 self.build_number, self.step_name, self.test_name)
220 task.task_id = 'task_id2'
221 task.put()
192 222
193 WfSwarmingTask.Create( 223 analysis = MasterFlakeAnalysis.Create(
194 self.master_name, self.builder_name, 224 self.master_name, self.builder_name,
195 self.build_number, self.step_name).put() 225 self.build_number, self.step_name, self.test_name)
226 analysis.put()
196 227
197 pipeline = ProcessSwarmingTaskResultPipeline() 228 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
198 step_name, task_info = pipeline.run( 229 step_name, task_info = pipeline.run(
199 self.master_name, self.builder_name, 230 self.master_name, self.builder_name,
200 self.build_number, self.step_name, task_id) 231 self.build_number, self.step_name,
232 'task_id2', self.build_number, self.test_name)
233 self.assertEqual(None, task_info)
234 self.assertEqual(self.step_name, step_name)
201 235
202 self.assertEqual(self.step_name, step_name) 236 task = FlakeSwarmingTask.Get(
203 self.assertIsNone(task_info[0]) 237 self.master_name, self.builder_name,
204 self.assertEqual({}, task_info[1]) 238 self.build_number, self.step_name, self.test_name)
205
206 task = WfSwarmingTask.Get(
207 self.master_name, self.builder_name, self.build_number, self.step_name)
208 239
209 self.assertEqual(analysis_status.ERROR, task.status) 240 self.assertEqual(analysis_status.ERROR, task.status)
210 self.assertEqual({}, task.tests_statuses)
211 self.assertEqual({}, task.classified_tests)
212 241
213 def testProcessSwarmingTaskResultPipelineTaskTimeOut(self): 242 def testProcessFlakeSwarmingTaskResultPipelineTaskTimeOut(self):
214 task_id = 'task_id1'
215
216 # Override swarming config settings to force a timeout. 243 # Override swarming config settings to force a timeout.
217 override_swarming_settings = { 244 override_swarming_settings = {
218 'task_timeout_hours': -1 245 'task_timeout_hours': -1
219 } 246 }
220 self.UpdateUnitTestConfigSettings( 247 self.UpdateUnitTestConfigSettings(
221 'swarming_settings', override_swarming_settings) 248 'swarming_settings', override_swarming_settings)
222 249
223 WfSwarmingTask.Create( 250 task = FlakeSwarmingTask.Create(
224 self.master_name, self.builder_name, 251 self.master_name, self.builder_name,
225 self.build_number, self.step_name).put() 252 self.build_number, self.step_name, self.test_name)
253 task.task_id = 'task_id1'
254 task.put()
226 255
227 pipeline = ProcessSwarmingTaskResultPipeline() 256 pipeline = ProcessFlakeSwarmingTaskResultPipeline()
228 step_name, task_info = pipeline.run( 257 step_name, task_info = pipeline.run(
229 self.master_name, self.builder_name, 258 self.master_name, self.builder_name,
230 self.build_number, self.step_name, task_id) 259 self.build_number, self.step_name,
260 'task_id1', self.build_number, self.test_name)
261 self.assertEqual('abc_tests', task_info)
262 self.assertEqual(self.step_name, step_name)
231 263
232 self.assertEqual(self.step_name, step_name) 264 task = FlakeSwarmingTask.Get(
233 self.assertEqual('abc_tests', task_info[0]) 265 self.master_name, self.builder_name, self.build_number,
234 self.assertEqual({}, task_info[1]) 266 self.step_name, self.test_name)
235
236 task = WfSwarmingTask.Get(
237 self.master_name, self.builder_name, self.build_number, self.step_name)
238
239 self.assertEqual(analysis_status.ERROR, task.status) 267 self.assertEqual(analysis_status.ERROR, task.status)
240 self.assertEqual({}, task.tests_statuses) 268 self.assertEqual({}, task.tests_statuses)
241 self.assertEqual({}, task.classified_tests)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698