| 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 import json | 5 import json |
| 6 | 6 |
| 7 from common.git_repository import GitRepository | 7 from common.git_repository import GitRepository |
| 8 from common.pipeline_wrapper import pipeline_handlers | 8 from common.pipeline_wrapper import pipeline_handlers |
| 9 from common.waterfall import buildbucket_client | 9 from common.waterfall import buildbucket_client |
| 10 from model import analysis_status | 10 from model import analysis_status |
| 11 from model import result_status |
| 12 from model.wf_analysis import WfAnalysis |
| 11 from model.wf_try_job import WfTryJob | 13 from model.wf_try_job import WfTryJob |
| 12 from waterfall.test import wf_testcase | 14 from waterfall.test import wf_testcase |
| 13 from waterfall.try_job_pipeline import TryJobPipeline | 15 from waterfall.try_job_pipeline import TryJobPipeline |
| 14 from waterfall.try_job_type import TryJobType | 16 from waterfall.try_job_type import TryJobType |
| 15 | 17 |
| 16 | 18 |
| 17 class TryJobPipelineTest(wf_testcase.WaterfallTestCase): | 19 class TryJobPipelineTest(wf_testcase.WaterfallTestCase): |
| 18 app_module = pipeline_handlers._APP | 20 app_module = pipeline_handlers._APP |
| 19 | 21 |
| 20 def _Mock_TriggerTryJobs(self, responses): | 22 def _Mock_TriggerTryJobs(self, responses): |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 'status': 'SCHEDULED', | 99 'status': 'SCHEDULED', |
| 98 } | 100 } |
| 99 } | 101 } |
| 100 ] | 102 ] |
| 101 | 103 |
| 102 self._Mock_TriggerTryJobs(responses) | 104 self._Mock_TriggerTryJobs(responses) |
| 103 self._Mock_GetTryJobs('1') | 105 self._Mock_GetTryJobs('1') |
| 104 self._Mock_GetChangeLog('rev2') | 106 self._Mock_GetChangeLog('rev2') |
| 105 | 107 |
| 106 WfTryJob.Create(master_name, builder_name, build_number).put() | 108 WfTryJob.Create(master_name, builder_name, build_number).put() |
| 109 analysis = WfAnalysis.Create(master_name, builder_name, build_number) |
| 110 analysis.put() |
| 107 | 111 |
| 108 root_pipeline = TryJobPipeline( | 112 root_pipeline = TryJobPipeline( |
| 109 master_name, builder_name, build_number, 'rev1', 'rev2', ['rev2'], | 113 master_name, builder_name, build_number, 'rev1', 'rev2', ['rev2'], |
| 110 TryJobType.COMPILE, []) | 114 TryJobType.COMPILE, []) |
| 111 root_pipeline.start() | 115 root_pipeline.start() |
| 112 self.execute_queued_tasks() | 116 self.execute_queued_tasks() |
| 113 | 117 |
| 114 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 118 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 119 expected_suspected_cl = { |
| 120 'revision': 'rev2', |
| 121 'commit_position': '2', |
| 122 'review_url': 'url_2', |
| 123 'repo_name': 'chromium' |
| 124 } |
| 115 | 125 |
| 116 expected_try_job_results = [ | 126 expected_try_job_results = [ |
| 117 { | 127 { |
| 118 'report': { | 128 'report': { |
| 119 'result': { | 129 'result': { |
| 120 'rev1': 'passed', | 130 'rev1': 'passed', |
| 121 'rev2': 'failed' | 131 'rev2': 'failed' |
| 122 }, | 132 }, |
| 123 'metadata': { | 133 'metadata': { |
| 124 'regression_range_size': 2 | 134 'regression_range_size': 2 |
| 125 } | 135 } |
| 126 }, | 136 }, |
| 127 'url': 'url', | 137 'url': 'url', |
| 128 'try_job_id': '1', | 138 'try_job_id': '1', |
| 129 'culprit': { | 139 'culprit': { |
| 130 'compile': { | 140 'compile': expected_suspected_cl |
| 131 'revision': 'rev2', | |
| 132 'commit_position': '2', | |
| 133 'review_url': 'url_2' | |
| 134 } | |
| 135 } | 141 } |
| 136 } | 142 } |
| 137 ] | 143 ] |
| 138 self.assertEqual(expected_try_job_results, try_job.compile_results) | 144 self.assertEqual(expected_try_job_results, try_job.compile_results) |
| 145 self.assertEqual(analysis.result_status, |
| 146 result_status.FOUND_UNTRIAGED) |
| 147 self.assertEqual(analysis.suspected_cls, |
| 148 [expected_suspected_cl]) |
| 139 | 149 |
| 140 def testPipelineAbortedWithTryJobResult(self): | 150 def testPipelineAbortedWithTryJobResult(self): |
| 141 master_name = 'm' | 151 master_name = 'm' |
| 142 builder_name = 'b' | 152 builder_name = 'b' |
| 143 build_number = 1 | 153 build_number = 1 |
| 144 | 154 |
| 145 WfTryJob.Create(master_name, builder_name, build_number).put() | 155 WfTryJob.Create(master_name, builder_name, build_number).put() |
| 146 | 156 |
| 147 root_pipeline = TryJobPipeline( | 157 root_pipeline = TryJobPipeline( |
| 148 master_name, builder_name, build_number, 'rev1', 'rev2', ['rev2'], | 158 master_name, builder_name, build_number, 'rev1', 'rev2', ['rev2'], |
| 149 TryJobType.COMPILE, []) | 159 TryJobType.COMPILE, []) |
| 150 root_pipeline._LogUnexpectedAbort(True) | 160 root_pipeline._LogUnexpectedAbort(True) |
| 151 | 161 |
| 152 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 162 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 153 self.assertEqual(analysis_status.ERROR, try_job.status) | 163 self.assertEqual(analysis_status.ERROR, try_job.status) |
| 154 | 164 |
| 155 def testPipelineAbortedWithOutTryJobResult(self): | 165 def testPipelineAbortedWithOutTryJobResult(self): |
| 156 master_name = 'm' | 166 master_name = 'm' |
| 157 builder_name = 'b' | 167 builder_name = 'b' |
| 158 build_number = 1 | 168 build_number = 1 |
| 159 | 169 |
| 160 root_pipeline = TryJobPipeline( | 170 root_pipeline = TryJobPipeline( |
| 161 master_name, builder_name, build_number, 'rev1', 'rev2', ['rev2'], | 171 master_name, builder_name, build_number, 'rev1', 'rev2', ['rev2'], |
| 162 TryJobType.COMPILE, []) | 172 TryJobType.COMPILE, []) |
| 163 root_pipeline._LogUnexpectedAbort(True) | 173 root_pipeline._LogUnexpectedAbort(True) |
| 164 | 174 |
| 165 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 175 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 166 | 176 |
| 167 self.assertIsNone(try_job) | 177 self.assertIsNone(try_job) |
| OLD | NEW |