blob: dcb61b33a4edd27f9bdd8fb4b17b180ac45bee75 [file] [log] [blame]
Lann Martin10f3ee92018-08-22 15:48:10 -06001# Copyright 2018 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Tests for scripts/repo_sync_manifest."""
6
Lann Martin10f3ee92018-08-22 15:48:10 -06007import os
Mike Frysinger166fea02021-02-12 05:30:33 -05008from unittest import mock
Lann Martin10f3ee92018-08-22 15:48:10 -06009
Don Garrett903fedc2018-11-02 17:04:26 -070010from chromite.cbuildbot import manifest_version
11from chromite.cbuildbot import repository
Lann Martin10f3ee92018-08-22 15:48:10 -060012from chromite.lib import cros_test_lib
Lann Martin10f3ee92018-08-22 15:48:10 -060013from chromite.scripts import repo_sync_manifest
14
15
Don Garrett903fedc2018-11-02 17:04:26 -070016class RepoSyncManifestTest(cros_test_lib.RunCommandTempDirTestCase):
Alex Klein1699fab2022-09-08 08:46:06 -060017 """Unit tests for repo_sync_manifest."""
Lann Martin10f3ee92018-08-22 15:48:10 -060018
Alex Klein1699fab2022-09-08 08:46:06 -060019 INT_MANIFEST_URL = (
20 "https://chrome-internal-review.googlesource.com/"
21 "chromeos/manifest-internal"
22 )
23 EXT_MANIFEST_URL = "https://chromium.googlesource.com/chromiumos/manifest"
Don Garrett903fedc2018-11-02 17:04:26 -070024
Alex Klein1699fab2022-09-08 08:46:06 -060025 MV_INT_URL = (
26 "https://chrome-internal.googlesource.com/chromeos/" "manifest-versions"
27 )
28 MV_EXT_URL = (
29 "https://chromium.googlesource.com/chromiumos/" "manifest-versions"
30 )
Don Garrett903fedc2018-11-02 17:04:26 -070031
Alex Klein1699fab2022-09-08 08:46:06 -060032 def setUp(self):
33 self.repo_dir = os.path.join(self.tempdir, "repo")
34 self.repo_url = os.path.join(self.tempdir, ".repo/repo")
35 self.preload_src = os.path.join(self.tempdir, "source")
36 self.git_cache = os.path.join(self.tempdir, "git_cache")
37 self.manifest = os.path.join(self.tempdir, "manifest.xml")
38 self.mv_ext = os.path.join(self.tempdir, "mv_ext")
39 self.mv_int = os.path.join(self.tempdir, "mv_int")
40 self.manifest_url = "manifest.com"
Lann Martin10f3ee92018-08-22 15:48:10 -060041
Alex Klein1699fab2022-09-08 08:46:06 -060042 self.repo_mock = self.PatchObject(
43 repository, "RepoRepository", autospec=True
44 )
Lann Martin10f3ee92018-08-22 15:48:10 -060045
Alex Klein1699fab2022-09-08 08:46:06 -060046 self.refresh_manifest_mock = self.PatchObject(
47 manifest_version, "RefreshManifestCheckout", autospec=True
48 )
Lann Martin10f3ee92018-08-22 15:48:10 -060049
Alex Klein1699fab2022-09-08 08:46:06 -060050 self.resolve_buildspec_mock = self.PatchObject(
51 manifest_version, "ResolveBuildspec", autospec=True
52 )
Lann Martin10f3ee92018-08-22 15:48:10 -060053
Alex Klein1699fab2022-09-08 08:46:06 -060054 self.resolve_version_mock = self.PatchObject(
55 manifest_version, "ResolveBuildspecVersion", autospec=True
56 )
Lann Martin10f3ee92018-08-22 15:48:10 -060057
Alex Klein1699fab2022-09-08 08:46:06 -060058 def notestHelp(self):
59 with self.assertRaises(SystemExit):
60 repo_sync_manifest.main(
61 [
62 "--help",
63 ]
64 )
Don Garrett903fedc2018-11-02 17:04:26 -070065
Alex Klein1699fab2022-09-08 08:46:06 -060066 def testMinimal(self):
67 repo_sync_manifest.main(
68 [
69 "--repo-root",
70 self.repo_dir,
71 ]
72 )
Don Garrett903fedc2018-11-02 17:04:26 -070073
Alex Klein1699fab2022-09-08 08:46:06 -060074 # Ensure manifest_versions is not updated.
75 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
Don Garrett903fedc2018-11-02 17:04:26 -070076
Alex Klein1699fab2022-09-08 08:46:06 -060077 # Ensure RepoRepository created and Sync'd as expected.
78 self.assertEqual(
79 self.repo_mock.mock_calls,
80 [
81 mock.call(
82 directory=self.repo_dir,
83 manifest_repo_url=self.INT_MANIFEST_URL,
84 branch="master",
85 git_cache_dir=None,
86 repo_url=None,
87 groups=None,
88 ),
89 mock.call().Sync(detach=True, local_manifest=None),
90 ],
91 )
Don Garrett903fedc2018-11-02 17:04:26 -070092
Alex Klein1699fab2022-09-08 08:46:06 -060093 def testMinimalExternal(self):
94 repo_sync_manifest.main(
95 [
96 "--repo-root",
97 self.repo_dir,
98 "--external",
99 ]
100 )
Don Garrett903fedc2018-11-02 17:04:26 -0700101
Alex Klein1699fab2022-09-08 08:46:06 -0600102 # Ensure manifest_versions is not updated.
103 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
Don Garrett903fedc2018-11-02 17:04:26 -0700104
Alex Klein1699fab2022-09-08 08:46:06 -0600105 # Ensure RepoRepository created and Sync'd as expected.
106 self.assertEqual(
107 self.repo_mock.mock_calls,
108 [
109 mock.call(
110 directory=self.repo_dir,
111 manifest_repo_url=self.EXT_MANIFEST_URL,
112 branch="master",
113 git_cache_dir=None,
114 repo_url=None,
115 groups=None,
116 ),
117 mock.call().Sync(detach=True, local_manifest=None),
118 ],
119 )
Don Garrett903fedc2018-11-02 17:04:26 -0700120
Alex Klein1699fab2022-09-08 08:46:06 -0600121 def testMinimalManifestUrl(self):
122 repo_sync_manifest.main(
123 [
124 "--repo-root",
125 self.repo_dir,
126 "--manifest-url",
127 self.manifest_url,
128 ]
129 )
Don Garrett903fedc2018-11-02 17:04:26 -0700130
Alex Klein1699fab2022-09-08 08:46:06 -0600131 # Ensure manifest_versions is not updated.
132 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
Evan Hernandezc760c712019-02-07 15:18:18 -0700133
Alex Klein1699fab2022-09-08 08:46:06 -0600134 # Ensure RepoRepository created and Sync'd as expected.
135 self.assertEqual(
136 self.repo_mock.mock_calls,
137 [
138 mock.call(
139 directory=self.repo_dir,
140 manifest_repo_url=self.manifest_url,
141 branch="master",
142 git_cache_dir=None,
143 repo_url=None,
144 groups=None,
145 ),
146 mock.call().Sync(detach=True, local_manifest=None),
147 ],
148 )
Evan Hernandezc760c712019-02-07 15:18:18 -0700149
Alex Klein1699fab2022-09-08 08:46:06 -0600150 def testBranch(self):
151 repo_sync_manifest.main(
152 ["--repo-root", self.repo_dir, "--branch", "branch"]
153 )
Evan Hernandezc760c712019-02-07 15:18:18 -0700154
Alex Klein1699fab2022-09-08 08:46:06 -0600155 # Ensure RepoRepository created and Sync'd as expected.
156 self.assertEqual(
157 self.repo_mock.mock_calls,
158 [
159 mock.call(
160 directory=self.repo_dir,
161 manifest_repo_url=self.INT_MANIFEST_URL,
162 branch="branch",
163 git_cache_dir=None,
164 repo_url=None,
165 groups=None,
166 ),
167 mock.call().Sync(detach=True, local_manifest=None),
168 ],
169 )
Don Garrett903fedc2018-11-02 17:04:26 -0700170
Alex Klein1699fab2022-09-08 08:46:06 -0600171 # Ensure manifest_versions is not updated.
172 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
Don Garrett903fedc2018-11-02 17:04:26 -0700173
Alex Klein1699fab2022-09-08 08:46:06 -0600174 def testBuildSpec(self):
175 self.resolve_buildspec_mock.return_value = "resolved_buildspec"
Don Garrett903fedc2018-11-02 17:04:26 -0700176
Alex Klein1699fab2022-09-08 08:46:06 -0600177 repo_sync_manifest.main(
178 [
179 "--repo-root",
180 self.repo_dir,
181 "--buildspec",
182 "test/spec",
183 "--manifest-versions-int",
184 self.mv_int,
185 ]
186 )
Don Garrett903fedc2018-11-02 17:04:26 -0700187
Alex Klein1699fab2022-09-08 08:46:06 -0600188 # Ensure manifest-versions interactions are correct.
189 self.assertEqual(
190 self.refresh_manifest_mock.mock_calls,
191 [mock.call(self.mv_int, self.MV_INT_URL)],
192 )
193 self.assertEqual(
194 self.resolve_buildspec_mock.mock_calls,
195 [mock.call(self.mv_int, "test/spec")],
196 )
197 self.assertEqual(self.resolve_version_mock.mock_calls, [])
Don Garrett903fedc2018-11-02 17:04:26 -0700198
Alex Klein1699fab2022-09-08 08:46:06 -0600199 # Ensure RepoRepository created and Sync'd as expected.
200 self.assertEqual(
201 self.repo_mock.mock_calls,
202 [
203 mock.call(
204 directory=self.repo_dir,
205 manifest_repo_url=self.INT_MANIFEST_URL,
206 branch="master",
207 git_cache_dir=None,
208 repo_url=None,
209 groups=None,
210 ),
211 mock.call().Sync(
212 detach=True, local_manifest="resolved_buildspec"
213 ),
214 ],
215 )
Don Garrett903fedc2018-11-02 17:04:26 -0700216
Alex Klein1699fab2022-09-08 08:46:06 -0600217 def testBuildSpecExternal(self):
218 self.resolve_buildspec_mock.return_value = "resolved_buildspec"
Don Garrett903fedc2018-11-02 17:04:26 -0700219
Alex Klein1699fab2022-09-08 08:46:06 -0600220 repo_sync_manifest.main(
221 [
222 "--repo-root",
223 self.repo_dir,
224 "--buildspec",
225 "test/spec",
226 "--manifest-versions-ext",
227 self.mv_ext,
228 "--external",
229 ]
230 )
Don Garrett903fedc2018-11-02 17:04:26 -0700231
Alex Klein1699fab2022-09-08 08:46:06 -0600232 # Ensure manifest-versions interactions are correct.
233 self.assertEqual(
234 self.refresh_manifest_mock.mock_calls,
235 [mock.call(self.mv_ext, self.MV_EXT_URL)],
236 )
237 self.assertEqual(
238 self.resolve_buildspec_mock.mock_calls,
239 [mock.call(self.mv_ext, "test/spec")],
240 )
241 self.assertEqual(self.resolve_version_mock.mock_calls, [])
Don Garrett903fedc2018-11-02 17:04:26 -0700242
Alex Klein1699fab2022-09-08 08:46:06 -0600243 # Ensure RepoRepository created and Sync'd as expected.
244 self.assertEqual(
245 self.repo_mock.mock_calls,
246 [
247 mock.call(
248 directory=self.repo_dir,
249 manifest_repo_url=self.EXT_MANIFEST_URL,
250 branch="master",
251 git_cache_dir=None,
252 repo_url=None,
253 groups=None,
254 ),
255 mock.call().Sync(
256 detach=True, local_manifest="resolved_buildspec"
257 ),
258 ],
259 )
Don Garrett903fedc2018-11-02 17:04:26 -0700260
Alex Klein1699fab2022-09-08 08:46:06 -0600261 def testVersion(self):
262 self.resolve_version_mock.return_value = "resolved_buildspec"
Don Garrett903fedc2018-11-02 17:04:26 -0700263
Alex Klein1699fab2022-09-08 08:46:06 -0600264 repo_sync_manifest.main(
265 [
266 "--repo-root",
267 self.repo_dir,
268 "--version",
269 "1.2.3",
270 "--manifest-versions-int",
271 self.mv_int,
272 ]
273 )
Don Garrett903fedc2018-11-02 17:04:26 -0700274
Alex Klein1699fab2022-09-08 08:46:06 -0600275 # Ensure manifest-versions interactions are correct.
276 self.assertEqual(
277 self.refresh_manifest_mock.mock_calls,
278 [mock.call(self.mv_int, self.MV_INT_URL)],
279 )
280 self.assertEqual(self.resolve_buildspec_mock.mock_calls, [])
281 self.assertEqual(
282 self.resolve_version_mock.mock_calls,
283 [mock.call(self.mv_int, "1.2.3")],
284 )
Don Garrett903fedc2018-11-02 17:04:26 -0700285
Alex Klein1699fab2022-09-08 08:46:06 -0600286 # Ensure RepoRepository created and Sync'd as expected.
287 self.assertEqual(
288 self.repo_mock.mock_calls,
289 [
290 mock.call(
291 directory=self.repo_dir,
292 manifest_repo_url=self.INT_MANIFEST_URL,
293 branch="master",
294 git_cache_dir=None,
295 repo_url=None,
296 groups=None,
297 ),
298 mock.call().Sync(
299 detach=True, local_manifest="resolved_buildspec"
300 ),
301 ],
302 )
Don Garrett903fedc2018-11-02 17:04:26 -0700303
Alex Klein1699fab2022-09-08 08:46:06 -0600304 def testVersionExternal(self):
305 self.resolve_version_mock.return_value = "resolved_buildspec"
Don Garrett903fedc2018-11-02 17:04:26 -0700306
Alex Klein1699fab2022-09-08 08:46:06 -0600307 repo_sync_manifest.main(
308 [
309 "--repo-root",
310 self.repo_dir,
311 "--version",
312 "1.2.3",
313 "--manifest-versions-ext",
314 self.mv_ext,
315 "--external",
316 ]
317 )
Don Garrett903fedc2018-11-02 17:04:26 -0700318
Alex Klein1699fab2022-09-08 08:46:06 -0600319 # Ensure manifest-versions interactions are correct.
320 self.assertEqual(
321 self.refresh_manifest_mock.mock_calls,
322 [mock.call(self.mv_ext, self.MV_EXT_URL)],
323 )
324 self.assertEqual(self.resolve_buildspec_mock.mock_calls, [])
325 self.assertEqual(
326 self.resolve_version_mock.mock_calls,
327 [mock.call(self.mv_ext, "1.2.3")],
328 )
Don Garrett903fedc2018-11-02 17:04:26 -0700329
Alex Klein1699fab2022-09-08 08:46:06 -0600330 # Ensure RepoRepository created and Sync'd as expected.
331 self.assertEqual(
332 self.repo_mock.mock_calls,
333 [
334 mock.call(
335 directory=self.repo_dir,
336 manifest_repo_url=self.EXT_MANIFEST_URL,
337 branch="master",
338 git_cache_dir=None,
339 repo_url=None,
340 groups=None,
341 ),
342 mock.call().Sync(
343 detach=True, local_manifest="resolved_buildspec"
344 ),
345 ],
346 )
Don Garrett903fedc2018-11-02 17:04:26 -0700347
Alex Klein1699fab2022-09-08 08:46:06 -0600348 def testBuildSpecNoManifestVersions(self):
349 with self.assertRaises(AssertionError):
350 repo_sync_manifest.main(
351 [
352 "--repo-root",
353 self.repo_dir,
354 "--buildspec",
355 "test/spec",
356 ]
357 )
Don Garrett903fedc2018-11-02 17:04:26 -0700358
Alex Klein1699fab2022-09-08 08:46:06 -0600359 with self.assertRaises(AssertionError):
360 repo_sync_manifest.main(
361 [
362 "--repo-root",
363 self.repo_dir,
364 "--buildspec",
365 "test/spec",
366 "--external",
367 ]
368 )
Don Garrett903fedc2018-11-02 17:04:26 -0700369
Alex Klein1699fab2022-09-08 08:46:06 -0600370 def testLocalManifest(self):
371 repo_sync_manifest.main(
372 [
373 "--repo-root",
374 self.repo_dir,
375 "--manifest-file",
376 self.manifest,
377 ]
378 )
Don Garrett903fedc2018-11-02 17:04:26 -0700379
Alex Klein1699fab2022-09-08 08:46:06 -0600380 # Ensure manifest_versions is not updated.
381 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
Don Garrett903fedc2018-11-02 17:04:26 -0700382
Alex Klein1699fab2022-09-08 08:46:06 -0600383 # Ensure RepoRepository created and Sync'd as expected.
384 self.assertEqual(
385 self.repo_mock.mock_calls,
386 [
387 mock.call(
388 directory=self.repo_dir,
389 manifest_repo_url=self.INT_MANIFEST_URL,
390 branch="master",
391 git_cache_dir=None,
392 repo_url=None,
393 groups=None,
394 ),
395 mock.call().Sync(detach=True, local_manifest=self.manifest),
396 ],
397 )
Don Garrett903fedc2018-11-02 17:04:26 -0700398
Alex Klein1699fab2022-09-08 08:46:06 -0600399 def testGroups(self):
400 repo_sync_manifest.main(
401 [
402 "--repo-root",
403 self.repo_dir,
404 "--manifest-file",
405 self.manifest,
406 "--groups",
407 "all",
408 ]
409 )
Raul E Rangel5a7c5002019-11-08 09:18:32 -0700410
Alex Klein1699fab2022-09-08 08:46:06 -0600411 # Ensure manifest_versions is not updated.
412 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
Raul E Rangel5a7c5002019-11-08 09:18:32 -0700413
Alex Klein1699fab2022-09-08 08:46:06 -0600414 # Ensure RepoRepository created and Sync'd as expected.
415 self.assertEqual(
416 self.repo_mock.mock_calls,
417 [
418 mock.call(
419 directory=self.repo_dir,
420 manifest_repo_url=self.INT_MANIFEST_URL,
421 branch="master",
422 git_cache_dir=None,
423 repo_url=None,
424 groups="all",
425 ),
426 mock.call().Sync(detach=True, local_manifest=self.manifest),
427 ],
428 )
Raul E Rangel5a7c5002019-11-08 09:18:32 -0700429
Alex Klein1699fab2022-09-08 08:46:06 -0600430 def testOptimizations(self):
431 repo_sync_manifest.main(
432 [
433 "--repo-root",
434 self.repo_dir,
435 "--copy-repo",
436 self.preload_src,
437 "--git-cache",
438 self.git_cache,
439 "--repo-url",
440 self.repo_url,
441 ]
442 )
Don Garrett903fedc2018-11-02 17:04:26 -0700443
Alex Klein1699fab2022-09-08 08:46:06 -0600444 # Ensure manifest_versions is not updated.
445 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
Don Garrett903fedc2018-11-02 17:04:26 -0700446
Alex Klein1699fab2022-09-08 08:46:06 -0600447 # Ensure RepoRepository created and Sync'd as expected.
448 self.assertEqual(
449 self.repo_mock.mock_calls,
450 [
451 mock.call(
452 directory=self.repo_dir,
453 manifest_repo_url=self.INT_MANIFEST_URL,
454 branch="master",
455 git_cache_dir=self.git_cache,
456 repo_url=self.repo_url,
457 groups=None,
458 ),
459 mock.call().PreLoad(self.preload_src),
460 mock.call().Sync(detach=True, local_manifest=None),
461 ],
462 )