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

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

Issue 2187763004: [Findit] Refactor Findit pipeline. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: rebase Created 4 years, 4 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 import mock
6
5 from common.waterfall import buildbucket_client 7 from common.waterfall import buildbucket_client
8 from common.waterfall import failure_type
6 from model.wf_try_job import WfTryJob 9 from model.wf_try_job import WfTryJob
7 from model.wf_try_job_data import WfTryJobData 10 from model.wf_try_job_data import WfTryJobData
11 from waterfall import schedule_try_job_pipeline
8 from waterfall.schedule_try_job_pipeline import ScheduleTryJobPipeline 12 from waterfall.schedule_try_job_pipeline import ScheduleTryJobPipeline
9 from waterfall.test import wf_testcase 13 from waterfall.test import wf_testcase
10 from waterfall.try_job_type import TryJobType
11 14
12 15
13 class ScheduleTryjobPipelineTest(wf_testcase.WaterfallTestCase): 16 class ScheduleTryjobPipelineTest(wf_testcase.WaterfallTestCase):
14 17
15 def _Mock_TriggerTryJobs(self, responses): 18 def testGetBuildPropertiesWithSuspectedRevision(self):
16 def MockedTriggerTryJobs(*_):
17 results = []
18 for response in responses:
19 if response.get('error'): # pragma: no cover
20 results.append((
21 buildbucket_client.BuildbucketError(response['error']), None))
22 else:
23 results.append((
24 None, buildbucket_client.BuildbucketBuild(response['build'])))
25 return results
26 self.mock(buildbucket_client, 'TriggerTryJobs', MockedTriggerTryJobs)
27
28 def testGetBuildPropertiesWithCompileTargets(self):
29 master_name = 'm' 19 master_name = 'm'
30 builder_name = 'b' 20 builder_name = 'b'
31 build_number = 1 21 build_number = 1
32 22
33 expected_properties = { 23 expected_properties = {
34 'recipe': 'findit/chromium/compile', 24 'recipe': 'findit/chromium/compile',
35 'good_revision': 1, 25 'good_revision': 1,
36 'bad_revision': 2, 26 'bad_revision': 2,
37 'target_mastername': master_name, 27 'target_mastername': master_name,
38 'target_buildername': 'b',
39 'referenced_build_url': ('https://build.chromium.org/p/%s/builders' 28 'referenced_build_url': ('https://build.chromium.org/p/%s/builders'
40 '/%s/builds/%s') % ( 29 '/%s/builds/%s') % (
41 master_name, builder_name, build_number) 30 master_name, builder_name, build_number),
31 'suspected_revisions': ['rev']
42 } 32 }
43 try_job_pipeline = ScheduleTryJobPipeline() 33 try_job_pipeline = ScheduleTryJobPipeline()
44 properties = try_job_pipeline._GetBuildProperties( 34 properties = try_job_pipeline._GetBuildProperties(
45 master_name, builder_name, build_number, 1, 2, TryJobType.COMPILE, None) 35 master_name, builder_name, build_number, 1, 2, failure_type.COMPILE,
36 ['rev'])
46 37
47 self.assertEqual(properties, expected_properties) 38 self.assertEqual(properties, expected_properties)
48 39
49 def testGetBuildPropertiesForTestFailure(self): 40 def testGetBuildPropertiesNoSuspectedRevision(self):
50 master_name = 'm' 41 master_name = 'm'
51 builder_name = 'b' 42 builder_name = 'b'
52 build_number = 1 43 build_number = 1
53 44
54 expected_properties = { 45 expected_properties = {
55 'recipe': 'findit/chromium/test', 46 'recipe': 'findit/chromium/test',
56 'good_revision': 1, 47 'good_revision': 1,
57 'bad_revision': 2, 48 'bad_revision': 2,
58 'target_mastername': master_name, 49 'target_mastername': master_name,
59 'target_testername': 'b',
60 'referenced_build_url': ('https://build.chromium.org/p/%s/builders' 50 'referenced_build_url': ('https://build.chromium.org/p/%s/builders'
61 '/%s/builds/%s') % ( 51 '/%s/builds/%s') % (
62 master_name, builder_name, build_number) 52 master_name, builder_name, build_number)
63 } 53 }
64 try_job_pipeline = ScheduleTryJobPipeline() 54 try_job_pipeline = ScheduleTryJobPipeline()
65 properties = try_job_pipeline._GetBuildProperties( 55 properties = try_job_pipeline._GetBuildProperties(
66 master_name, builder_name, build_number, 1, 2, TryJobType.TEST, None) 56 master_name, builder_name, build_number, 1, 2, failure_type.TEST, None)
67 57
68 self.assertEqual(properties, expected_properties) 58 self.assertEqual(properties, expected_properties)
69 59
70 def testSuccessfullyScheduleNewTryJobForCompileWithSuspectedRevisions(self): 60 @mock.patch.object(schedule_try_job_pipeline, 'buildbucket_client')
61 def testTriggerTryJob(self, mock_other):
71 master_name = 'm' 62 master_name = 'm'
72 builder_name = 'b' 63 builder_name = 'b'
73 build_number = 223 64 response = {
74 good_revision = 'rev1' 65 'build': {
75 bad_revision = 'rev2' 66 'id': '1',
76 build_id = '1' 67 'url': 'url',
77 url = 'url' 68 'status': 'SCHEDULED',
78
79 responses = [
80 {
81 'build': {
82 'id': build_id,
83 'url': url,
84 'status': 'SCHEDULED',
85 }
86 } 69 }
87 ] 70 }
88 71 results = [(None, buildbucket_client.BuildbucketBuild(response['build']))]
89 self._Mock_TriggerTryJobs(responses) 72 mock_other.TriggerTryJobs.return_value = results
90
91 WfTryJob.Create(master_name, builder_name, build_number).put()
92 73
93 try_job_pipeline = ScheduleTryJobPipeline() 74 try_job_pipeline = ScheduleTryJobPipeline()
94 try_job_id = try_job_pipeline.run( 75 build_id = try_job_pipeline._TriggerTryJob(
95 master_name, builder_name, build_number, good_revision, bad_revision, 76 master_name, builder_name, {}, [])
96 TryJobType.COMPILE, None, None, ['r5'])
97 77
98 try_job = WfTryJob.Get(master_name, builder_name, build_number) 78 self.assertEqual(build_id, '1')
99 try_job_data = WfTryJobData.Get(build_id)
100 79
101 expected_try_job_id = '1'
102 self.assertEqual(expected_try_job_id, try_job_id)
103 self.assertEqual(
104 expected_try_job_id, try_job.compile_results[-1]['try_job_id'])
105 self.assertTrue(expected_try_job_id in try_job.try_job_ids)
106 self.assertIsNotNone(try_job_data)
107 self.assertEqual(try_job_data.master_name, master_name)
108 self.assertEqual(try_job_data.builder_name, builder_name)
109 self.assertEqual(try_job_data.build_number, build_number)
110 self.assertEqual(try_job_data.try_job_type, TryJobType.COMPILE)
111 self.assertFalse(try_job_data.has_compile_targets)
112 self.assertTrue(try_job_data.has_heuristic_results)
113 80
114 def testSuccessfullyScheduleNewTryJobForTest(self): 81 def testCreateTryJobData(self):
82 build_id = 1
115 master_name = 'm' 83 master_name = 'm'
116 builder_name = 'b' 84 builder_name = 'b'
117 build_number = 223 85 build_number = 1
118 good_revision = 'rev1' 86 try_job_type = failure_type.GetDescriptionForFailureType(failure_type.TEST)
119 bad_revision = 'rev2'
120 targeted_tests = {'a': ['test1', 'test2']}
121 build_id = '1'
122 87
123 responses = [ 88 ScheduleTryJobPipeline()._CreateTryJobData(
124 { 89 build_id, master_name, builder_name, build_number, try_job_type,
125 'build': { 90 False, False)
126 'id': build_id,
127 'url': 'url',
128 'status': 'SCHEDULED',
129 }
130 }
131 ]
132 self._Mock_TriggerTryJobs(responses)
133 91
134 WfTryJob.Create(master_name, builder_name, build_number).put() 92 data = WfTryJobData.Get(build_id)
135 93
136 try_job_pipeline = ScheduleTryJobPipeline() 94 self.assertIsNotNone(data)
137 try_job_id = try_job_pipeline.run( 95 self.assertEqual(data.master_name, master_name)
138 master_name, builder_name, build_number, good_revision, bad_revision, 96 self.assertEqual(data.builder_name, builder_name)
139 TryJobType.TEST, None, targeted_tests, None) 97 self.assertEqual(data.build_number, build_number)
140 98 self.assertEqual(data.try_job_type, try_job_type)
141 try_job = WfTryJob.Get(master_name, builder_name, build_number) 99 self.assertFalse(data.has_compile_targets)
142 try_job_data = WfTryJobData.Get(try_job_id) 100 self.assertFalse(data.has_heuristic_results)
143 self.assertEqual(try_job_id, build_id)
144 self.assertEqual(try_job.test_results[-1]['try_job_id'], build_id)
145 self.assertIsNotNone(try_job_data)
146 self.assertEqual(try_job_data.master_name, master_name)
147 self.assertEqual(try_job_data.builder_name, builder_name)
148 self.assertEqual(try_job_data.build_number, build_number)
149 self.assertEqual(try_job_data.try_job_type, TryJobType.TEST)
150 self.assertFalse(try_job_data.has_compile_targets)
151 self.assertFalse(try_job_data.has_heuristic_results)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698