Chromium Code Reviews| 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 | 6 |
| 7 from model import analysis_status | 7 from model import analysis_status |
| 8 from model.flake.flake_swarming_task import FlakeSwarmingTask | 8 from model.flake.flake_swarming_task import FlakeSwarmingTask |
| 9 from model.flake.master_flake_analysis import MasterFlakeAnalysis | 9 from model.flake.master_flake_analysis import MasterFlakeAnalysis |
| 10 from waterfall import swarming_util | 10 from waterfall import swarming_util |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 76 'other_info': 'N/A' | 76 'other_info': 'N/A' |
| 77 }, | 77 }, |
| 78 { | 78 { |
| 79 'status': 'FAILURE', | 79 'status': 'FAILURE', |
| 80 'other_info': 'N/A' | 80 'other_info': 'N/A' |
| 81 } | 81 } |
| 82 ] | 82 ] |
| 83 } | 83 } |
| 84 ] | 84 ] |
| 85 } | 85 } |
| 86 _EXPECTED_TESTS_STATUESE = { | 86 _EXPECTED_TEST_STATUS = { |
| 87 'TestSuite1.test1': { | 87 'TestSuite1.test1': { |
| 88 'total_run': 2, | 88 'total_run': 2, |
| 89 'SUCCESS': 2 | 89 'SUCCESS': 2 |
| 90 }, | 90 }, |
| 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': { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 130 return mocked_result | 130 return mocked_result |
| 131 | 131 |
| 132 def setUp(self): | 132 def setUp(self): |
| 133 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp() | 133 super(ProcessFlakeSwarmingTaskResultPipelineTest, self).setUp() |
| 134 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline() | 134 self.pipeline = ProcessFlakeSwarmingTaskResultPipeline() |
| 135 self.master_name = 'm' | 135 self.master_name = 'm' |
| 136 self.builder_name = 'b' | 136 self.builder_name = 'b' |
| 137 self.build_number = 121 | 137 self.build_number = 121 |
| 138 self.step_name = 'abc_tests on platform' | 138 self.step_name = 'abc_tests on platform' |
| 139 self.test_name = 'TestSuite1.test1' | 139 self.test_name = 'TestSuite1.test1' |
| 140 self.version_number = 1 | |
| 140 self.mock(swarming_util, 'GetSwarmingTaskResultById', | 141 self.mock(swarming_util, 'GetSwarmingTaskResultById', |
| 141 self._MockedGetSwarmingTaskResultById) | 142 self._MockedGetSwarmingTaskResultById) |
| 142 | 143 |
| 143 def testCheckTestsRunStatusesNoOutPutJson(self): | 144 def testCheckTestsRunStatusesNoOutPutJson(self): |
| 144 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs( | 145 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs( |
| 145 self.pipeline, self.master_name, self.builder_name, | 146 self.pipeline, self.master_name, self.builder_name, |
| 146 self.build_number, self.step_name, self.build_number, | 147 self.build_number, self.step_name, self.build_number, |
| 147 self.test_name) | 148 self.test_name, self.version_number) |
| 149 print call_params | |
|
chanli
2016/09/30 21:24:36
nit: remove this print
lijeffrey
2016/10/01 01:28:04
Done.
| |
| 148 tests_statuses = ( | 150 tests_statuses = ( |
| 149 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses( | 151 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses( |
| 150 self.pipeline, None, *call_params | 152 self.pipeline, None, *call_params)) |
| 151 )) | |
| 152 self.assertEqual({}, tests_statuses) | 153 self.assertEqual({}, tests_statuses) |
| 153 | 154 |
| 154 def testCheckTestsRunStatuses(self): | 155 def testCheckTestsRunStatuses(self): |
| 155 analysis = MasterFlakeAnalysis.Create( | 156 analysis = MasterFlakeAnalysis.Create( |
| 156 self.master_name, self.builder_name, | 157 self.master_name, self.builder_name, |
| 157 self.build_number, self.step_name, self.test_name) | 158 self.build_number, self.step_name, self.test_name) |
| 158 analysis.put() | 159 analysis.Save() |
| 159 | 160 |
| 160 task = FlakeSwarmingTask.Create( | 161 task = FlakeSwarmingTask.Create( |
| 161 self.master_name, self.builder_name, | 162 self.master_name, self.builder_name, |
| 162 self.build_number, self.step_name, self.test_name) | 163 self.build_number, self.step_name, self.test_name) |
| 163 task.put() | 164 task.put() |
| 164 | 165 |
| 165 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs( | 166 call_params = ProcessFlakeSwarmingTaskResultPipeline._GetArgs( |
| 166 self.pipeline, self.master_name, self.builder_name, | 167 self.pipeline, self.master_name, self.builder_name, |
| 167 self.build_number, self.step_name, self.build_number, | 168 self.build_number, self.step_name, self.build_number, |
| 168 self.test_name) | 169 self.test_name, self.version_number) |
| 169 | 170 |
| 170 tests_statuses = ( | 171 tests_statuses = ( |
| 171 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses( | 172 ProcessFlakeSwarmingTaskResultPipeline._CheckTestsRunStatuses( |
| 172 self.pipeline, | 173 self.pipeline, |
| 173 _SAMPLE_FAILURE_LOG, *call_params)) | 174 _SAMPLE_FAILURE_LOG, *call_params)) |
| 174 self.assertEqual(_EXPECTED_TESTS_STATUESE, tests_statuses) | 175 self.assertEqual(_EXPECTED_TEST_STATUS, tests_statuses) |
| 175 | 176 |
| 176 def testCheckTestsRunStatusesWhenTestNotExist(self): | 177 def testCheckTestsRunStatusesWhenTestDoesNotExist(self): |
| 177 test_name = 'TestSuite1.new_test' | 178 test_name = 'TestSuite1.new_test' |
| 178 analysis = MasterFlakeAnalysis.Create( | 179 analysis = MasterFlakeAnalysis.Create( |
| 179 self.master_name, self.builder_name, | 180 self.master_name, self.builder_name, |
| 180 self.build_number, self.step_name, test_name) | 181 self.build_number, self.step_name, test_name) |
| 181 analysis.put() | 182 analysis.Save() |
| 182 | 183 |
| 183 task = FlakeSwarmingTask.Create( | 184 task = FlakeSwarmingTask.Create( |
| 184 self.master_name, self.builder_name, | 185 self.master_name, self.builder_name, |
| 185 self.build_number, self.step_name, test_name) | 186 self.build_number, self.step_name, test_name) |
| 186 task.put() | 187 task.put() |
| 187 | 188 |
| 188 pipeline = ProcessFlakeSwarmingTaskResultPipeline() | 189 pipeline = ProcessFlakeSwarmingTaskResultPipeline() |
| 189 tests_statuses = pipeline._CheckTestsRunStatuses( | 190 tests_statuses = pipeline._CheckTestsRunStatuses( |
| 190 _SAMPLE_FAILURE_LOG, self.master_name, self.builder_name, | 191 _SAMPLE_FAILURE_LOG, self.master_name, self.builder_name, |
| 191 self.build_number, self.step_name, self.build_number, test_name) | 192 self.build_number, self.step_name, self.build_number, test_name, |
| 193 self.version_number) | |
| 192 | 194 |
| 193 self.assertEqual(_EXPECTED_TESTS_STATUESE, tests_statuses) | 195 self.assertEqual(_EXPECTED_TEST_STATUS, tests_statuses) |
| 194 | 196 |
| 195 task = FlakeSwarmingTask.Get( | 197 task = FlakeSwarmingTask.Get( |
| 196 self.master_name, self.builder_name, | 198 self.master_name, self.builder_name, |
| 197 self.build_number, self.step_name, test_name) | 199 self.build_number, self.step_name, test_name) |
| 198 self.assertEqual(0, task.tries) | 200 self.assertEqual(0, task.tries) |
| 199 self.assertEqual(0, task.successes) | 201 self.assertEqual(0, task.successes) |
| 200 | 202 |
| 201 analysis = MasterFlakeAnalysis.Get( | 203 analysis = MasterFlakeAnalysis.GetVersion( |
| 202 self.master_name, self.builder_name, | 204 self.master_name, self.builder_name, |
| 203 self.build_number, self.step_name, test_name) | 205 self.build_number, self.step_name, test_name, self.version_number) |
| 204 self.assertTrue(analysis.success_rates[-1] < 0) | 206 self.assertTrue(analysis.pass_rates[-1] < 0) |
| 205 | 207 |
| 206 def _MockedGetSwarmingTaskFailureLog(self, *_): | 208 def _MockedGetSwarmingTaskFailureLog(self, *_): |
| 207 return _SAMPLE_FAILURE_LOG | 209 return _SAMPLE_FAILURE_LOG |
| 208 | 210 |
| 209 def testProcessFlakeSwarmingTaskResultPipeline(self): | 211 def testProcessFlakeSwarmingTaskResultPipeline(self): |
| 210 | 212 |
| 211 self.mock(swarming_util, 'GetSwarmingTaskFailureLog', | 213 self.mock(swarming_util, 'GetSwarmingTaskFailureLog', |
| 212 self._MockedGetSwarmingTaskFailureLog) | 214 self._MockedGetSwarmingTaskFailureLog) |
| 213 | 215 |
| 214 task = FlakeSwarmingTask.Create( | 216 task = FlakeSwarmingTask.Create( |
| 215 self.master_name, self.builder_name, | 217 self.master_name, self.builder_name, |
| 216 self.build_number, self.step_name, self.test_name) | 218 self.build_number, self.step_name, self.test_name) |
| 217 task.task_id = 'task_id1' | 219 task.task_id = 'task_id1' |
| 218 task.put() | 220 task.put() |
| 219 | 221 |
| 220 analysis = MasterFlakeAnalysis.Create( | 222 analysis = MasterFlakeAnalysis.Create( |
| 221 self.master_name, self.builder_name, | 223 self.master_name, self.builder_name, |
| 222 self.build_number, self.step_name, self.test_name) | 224 self.build_number, self.step_name, self.test_name) |
| 223 analysis.put() | 225 analysis.Save() |
| 224 | 226 |
| 225 pipeline = ProcessFlakeSwarmingTaskResultPipeline() | 227 pipeline = ProcessFlakeSwarmingTaskResultPipeline() |
| 226 step_name, task_info = pipeline.run( | 228 step_name, task_info = pipeline.run( |
| 227 self.master_name, self.builder_name, | 229 self.master_name, self.builder_name, |
| 228 self.build_number, self.step_name, | 230 self.build_number, self.step_name, |
| 229 'task_id1', self.build_number, self.test_name) | 231 'task_id1', self.build_number, self.test_name, |
| 232 analysis.version_number) | |
| 230 self.assertEqual('abc_tests', task_info) | 233 self.assertEqual('abc_tests', task_info) |
| 231 self.assertEqual(self.step_name, step_name) | 234 self.assertEqual(self.step_name, step_name) |
| 232 | 235 |
| 233 task = FlakeSwarmingTask.Get( | 236 task = FlakeSwarmingTask.Get( |
| 234 self.master_name, self.builder_name, self.build_number, | 237 self.master_name, self.builder_name, self.build_number, |
| 235 self.step_name, self.test_name) | 238 self.step_name, self.test_name) |
| 236 | 239 |
| 237 self.assertEqual(analysis_status.COMPLETED, task.status) | 240 self.assertEqual(analysis_status.COMPLETED, task.status) |
| 238 self.assertEqual(_EXPECTED_TESTS_STATUESE, task.tests_statuses) | 241 self.assertEqual(_EXPECTED_TEST_STATUS, task.tests_statuses) |
| 239 | 242 |
| 240 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), | 243 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 6, 538220), |
| 241 task.created_time) | 244 task.created_time) |
| 242 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), | 245 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 32, 9, 90550), |
| 243 task.started_time) | 246 task.started_time) |
| 244 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), | 247 self.assertEqual(datetime.datetime(2016, 2, 10, 18, 33, 9), |
| 245 task.completed_time) | 248 task.completed_time) |
| 246 | 249 |
| 247 def testProcessFlakeSwarmingTaskResultPipelineTaskNotRunning(self): | 250 def testProcessFlakeSwarmingTaskResultPipelineTaskNotRunning(self): |
| 248 task = FlakeSwarmingTask.Create( | 251 task = FlakeSwarmingTask.Create( |
| 249 self.master_name, self.builder_name, | 252 self.master_name, self.builder_name, |
| 250 self.build_number, self.step_name, self.test_name) | 253 self.build_number, self.step_name, self.test_name) |
| 251 task.task_id = 'task_id2' | 254 task.task_id = 'task_id2' |
| 252 task.put() | 255 task.put() |
| 253 | 256 |
| 254 analysis = MasterFlakeAnalysis.Create( | 257 analysis = MasterFlakeAnalysis.Create( |
| 255 self.master_name, self.builder_name, | 258 self.master_name, self.builder_name, |
| 256 self.build_number, self.step_name, self.test_name) | 259 self.build_number, self.step_name, self.test_name) |
| 257 analysis.put() | 260 analysis.Save() |
| 258 | 261 |
| 259 pipeline = ProcessFlakeSwarmingTaskResultPipeline() | 262 pipeline = ProcessFlakeSwarmingTaskResultPipeline() |
| 260 step_name, task_info = pipeline.run( | 263 step_name, task_info = pipeline.run( |
| 261 self.master_name, self.builder_name, | 264 self.master_name, self.builder_name, self.build_number, self.step_name, |
| 262 self.build_number, self.step_name, | 265 'task_id2', self.build_number, self.test_name, analysis.version_number) |
| 263 'task_id2', self.build_number, self.test_name) | |
| 264 self.assertEqual(None, task_info) | 266 self.assertEqual(None, task_info) |
| 265 self.assertEqual(self.step_name, step_name) | 267 self.assertEqual(self.step_name, step_name) |
| 266 | 268 |
| 267 task = FlakeSwarmingTask.Get( | 269 task = FlakeSwarmingTask.Get( |
| 268 self.master_name, self.builder_name, | 270 self.master_name, self.builder_name, self.build_number, self.step_name, |
| 269 self.build_number, self.step_name, self.test_name) | 271 self.test_name) |
| 270 | 272 |
| 271 self.assertEqual(analysis_status.ERROR, task.status) | 273 self.assertEqual(analysis_status.ERROR, task.status) |
| 272 | 274 |
| 273 def testProcessFlakeSwarmingTaskResultPipelineTaskTimeOut(self): | 275 def testProcessFlakeSwarmingTaskResultPipelineTaskTimeOut(self): |
| 274 # Override swarming config settings to force a timeout. | 276 # Override swarming config settings to force a timeout. |
| 275 override_swarming_settings = { | 277 override_swarming_settings = { |
| 276 'task_timeout_hours': -1 | 278 'task_timeout_hours': -1 |
| 277 } | 279 } |
| 278 self.UpdateUnitTestConfigSettings( | 280 self.UpdateUnitTestConfigSettings( |
| 279 'swarming_settings', override_swarming_settings) | 281 'swarming_settings', override_swarming_settings) |
| 280 | 282 |
| 281 task = FlakeSwarmingTask.Create( | 283 task = FlakeSwarmingTask.Create( |
| 282 self.master_name, self.builder_name, | 284 self.master_name, self.builder_name, self.build_number, self.step_name, |
| 283 self.build_number, self.step_name, self.test_name) | 285 self.test_name) |
| 284 task.task_id = 'task_id1' | 286 task.task_id = 'task_id1' |
| 285 task.put() | 287 task.put() |
| 286 | 288 |
| 287 pipeline = ProcessFlakeSwarmingTaskResultPipeline() | 289 pipeline = ProcessFlakeSwarmingTaskResultPipeline() |
| 288 step_name, task_info = pipeline.run( | 290 step_name, task_info = pipeline.run( |
| 289 self.master_name, self.builder_name, | 291 self.master_name, self.builder_name, self.build_number, self.step_name, |
| 290 self.build_number, self.step_name, | 292 'task_id1', self.build_number, self.test_name, self.version_number) |
| 291 'task_id1', self.build_number, self.test_name) | |
| 292 self.assertEqual('abc_tests', task_info) | 293 self.assertEqual('abc_tests', task_info) |
| 293 self.assertEqual(self.step_name, step_name) | 294 self.assertEqual(self.step_name, step_name) |
| 294 | 295 |
| 295 task = FlakeSwarmingTask.Get( | 296 task = FlakeSwarmingTask.Get( |
| 296 self.master_name, self.builder_name, self.build_number, | 297 self.master_name, self.builder_name, self.build_number, self.step_name, |
| 297 self.step_name, self.test_name) | 298 self.test_name) |
| 298 self.assertEqual(analysis_status.ERROR, task.status) | 299 self.assertEqual(analysis_status.ERROR, task.status) |
| 299 self.assertEqual({}, task.tests_statuses) | 300 self.assertEqual({}, task.tests_statuses) |
| OLD | NEW |