| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 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 from testing_utils import testing | 5 from testing_utils import testing |
| 6 | 6 |
| 7 from common.pipeline_wrapper import pipeline_handlers | 7 from common.pipeline_wrapper import pipeline_handlers |
| 8 from common.waterfall import failure_type |
| 9 from model import analysis_approach_type |
| 8 from model import analysis_status | 10 from model import analysis_status |
| 9 from model import result_status | 11 from model import result_status |
| 10 from model.wf_analysis import WfAnalysis | 12 from model.wf_analysis import WfAnalysis |
| 13 from model.wf_suspected_cl import WfSuspectedCL |
| 11 from waterfall import build_failure_analysis | 14 from waterfall import build_failure_analysis |
| 12 from waterfall import identify_culprit_pipeline | 15 from waterfall import identify_culprit_pipeline |
| 13 | 16 |
| 14 | 17 |
| 15 class IdentifyCulpritPipelineTest(testing.AppengineTestCase): | 18 class IdentifyCulpritPipelineTest(testing.AppengineTestCase): |
| 16 app_module = pipeline_handlers._APP | 19 app_module = pipeline_handlers._APP |
| 17 | 20 |
| 18 def testGetSuspectedCLs(self): | 21 def testGetSuspectedCLs(self): |
| 19 dummy_result = { | 22 dummy_result = { |
| 20 'failures': [ | 23 'failures': [ |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 } | 197 } |
| 195 | 198 |
| 196 self.assertEqual(result_status.NOT_FOUND_UNTRIAGED, | 199 self.assertEqual(result_status.NOT_FOUND_UNTRIAGED, |
| 197 identify_culprit_pipeline._GetResultAnalysisStatus( | 200 identify_culprit_pipeline._GetResultAnalysisStatus( |
| 198 dummy_result)) | 201 dummy_result)) |
| 199 | 202 |
| 200 def testIdentifyCulpritPipeline(self): | 203 def testIdentifyCulpritPipeline(self): |
| 201 master_name = 'm' | 204 master_name = 'm' |
| 202 builder_name = 'b' | 205 builder_name = 'b' |
| 203 build_number = 123 | 206 build_number = 123 |
| 207 repo_name = 'chromium' |
| 208 revision = 'r99_1' |
| 204 | 209 |
| 205 analysis = WfAnalysis.Create(master_name, builder_name, build_number) | 210 analysis = WfAnalysis.Create(master_name, builder_name, build_number) |
| 206 analysis.result = None | 211 analysis.result = None |
| 207 analysis.status = analysis_status.RUNNING | 212 analysis.status = analysis_status.RUNNING |
| 208 analysis.put() | 213 analysis.put() |
| 209 | 214 |
| 210 failure_info = { | 215 failure_info = { |
| 211 'master_name': master_name, | 216 'master_name': master_name, |
| 212 'builder_name': builder_name, | 217 'builder_name': builder_name, |
| 213 'build_number': build_number, | 218 'build_number': build_number, |
| 219 'failure_type': failure_type.TEST |
| 214 } | 220 } |
| 215 change_logs = {} | 221 change_logs = {} |
| 216 deps_info = {} | 222 deps_info = {} |
| 217 signals = {} | 223 signals = {} |
| 218 | 224 |
| 219 dummy_result = {'failures': []} | 225 dummy_result = { |
| 226 'failures': [ |
| 227 { |
| 228 'step_name': 'a', |
| 229 'first_failure': 98, |
| 230 'last_pass': None, |
| 231 'suspected_cls': [ |
| 232 { |
| 233 'build_number': 99, |
| 234 'repo_name': repo_name, |
| 235 'revision': revision, |
| 236 'commit_position': None, |
| 237 'url': None, |
| 238 'score': 1, |
| 239 'hints': { |
| 240 'modified f99_2.cc (and it was in log)': 1, |
| 241 }, |
| 242 } |
| 243 ], |
| 244 } |
| 245 ] |
| 246 } |
| 220 | 247 |
| 221 def MockAnalyzeBuildFailure(*_): | 248 def MockAnalyzeBuildFailure(*_): |
| 222 return dummy_result | 249 return dummy_result |
| 223 | 250 |
| 224 self.mock(build_failure_analysis, | 251 self.mock(build_failure_analysis, |
| 225 'AnalyzeBuildFailure', MockAnalyzeBuildFailure) | 252 'AnalyzeBuildFailure', MockAnalyzeBuildFailure) |
| 226 | 253 |
| 227 pipeline = identify_culprit_pipeline.IdentifyCulpritPipeline( | 254 pipeline = identify_culprit_pipeline.IdentifyCulpritPipeline( |
| 228 failure_info, change_logs, deps_info, signals, True) | 255 failure_info, change_logs, deps_info, signals, True) |
| 229 pipeline.start() | 256 pipeline.start() |
| 230 self.execute_queued_tasks() | 257 self.execute_queued_tasks() |
| 231 | 258 |
| 232 expected_suspected_cls = [] | 259 expected_suspected_cls = [ |
| 260 { |
| 261 'repo_name': repo_name, |
| 262 'revision': revision, |
| 263 'commit_position': None, |
| 264 'url': None |
| 265 } |
| 266 ] |
| 233 | 267 |
| 234 analysis = WfAnalysis.Get(master_name, builder_name, build_number) | 268 analysis = WfAnalysis.Get(master_name, builder_name, build_number) |
| 235 self.assertTrue(analysis.build_completed) | 269 self.assertTrue(analysis.build_completed) |
| 236 self.assertIsNotNone(analysis) | 270 self.assertIsNotNone(analysis) |
| 237 self.assertEqual(dummy_result, analysis.result) | 271 self.assertEqual(dummy_result, analysis.result) |
| 238 self.assertEqual(analysis_status.COMPLETED, analysis.status) | 272 self.assertEqual(analysis_status.COMPLETED, analysis.status) |
| 239 self.assertIsNone(analysis.result_status) | 273 self.assertIsNotNone(analysis.result_status) |
| 240 self.assertEqual(expected_suspected_cls, analysis.suspected_cls) | 274 self.assertEqual(expected_suspected_cls, analysis.suspected_cls) |
| 275 |
| 276 suspected_cl = WfSuspectedCL.Get(repo_name, revision) |
| 277 self.assertIsNotNone(suspected_cl) |
| 278 self.assertEqual( |
| 279 [[master_name, builder_name, build_number]], suspected_cl.builds) |
| 280 |
| 281 def testGetResultAnalysisStatusNone(self): |
| 282 self.assertIsNone(identify_culprit_pipeline._GetResultAnalysisStatus([])) |
| 283 |
| 284 def testGetSuspectedCLsEmpty(self): |
| 285 self.assertEqual([], identify_culprit_pipeline._GetSuspectedCLs([])) |
| OLD | NEW |