| 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 datetime import datetime | 5 from datetime import datetime |
| 6 from datetime import timedelta | 6 from datetime import timedelta |
| 7 | 7 |
| 8 from common.waterfall import failure_type | 8 from common.waterfall import failure_type |
| 9 from model import analysis_status | 9 from model import analysis_status |
| 10 from model.wf_build import WfBuild | 10 from model.wf_build import WfBuild |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 'chromium_revision': '223-3' | 63 'chromium_revision': '223-3' |
| 64 } | 64 } |
| 65 } | 65 } |
| 66 } | 66 } |
| 67 | 67 |
| 68 self.mock( | 68 self.mock( |
| 69 try_job_util.swarming_tasks_to_try_job_pipeline, | 69 try_job_util.swarming_tasks_to_try_job_pipeline, |
| 70 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) | 70 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) |
| 71 _MockRootPipeline.STARTED = False | 71 _MockRootPipeline.STARTED = False |
| 72 | 72 |
| 73 def _MockShouldBailOutForOutdatedBuild(*_): | |
| 74 return False | |
| 75 self.mock( | |
| 76 try_job_util, '_ShouldBailOutForOutdatedBuild', | |
| 77 _MockShouldBailOutForOutdatedBuild) | |
| 78 | |
| 79 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( | 73 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( |
| 80 failure_info, None, None) | 74 failure_info, None, None) |
| 81 | 75 |
| 82 self.assertFalse(_MockRootPipeline.STARTED) | 76 self.assertFalse(_MockRootPipeline.STARTED) |
| 83 self.assertEqual({}, failure_result_map) | 77 self.assertEqual({}, failure_result_map) |
| 84 | 78 |
| 85 def testBailOutForTestTryJob(self): | 79 def testBailOutForTestTryJob(self): |
| 86 master_name = 'master2' | 80 master_name = 'master2' |
| 87 builder_name = 'builder2' | 81 builder_name = 'builder2' |
| 88 build_number = 223 | 82 build_number = 223 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 101 self.mock( | 95 self.mock( |
| 102 try_job_util, '_ShouldBailOutForOutdatedBuild', | 96 try_job_util, '_ShouldBailOutForOutdatedBuild', |
| 103 _MockShouldBailOutForOutdatedBuild) | 97 _MockShouldBailOutForOutdatedBuild) |
| 104 | 98 |
| 105 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( | 99 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( |
| 106 failure_info, None, None) | 100 failure_info, None, None) |
| 107 | 101 |
| 108 self.assertEqual({}, failure_result_map) | 102 self.assertEqual({}, failure_result_map) |
| 109 | 103 |
| 110 def testBailOutForTryJobWithOutdatedTimestamp(self): | 104 def testBailOutForTryJobWithOutdatedTimestamp(self): |
| 111 master_name = 'master3' | 105 master_name = 'master1' |
| 112 builder_name = 'builder3' | 106 builder_name = 'builder1' |
| 113 build_number = 223 | 107 build_number = 223 |
| 114 failure_info = { | 108 failure_info = { |
| 115 'master_name': master_name, | 109 'master_name': master_name, |
| 116 'builder_name': builder_name, | 110 'builder_name': builder_name, |
| 117 'build_number': build_number, | 111 'build_number': build_number, |
| 118 'failed_steps': { | 112 'failed_steps': { |
| 119 'compile': { | 113 'compile': { |
| 120 'current_failure': 221, | 114 'current_failure': 221, |
| 121 'first_failure': 221, | 115 'first_failure': 221, |
| 122 'last_pass': 220 | 116 'last_pass': 220 |
| 123 } | 117 } |
| 124 }, | 118 }, |
| 125 } | 119 } |
| 126 | 120 |
| 121 yesterday = datetime.utcnow() - timedelta(days=1) |
| 122 build = WfBuild.Create(master_name, builder_name, build_number) |
| 123 build.start_time = yesterday |
| 124 build.put() |
| 125 |
| 127 self.mock( | 126 self.mock( |
| 128 try_job_util.swarming_tasks_to_try_job_pipeline, | 127 try_job_util.swarming_tasks_to_try_job_pipeline, |
| 129 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) | 128 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) |
| 130 _MockRootPipeline.STARTED = False | 129 _MockRootPipeline.STARTED = False |
| 131 | 130 |
| 132 def _MockShouldBailOutForOutdatedBuild(*_): | 131 def _MockShouldBailOutForOutdatedBuild(*_): |
| 133 return True | 132 return True |
| 133 |
| 134 self.mock( | 134 self.mock( |
| 135 try_job_util, '_ShouldBailOutForOutdatedBuild', | 135 try_job_util, '_ShouldBailOutForOutdatedBuild', |
| 136 _MockShouldBailOutForOutdatedBuild) | 136 _MockShouldBailOutForOutdatedBuild) |
| 137 | 137 |
| 138 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( | 138 failure_result_map = try_job_util.ScheduleTryJobIfNeeded( |
| 139 failure_info, None, None) | 139 failure_info, None, None, False) |
| 140 | 140 |
| 141 self.assertFalse(_MockRootPipeline.STARTED) | 141 self.assertFalse(_MockRootPipeline.STARTED) |
| 142 self.assertEqual({}, failure_result_map) | 142 self.assertEqual({}, failure_result_map) |
| 143 | 143 |
| 144 def testForceTryJob(self): |
| 145 master_name = 'm' |
| 146 builder_name = 'b' |
| 147 build_number = 223 |
| 148 failure_info = { |
| 149 'master_name': master_name, |
| 150 'builder_name': builder_name, |
| 151 'build_number': build_number, |
| 152 'failed_steps': { |
| 153 'compile': { |
| 154 'current_failure': 223, |
| 155 'first_failure': 223, |
| 156 'last_pass': 222 |
| 157 } |
| 158 }, |
| 159 'builds': { |
| 160 '222': { |
| 161 'blame_list': ['222-1'], |
| 162 'chromium_revision': '222-1' |
| 163 }, |
| 164 '223': { |
| 165 'blame_list': ['223-1', '223-2', '223-3'], |
| 166 'chromium_revision': '223-3' |
| 167 } |
| 168 }, |
| 169 'failure_type': failure_type.COMPILE |
| 170 } |
| 171 |
| 172 self.mock( |
| 173 try_job_util.swarming_tasks_to_try_job_pipeline, |
| 174 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) |
| 175 _MockRootPipeline.STARTED = False |
| 176 |
| 177 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None, True) |
| 178 |
| 179 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 180 |
| 181 self.assertTrue(_MockRootPipeline.STARTED) |
| 182 self.assertIsNotNone(try_job) |
| 183 |
| 144 def testNotNeedANewTryJobIfNotFirstTimeFailure(self): | 184 def testNotNeedANewTryJobIfNotFirstTimeFailure(self): |
| 145 master_name = 'm' | 185 master_name = 'm' |
| 146 builder_name = 'b' | 186 builder_name = 'b' |
| 147 build_number = 223 | 187 build_number = 223 |
| 148 failure_info = { | 188 failure_info = { |
| 149 'master_name': master_name, | 189 'master_name': master_name, |
| 150 'builder_name': builder_name, | 190 'builder_name': builder_name, |
| 151 'build_number': build_number, | 191 'build_number': build_number, |
| 152 'failed_steps': { | 192 'failed_steps': { |
| 153 'compile': { | 193 'compile': { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 177 'failure_type': failure_type.COMPILE | 217 'failure_type': failure_type.COMPILE |
| 178 } | 218 } |
| 179 | 219 |
| 180 self.mock( | 220 self.mock( |
| 181 try_job_util.swarming_tasks_to_try_job_pipeline, | 221 try_job_util.swarming_tasks_to_try_job_pipeline, |
| 182 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) | 222 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) |
| 183 _MockRootPipeline.STARTED = False | 223 _MockRootPipeline.STARTED = False |
| 184 | 224 |
| 185 def _MockShouldBailOutForOutdatedBuild(*_): | 225 def _MockShouldBailOutForOutdatedBuild(*_): |
| 186 return False | 226 return False |
| 227 |
| 187 self.mock( | 228 self.mock( |
| 188 try_job_util, '_ShouldBailOutForOutdatedBuild', | 229 try_job_util, '_ShouldBailOutForOutdatedBuild', |
| 189 _MockShouldBailOutForOutdatedBuild) | 230 _MockShouldBailOutForOutdatedBuild) |
| 190 | 231 |
| 191 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None) | 232 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None) |
| 192 | 233 |
| 193 self.assertFalse(_MockRootPipeline.STARTED) | 234 self.assertFalse(_MockRootPipeline.STARTED) |
| 194 | 235 |
| 195 def testNotNeedANewTryJobIfOneWithResultExists(self): | 236 def testNotNeedANewTryJobIfOneWithResultExists(self): |
| 196 master_name = 'm' | 237 master_name = 'm' |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 'failure_type': failure_type.COMPILE | 459 'failure_type': failure_type.COMPILE |
| 419 } | 460 } |
| 420 | 461 |
| 421 self.mock( | 462 self.mock( |
| 422 try_job_util.swarming_tasks_to_try_job_pipeline, | 463 try_job_util.swarming_tasks_to_try_job_pipeline, |
| 423 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) | 464 'SwarmingTasksToTryJobPipeline', _MockRootPipeline) |
| 424 _MockRootPipeline.STARTED = False | 465 _MockRootPipeline.STARTED = False |
| 425 | 466 |
| 426 def _MockShouldBailOutForOutdatedBuild(*_): | 467 def _MockShouldBailOutForOutdatedBuild(*_): |
| 427 return False | 468 return False |
| 469 |
| 428 self.mock( | 470 self.mock( |
| 429 try_job_util, '_ShouldBailOutForOutdatedBuild', | 471 try_job_util, '_ShouldBailOutForOutdatedBuild', |
| 430 _MockShouldBailOutForOutdatedBuild) | 472 _MockShouldBailOutForOutdatedBuild) |
| 431 | 473 |
| 432 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None) | 474 try_job_util.ScheduleTryJobIfNeeded(failure_info, None, None) |
| 433 | 475 |
| 434 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 476 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 435 | 477 |
| 436 self.assertTrue(_MockRootPipeline.STARTED) | 478 self.assertTrue(_MockRootPipeline.STARTED) |
| 437 self.assertIsNotNone(try_job) | 479 self.assertIsNotNone(try_job) |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 try_job_util._GetSuspectsFromHeuristicResult(heuristic_result)) | 581 try_job_util._GetSuspectsFromHeuristicResult(heuristic_result)) |
| 540 | 582 |
| 541 def testShouldBailOutforOutdatedBuild(self): | 583 def testShouldBailOutforOutdatedBuild(self): |
| 542 yesterday = datetime.utcnow() - timedelta(days=1) | 584 yesterday = datetime.utcnow() - timedelta(days=1) |
| 543 build = WfBuild.Create('m', 'b', 1) | 585 build = WfBuild.Create('m', 'b', 1) |
| 544 build.start_time = yesterday | 586 build.start_time = yesterday |
| 545 self.assertTrue(try_job_util._ShouldBailOutForOutdatedBuild(build)) | 587 self.assertTrue(try_job_util._ShouldBailOutForOutdatedBuild(build)) |
| 546 | 588 |
| 547 build.start_time = yesterday + timedelta(hours=1) | 589 build.start_time = yesterday + timedelta(hours=1) |
| 548 self.assertFalse(try_job_util._ShouldBailOutForOutdatedBuild(build)) | 590 self.assertFalse(try_job_util._ShouldBailOutForOutdatedBuild(build)) |
| OLD | NEW |