| 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.git_repository import GitRepository | 7 from common.git_repository import GitRepository |
| 8 from model import wf_analysis_status | 8 from model import analysis_status |
| 9 from model.wf_try_job import WfTryJob | 9 from model.wf_try_job import WfTryJob |
| 10 from model.wf_try_job_data import WfTryJobData | 10 from model.wf_try_job_data import WfTryJobData |
| 11 from waterfall.identify_try_job_culprit_pipeline import( | 11 from waterfall.identify_try_job_culprit_pipeline import( |
| 12 IdentifyTryJobCulpritPipeline) | 12 IdentifyTryJobCulpritPipeline) |
| 13 from waterfall.try_job_type import TryJobType | 13 from waterfall.try_job_type import TryJobType |
| 14 | 14 |
| 15 | 15 |
| 16 class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): | 16 class IdentifyTryJobCulpritPipelineTest(testing.AppengineTestCase): |
| 17 | 17 |
| 18 def _MockGetChangeLog(self, revision): | 18 def _MockGetChangeLog(self, revision): |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 try_job.put() | 86 try_job.put() |
| 87 try_job_data = WfTryJobData.Create(try_job_id) | 87 try_job_data = WfTryJobData.Create(try_job_id) |
| 88 try_job_data.put() | 88 try_job_data.put() |
| 89 | 89 |
| 90 pipeline = IdentifyTryJobCulpritPipeline() | 90 pipeline = IdentifyTryJobCulpritPipeline() |
| 91 culprit = pipeline.run( | 91 culprit = pipeline.run( |
| 92 master_name, builder_name, build_number, ['rev1'], | 92 master_name, builder_name, build_number, ['rev1'], |
| 93 TryJobType.COMPILE, '1', None) | 93 TryJobType.COMPILE, '1', None) |
| 94 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 94 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 95 | 95 |
| 96 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) | 96 self.assertEqual(analysis_status.COMPLETED, try_job.status) |
| 97 self.assertEqual([], try_job.compile_results) | 97 self.assertEqual([], try_job.compile_results) |
| 98 self.assertIsNone(culprit) | 98 self.assertIsNone(culprit) |
| 99 self.assertIsNone(try_job_data.culprits) | 99 self.assertIsNone(try_job_data.culprits) |
| 100 | 100 |
| 101 def testIdentifyCulpritForCompileTryJobSuccess(self): | 101 def testIdentifyCulpritForCompileTryJobSuccess(self): |
| 102 master_name = 'm' | 102 master_name = 'm' |
| 103 builder_name = 'b' | 103 builder_name = 'b' |
| 104 build_number = 1 | 104 build_number = 1 |
| 105 try_job_id = '1' | 105 try_job_id = '1' |
| 106 | 106 |
| 107 compile_result = { | 107 compile_result = { |
| 108 'report': { | 108 'report': { |
| 109 'result': { | 109 'result': { |
| 110 'rev1': 'passed', | 110 'rev1': 'passed', |
| 111 'rev2': 'failed' | 111 'rev2': 'failed' |
| 112 }, | 112 }, |
| 113 }, | 113 }, |
| 114 } | 114 } |
| 115 | 115 |
| 116 try_job_data = WfTryJobData.Create(try_job_id) | 116 try_job_data = WfTryJobData.Create(try_job_id) |
| 117 try_job_data.put() | 117 try_job_data.put() |
| 118 | 118 |
| 119 try_job = WfTryJob.Create(master_name, builder_name, build_number) | 119 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 120 try_job.status = wf_analysis_status.ANALYZING | 120 try_job.status = analysis_status.RUNNING |
| 121 try_job.compile_results = [{ | 121 try_job.compile_results = [{ |
| 122 'report': { | 122 'report': { |
| 123 'result': { | 123 'result': { |
| 124 'rev1': 'passed', | 124 'rev1': 'passed', |
| 125 'rev2': 'failed' | 125 'rev2': 'failed' |
| 126 }, | 126 }, |
| 127 }, | 127 }, |
| 128 'try_job_id': try_job_id, | 128 'try_job_id': try_job_id, |
| 129 }] | 129 }] |
| 130 try_job.put() | 130 try_job.put() |
| (...skipping 18 matching lines...) Expand all Loading... |
| 149 'commit_position': '2', | 149 'commit_position': '2', |
| 150 'review_url': 'url_2' | 150 'review_url': 'url_2' |
| 151 } | 151 } |
| 152 } | 152 } |
| 153 } | 153 } |
| 154 | 154 |
| 155 self.assertEqual(expected_compile_result['culprit'], culprit) | 155 self.assertEqual(expected_compile_result['culprit'], culprit) |
| 156 | 156 |
| 157 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 157 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 158 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) | 158 self.assertEqual(expected_compile_result, try_job.compile_results[-1]) |
| 159 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) | 159 self.assertEqual(analysis_status.COMPLETED, try_job.status) |
| 160 | 160 |
| 161 try_job_data = WfTryJobData.Get(try_job_id) | 161 try_job_data = WfTryJobData.Get(try_job_id) |
| 162 self.assertEqual({'compile': expected_culprit}, try_job_data.culprits) | 162 self.assertEqual({'compile': expected_culprit}, try_job_data.culprits) |
| 163 | 163 |
| 164 def testIdentifyCulpritForCompileReturnNoneIfAllPassed(self): | 164 def testIdentifyCulpritForCompileReturnNoneIfAllPassed(self): |
| 165 master_name = 'm' | 165 master_name = 'm' |
| 166 builder_name = 'b' | 166 builder_name = 'b' |
| 167 build_number = 1 | 167 build_number = 1 |
| 168 try_job_id = '1' | 168 try_job_id = '1' |
| 169 | 169 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 181 WfTryJobData.Create(try_job_id).put() | 181 WfTryJobData.Create(try_job_id).put() |
| 182 WfTryJob.Create(master_name, builder_name, build_number).put() | 182 WfTryJob.Create(master_name, builder_name, build_number).put() |
| 183 | 183 |
| 184 pipeline = IdentifyTryJobCulpritPipeline() | 184 pipeline = IdentifyTryJobCulpritPipeline() |
| 185 culprit = pipeline.run( | 185 culprit = pipeline.run( |
| 186 master_name, builder_name, build_number, ['rev1'], | 186 master_name, builder_name, build_number, ['rev1'], |
| 187 TryJobType.COMPILE, '1', compile_result) | 187 TryJobType.COMPILE, '1', compile_result) |
| 188 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 188 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 189 | 189 |
| 190 self.assertIsNone(culprit) | 190 self.assertIsNone(culprit) |
| 191 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) | 191 self.assertEqual(analysis_status.COMPLETED, try_job.status) |
| 192 | 192 |
| 193 try_job_data = WfTryJobData.Get(try_job_id) | 193 try_job_data = WfTryJobData.Get(try_job_id) |
| 194 self.assertIsNone(try_job_data.culprits) | 194 self.assertIsNone(try_job_data.culprits) |
| 195 | 195 |
| 196 def testIdentifyCulpritForTestTryJobReturnNoneIfNoTryJobResult(self): | 196 def testIdentifyCulpritForTestTryJobReturnNoneIfNoTryJobResult(self): |
| 197 master_name = 'm' | 197 master_name = 'm' |
| 198 builder_name = 'b' | 198 builder_name = 'b' |
| 199 build_number = 1 | 199 build_number = 1 |
| 200 try_job_id = '1' | 200 try_job_id = '1' |
| 201 | 201 |
| 202 WfTryJobData.Create(try_job_id).put() | 202 WfTryJobData.Create(try_job_id).put() |
| 203 try_job = WfTryJob.Create(master_name, builder_name, build_number) | 203 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 204 try_job.status = wf_analysis_status.ANALYZING | 204 try_job.status = analysis_status.RUNNING |
| 205 try_job.put() | 205 try_job.put() |
| 206 | 206 |
| 207 pipeline = IdentifyTryJobCulpritPipeline() | 207 pipeline = IdentifyTryJobCulpritPipeline() |
| 208 culprit = pipeline.run( | 208 culprit = pipeline.run( |
| 209 master_name, builder_name, build_number, ['rev1', 'rev2'], | 209 master_name, builder_name, build_number, ['rev1', 'rev2'], |
| 210 TryJobType.TEST, '1', None) | 210 TryJobType.TEST, '1', None) |
| 211 | 211 |
| 212 self.assertIsNone(culprit) | 212 self.assertIsNone(culprit) |
| 213 | 213 |
| 214 try_job_data = WfTryJobData.Get(try_job_id) | 214 try_job_data = WfTryJobData.Get(try_job_id) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 231 } | 231 } |
| 232 } | 232 } |
| 233 } | 233 } |
| 234 }, | 234 }, |
| 235 'url': 'url', | 235 'url': 'url', |
| 236 'try_job_id': try_job_id | 236 'try_job_id': try_job_id |
| 237 } | 237 } |
| 238 | 238 |
| 239 WfTryJobData.Create(try_job_id).put() | 239 WfTryJobData.Create(try_job_id).put() |
| 240 try_job = WfTryJob.Create(master_name, builder_name, build_number) | 240 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 241 try_job.status = wf_analysis_status.ANALYZING | 241 try_job.status = analysis_status.RUNNING |
| 242 try_job.put() | 242 try_job.put() |
| 243 | 243 |
| 244 pipeline = IdentifyTryJobCulpritPipeline() | 244 pipeline = IdentifyTryJobCulpritPipeline() |
| 245 culprit = pipeline.run( | 245 culprit = pipeline.run( |
| 246 master_name, builder_name, build_number, [], TryJobType.TEST, '1', | 246 master_name, builder_name, build_number, [], TryJobType.TEST, '1', |
| 247 test_result) | 247 test_result) |
| 248 | 248 |
| 249 self.assertIsNone(culprit) | 249 self.assertIsNone(culprit) |
| 250 | 250 |
| 251 try_job_data = WfTryJobData.Get(try_job_id) | 251 try_job_data = WfTryJobData.Get(try_job_id) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 268 } | 268 } |
| 269 } | 269 } |
| 270 } | 270 } |
| 271 }, | 271 }, |
| 272 'url': 'url', | 272 'url': 'url', |
| 273 'try_job_id': try_job_id | 273 'try_job_id': try_job_id |
| 274 } | 274 } |
| 275 | 275 |
| 276 WfTryJobData.Create(try_job_id).put() | 276 WfTryJobData.Create(try_job_id).put() |
| 277 try_job = WfTryJob.Create(master_name, builder_name, build_number) | 277 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 278 try_job.status = wf_analysis_status.ANALYZING | 278 try_job.status = analysis_status.RUNNING |
| 279 try_job.put() | 279 try_job.put() |
| 280 | 280 |
| 281 pipeline = IdentifyTryJobCulpritPipeline() | 281 pipeline = IdentifyTryJobCulpritPipeline() |
| 282 culprit = pipeline.run( | 282 culprit = pipeline.run( |
| 283 master_name, builder_name, build_number, ['rev3'], TryJobType.TEST, | 283 master_name, builder_name, build_number, ['rev3'], TryJobType.TEST, |
| 284 '1', test_result) | 284 '1', test_result) |
| 285 | 285 |
| 286 expected_culprit = { | 286 expected_culprit = { |
| 287 'a_test': { | 287 'a_test': { |
| 288 'tests': { | 288 'tests': { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 } | 344 } |
| 345 } | 345 } |
| 346 } | 346 } |
| 347 }, | 347 }, |
| 348 'url': 'url', | 348 'url': 'url', |
| 349 'try_job_id': try_job_id | 349 'try_job_id': try_job_id |
| 350 } | 350 } |
| 351 | 351 |
| 352 WfTryJobData.Create(try_job_id).put() | 352 WfTryJobData.Create(try_job_id).put() |
| 353 try_job = WfTryJob.Create(master_name, builder_name, build_number) | 353 try_job = WfTryJob.Create(master_name, builder_name, build_number) |
| 354 try_job.status = wf_analysis_status.ANALYZING | 354 try_job.status = analysis_status.RUNNING |
| 355 try_job.test_results = [test_result] | 355 try_job.test_results = [test_result] |
| 356 try_job.put() | 356 try_job.put() |
| 357 | 357 |
| 358 pipeline = IdentifyTryJobCulpritPipeline() | 358 pipeline = IdentifyTryJobCulpritPipeline() |
| 359 culprit = pipeline.run( | 359 culprit = pipeline.run( |
| 360 master_name, builder_name, build_number, ['rev1', 'rev2'], | 360 master_name, builder_name, build_number, ['rev1', 'rev2'], |
| 361 TryJobType.TEST, '1', test_result) | 361 TryJobType.TEST, '1', test_result) |
| 362 | 362 |
| 363 expected_test_result = { | 363 expected_test_result = { |
| 364 'report': { | 364 'report': { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 'review_url': 'url_2', | 429 'review_url': 'url_2', |
| 430 'tests': {} | 430 'tests': {} |
| 431 } | 431 } |
| 432 } | 432 } |
| 433 } | 433 } |
| 434 | 434 |
| 435 self.assertEqual(expected_test_result['culprit'], culprit) | 435 self.assertEqual(expected_test_result['culprit'], culprit) |
| 436 | 436 |
| 437 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 437 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 438 self.assertEqual(expected_test_result, try_job.test_results[-1]) | 438 self.assertEqual(expected_test_result, try_job.test_results[-1]) |
| 439 self.assertEqual(wf_analysis_status.ANALYZED, try_job.status) | 439 self.assertEqual(analysis_status.COMPLETED, try_job.status) |
| 440 | 440 |
| 441 try_job_data = WfTryJobData.Get(try_job_id) | 441 try_job_data = WfTryJobData.Get(try_job_id) |
| 442 expected_culprit_data = { | 442 expected_culprit_data = { |
| 443 'a_test': { | 443 'a_test': { |
| 444 'a_test1': 'rev1', | 444 'a_test1': 'rev1', |
| 445 'a_test2': 'rev2', | 445 'a_test2': 'rev2', |
| 446 }, | 446 }, |
| 447 'b_test': { | 447 'b_test': { |
| 448 'b_test1': 'rev1', | 448 'b_test1': 'rev1', |
| 449 }, | 449 }, |
| 450 'c_test': 'rev2' | 450 'c_test': 'rev2' |
| 451 } | 451 } |
| 452 self.assertEqual(expected_culprit_data, try_job_data.culprits) | 452 self.assertEqual(expected_culprit_data, try_job_data.culprits) |
| OLD | NEW |