Chromium Code Reviews| 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 import buildbucket_client | 7 from common import buildbucket_client |
| 8 from model.wf_try_job import WfTryJob | 8 from model.wf_try_job import WfTryJob |
| 9 from waterfall import waterfall_config | 9 from waterfall import waterfall_config |
| 10 from waterfall.schedule_try_job_pipeline import ScheduleTryJobPipeline | 10 from waterfall.schedule_try_job_pipeline import ScheduleTryJobPipeline |
| 11 from waterfall.try_job_enums import TryJobType | |
| 11 | 12 |
| 12 | 13 |
| 13 class ScheduleTryjobPipelineTest(testing.AppengineTestCase): | 14 class ScheduleTryjobPipelineTest(testing.AppengineTestCase): |
| 14 | 15 |
| 15 def _Mock_GetTrybotForWaterfallBuilder(self, *_): | 16 def _Mock_GetTrybotForWaterfallBuilder(self, *_): |
| 16 def Mocked_GetTrybotForWaterfallBuilder(*_): | 17 def Mocked_GetTrybotForWaterfallBuilder(*_): |
| 17 return 'linux_chromium_variable', 'master.tryserver.chromium.linux' | 18 return 'linux_chromium_variable', 'master.tryserver.chromium.linux' |
| 18 self.mock(waterfall_config, 'GetTrybotForWaterfallBuilder', | 19 self.mock(waterfall_config, 'GetTrybotForWaterfallBuilder', |
| 19 Mocked_GetTrybotForWaterfallBuilder) | 20 Mocked_GetTrybotForWaterfallBuilder) |
| 20 | 21 |
| 21 def _Mock_TriggerTryJobs(self, responses): | 22 def _Mock_TriggerTryJobs(self, responses): |
| 22 def Mocked_TriggerTryJobs(*_): | 23 def Mocked_TriggerTryJobs(*_): |
| 23 results = [] | 24 results = [] |
| 24 for response in responses: | 25 for response in responses: |
| 25 if response.get('error'): # pragma: no cover | 26 if response.get('error'): # pragma: no cover |
| 26 results.append(( | 27 results.append(( |
| 27 buildbucket_client.BuildbucketError(response['error']), None)) | 28 buildbucket_client.BuildbucketError(response['error']), None)) |
| 28 else: | 29 else: |
| 29 results.append(( | 30 results.append(( |
| 30 None, buildbucket_client.BuildbucketBuild(response['build']))) | 31 None, buildbucket_client.BuildbucketBuild(response['build']))) |
| 31 return results | 32 return results |
| 32 self.mock(buildbucket_client, 'TriggerTryJobs', Mocked_TriggerTryJobs) | 33 self.mock(buildbucket_client, 'TriggerTryJobs', Mocked_TriggerTryJobs) |
| 33 | 34 |
| 34 def testGetBuildPropertiesWithCompileTargets(self): | 35 def testGetBuildPropertiesWithCompileTargets(self): |
| 35 master_name = 'm' | 36 master_name = 'm' |
| 36 builder_name = 'b' | 37 builder_name = 'b' |
| 37 recipe = 'a/b/recipe' | |
| 38 compile_targets = ['a.exe'] | 38 compile_targets = ['a.exe'] |
| 39 | 39 |
| 40 expected_properties = { | 40 expected_properties = { |
| 41 'recipe': recipe, | 41 'recipe': 'findit/chromium/compile', |
| 42 'good_revision': 1, | 42 'good_revision': 1, |
| 43 'bad_revision': 2, | 43 'bad_revision': 2, |
| 44 'target_mastername': master_name, | 44 'target_mastername': master_name, |
| 45 'target_buildername': 'b', | 45 'target_buildername': 'b', |
| 46 'compile_targets': compile_targets | 46 'compile_targets': compile_targets |
| 47 } | 47 } |
| 48 try_job_pipeline = ScheduleTryJobPipeline() | 48 try_job_pipeline = ScheduleTryJobPipeline() |
| 49 properties = try_job_pipeline._getBuildProperties( | 49 properties = try_job_pipeline._getBuildProperties( |
| 50 recipe, master_name, builder_name, 1, 2, compile_targets) | 50 master_name, builder_name, 1, 2, TryJobType.type_compile, |
| 51 compile_targets, None) | |
| 51 | 52 |
| 52 self.assertEqual(properties, expected_properties) | 53 self.assertEqual(properties, expected_properties) |
| 53 | 54 |
| 55 def testGetBuildPropertiesForTestFailure(self): | |
| 56 master_name = 'm' | |
| 57 builder_name = 'b' | |
| 58 targeted_tests = {'a':[]} | |
| 59 | |
| 60 expected_properties = { | |
| 61 'recipe': 'findit/chromium/test', | |
| 62 'good_revision': 1, | |
| 63 'bad_revision': 2, | |
| 64 'target_mastername': master_name, | |
| 65 'target_testername': 'b', | |
| 66 'tests': targeted_tests | |
| 67 } | |
| 68 try_job_pipeline = ScheduleTryJobPipeline() | |
| 69 properties = try_job_pipeline._getBuildProperties( | |
| 70 master_name, builder_name, 1, 2, TryJobType.type_test, | |
| 71 None, targeted_tests) | |
| 72 | |
| 73 self.assertEqual(properties, expected_properties) | |
| 74 | |
| 54 def testSuccessfullyScheduleNewTryJobForCompile(self): | 75 def testSuccessfullyScheduleNewTryJobForCompile(self): |
| 55 master_name = 'm' | 76 master_name = 'm' |
| 56 builder_name = 'b' | 77 builder_name = 'b' |
| 57 build_number = 223 | 78 build_number = 223 |
| 58 good_revision = 'rev1' | 79 good_revision = 'rev1' |
| 59 bad_revision = 'rev2' | 80 bad_revision = 'rev2' |
| 60 | 81 |
| 61 responses = [ | 82 responses = [ |
| 62 { | 83 { |
| 63 'build': { | 84 'build': { |
| 64 'id': '1', | 85 'id': '1', |
| 65 'url': 'url', | 86 'url': 'url', |
| 66 'status': 'SCHEDULED', | 87 'status': 'SCHEDULED', |
| 67 } | 88 } |
| 68 } | 89 } |
| 69 ] | 90 ] |
| 70 self._Mock_GetTrybotForWaterfallBuilder(master_name, builder_name) | 91 self._Mock_GetTrybotForWaterfallBuilder(master_name, builder_name) |
| 71 self._Mock_TriggerTryJobs(responses) | 92 self._Mock_TriggerTryJobs(responses) |
| 72 | 93 |
| 73 WfTryJob.Create(master_name, builder_name, build_number).put() | 94 WfTryJob.Create(master_name, builder_name, build_number).put() |
| 74 | 95 |
| 75 try_job_pipeline = ScheduleTryJobPipeline() | 96 try_job_pipeline = ScheduleTryJobPipeline() |
| 76 try_job_id = try_job_pipeline.run( | 97 try_job_id = try_job_pipeline.run( |
| 77 master_name, builder_name, build_number, good_revision, bad_revision, | 98 master_name, builder_name, build_number, good_revision, bad_revision, |
| 78 []) | 99 TryJobType.type_compile, None, None) |
| 79 | 100 |
| 80 try_job = WfTryJob.Get(master_name, builder_name, build_number) | 101 try_job = WfTryJob.Get(master_name, builder_name, build_number) |
| 81 self.assertEqual('1', try_job_id) | 102 self.assertEqual('1', try_job_id) |
| 82 self.assertEqual('1', try_job.compile_results[-1]['try_job_id']) | 103 self.assertEqual('1', try_job.compile_results[-1]['try_job_id']) |
| 104 | |
| 105 | |
| 106 def testSuccessfullyScheduleNewTryJobForTest(self): | |
| 107 master_name = 'm' | |
| 108 builder_name = 'b' | |
| 109 build_number = 223 | |
| 110 good_revision = 'rev1' | |
| 111 bad_revision = 'rev2' | |
| 112 targeted_tests = ['browser_test'] | |
|
stgao
2016/01/28 19:33:52
Shouldn't we specify the testcase list too?
chanli
2016/01/28 22:40:12
This test is just to test starting a tryjob for te
| |
| 113 | |
| 114 responses = [ | |
| 115 { | |
| 116 'build': { | |
| 117 'id': '1', | |
| 118 'url': 'url', | |
| 119 'status': 'SCHEDULED', | |
| 120 } | |
| 121 } | |
| 122 ] | |
| 123 self._Mock_GetTrybotForWaterfallBuilder(master_name, builder_name) | |
| 124 self._Mock_TriggerTryJobs(responses) | |
| 125 | |
| 126 WfTryJob.Create(master_name, builder_name, build_number).put() | |
| 127 | |
| 128 try_job_pipeline = ScheduleTryJobPipeline() | |
| 129 try_job_id = try_job_pipeline.run( | |
| 130 master_name, builder_name, build_number, good_revision, bad_revision, | |
| 131 TryJobType.type_test, None, targeted_tests) | |
| 132 | |
| 133 try_job = WfTryJob.Get(master_name, builder_name, build_number) | |
| 134 self.assertEqual('1', try_job_id) | |
| 135 self.assertEqual('1', try_job.test_results[-1]['try_job_id']) | |
| OLD | NEW |