blob: 464438105e64ed838951b302bd541d622c904588 [file] [log] [blame]
Lann Martin10f3ee92018-08-22 15:48:10 -06001# -*- 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"""Tests for scripts/repo_sync_manifest."""
7
8from __future__ import print_function
9
Don Garrett903fedc2018-11-02 17:04:26 -070010import mock
Lann Martin10f3ee92018-08-22 15:48:10 -060011import os
12
Don Garrett903fedc2018-11-02 17:04:26 -070013from chromite.cbuildbot import manifest_version
14from chromite.cbuildbot import repository
Lann Martin10f3ee92018-08-22 15:48:10 -060015from chromite.lib import cros_test_lib
Lann Martin10f3ee92018-08-22 15:48:10 -060016from chromite.scripts import repo_sync_manifest
17
18
Don Garrett903fedc2018-11-02 17:04:26 -070019class RepoSyncManifestTest(cros_test_lib.RunCommandTempDirTestCase):
Lann Martin10f3ee92018-08-22 15:48:10 -060020 """Unit tests for repo_sync_manifest."""
21
Don Garrett903fedc2018-11-02 17:04:26 -070022 INT_MANIFEST_URL = ('https://chrome-internal-review.googlesource.com/'
23 'chromeos/manifest-internal')
24 EXT_MANIFEST_URL = ('https://chromium.googlesource.com/chromiumos/manifest')
25
26 MV_INT_URL = ('https://chrome-internal.googlesource.com/chromeos/'
27 'manifest-versions')
28 MV_EXT_URL = ('https://chromium.googlesource.com/chromiumos/'
29 'manifest-versions')
30
Lann Martin10f3ee92018-08-22 15:48:10 -060031 def setUp(self):
Don Garrett903fedc2018-11-02 17:04:26 -070032 self.repo_dir = os.path.join(self.tempdir, 'repo')
33 self.preload_src = os.path.join(self.tempdir, 'source')
34 self.git_cache = os.path.join(self.tempdir, 'git_cache')
Lann Martin10f3ee92018-08-22 15:48:10 -060035 self.manifest = os.path.join(self.tempdir, 'manifest.xml')
Don Garrett903fedc2018-11-02 17:04:26 -070036 self.mv_ext = os.path.join(self.tempdir, 'mv_ext')
37 self.mv_int = os.path.join(self.tempdir, 'mv_int')
Evan Hernandezc760c712019-02-07 15:18:18 -070038 self.manifest_url = 'manifest.com'
Lann Martin10f3ee92018-08-22 15:48:10 -060039
Don Garrett903fedc2018-11-02 17:04:26 -070040 self.repo_mock = self.PatchObject(
41 repository, 'RepoRepository', autospec=True)
Lann Martin10f3ee92018-08-22 15:48:10 -060042
Don Garrett903fedc2018-11-02 17:04:26 -070043 self.refresh_manifest_mock = self.PatchObject(
44 manifest_version, 'RefreshManifestCheckout', autospec=True)
Lann Martin10f3ee92018-08-22 15:48:10 -060045
Don Garrett903fedc2018-11-02 17:04:26 -070046 self.resolve_buildspec_mock = self.PatchObject(
47 manifest_version, 'ResolveBuildspec', autospec=True)
Lann Martin10f3ee92018-08-22 15:48:10 -060048
Don Garrett903fedc2018-11-02 17:04:26 -070049 self.resolve_version_mock = self.PatchObject(
50 manifest_version, 'ResolveBuildspecVersion', autospec=True)
Lann Martin10f3ee92018-08-22 15:48:10 -060051
Don Garrett903fedc2018-11-02 17:04:26 -070052
53 def notestHelp(self):
54 with self.assertRaises(SystemExit):
55 repo_sync_manifest.main([
56 '--help',
57 ])
58
59 def testMinimal(self):
60 repo_sync_manifest.main([
61 '--repo-root', self.repo_dir,
62 ])
63
64 # Ensure manifest_versions is not updated.
65 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
66
67 # Ensure RepoRepository created and Sync'd as expected.
68 self.assertEqual(self.repo_mock.mock_calls, [
69 mock.call(
70 directory=self.repo_dir,
71 manifest_repo_url=self.INT_MANIFEST_URL,
72 branch='master',
73 git_cache_dir=None,
74 ),
75 mock.call().Sync(detach=True, local_manifest=None)
76 ])
77
78 def testMinimalExternal(self):
79 repo_sync_manifest.main([
80 '--repo-root', self.repo_dir,
81 '--external',
82 ])
83
84 # Ensure manifest_versions is not updated.
85 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
86
87 # Ensure RepoRepository created and Sync'd as expected.
88 self.assertEqual(self.repo_mock.mock_calls, [
89 mock.call(
90 directory=self.repo_dir,
91 manifest_repo_url=self.EXT_MANIFEST_URL,
92 branch='master',
93 git_cache_dir=None,
94 ),
95 mock.call().Sync(detach=True, local_manifest=None)
96 ])
97
Evan Hernandezc760c712019-02-07 15:18:18 -070098 def testMinimalManifestUrl(self):
99 repo_sync_manifest.main([
100 '--repo-root', self.repo_dir,
101 '--manifest-url', self.manifest_url,
102 ])
103
104 # Ensure manifest_versions is not updated.
105 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
106
107 # Ensure RepoRepository created and Sync'd as expected.
108 self.assertEqual(self.repo_mock.mock_calls, [
109 mock.call(
110 directory=self.repo_dir,
111 manifest_repo_url=self.manifest_url,
112 branch='master',
113 git_cache_dir=None,
114 ),
115 mock.call().Sync(detach=True, local_manifest=None)
116 ])
117
Don Garrett903fedc2018-11-02 17:04:26 -0700118 def testBranch(self):
119 repo_sync_manifest.main([
120 '--repo-root', self.repo_dir,
121 '--branch', 'branch'
122 ])
123
124 # Ensure RepoRepository created and Sync'd as expected.
125 self.assertEqual(self.repo_mock.mock_calls, [
126 mock.call(
127 directory=self.repo_dir,
128 manifest_repo_url=self.INT_MANIFEST_URL,
129 branch='branch',
130 git_cache_dir=None,
131 ),
132 mock.call().Sync(detach=True, local_manifest=None)
133 ])
134
135 # Ensure manifest_versions is not updated.
136 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
137
138 def testBuildSpec(self):
139 self.resolve_buildspec_mock.return_value = 'resolved_buildspec'
140
141 repo_sync_manifest.main([
142 '--repo-root', self.repo_dir,
143 '--buildspec', 'test/spec',
144 '--manifest-versions-int', self.mv_int,
145 ])
146
147 # Ensure manifest-versions interactions are correct.
148 self.assertEqual(self.refresh_manifest_mock.mock_calls, [
149 mock.call(self.mv_int, self.MV_INT_URL)])
150 self.assertEqual(self.resolve_buildspec_mock.mock_calls, [
151 mock.call(self.mv_int, 'test/spec')])
152 self.assertEqual(self.resolve_version_mock.mock_calls, [])
153
154 # Ensure RepoRepository created and Sync'd as expected.
155 self.assertEqual(self.repo_mock.mock_calls, [
156 mock.call(
157 directory=self.repo_dir,
158 manifest_repo_url=self.INT_MANIFEST_URL,
159 branch='master',
160 git_cache_dir=None,
161 ),
162 mock.call().Sync(detach=True, local_manifest='resolved_buildspec')
163 ])
164
165 def testBuildSpecExternal(self):
166 self.resolve_buildspec_mock.return_value = 'resolved_buildspec'
167
168 repo_sync_manifest.main([
169 '--repo-root', self.repo_dir,
170 '--buildspec', 'test/spec',
171 '--manifest-versions-ext', self.mv_ext,
172 '--external',
173 ])
174
175 # Ensure manifest-versions interactions are correct.
176 self.assertEqual(self.refresh_manifest_mock.mock_calls, [
177 mock.call(self.mv_ext, self.MV_EXT_URL)])
178 self.assertEqual(self.resolve_buildspec_mock.mock_calls, [
179 mock.call(self.mv_ext, 'test/spec')])
180 self.assertEqual(self.resolve_version_mock.mock_calls, [])
181
182 # Ensure RepoRepository created and Sync'd as expected.
183 self.assertEqual(self.repo_mock.mock_calls, [
184 mock.call(
185 directory=self.repo_dir,
186 manifest_repo_url=self.EXT_MANIFEST_URL,
187 branch='master',
188 git_cache_dir=None,
189 ),
190 mock.call().Sync(detach=True, local_manifest='resolved_buildspec')
191 ])
192
193 def testVersion(self):
194 self.resolve_version_mock.return_value = 'resolved_buildspec'
195
196 repo_sync_manifest.main([
197 '--repo-root', self.repo_dir,
198 '--version', '1.2.3',
199 '--manifest-versions-int', self.mv_int,
200 ])
201
202 # Ensure manifest-versions interactions are correct.
203 self.assertEqual(self.refresh_manifest_mock.mock_calls, [
204 mock.call(self.mv_int, self.MV_INT_URL)])
205 self.assertEqual(self.resolve_buildspec_mock.mock_calls, [])
206 self.assertEqual(self.resolve_version_mock.mock_calls, [
207 mock.call(self.mv_int, '1.2.3')])
208
209 # Ensure RepoRepository created and Sync'd as expected.
210 self.assertEqual(self.repo_mock.mock_calls, [
211 mock.call(
212 directory=self.repo_dir,
213 manifest_repo_url=self.INT_MANIFEST_URL,
214 branch='master',
215 git_cache_dir=None,
216 ),
217 mock.call().Sync(detach=True, local_manifest='resolved_buildspec')
218 ])
219
220 def testVersionExternal(self):
221 self.resolve_version_mock.return_value = 'resolved_buildspec'
222
223 repo_sync_manifest.main([
224 '--repo-root', self.repo_dir,
225 '--version', '1.2.3',
226 '--manifest-versions-ext', self.mv_ext,
227 '--external',
228 ])
229
230 # Ensure manifest-versions interactions are correct.
231 self.assertEqual(self.refresh_manifest_mock.mock_calls, [
232 mock.call(self.mv_ext, self.MV_EXT_URL)])
233 self.assertEqual(self.resolve_buildspec_mock.mock_calls, [])
234 self.assertEqual(self.resolve_version_mock.mock_calls, [
235 mock.call(self.mv_ext, '1.2.3')])
236
237 # Ensure RepoRepository created and Sync'd as expected.
238 self.assertEqual(self.repo_mock.mock_calls, [
239 mock.call(
240 directory=self.repo_dir,
241 manifest_repo_url=self.EXT_MANIFEST_URL,
242 branch='master',
243 git_cache_dir=None,
244 ),
245 mock.call().Sync(detach=True, local_manifest='resolved_buildspec')
246 ])
247
248 def testBuildSpecNoManifestVersions(self):
249 with self.assertRaises(AssertionError):
250 repo_sync_manifest.main([
251 '--repo-root', self.repo_dir,
252 '--buildspec', 'test/spec',
253 ])
254
255 with self.assertRaises(AssertionError):
256 repo_sync_manifest.main([
257 '--repo-root', self.repo_dir,
258 '--buildspec', 'test/spec',
259 '--external',
260 ])
261
262 def testLocalManifest(self):
263 repo_sync_manifest.main([
264 '--repo-root', self.repo_dir,
265 '--manifest-file', self.manifest,
266 ])
267
268 # Ensure manifest_versions is not updated.
269 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
270
271 # Ensure RepoRepository created and Sync'd as expected.
272 self.assertEqual(self.repo_mock.mock_calls, [
273 mock.call(
274 directory=self.repo_dir,
275 manifest_repo_url=self.INT_MANIFEST_URL,
276 branch='master',
277 git_cache_dir=None,
278 ),
279 mock.call().Sync(detach=True, local_manifest=self.manifest)
280 ])
281
282 def testOptimizations(self):
283 repo_sync_manifest.main([
284 '--repo-root', self.repo_dir,
285 '--copy-repo', self.preload_src,
286 '--git-cache', self.git_cache,
287 ])
288
289 # Ensure manifest_versions is not updated.
290 self.assertEqual(self.refresh_manifest_mock.mock_calls, [])
291
292 # Ensure RepoRepository created and Sync'd as expected.
293 self.assertEqual(self.repo_mock.mock_calls, [
294 mock.call(
295 directory=self.repo_dir,
296 manifest_repo_url=self.INT_MANIFEST_URL,
297 branch='master',
298 git_cache_dir=self.git_cache,
299 ),
300 mock.call().PreLoad(self.preload_src),
301 mock.call().Sync(detach=True, local_manifest=None)
302 ])