blob: 1ec80d760f06c1143789aa5d041e5beb08155b63 [file] [log] [blame]
Mike Frysingerf1ba7ad2022-09-12 05:42:57 -04001# Copyright 2019 The ChromiumOS Authors
Evan Hernandezd437b4e2019-03-25 13:48:30 -06002# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Unittests for Binhost operations."""
6
Michael Mortensenfc823882019-08-27 14:38:07 -06007import os
Mike Frysinger166fea02021-02-12 05:30:33 -05008from unittest import mock
Mike Frysingeref94e4c2020-02-10 23:59:54 -05009
Alex Klein231d2da2019-07-22 16:44:45 -060010from chromite.api import api_config
Evan Hernandezd437b4e2019-03-25 13:48:30 -060011from chromite.api.controller import binhost
12from chromite.api.gen.chromite.api import binhost_pb2
LaMont Jonesc64ae212019-04-15 15:41:28 -060013from chromite.lib import cros_build_lib
Evan Hernandezd437b4e2019-03-25 13:48:30 -060014from chromite.lib import cros_test_lib
Michael Mortensenfc823882019-08-27 14:38:07 -060015from chromite.lib import osutils
Evan Hernandezd437b4e2019-03-25 13:48:30 -060016from chromite.service import binhost as binhost_service
17
Alex Klein231d2da2019-07-22 16:44:45 -060018
Michael Mortensena0af77b2019-11-13 11:15:15 -070019class GetBinhostsTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
Alex Klein1699fab2022-09-08 08:46:06 -060020 """Unittests for GetBinhosts."""
Michael Mortensena0af77b2019-11-13 11:15:15 -070021
Alex Klein1699fab2022-09-08 08:46:06 -060022 def setUp(self):
23 self.response = binhost_pb2.BinhostGetResponse()
Michael Mortensena0af77b2019-11-13 11:15:15 -070024
Alex Klein1699fab2022-09-08 08:46:06 -060025 def testValidateOnly(self):
26 """Check that a validate only call does not execute any logic."""
27 patch = self.PatchObject(binhost_service, "GetBinhosts")
Michael Mortensena0af77b2019-11-13 11:15:15 -070028
Alex Klein1699fab2022-09-08 08:46:06 -060029 request = binhost_pb2.BinhostGetRequest()
30 request.build_target.name = "target"
31 binhost.GetBinhosts(request, self.response, self.validate_only_config)
32 patch.assert_not_called()
Michael Mortensena0af77b2019-11-13 11:15:15 -070033
Alex Klein1699fab2022-09-08 08:46:06 -060034 def testMockCall(self):
35 """Test that a mock call does not execute logic, returns mocked value."""
36 patch = self.PatchObject(binhost_service, "GetBinhosts")
Michael Mortensena0af77b2019-11-13 11:15:15 -070037
Alex Klein1699fab2022-09-08 08:46:06 -060038 input_proto = binhost_pb2.BinhostGetRequest()
39 input_proto.build_target.name = "target"
Michael Mortensena0af77b2019-11-13 11:15:15 -070040
Alex Klein1699fab2022-09-08 08:46:06 -060041 binhost.GetBinhosts(input_proto, self.response, self.mock_call_config)
Michael Mortensena0af77b2019-11-13 11:15:15 -070042
Alex Klein1699fab2022-09-08 08:46:06 -060043 self.assertEqual(len(self.response.binhosts), 1)
44 self.assertEqual(self.response.binhosts[0].package_index, "Packages")
45 patch.assert_not_called()
Michael Mortensena0af77b2019-11-13 11:15:15 -070046
Alex Klein1699fab2022-09-08 08:46:06 -060047 def testGetBinhosts(self):
48 """GetBinhosts calls service with correct args."""
49 binhost_list = [
50 "gs://cr-prebuilt/board/amd64-generic/paladin-R66-17.0.0-rc2/packages/",
51 "gs://cr-prebuilt/board/eve/paladin-R66-17.0.0-rc2/packages/",
52 ]
53 get_binhost = self.PatchObject(
54 binhost_service, "GetBinhosts", return_value=binhost_list
55 )
Michael Mortensena0af77b2019-11-13 11:15:15 -070056
Alex Klein1699fab2022-09-08 08:46:06 -060057 input_proto = binhost_pb2.BinhostGetRequest()
58 input_proto.build_target.name = "target"
Michael Mortensena0af77b2019-11-13 11:15:15 -070059
Alex Klein1699fab2022-09-08 08:46:06 -060060 binhost.GetBinhosts(input_proto, self.response, self.api_config)
Michael Mortensena0af77b2019-11-13 11:15:15 -070061
Alex Klein1699fab2022-09-08 08:46:06 -060062 self.assertEqual(len(self.response.binhosts), 2)
63 self.assertEqual(self.response.binhosts[0].package_index, "Packages")
64 get_binhost.assert_called_once_with(mock.ANY)
Michael Mortensena0af77b2019-11-13 11:15:15 -070065
66
Alex Klein1699fab2022-09-08 08:46:06 -060067class GetPrivatePrebuiltAclArgsTest(
68 cros_test_lib.MockTestCase, api_config.ApiConfigMixin
69):
70 """Unittests for GetPrivatePrebuiltAclArgs."""
Michael Mortensen42251f92019-11-14 11:01:43 -070071
Alex Klein1699fab2022-09-08 08:46:06 -060072 def setUp(self):
73 self.response = binhost_pb2.AclArgsResponse()
Michael Mortensen42251f92019-11-14 11:01:43 -070074
Alex Klein1699fab2022-09-08 08:46:06 -060075 def testValidateOnly(self):
76 """Check that a validate only call does not execute any logic."""
77 patch = self.PatchObject(binhost_service, "GetPrebuiltAclArgs")
Michael Mortensen42251f92019-11-14 11:01:43 -070078
Alex Klein1699fab2022-09-08 08:46:06 -060079 request = binhost_pb2.AclArgsRequest()
80 request.build_target.name = "target"
81 binhost.GetPrivatePrebuiltAclArgs(
82 request, self.response, self.validate_only_config
83 )
84 patch.assert_not_called()
Michael Mortensen42251f92019-11-14 11:01:43 -070085
Alex Klein1699fab2022-09-08 08:46:06 -060086 def testMockCall(self):
87 """Test that a mock call does not execute logic, returns mocked value."""
88 patch = self.PatchObject(binhost_service, "GetPrebuiltAclArgs")
Michael Mortensen42251f92019-11-14 11:01:43 -070089
Alex Klein1699fab2022-09-08 08:46:06 -060090 input_proto = binhost_pb2.AclArgsRequest()
91 input_proto.build_target.name = "target"
Michael Mortensen42251f92019-11-14 11:01:43 -070092
Alex Klein1699fab2022-09-08 08:46:06 -060093 binhost.GetPrivatePrebuiltAclArgs(
94 input_proto, self.response, self.mock_call_config
95 )
Michael Mortensen42251f92019-11-14 11:01:43 -070096
Alex Klein1699fab2022-09-08 08:46:06 -060097 self.assertEqual(len(self.response.args), 1)
98 self.assertEqual(self.response.args[0].arg, "-g")
99 self.assertEqual(self.response.args[0].value, "group1:READ")
100 patch.assert_not_called()
Michael Mortensen42251f92019-11-14 11:01:43 -0700101
Alex Klein1699fab2022-09-08 08:46:06 -0600102 def testGetPrivatePrebuiltAclArgs(self):
103 """GetPrivatePrebuildAclsArgs calls service with correct args."""
104 argvalue_list = [["-g", "group1:READ"]]
105 get_binhost = self.PatchObject(
106 binhost_service, "GetPrebuiltAclArgs", return_value=argvalue_list
107 )
Michael Mortensen42251f92019-11-14 11:01:43 -0700108
Alex Klein1699fab2022-09-08 08:46:06 -0600109 input_proto = binhost_pb2.AclArgsRequest()
110 input_proto.build_target.name = "target"
Michael Mortensen42251f92019-11-14 11:01:43 -0700111
Alex Klein1699fab2022-09-08 08:46:06 -0600112 binhost.GetPrivatePrebuiltAclArgs(
113 input_proto, self.response, self.api_config
114 )
Michael Mortensen42251f92019-11-14 11:01:43 -0700115
Alex Klein1699fab2022-09-08 08:46:06 -0600116 self.assertEqual(len(self.response.args), 1)
117 self.assertEqual(self.response.args[0].arg, "-g")
118 self.assertEqual(self.response.args[0].value, "group1:READ")
119 get_binhost.assert_called_once_with(mock.ANY)
Michael Mortensen42251f92019-11-14 11:01:43 -0700120
121
Alex Klein1699fab2022-09-08 08:46:06 -0600122class PrepareBinhostUploadsTest(
123 cros_test_lib.MockTestCase, api_config.ApiConfigMixin
124):
125 """Unittests for PrepareBinhostUploads."""
Evan Hernandezd437b4e2019-03-25 13:48:30 -0600126
Alex Klein1699fab2022-09-08 08:46:06 -0600127 def setUp(self):
128 self.PatchObject(
129 binhost_service,
130 "GetPrebuiltsRoot",
131 return_value="/build/target/packages",
132 )
133 self.PatchObject(
134 binhost_service,
135 "GetPrebuiltsFiles",
136 return_value=["foo.tbz2", "bar.tbz2"],
137 )
138 self.PatchObject(
139 binhost_service,
140 "UpdatePackageIndex",
141 return_value="/build/target/packages/Packages",
142 )
Evan Hernandezd437b4e2019-03-25 13:48:30 -0600143
Alex Klein1699fab2022-09-08 08:46:06 -0600144 self.response = binhost_pb2.PrepareBinhostUploadsResponse()
Alex Klein231d2da2019-07-22 16:44:45 -0600145
Alex Klein1699fab2022-09-08 08:46:06 -0600146 def testValidateOnly(self):
147 """Check that a validate only call does not execute any logic."""
148 patch = self.PatchObject(binhost_service, "GetPrebuiltsRoot")
Alex Klein231d2da2019-07-22 16:44:45 -0600149
Alex Klein1699fab2022-09-08 08:46:06 -0600150 request = binhost_pb2.PrepareBinhostUploadsRequest()
151 request.build_target.name = "target"
152 request.uri = "gs://chromeos-prebuilt/target"
153 rc = binhost.PrepareBinhostUploads(
154 request, self.response, self.validate_only_config
155 )
156 patch.assert_not_called()
157 self.assertEqual(rc, 0)
Alex Klein231d2da2019-07-22 16:44:45 -0600158
Alex Klein1699fab2022-09-08 08:46:06 -0600159 def testMockCall(self):
160 """Test that a mock call does not execute logic, returns mocked value."""
161 patch = self.PatchObject(binhost_service, "GetPrebuiltsRoot")
Michael Mortensen42251f92019-11-14 11:01:43 -0700162
Alex Klein1699fab2022-09-08 08:46:06 -0600163 request = binhost_pb2.PrepareBinhostUploadsRequest()
164 request.build_target.name = "target"
165 request.uri = "gs://chromeos-prebuilt/target"
166 rc = binhost.PrepareBinhostUploads(
167 request, self.response, self.mock_call_config
168 )
169 self.assertEqual(self.response.uploads_dir, "/upload/directory")
170 self.assertEqual(self.response.upload_targets[0].path, "upload_target")
171 patch.assert_not_called()
172 self.assertEqual(rc, 0)
Michael Mortensen42251f92019-11-14 11:01:43 -0700173
Alex Klein1699fab2022-09-08 08:46:06 -0600174 def testPrepareBinhostUploads(self):
175 """PrepareBinhostUploads returns Packages and tar files."""
176 input_proto = binhost_pb2.PrepareBinhostUploadsRequest()
177 input_proto.build_target.name = "target"
178 input_proto.uri = "gs://chromeos-prebuilt/target"
179 binhost.PrepareBinhostUploads(
180 input_proto, self.response, self.api_config
181 )
182 self.assertEqual(self.response.uploads_dir, "/build/target/packages")
183 self.assertCountEqual(
184 [ut.path for ut in self.response.upload_targets],
185 ["Packages", "foo.tbz2", "bar.tbz2"],
186 )
Evan Hernandezd437b4e2019-03-25 13:48:30 -0600187
Alex Klein1699fab2022-09-08 08:46:06 -0600188 def testPrepareBinhostUploadsNonGsUri(self):
189 """PrepareBinhostUploads dies when URI does not point to GS."""
190 input_proto = binhost_pb2.PrepareBinhostUploadsRequest()
191 input_proto.build_target.name = "target"
192 input_proto.uri = "https://foo.bar"
193 with self.assertRaises(ValueError):
194 binhost.PrepareBinhostUploads(
195 input_proto, self.response, self.api_config
196 )
Evan Hernandezd437b4e2019-03-25 13:48:30 -0600197
198
Alex Klein231d2da2019-07-22 16:44:45 -0600199class SetBinhostTest(cros_test_lib.MockTestCase, api_config.ApiConfigMixin):
Alex Klein1699fab2022-09-08 08:46:06 -0600200 """Unittests for SetBinhost."""
Evan Hernandezd437b4e2019-03-25 13:48:30 -0600201
Alex Klein1699fab2022-09-08 08:46:06 -0600202 def setUp(self):
203 self.response = binhost_pb2.SetBinhostResponse()
Alex Klein231d2da2019-07-22 16:44:45 -0600204
Alex Klein1699fab2022-09-08 08:46:06 -0600205 def testValidateOnly(self):
206 """Check that a validate only call does not execute any logic."""
207 patch = self.PatchObject(binhost_service, "SetBinhost")
Alex Klein231d2da2019-07-22 16:44:45 -0600208
Alex Klein1699fab2022-09-08 08:46:06 -0600209 request = binhost_pb2.SetBinhostRequest()
210 request.build_target.name = "target"
211 request.key = binhost_pb2.POSTSUBMIT_BINHOST
212 request.uri = "gs://chromeos-prebuilt/target"
213 binhost.SetBinhost(request, self.response, self.validate_only_config)
214 patch.assert_not_called()
Alex Klein231d2da2019-07-22 16:44:45 -0600215
Alex Klein1699fab2022-09-08 08:46:06 -0600216 def testMockCall(self):
217 """Test that a mock call does not execute logic, returns mocked value."""
218 patch = self.PatchObject(binhost_service, "SetBinhost")
Michael Mortensen42251f92019-11-14 11:01:43 -0700219
Alex Klein1699fab2022-09-08 08:46:06 -0600220 request = binhost_pb2.SetBinhostRequest()
221 request.build_target.name = "target"
222 request.key = binhost_pb2.POSTSUBMIT_BINHOST
223 request.uri = "gs://chromeos-prebuilt/target"
224 binhost.SetBinhost(request, self.response, self.mock_call_config)
225 patch.assert_not_called()
226 self.assertEqual(self.response.output_file, "/path/to/BINHOST.conf")
Michael Mortensen42251f92019-11-14 11:01:43 -0700227
Alex Klein1699fab2022-09-08 08:46:06 -0600228 def testSetBinhost(self):
229 """SetBinhost calls service with correct args."""
230 set_binhost = self.PatchObject(
231 binhost_service, "SetBinhost", return_value="/path/to/BINHOST.conf"
232 )
Evan Hernandezd437b4e2019-03-25 13:48:30 -0600233
Alex Klein1699fab2022-09-08 08:46:06 -0600234 input_proto = binhost_pb2.SetBinhostRequest()
235 input_proto.build_target.name = "target"
236 input_proto.private = True
237 input_proto.key = binhost_pb2.POSTSUBMIT_BINHOST
238 input_proto.uri = "gs://chromeos-prebuilt/target"
Evan Hernandezd437b4e2019-03-25 13:48:30 -0600239
Alex Klein1699fab2022-09-08 08:46:06 -0600240 binhost.SetBinhost(input_proto, self.response, self.api_config)
Evan Hernandezd437b4e2019-03-25 13:48:30 -0600241
Alex Klein1699fab2022-09-08 08:46:06 -0600242 self.assertEqual(self.response.output_file, "/path/to/BINHOST.conf")
243 set_binhost.assert_called_once_with(
244 "target",
245 "POSTSUBMIT_BINHOST",
246 "gs://chromeos-prebuilt/target",
247 private=True,
248 )
LaMont Jonesc64ae212019-04-15 15:41:28 -0600249
Alex Klein231d2da2019-07-22 16:44:45 -0600250
Alex Klein1699fab2022-09-08 08:46:06 -0600251class RegenBuildCacheTest(
252 cros_test_lib.MockTestCase, api_config.ApiConfigMixin
253):
254 """Unittests for RegenBuildCache."""
LaMont Jonesc64ae212019-04-15 15:41:28 -0600255
Alex Klein1699fab2022-09-08 08:46:06 -0600256 def setUp(self):
257 self.response = binhost_pb2.RegenBuildCacheResponse()
Alex Klein231d2da2019-07-22 16:44:45 -0600258
Alex Klein1699fab2022-09-08 08:46:06 -0600259 def testValidateOnly(self):
260 """Check that a validate only call does not execute any logic."""
261 patch = self.PatchObject(binhost_service, "RegenBuildCache")
Alex Klein231d2da2019-07-22 16:44:45 -0600262
Alex Klein1699fab2022-09-08 08:46:06 -0600263 request = binhost_pb2.RegenBuildCacheRequest()
264 request.overlay_type = binhost_pb2.OVERLAYTYPE_BOTH
265 binhost.RegenBuildCache(
266 request, self.response, self.validate_only_config
267 )
268 patch.assert_not_called()
Alex Klein231d2da2019-07-22 16:44:45 -0600269
Alex Klein1699fab2022-09-08 08:46:06 -0600270 def testMockCall(self):
271 """Test that a mock call does not execute logic, returns mocked value."""
272 patch = self.PatchObject(binhost_service, "RegenBuildCache")
Michael Mortensen42251f92019-11-14 11:01:43 -0700273
Alex Klein1699fab2022-09-08 08:46:06 -0600274 request = binhost_pb2.RegenBuildCacheRequest()
275 request.overlay_type = binhost_pb2.OVERLAYTYPE_BOTH
276 binhost.RegenBuildCache(request, self.response, self.mock_call_config)
277 patch.assert_not_called()
278 self.assertEqual(len(self.response.modified_overlays), 1)
279 self.assertEqual(
280 self.response.modified_overlays[0].path, "/path/to/BuildCache"
281 )
282
283 def testRegenBuildCache(self):
284 """RegenBuildCache calls service with the correct args."""
285 regen_cache = self.PatchObject(binhost_service, "RegenBuildCache")
286
287 input_proto = binhost_pb2.RegenBuildCacheRequest()
288 input_proto.overlay_type = binhost_pb2.OVERLAYTYPE_BOTH
289
290 binhost.RegenBuildCache(input_proto, self.response, self.api_config)
291 regen_cache.assert_called_once_with(mock.ANY, "both")
292
293 def testRequiresOverlayType(self):
294 """RegenBuildCache dies if overlay_type not specified."""
295 regen_cache = self.PatchObject(binhost_service, "RegenBuildCache")
296
297 input_proto = binhost_pb2.RegenBuildCacheRequest()
298 input_proto.overlay_type = binhost_pb2.OVERLAYTYPE_UNSPECIFIED
299
300 with self.assertRaises(cros_build_lib.DieSystemExit):
301 binhost.RegenBuildCache(input_proto, self.response, self.api_config)
302 regen_cache.assert_not_called()
Michael Mortensen42251f92019-11-14 11:01:43 -0700303
304
Alex Klein1699fab2022-09-08 08:46:06 -0600305class PrepareDevInstallerBinhostUploadsTest(
306 cros_test_lib.MockTempDirTestCase, api_config.ApiConfigMixin
307):
308 """Tests for the UploadDevInstallerPrebuilts stage."""
LaMont Jonesc64ae212019-04-15 15:41:28 -0600309
Alex Klein1699fab2022-09-08 08:46:06 -0600310 def setUp(self):
311 self.PatchObject(cros_build_lib, "IsInsideChroot", return_value=False)
312 # target packages dir
313 self.chroot_path = os.path.join(self.tempdir, "chroot")
314 self.sysroot_path = "/build/target"
315 self.chroot_path = os.path.join(self.tempdir, "chroot")
316 full_sysroot_path = os.path.join(
317 self.chroot_path, self.sysroot_path.lstrip(os.sep)
318 )
319 self.full_sysroot_package_path = os.path.join(
320 full_sysroot_path, "packages"
321 )
322 osutils.SafeMakedirs(self.full_sysroot_package_path)
323 self.uploads_dir = os.path.join(self.tempdir, "uploads_dir")
324 osutils.SafeMakedirs(self.uploads_dir)
325 # Create packages/Packages file
326 packages_file = os.path.join(self.full_sysroot_package_path, "Packages")
327 packages_content = """\
Michael Mortensenfc823882019-08-27 14:38:07 -0600328USE: test
329
330CPV: app-arch/brotli-1.0.6
331
332CPV: app-arch/zip-3.0-r3
333
334CPV: chromeos-base/shill-0.0.1-r1
335
336CPV: chromeos-base/test-0.0.1-r1
337
338CPV: virtual/chromium-os-printing-1-r4
339
340CPV: virtual/python-enum34-1
341
342"""
Alex Klein1699fab2022-09-08 08:46:06 -0600343 osutils.WriteFile(packages_file, packages_content)
Michael Mortensenfc823882019-08-27 14:38:07 -0600344
Alex Klein1699fab2022-09-08 08:46:06 -0600345 # Create package.installable file
346 self.dev_install_packages = [
347 "app-arch/zip-3.0-r3",
348 "virtual/chromium-os-printing-1-r4",
349 "virtual/python-enum34-1",
350 ]
351 package_installable_dir = os.path.join(
352 full_sysroot_path, "build/dev-install"
353 )
354 osutils.SafeMakedirs(package_installable_dir)
355 package_installable_filename = os.path.join(
356 package_installable_dir, "package.installable"
357 )
Michael Mortensenfc823882019-08-27 14:38:07 -0600358
Alex Klein1699fab2022-09-08 08:46:06 -0600359 # Create path to the dev_install_packages
360 packages_dir = os.path.join(full_sysroot_path, "packages")
361 osutils.SafeMakedirs(packages_dir)
362 for package in self.dev_install_packages:
363 # Since a package has a category, such as app-arch/zip-3.0-r3, we need
364 # to create the packages_dir / category dir as needed.
365 category = package.split(os.sep)[0]
366 osutils.SafeMakedirs(os.path.join(packages_dir, category))
367 package_tbz2_file = os.path.join(packages_dir, package) + ".tbz2"
368 osutils.Touch(package_tbz2_file)
369 with open(
370 package_installable_filename, "w"
371 ) as package_installable_file:
372 for package in self.dev_install_packages:
373 package_installable_file.write(package + "\n")
374 self.response = binhost_pb2.PrepareDevInstallBinhostUploadsResponse()
Michael Mortensenfc823882019-08-27 14:38:07 -0600375
Alex Klein1699fab2022-09-08 08:46:06 -0600376 def testValidateOnly(self):
377 """Check that a validate only call does not execute any logic."""
378 patch = self.PatchObject(
379 binhost_service, "ReadDevInstallFilesToCreatePackageIndex"
380 )
Michael Mortensenfc823882019-08-27 14:38:07 -0600381
Alex Klein1699fab2022-09-08 08:46:06 -0600382 input_proto = binhost_pb2.PrepareDevInstallBinhostUploadsRequest()
383 input_proto.uri = "gs://chromeos-prebuilt/target"
384 input_proto.chroot.path = self.chroot_path
385 input_proto.sysroot.path = self.sysroot_path
386 input_proto.uploads_dir = self.uploads_dir
387 binhost.PrepareDevInstallBinhostUploads(
388 input_proto, self.response, self.validate_only_config
389 )
390 patch.assert_not_called()
Michael Mortensen42251f92019-11-14 11:01:43 -0700391
Alex Klein1699fab2022-09-08 08:46:06 -0600392 def testMockCall(self):
393 """Test that a mock call does not execute logic, returns mocked value."""
394 patch = self.PatchObject(
395 binhost_service, "ReadDevInstallFilesToCreatePackageIndex"
396 )
Michael Mortensen42251f92019-11-14 11:01:43 -0700397
Alex Klein1699fab2022-09-08 08:46:06 -0600398 input_proto = binhost_pb2.PrepareDevInstallBinhostUploadsRequest()
399 input_proto.uri = "gs://chromeos-prebuilt/target"
400 input_proto.chroot.path = self.chroot_path
401 input_proto.sysroot.path = self.sysroot_path
402 input_proto.uploads_dir = self.uploads_dir
403 binhost.PrepareDevInstallBinhostUploads(
404 input_proto, self.response, self.mock_call_config
405 )
406 self.assertEqual(len(self.response.upload_targets), 3)
407 self.assertEqual(self.response.upload_targets[2].path, "Packages")
408 patch.assert_not_called()
Michael Mortensen42251f92019-11-14 11:01:43 -0700409
Alex Klein1699fab2022-09-08 08:46:06 -0600410 def testDevInstallerUpload(self):
411 """Test uploads of dev installer prebuilts."""
412 # self.RunStage()
413 input_proto = binhost_pb2.PrepareDevInstallBinhostUploadsRequest()
414 input_proto.uri = "gs://chromeos-prebuilt/target"
415 input_proto.chroot.path = self.chroot_path
416 input_proto.sysroot.path = self.sysroot_path
417 input_proto.uploads_dir = self.uploads_dir
418 # Call method under test
419 binhost.PrepareDevInstallBinhostUploads(
420 input_proto, self.response, self.api_config
421 )
422 # Verify results
423 expected_upload_targets = [
424 "app-arch/zip-3.0-r3.tbz2",
425 "virtual/chromium-os-printing-1-r4.tbz2",
426 "virtual/python-enum34-1.tbz2",
427 "Packages",
428 ]
429 self.assertCountEqual(
430 [ut.path for ut in self.response.upload_targets],
431 expected_upload_targets,
432 )
433 # All of the upload_targets should also be in the uploads_directory
434 for target in self.response.upload_targets:
435 self.assertExists(
436 os.path.join(input_proto.uploads_dir, target.path)
437 )
Michael Mortensen42251f92019-11-14 11:01:43 -0700438
Alex Klein1699fab2022-09-08 08:46:06 -0600439 def testPrepareBinhostUploadsNonGsUri(self):
440 """PrepareBinhostUploads dies when URI does not point to GS."""
441 input_proto = binhost_pb2.PrepareDevInstallBinhostUploadsRequest()
442 input_proto.chroot.path = self.chroot_path
443 input_proto.sysroot.path = self.sysroot_path
444 input_proto.uploads_dir = self.uploads_dir
445 input_proto.uri = "https://foo.bar"
446 with self.assertRaises(ValueError):
447 binhost.PrepareDevInstallBinhostUploads(
448 input_proto, self.response, self.api_config
449 )