Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: appengine/findit/waterfall/test/schedule_try_job_pipeline_test.py

Issue 1591003002: [Findit] Modify tryjob pipelines to trigger try jobs for test failure. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: rebase Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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'])
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698