| OLD | NEW |
| 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 import mock | 6 import mock |
| 7 | 7 |
| 8 from model import analysis_status | 8 from model import analysis_status |
| 9 from model.flake.flake_swarming_task import FlakeSwarmingTask | 9 from model.flake.flake_swarming_task import FlakeSwarmingTask |
| 10 from model.flake.master_flake_analysis import MasterFlakeAnalysis | 10 from model.flake.master_flake_analysis import MasterFlakeAnalysis |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 'completed_ts': '2016-02-10T18:33:09' | 109 'completed_ts': '2016-02-10T18:33:09' |
| 110 }, | 110 }, |
| 111 'task_id2': { | 111 'task_id2': { |
| 112 'state': 'TIMED_OUT', | 112 'state': 'TIMED_OUT', |
| 113 'outputs_ref': None | 113 'outputs_ref': None |
| 114 }, | 114 }, |
| 115 'task_id3': { | 115 'task_id3': { |
| 116 'state': 'COMPLETED', | 116 'state': 'COMPLETED', |
| 117 'exit_code': '2', # Swarming task failed. | 117 'exit_code': '2', # Swarming task failed. |
| 118 }, | 118 }, |
| 119 'task_id4': { | 119 'task_id4': { |
| 120 'state': 'COMPLETED', | 120 'state': 'COMPLETED', |
| 121 'exit_code': '1', | 121 'exit_code': '1', |
| 122 }, | 122 }, |
| 123 } | 123 } |
| 124 | 124 |
| 125 | 125 |
| 126 _EXPECTED_TESTS_STATUS = { | 126 _EXPECTED_TESTS_STATUS = { |
| 127 'TestSuite1.test1': { | 127 'TestSuite1.test1': { |
| 128 'total_run': 2, | 128 'total_run': 2, |
| 129 'SUCCESS': 2 | 129 'SUCCESS': 2 |
| 130 }, | 130 }, |
| 131 'TestSuite1.test2': { | 131 'TestSuite1.test2': { |
| 132 'total_run': 4, | 132 'total_run': 4, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 144 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'], | 144 'flaky_tests': ['TestSuite1.test2', 'TestSuite1.test1'], |
| 145 'reliable_tests': ['TestSuite1.test3'] | 145 'reliable_tests': ['TestSuite1.test3'] |
| 146 } | 146 } |
| 147 | 147 |
| 148 | 148 |
| 149 class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): | 149 class ProcessBaseSwarmingTaskResultPipelineTest(wf_testcase.WaterfallTestCase): |
| 150 | 150 |
| 151 def _MockedGetSwarmingTaskResultById(self, task_id, _): | 151 def _MockedGetSwarmingTaskResultById(self, task_id, _): |
| 152 return _SWARMING_TASK_RESULTS[task_id], None | 152 return _SWARMING_TASK_RESULTS[task_id], None |
| 153 | 153 |
| 154 def _MockedGetSwarmingTaskFailureLog(self, *_): | |
| 155 return _SAMPLE_FAILURE_LOG, None | |
| 156 | |
| 157 def setUp(self): | 154 def setUp(self): |
| 158 super(ProcessBaseSwarmingTaskResultPipelineTest, self).setUp() | 155 super(ProcessBaseSwarmingTaskResultPipelineTest, self).setUp() |
| 159 self.pipeline = ProcessBaseSwarmingTaskResultPipeline() | 156 self.pipeline = ProcessBaseSwarmingTaskResultPipeline() |
| 160 self.master_name = 'm' | 157 self.master_name = 'm' |
| 161 self.builder_name = 'b' | 158 self.builder_name = 'b' |
| 162 self.build_number = 121 | 159 self.build_number = 121 |
| 163 self.step_name = 'abc_tests on platform' | 160 self.step_name = 'abc_tests on platform' |
| 164 self.test_name = 'test' | 161 self.test_name = 'test' |
| 165 self.mock(swarming_util, 'GetSwarmingTaskResultById', | 162 self.mock(swarming_util, 'GetSwarmingTaskResultById', |
| 166 self._MockedGetSwarmingTaskResultById) | 163 self._MockedGetSwarmingTaskResultById) |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 task.task_id = 'task_id2' | 254 task.task_id = 'task_id2' |
| 258 task.put() | 255 task.put() |
| 259 | 256 |
| 260 pipeline = ProcessSwarmingTaskResultPipeline() | 257 pipeline = ProcessSwarmingTaskResultPipeline() |
| 261 pipeline.run( | 258 pipeline.run( |
| 262 self.master_name, self.builder_name, self.build_number, self.step_name) | 259 self.master_name, self.builder_name, self.build_number, self.step_name) |
| 263 | 260 |
| 264 self.assertEqual(analysis_status.ERROR, task.status) | 261 self.assertEqual(analysis_status.ERROR, task.status) |
| 265 self.assertEqual(task.error, {'code': 1, 'message': 'error'}) | 262 self.assertEqual(task.error, {'code': 1, 'message': 'error'}) |
| 266 | 263 |
| 264 @mock.patch.object(swarming_util, 'GetSwarmingTaskResultById', |
| 265 return_value=(_SWARMING_TASK_RESULTS['task_id1'], |
| 266 {'code': 1, 'message': 'error'})) |
| 267 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog', |
| 268 return_value=(_SAMPLE_FAILURE_LOG, None)) |
| 269 def testMonitorSwarmingTaskGetSwarmingTaskResultIdErrorRecovered(self, *_): |
| 270 task = WfSwarmingTask.Create( |
| 271 self.master_name, self.builder_name, |
| 272 self.build_number, self.step_name) |
| 273 task.task_id = 'task_id1' |
| 274 task.put() |
| 275 |
| 276 pipeline = ProcessSwarmingTaskResultPipeline() |
| 277 pipeline.run( |
| 278 self.master_name, self.builder_name, self.build_number, self.step_name) |
| 279 |
| 280 self.assertEqual(analysis_status.COMPLETED, task.status) |
| 281 self.assertEqual(task.error, {'code': 1, 'message': 'error'}) |
| 282 |
| 283 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog', |
| 284 return_value=(_SAMPLE_FAILURE_LOG, |
| 285 {'code': 1, 'message': 'error'})) |
| 286 def testMonitorSwarmingTaskGetSwarmingTaskFailureLogErrorRecovered(self, _): |
| 287 task = WfSwarmingTask.Create( |
| 288 self.master_name, self.builder_name, |
| 289 self.build_number, self.step_name) |
| 290 task.task_id = 'task_id1' |
| 291 task.put() |
| 292 |
| 293 pipeline = ProcessSwarmingTaskResultPipeline() |
| 294 pipeline.run( |
| 295 self.master_name, self.builder_name, self.build_number, self.step_name) |
| 296 |
| 297 self.assertEqual(analysis_status.COMPLETED, task.status) |
| 298 self.assertEqual(task.error, {'code': 1, 'message': 'error'}) |
| 299 |
| 267 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog', | 300 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog', |
| 268 return_value=(None, {'code': 1, 'message': 'error'})) | 301 return_value=(None, {'code': 1, 'message': 'error'})) |
| 269 def testMonitorSwarmingTaskGetSwarmingTaskFailureLogError(self, _): | 302 def testMonitorSwarmingTaskGetSwarmingTaskFailureLogError(self, _): |
| 270 task = WfSwarmingTask.Create( | 303 task = WfSwarmingTask.Create( |
| 271 self.master_name, self.builder_name, | 304 self.master_name, self.builder_name, |
| 272 self.build_number, self.step_name) | 305 self.build_number, self.step_name) |
| 273 task.task_id = 'task_id1' | 306 task.task_id = 'task_id1' |
| 274 task.put() | 307 task.put() |
| 275 | 308 |
| 276 pipeline = ProcessSwarmingTaskResultPipeline() | 309 pipeline = ProcessSwarmingTaskResultPipeline() |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 self.master_name, self.builder_name, self.build_number, self.step_name) | 345 self.master_name, self.builder_name, self.build_number, self.step_name) |
| 313 | 346 |
| 314 self.assertEqual(analysis_status.ERROR, task.status) | 347 self.assertEqual(analysis_status.ERROR, task.status) |
| 315 self.assertEqual( | 348 self.assertEqual( |
| 316 task.error, | 349 task.error, |
| 317 { | 350 { |
| 318 'code': swarming_util.NO_TASK_OUTPUTS, | 351 'code': swarming_util.NO_TASK_OUTPUTS, |
| 319 'message': 'outputs_ref is None' | 352 'message': 'outputs_ref is None' |
| 320 }) | 353 }) |
| 321 | 354 |
| 322 def testProcessSwarmingTaskResultPipeline(self): | 355 @mock.patch.object(swarming_util, 'GetSwarmingTaskFailureLog', |
| 356 return_value=(_SAMPLE_FAILURE_LOG, None)) |
| 357 def testProcessSwarmingTaskResultPipeline(self, _): |
| 323 # End to end test. | 358 # End to end test. |
| 324 self.mock(swarming_util, 'GetSwarmingTaskFailureLog', | |
| 325 self._MockedGetSwarmingTaskFailureLog) | |
| 326 | |
| 327 task = WfSwarmingTask.Create( | 359 task = WfSwarmingTask.Create( |
| 328 self.master_name, self.builder_name, | 360 self.master_name, self.builder_name, |
| 329 self.build_number, self.step_name) | 361 self.build_number, self.step_name) |
| 330 task.task_id = 'task_id1' | 362 task.task_id = 'task_id1' |
| 331 task.put() | 363 task.put() |
| 332 | 364 |
| 333 pipeline = ProcessSwarmingTaskResultPipeline() | 365 pipeline = ProcessSwarmingTaskResultPipeline() |
| 334 step_name, task_info = pipeline.run( | 366 step_name, task_info = pipeline.run( |
| 335 self.master_name, self.builder_name, | 367 self.master_name, self.builder_name, |
| 336 self.build_number, self.step_name) | 368 self.build_number, self.step_name) |
| 337 | 369 |
| 338 self.assertEqual(self.step_name, step_name) | 370 self.assertEqual(self.step_name, step_name) |
| 339 self.assertEqual('abc_tests', task_info[0]) | 371 self.assertEqual('abc_tests', task_info[0]) |
| 340 self.assertEqual( | 372 self.assertEqual( |
| 341 _EXPECTED_CLASSIFIED_TESTS['reliable_tests'], task_info[1]) | 373 _EXPECTED_CLASSIFIED_TESTS['reliable_tests'], task_info[1]) |
| 342 | 374 |
| 343 task = WfSwarmingTask.Get( | 375 task = WfSwarmingTask.Get( |
| 344 self.master_name, self.builder_name, self.build_number, self.step_name) | 376 self.master_name, self.builder_name, self.build_number, self.step_name) |
| 345 | 377 |
| 346 self.assertEqual(analysis_status.COMPLETED, task.status) | 378 self.assertEqual(analysis_status.COMPLETED, task.status) |
| 347 self.assertEqual(_EXPECTED_TESTS_STATUS, task.tests_statuses) | 379 self.assertEqual(_EXPECTED_TESTS_STATUS, task.tests_statuses) |
| 348 self.assertEqual( | 380 self.assertEqual( |
| 349 _EXPECTED_CLASSIFIED_TESTS, task.classified_tests) | 381 _EXPECTED_CLASSIFIED_TESTS, task.classified_tests) |
| 350 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), | 382 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), |
| 351 task.created_time) | 383 task.created_time) |
| 352 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), | 384 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), |
| 353 task.started_time) | 385 task.started_time) |
| 354 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), | 386 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), |
| 355 task.completed_time) | 387 task.completed_time) |
| OLD | NEW |