blob: b4e3bee8875a43db35c22fa19aa4147458316e1b [file] [log] [blame]
Don Garrettbe3608b2018-06-05 17:10:09 -07001# -*- coding: utf-8 -*-
2# Copyright 2018 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""Test gen_luci_scheduler."""
7from __future__ import print_function
8
9from chromite.lib import cros_test_lib
10from chromite.lib import config_lib
11from chromite.lib import config_lib_unittest
12from chromite.scripts import gen_luci_scheduler
13
14# It's reasonable for unittests to look at internals.
15# pylint: disable=protected-access
16
17
18class GenLuciSchedulerTest(cros_test_lib.MockTestCase):
19 """Tests for cbuildbot_launch script."""
20 def testSanityAgainstProd(self):
21 """Test we can generate a luci scheduler config with live data."""
22 # If it runs without crashing, we pass.
23 gen_luci_scheduler.genLuciSchedulerConfig(config_lib.GetConfig())
24
25 def testGenSchedulerJob(self):
26 """Test the job creation helper."""
27 build_config = config_lib_unittest.MockBuildConfig().apply(
28 schedule='funky schedule'
29 )
30
31 expected = '''
32job {
33 id: "amd64-generic-paladin"
34 acl_sets: "default"
35 schedule: "funky schedule"
36 buildbucket: {
37 server: "cr-buildbucket.appspot.com"
38 bucket: "luci.chromeos.general"
39 builder: "Prod"
40 tags: "cbb_branch:master"
41 tags: "cbb_display_label:MockLabel"
42 tags: "cbb_config:amd64-generic-paladin"
43 properties: "cbb_branch:master"
44 properties: "cbb_display_label:MockLabel"
45 properties: "cbb_config:amd64-generic-paladin"
46 properties: "cbb_extra_args:[\\"--buildbot\\"]"
47 }
48}
49'''
50
51 result = gen_luci_scheduler.genSchedulerJob(build_config)
52 self.assertEqual(result, expected)
53
54 def testGenSchedulerTriggerSimple(self):
55 """Test the trigger creation helper."""
56 trigger_name = 'simple'
57 repo = 'url://repo'
58 refs = ['refs/path']
59 builds = ['test_build']
60
61 expected = '''
62trigger {
63 id: "simple"
64 acl_sets: "default"
65 schedule: "with 5m interval"
66 gitiles: {
67 repo: "url://repo"
68 refs: "refs/path"
69 }
70 triggers: "test_build"
71}
72'''
73
74 result = gen_luci_scheduler.genSchedulerTrigger(
75 trigger_name, repo, refs, builds)
76
77 self.assertEqual(result, expected)
78
79 def testGenSchedulerTriggerComplex(self):
80 """Test the trigger creation helper."""
81 trigger_name = 'complex'
82 repo = 'url://repo'
83 refs = ['refs/path', 'refs/other_path']
84 builds = ['test_build_a', 'test_build_b']
85
86 expected = '''
87trigger {
88 id: "complex"
89 acl_sets: "default"
90 schedule: "with 5m interval"
91 gitiles: {
92 repo: "url://repo"
93 refs: "refs/path"
94 refs: "refs/other_path"
95 }
96 triggers: "test_build_a"
97 triggers: "test_build_b"
98}
99'''
100
101 result = gen_luci_scheduler.genSchedulerTrigger(
102 trigger_name, repo, refs, builds)
103
104 self.assertEqual(result, expected)
105
106 def testGenLuciSchedulerConfig(self):
107 """Test a full LUCI Scheduler config file."""
108 site_config = config_lib.SiteConfig()
109
110 site_config.Add(
111 'not_scheduled',
112 luci_builder='ProdBuilder',
113 display_label='MockLabel',
114 )
115
116 site_config.Add(
117 'build_prod',
118 luci_builder='ProdBuilder',
119 display_label='MockLabel',
120 schedule='run once in a while',
121 )
122
123 site_config.Add(
124 'build_tester',
125 luci_builder='TestBuilder',
126 display_label='TestLabel',
127 schedule='run daily',
128 )
129
130 site_config.Add(
131 'build_triggered_a',
132 luci_builder='ProdBuilder',
133 display_label='MockLabel',
134 schedule='triggered',
135 triggered_gitiles=[[
136 'gitiles_url_a',
137 ['ref_a', 'ref_b'],
138 ], [
139 'gitiles_url_b',
140 ['ref_c'],
141 ]],
142 )
143
144 site_config.Add(
145 'build_triggered_b',
146 luci_builder='ProdBuilder',
147 display_label='MockLabel',
148 schedule='triggered',
149 triggered_gitiles=[[
150 'gitiles_url_b',
151 ['ref_c'],
152 ]],
153 )
154
155 expected = '''# Defines buckets on luci-scheduler.appspot.com.
156#
157# For schema of this file and documentation see ProjectConfig message in
158# https://github.com/luci/luci-go/blob/master/scheduler/appengine/messages/config.proto
159
160# Generated with chromite/scripts/gen_luci_scheduler
161
162acl_sets {
163 name: "default"
164 acls {
165 role: READER
166 granted_to: "group:googlers"
167 }
168 acls {
169 role: OWNER
170 granted_to: "group:project-chromeos-admins"
171 }
172}
173
174trigger {
175 id: "trigger_0"
176 acl_sets: "default"
177 schedule: "with 5m interval"
178 gitiles: {
179 repo: "gitiles_url_a"
180 refs: "ref_a"
181 refs: "ref_b"
182 }
183 triggers: "build_triggered_a"
184}
185
186trigger {
187 id: "trigger_1"
188 acl_sets: "default"
189 schedule: "with 5m interval"
190 gitiles: {
191 repo: "gitiles_url_b"
192 refs: "ref_c"
193 }
194 triggers: "build_triggered_a"
195 triggers: "build_triggered_b"
196}
197
198job {
199 id: "build_prod"
200 acl_sets: "default"
201 schedule: "run once in a while"
202 buildbucket: {
203 server: "cr-buildbucket.appspot.com"
204 bucket: "luci.chromeos.general"
205 builder: "ProdBuilder"
206 tags: "cbb_branch:master"
207 tags: "cbb_display_label:MockLabel"
208 tags: "cbb_config:build_prod"
209 properties: "cbb_branch:master"
210 properties: "cbb_display_label:MockLabel"
211 properties: "cbb_config:build_prod"
212 properties: "cbb_extra_args:[\\"--buildbot\\"]"
213 }
214}
215
216job {
217 id: "build_tester"
218 acl_sets: "default"
219 schedule: "run daily"
220 buildbucket: {
221 server: "cr-buildbucket.appspot.com"
222 bucket: "luci.chromeos.general"
223 builder: "TestBuilder"
224 tags: "cbb_branch:master"
225 tags: "cbb_display_label:TestLabel"
226 tags: "cbb_config:build_tester"
227 properties: "cbb_branch:master"
228 properties: "cbb_display_label:TestLabel"
229 properties: "cbb_config:build_tester"
230 properties: "cbb_extra_args:[\\"--buildbot\\"]"
231 }
232}
233
234job {
235 id: "build_triggered_a"
236 acl_sets: "default"
237 schedule: "triggered"
238 buildbucket: {
239 server: "cr-buildbucket.appspot.com"
240 bucket: "luci.chromeos.general"
241 builder: "ProdBuilder"
242 tags: "cbb_branch:master"
243 tags: "cbb_display_label:MockLabel"
244 tags: "cbb_config:build_triggered_a"
245 properties: "cbb_branch:master"
246 properties: "cbb_display_label:MockLabel"
247 properties: "cbb_config:build_triggered_a"
248 properties: "cbb_extra_args:[\\"--buildbot\\"]"
249 }
250}
251
252job {
253 id: "build_triggered_b"
254 acl_sets: "default"
255 schedule: "triggered"
256 buildbucket: {
257 server: "cr-buildbucket.appspot.com"
258 bucket: "luci.chromeos.general"
259 builder: "ProdBuilder"
260 tags: "cbb_branch:master"
261 tags: "cbb_display_label:MockLabel"
262 tags: "cbb_config:build_triggered_b"
263 properties: "cbb_branch:master"
264 properties: "cbb_display_label:MockLabel"
265 properties: "cbb_config:build_triggered_b"
266 properties: "cbb_extra_args:[\\"--buildbot\\"]"
267 }
268}
269'''
270 result = gen_luci_scheduler.genLuciSchedulerConfig(site_config)
271
272 self.assertEqual(result, expected)