blob: fc71c60936be9b43e67f95e957ba5bc6b6c683b8 [file] [log] [blame]
Alex Kleineb77ffa2019-05-28 14:47:44 -06001# -*- coding: utf-8 -*-
2# Copyright 2019 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"""packages controller unit tests."""
7
8from __future__ import print_function
9
10import mock
11
Alex Kleinda39c6d2019-09-16 14:36:36 -060012from chromite.api.api_config import ApiConfigMixin
David Burger0f9dd4e2019-10-08 12:33:42 -060013from chromite.api.controller import controller_util
Alex Kleineb77ffa2019-05-28 14:47:44 -060014from chromite.api.controller import packages as packages_controller
David Burger0f9dd4e2019-10-08 12:33:42 -060015from chromite.api.gen.chromiumos import common_pb2
Alex Kleineb77ffa2019-05-28 14:47:44 -060016from chromite.api.gen.chromite.api import binhost_pb2
17from chromite.api.gen.chromite.api import packages_pb2
18from chromite.lib import constants
19from chromite.lib import cros_build_lib
20from chromite.lib import cros_test_lib
David Burger1e0fe232019-07-01 14:52:07 -060021from chromite.lib import portage_util
Alex Kleine65131f2019-10-03 10:34:01 -060022from chromite.lib.build_target_util import BuildTarget
Alex Kleineb77ffa2019-05-28 14:47:44 -060023from chromite.service import packages as packages_service
24
25
Alex Kleinda39c6d2019-09-16 14:36:36 -060026class UprevTest(cros_test_lib.MockTestCase, ApiConfigMixin):
Alex Kleineb77ffa2019-05-28 14:47:44 -060027 """Uprev tests."""
28
29 _PUBLIC = binhost_pb2.OVERLAYTYPE_PUBLIC
30 _PRIVATE = binhost_pb2.OVERLAYTYPE_PRIVATE
31 _BOTH = binhost_pb2.OVERLAYTYPE_BOTH
32 _NONE = binhost_pb2.OVERLAYTYPE_NONE
33
34 def setUp(self):
35 self.uprev_patch = self.PatchObject(packages_service, 'uprev_build_targets')
Alex Klein231d2da2019-07-22 16:44:45 -060036 self.response = packages_pb2.UprevPackagesResponse()
Alex Kleineb77ffa2019-05-28 14:47:44 -060037
38 def _GetRequest(self, targets=None, overlay_type=None, output_dir=None):
39 return packages_pb2.UprevPackagesRequest(
40 build_targets=[{'name': name} for name in targets or []],
41 overlay_type=overlay_type,
42 output_dir=output_dir,
43 )
44
Alex Klein231d2da2019-07-22 16:44:45 -060045 def testValidateOnly(self):
46 """Sanity check that a validate only call does not execute any logic."""
47 patch = self.PatchObject(packages_service, 'uprev_build_targets')
48
49 targets = ['foo', 'bar']
50 request = self._GetRequest(targets=targets, overlay_type=self._BOTH)
51 packages_controller.Uprev(request, self.response, self.validate_only_config)
52 patch.assert_not_called()
Alex Kleineb77ffa2019-05-28 14:47:44 -060053
Michael Mortensen2677bf62019-10-29 08:31:25 -060054 def testMockCall(self):
55 """Test that a mock call does not execute logic, returns mocked value."""
56 patch = self.PatchObject(packages_service, 'uprev_build_targets')
57 targets = ['foo', 'bar']
58 request = self._GetRequest(targets=targets, overlay_type=self._BOTH)
59 packages_controller.Uprev(request, self.response, self.mock_call_config)
60 patch.assert_not_called()
61 self.assertTrue(self.response.modified_ebuilds)
62
Alex Kleineb77ffa2019-05-28 14:47:44 -060063 def testNoOverlayTypeFails(self):
64 """No overlay type provided should fail."""
65 request = self._GetRequest(targets=['foo'])
Alex Kleineb77ffa2019-05-28 14:47:44 -060066
67 with self.assertRaises(cros_build_lib.DieSystemExit):
Alex Klein231d2da2019-07-22 16:44:45 -060068 packages_controller.Uprev(request, self.response, self.api_config)
Alex Kleineb77ffa2019-05-28 14:47:44 -060069
70 def testOverlayTypeNoneFails(self):
71 """Overlay type none means nothing here and should fail."""
72 request = self._GetRequest(targets=['foo'], overlay_type=self._NONE)
Alex Kleineb77ffa2019-05-28 14:47:44 -060073
74 with self.assertRaises(cros_build_lib.DieSystemExit):
Alex Klein231d2da2019-07-22 16:44:45 -060075 packages_controller.Uprev(request, self.response, self.api_config)
Alex Kleineb77ffa2019-05-28 14:47:44 -060076
77 def testSuccess(self):
78 """Test overall successful argument handling."""
79 targets = ['foo', 'bar']
80 output_dir = '/tmp/uprev_output_dir'
Alex Klein5dd6b1e2019-07-31 15:45:24 -060081 changed = ['/ebuild-1.0-r1.ebuild', '/ebuild-1.0-r2.ebuild']
Alex Kleineb77ffa2019-05-28 14:47:44 -060082 expected_type = constants.BOTH_OVERLAYS
83 request = self._GetRequest(targets=targets, overlay_type=self._BOTH,
84 output_dir=output_dir)
Alex Klein5dd6b1e2019-07-31 15:45:24 -060085 uprev_patch = self.PatchObject(packages_service, 'uprev_build_targets',
86 return_value=changed)
Alex Kleineb77ffa2019-05-28 14:47:44 -060087
Alex Klein231d2da2019-07-22 16:44:45 -060088 packages_controller.Uprev(request, self.response, self.api_config)
Alex Kleineb77ffa2019-05-28 14:47:44 -060089
90 # Make sure the type is right, verify build targets after.
91 uprev_patch.assert_called_once_with(mock.ANY, expected_type, mock.ANY,
92 output_dir)
93 # First argument (build targets) of the first (only) call.
94 call_targets = uprev_patch.call_args[0][0]
Mike Frysinger678735c2019-09-28 18:23:28 -040095 self.assertCountEqual(targets, [t.name for t in call_targets])
David Burger1e0fe232019-07-01 14:52:07 -060096
Alex Klein231d2da2019-07-22 16:44:45 -060097 for ebuild in self.response.modified_ebuilds:
Alex Klein5dd6b1e2019-07-31 15:45:24 -060098 self.assertIn(ebuild.path, changed)
99 changed.remove(ebuild.path)
100 self.assertFalse(changed)
101
David Burger1e0fe232019-07-01 14:52:07 -0600102
Alex Kleinda39c6d2019-09-16 14:36:36 -0600103class UprevVersionedPackageTest(cros_test_lib.MockTestCase, ApiConfigMixin):
Alex Klein87531182019-08-12 15:23:37 -0600104 """UprevVersionedPackage tests."""
105
106 def setUp(self):
Yaakov Shaul730814a2019-09-10 13:58:25 -0600107 self.response = packages_pb2.UprevVersionedPackageResponse()
Alex Klein87531182019-08-12 15:23:37 -0600108
109 def _addVersion(self, request, version):
110 """Helper method to add a full version message to the request."""
111 ref = request.versions.add()
112 ref.repository = '/some/path'
Alex Klein34afcbc2019-08-22 16:14:31 -0600113 ref.ref = 'refs/tags/%s' % version
Alex Klein87531182019-08-12 15:23:37 -0600114 ref.revision = 'abc123'
115
116 def testValidateOnly(self):
117 """Sanity check validate only calls are working properly."""
118 service = self.PatchObject(packages_service, 'uprev_versioned_package')
119
120 request = packages_pb2.UprevVersionedPackageRequest()
121 self._addVersion(request, '1.2.3.4')
122 request.package_info.category = 'chromeos-base'
123 request.package_info.package_name = 'chromeos-chrome'
124
125 packages_controller.UprevVersionedPackage(request, self.response,
126 self.validate_only_config)
127
128 service.assert_not_called()
129
Michael Mortensen2677bf62019-10-29 08:31:25 -0600130 def testMockCall(self):
131 """Test that a mock call does not execute logic, returns mocked value."""
132 patch = self.PatchObject(packages_service, 'uprev_versioned_package')
133 request = packages_pb2.UprevVersionedPackageRequest()
134 packages_controller.UprevVersionedPackage(request, self.response,
135 self.mock_call_config)
136 patch.assert_not_called()
137 self.assertTrue(self.response.responses)
138 self.assertTrue(self.response.responses[0].modified_ebuilds)
139
Alex Klein87531182019-08-12 15:23:37 -0600140 def testNoVersions(self):
141 """Test no versions provided."""
142 request = packages_pb2.UprevVersionedPackageRequest()
143 request.package_info.category = 'chromeos-base'
144 request.package_info.package_name = 'chromeos-chrome'
145
146 with self.assertRaises(cros_build_lib.DieSystemExit):
147 packages_controller.UprevVersionedPackage(request, self.response,
148 self.api_config)
149
150 def testNoPackageName(self):
151 """Test no package name provided."""
152 request = packages_pb2.UprevVersionedPackageRequest()
153 self._addVersion(request, '1.2.3.4')
154 request.package_info.category = 'chromeos-base'
155
156 with self.assertRaises(cros_build_lib.DieSystemExit):
157 packages_controller.UprevVersionedPackage(request, self.response,
158 self.api_config)
159
160 def testNoCategory(self):
161 """Test no package category provided."""
162 request = packages_pb2.UprevVersionedPackageRequest()
163 self._addVersion(request, '1.2.3.4')
164 request.package_info.package_name = 'chromeos-chrome'
165
166 with self.assertRaises(cros_build_lib.DieSystemExit):
167 packages_controller.UprevVersionedPackage(request, self.response,
168 self.api_config)
169
170 def testOutputHandling(self):
171 """Test the modified files are getting correctly added to the output."""
Alex Klein34afcbc2019-08-22 16:14:31 -0600172 version = '1.2.3.4'
Yaakov Shaul730814a2019-09-10 13:58:25 -0600173 result = packages_service.UprevVersionedPackageResult().add_result(
Alex Klein34afcbc2019-08-22 16:14:31 -0600174 version, ['/file/one', '/file/two'])
Yaakov Shaul730814a2019-09-10 13:58:25 -0600175
Alex Klein34afcbc2019-08-22 16:14:31 -0600176 self.PatchObject(
177 packages_service, 'uprev_versioned_package', return_value=result)
Alex Klein87531182019-08-12 15:23:37 -0600178
179 request = packages_pb2.UprevVersionedPackageRequest()
Alex Klein34afcbc2019-08-22 16:14:31 -0600180 self._addVersion(request, version)
Alex Klein87531182019-08-12 15:23:37 -0600181 request.package_info.category = 'chromeos-base'
182 request.package_info.package_name = 'chromeos-chrome'
183
184 packages_controller.UprevVersionedPackage(request, self.response,
185 self.api_config)
186
Yaakov Shaul730814a2019-09-10 13:58:25 -0600187 for idx, uprev_response in enumerate(self.response.responses):
188 self.assertEqual(result.modified[idx].new_version, uprev_response.version)
Mike Frysinger678735c2019-09-28 18:23:28 -0400189 self.assertCountEqual(
Yaakov Shaul730814a2019-09-10 13:58:25 -0600190 result.modified[idx].files,
191 [ebuild.path for ebuild in uprev_response.modified_ebuilds])
Alex Klein87531182019-08-12 15:23:37 -0600192
193
Alex Kleinda39c6d2019-09-16 14:36:36 -0600194class GetBestVisibleTest(cros_test_lib.MockTestCase, ApiConfigMixin):
David Burger1e0fe232019-07-01 14:52:07 -0600195 """GetBestVisible tests."""
196
Alex Klein231d2da2019-07-22 16:44:45 -0600197 def setUp(self):
198 self.response = packages_pb2.GetBestVisibleResponse()
199
David Burger1e0fe232019-07-01 14:52:07 -0600200 def _GetRequest(self, atom=None):
201 return packages_pb2.GetBestVisibleRequest(
202 atom=atom,
203 )
204
David Burger1e0fe232019-07-01 14:52:07 -0600205 def _MakeCpv(self, category, package, version):
206 unused = {
207 'cp': None,
208 'cpv': None,
209 'cpf': None,
210 'pv': None,
211 'version_no_rev': None,
212 'rev': None,
213 }
214 return portage_util.CPV(
215 category=category,
216 package=package,
217 version=version,
218 **unused
219 )
220
Alex Klein231d2da2019-07-22 16:44:45 -0600221 def testValidateOnly(self):
222 """Sanity check that a validate only call does not execute any logic."""
223 patch = self.PatchObject(packages_service, 'get_best_visible')
224
225 request = self._GetRequest(atom='chromeos-chrome')
226 packages_controller.GetBestVisible(request, self.response,
227 self.validate_only_config)
228 patch.assert_not_called()
229
Michael Mortensen2677bf62019-10-29 08:31:25 -0600230 def testMockCall(self):
231 """Test that a mock call does not execute logic, returns mocked value."""
232 patch = self.PatchObject(packages_service, 'get_best_visible')
233 request = self._GetRequest(atom='chromeos-chrome')
234 packages_controller.GetBestVisible(request, self.response,
235 self.mock_call_config)
236 patch.assert_not_called()
237 self.assertTrue(self.response.package_info)
238 self.assertTrue(self.response.package_info.category)
239 self.assertTrue(self.response.package_info.package_name)
240 self.assertTrue(self.response.package_info.version)
241
David Burger1e0fe232019-07-01 14:52:07 -0600242 def testNoAtomFails(self):
243 """No atom provided should fail."""
244 request = self._GetRequest()
David Burger1e0fe232019-07-01 14:52:07 -0600245 with self.assertRaises(cros_build_lib.DieSystemExit):
Alex Klein231d2da2019-07-22 16:44:45 -0600246 packages_controller.GetBestVisible(request, self.response,
247 self.api_config)
David Burger1e0fe232019-07-01 14:52:07 -0600248
249 def testSuccess(self):
250 """Test overall success, argument handling, result forwarding."""
251 cpv = self._MakeCpv('category', 'package', 'version')
252 self.PatchObject(packages_service, 'get_best_visible', return_value=cpv)
253
254 request = self._GetRequest(atom='chromeos-chrome')
David Burger1e0fe232019-07-01 14:52:07 -0600255
Alex Klein231d2da2019-07-22 16:44:45 -0600256 packages_controller.GetBestVisible(request, self.response, self.api_config)
David Burger1e0fe232019-07-01 14:52:07 -0600257
Alex Klein231d2da2019-07-22 16:44:45 -0600258 package_info = self.response.package_info
David Burger1e0fe232019-07-01 14:52:07 -0600259 self.assertEqual(package_info.category, cpv.category)
260 self.assertEqual(package_info.package_name, cpv.package)
261 self.assertEqual(package_info.version, cpv.version)
Alex Kleinda39c6d2019-09-16 14:36:36 -0600262
263
Michael Mortensen68abdb72019-10-28 09:43:52 -0600264class GetChromeVersion(cros_test_lib.MockTestCase, ApiConfigMixin):
265 """GetChromeVersion tests."""
266
267 def setUp(self):
268 self.response = packages_pb2.GetChromeVersionResponse()
269
270 def _GetRequest(self, board=None):
271 """Helper to build out a request."""
272 request = packages_pb2.GetChromeVersionRequest()
273
274 if board:
275 request.build_target.name = board
276
277 return request
278
279 def testValidateOnly(self):
280 """Sanity check that a validate only call does not execute any logic."""
281 chrome_version = self.PatchObject(packages_service,
282 'determine_chrome_version')
283 request = self._GetRequest(board='betty')
284 packages_controller.GetChromeVersion(request, self.response,
285 self.validate_only_config)
286 chrome_version.assert_not_called()
287
288 def testMockCall(self):
289 """Test that a mock call does not execute logic, returns mocked value."""
290 chrome_version = self.PatchObject(packages_service,
291 'determine_chrome_version')
292 request = self._GetRequest(board='betty')
293 packages_controller.GetChromeVersion(request, self.response,
294 self.mock_call_config)
295 chrome_version.assert_not_called()
296 self.assertTrue(self.response.version)
297
298 def testGetChromeVersion(self):
299 """Verify basic return values."""
300 chrome_version = '76.0.1.2'
301 self.PatchObject(packages_service, 'determine_chrome_version',
302 return_value=chrome_version)
303 request = self._GetRequest(board='betty')
304 packages_controller.GetChromeVersion(request, self.response,
305 self.api_config)
306 self.assertEqual(self.response.version, chrome_version)
307
Michael Mortensen9fe740c2019-10-29 14:42:48 -0600308 def testGetChromeVersionHandleNone(self):
309 """Verify basic return values."""
310 self.PatchObject(packages_service, 'determine_chrome_version',
311 return_value=None)
312 request = self._GetRequest(board='betty')
313 packages_controller.GetChromeVersion(request, self.response,
314 self.api_config)
315 self.assertFalse(self.response.version)
316
Michael Mortensen68abdb72019-10-28 09:43:52 -0600317
Michael Mortensenb70e8a82019-10-10 18:43:41 -0600318class GetTargetVersionsTest(cros_test_lib.MockTestCase, ApiConfigMixin):
319 """GetTargetVersions tests."""
320
321 def setUp(self):
322 self.response = packages_pb2.GetTargetVersionsResponse()
323
324 def _GetRequest(self, board=None):
325 """Helper to build out a request."""
326 request = packages_pb2.GetTargetVersionsRequest()
327
328 if board:
329 request.build_target.name = board
330
331 return request
332
333 def testValidateOnly(self):
334 """Sanity check that a validate only call does not execute any logic."""
Michael Mortensen1d2ab0d2019-10-17 13:19:25 -0600335 builds_chrome = self.PatchObject(
336 packages_service, 'builds', return_value=True)
Michael Mortensenb70e8a82019-10-10 18:43:41 -0600337 patch_version = self.PatchObject(packages_service,
338 'determine_android_version')
339 patch_branch_version = self.PatchObject(packages_service,
340 'determine_android_branch')
341 patch_target_version = self.PatchObject(packages_service,
342 'determine_android_target')
Michael Mortensenc2615b72019-10-15 08:12:24 -0600343 chrome_version = self.PatchObject(packages_service,
344 'determine_chrome_version')
Michael Mortensen009cb662019-10-21 11:38:43 -0600345 platform_version = self.PatchObject(packages_service,
346 'determine_platform_version')
347 milestone_version = self.PatchObject(packages_service,
348 'determine_milestone_version')
349 full_version = self.PatchObject(packages_service,
350 'determine_full_version')
Michael Mortensenb70e8a82019-10-10 18:43:41 -0600351
352 request = self._GetRequest(board='betty')
353 packages_controller.GetTargetVersions(request, self.response,
354 self.validate_only_config)
355 patch_version.assert_not_called()
356 patch_branch_version.assert_not_called()
357 patch_target_version.assert_not_called()
Michael Mortensen1d2ab0d2019-10-17 13:19:25 -0600358 builds_chrome.assert_not_called()
Michael Mortensenc2615b72019-10-15 08:12:24 -0600359 chrome_version.assert_not_called()
Michael Mortensen009cb662019-10-21 11:38:43 -0600360 platform_version.assert_not_called()
361 milestone_version.assert_not_called()
362 full_version.assert_not_called()
Michael Mortensenb70e8a82019-10-10 18:43:41 -0600363
Michael Mortensen2677bf62019-10-29 08:31:25 -0600364 def testMockCall(self):
365 """Test that a mock call does not execute logic, returns mocked value."""
366 builds_chrome = self.PatchObject(
367 packages_service, 'builds', return_value=True)
368 patch_version = self.PatchObject(packages_service,
369 'determine_android_version')
370 patch_branch_version = self.PatchObject(packages_service,
371 'determine_android_branch')
372 patch_target_version = self.PatchObject(packages_service,
373 'determine_android_target')
374 chrome_version = self.PatchObject(packages_service,
375 'determine_chrome_version')
376 platform_version = self.PatchObject(packages_service,
377 'determine_platform_version')
378 milestone_version = self.PatchObject(packages_service,
379 'determine_milestone_version')
380 full_version = self.PatchObject(packages_service,
381 'determine_full_version')
382
383 request = self._GetRequest(board='betty')
384 packages_controller.GetTargetVersions(request, self.response,
385 self.mock_call_config)
386
387 patch_version.assert_not_called()
388 patch_branch_version.assert_not_called()
389 patch_target_version.assert_not_called()
390 builds_chrome.assert_not_called()
391 chrome_version.assert_not_called()
392 platform_version.assert_not_called()
393 milestone_version.assert_not_called()
394 full_version.assert_not_called()
395
396 self.assertTrue(self.response.android_version)
397 self.assertTrue(self.response.android_branch_version)
398 self.assertTrue(self.response.android_target_version)
399 self.assertTrue(self.response.chrome_version)
400 self.assertTrue(self.response.platform_version)
401 self.assertTrue(self.response.milestone_version)
402 self.assertTrue(self.response.full_version)
403
Michael Mortensenb70e8a82019-10-10 18:43:41 -0600404 def testNoBuildTargetFails(self):
405 """No build target argument should fail."""
406 request = self._GetRequest()
407
408 with self.assertRaises(cros_build_lib.DieSystemExit):
409 packages_controller.GetTargetVersions(request, self.response,
410 self.api_config)
411
Michael Mortensenc2615b72019-10-15 08:12:24 -0600412 def testGetTargetVersions(self):
413 """Verify basic return values."""
Michael Mortensen1d2ab0d2019-10-17 13:19:25 -0600414 # Mock that chrome is built and set the chrome_version.
415 self.PatchObject(packages_service, 'builds', return_value=True)
Michael Mortensenc2615b72019-10-15 08:12:24 -0600416 chrome_version = '76.0.1.2'
417 self.PatchObject(packages_service, 'determine_chrome_version',
418 return_value=chrome_version)
419 android_version = 'android_test_version'
420 self.PatchObject(packages_service, 'determine_android_version',
421 return_value=android_version)
422 android_branch = 'android_test_branch'
423 self.PatchObject(packages_service, 'determine_android_branch',
424 return_value=android_branch)
425 android_target = 'android_test_target'
426 self.PatchObject(packages_service, 'determine_android_target',
427 return_value=android_target)
Michael Mortensen9fdb14b2019-10-17 11:17:30 -0600428 platform_version = '12345.1.2'
429 self.PatchObject(packages_service, 'determine_platform_version',
430 return_value=platform_version)
Michael Mortensen009cb662019-10-21 11:38:43 -0600431 milestone_version = '79'
432 self.PatchObject(packages_service, 'determine_milestone_version',
433 return_value=milestone_version)
434 full_version = 'R79-12345.1.2'
435 self.PatchObject(packages_service, 'determine_full_version',
436 return_value=full_version)
Michael Mortensenc2615b72019-10-15 08:12:24 -0600437 request = self._GetRequest(board='betty')
438 packages_controller.GetTargetVersions(request, self.response,
439 self.api_config)
440 self.assertEqual(self.response.android_version, android_version)
441 self.assertEqual(self.response.android_branch_version, android_branch)
442 self.assertEqual(self.response.android_target_version, android_target)
443 self.assertEqual(self.response.chrome_version, chrome_version)
Michael Mortensen9fdb14b2019-10-17 11:17:30 -0600444 self.assertEqual(self.response.platform_version, platform_version)
Michael Mortensen009cb662019-10-21 11:38:43 -0600445 self.assertEqual(self.response.milestone_version, milestone_version)
446 self.assertEqual(self.response.full_version, full_version)
Michael Mortensenc2615b72019-10-15 08:12:24 -0600447
Michael Mortensen1d2ab0d2019-10-17 13:19:25 -0600448 def testGetTargetVersionNoAndroidNoChrome(self):
Michael Mortensenedf76532019-10-16 14:22:37 -0600449 """Verify return values on a board that does not have android."""
Michael Mortensen9fdb14b2019-10-17 11:17:30 -0600450 platform_version = '12345.1.2'
451 self.PatchObject(packages_service, 'determine_platform_version',
452 return_value=platform_version)
Michael Mortensen1d2ab0d2019-10-17 13:19:25 -0600453 self.PatchObject(packages_service, 'builds', return_value=False)
Michael Mortensenedf76532019-10-16 14:22:37 -0600454 self.PatchObject(packages_service, 'determine_android_version',
455 return_value=None)
456 self.PatchObject(packages_service, 'determine_android_branch',
457 return_value=None)
458 self.PatchObject(packages_service, 'determine_android_target',
459 return_value=None)
460 request = self._GetRequest(board='betty')
461 packages_controller.GetTargetVersions(request, self.response,
462 self.api_config)
Michael Mortensen1d2ab0d2019-10-17 13:19:25 -0600463 self.assertFalse(self.response.chrome_version)
Michael Mortensenedf76532019-10-16 14:22:37 -0600464 self.assertFalse(self.response.android_version)
465 self.assertFalse(self.response.android_branch_version)
466 self.assertFalse(self.response.android_target_version)
Michael Mortensen9fdb14b2019-10-17 11:17:30 -0600467 self.assertEqual(self.response.platform_version, platform_version)
Michael Mortensenb70e8a82019-10-10 18:43:41 -0600468
Alex Kleinda39c6d2019-09-16 14:36:36 -0600469class HasChromePrebuiltTest(cros_test_lib.MockTestCase, ApiConfigMixin):
470 """HasChromePrebuilt tests."""
471
472 def setUp(self):
473 self.response = packages_pb2.HasChromePrebuiltResponse()
474
475 def _GetRequest(self, board=None):
476 """Helper to build out a request."""
477 request = packages_pb2.HasChromePrebuiltRequest()
478
479 if board:
480 request.build_target.name = board
481
482 return request
483
484 def testValidateOnly(self):
485 """Sanity check that a validate only call does not execute any logic."""
486 patch = self.PatchObject(packages_service, 'has_prebuilt')
487
488 request = self._GetRequest(board='betty')
489 packages_controller.HasChromePrebuilt(request, self.response,
490 self.validate_only_config)
491 patch.assert_not_called()
492
Michael Mortensen3232ab32020-01-05 19:14:36 -0700493 def testMockCall(self):
494 """Test that a mock call does not execute logic, returns mocked value."""
495 patch = self.PatchObject(packages_service, 'has_prebuilt')
496
497 request = self._GetRequest(board='betty')
498 packages_controller.HasChromePrebuilt(request, self.response,
499 self.mock_call_config)
500 patch.assert_not_called()
501 self.assertTrue(self.response.has_prebuilt)
502
Alex Kleinda39c6d2019-09-16 14:36:36 -0600503 def testNoBuildTargetFails(self):
504 """No build target argument should fail."""
505 request = self._GetRequest()
506
507 with self.assertRaises(cros_build_lib.DieSystemExit):
508 packages_controller.HasChromePrebuilt(request, self.response,
509 self.api_config)
Alex Klein73fb6572019-09-30 16:55:23 -0600510
511
512class BuildsChromeTest(cros_test_lib.MockTestCase, ApiConfigMixin):
513 """BuildsChrome tests."""
514
515 def setUp(self):
516 self.response = packages_pb2.BuildsChromeResponse()
517
David Burger0f9dd4e2019-10-08 12:33:42 -0600518 def _GetRequest(self, board=None, packages=None):
Alex Klein73fb6572019-09-30 16:55:23 -0600519 """Helper to build out a request."""
520 request = packages_pb2.BuildsChromeRequest()
521
522 if board:
523 request.build_target.name = board
524
David Burger0f9dd4e2019-10-08 12:33:42 -0600525 if packages:
526 request.packages.extend(packages)
527
Alex Klein73fb6572019-09-30 16:55:23 -0600528 return request
529
530 def testValidateOnly(self):
531 """Sanity check that a validate only call does not execute any logic."""
Alex Kleine65131f2019-10-03 10:34:01 -0600532 patch = self.PatchObject(packages_service, 'builds')
Alex Klein73fb6572019-09-30 16:55:23 -0600533
534 request = self._GetRequest(board='betty')
535 packages_controller.BuildsChrome(request, self.response,
536 self.validate_only_config)
537 patch.assert_not_called()
538
539 def testNoBuildTargetFails(self):
540 """No build target argument should fail."""
541 request = self._GetRequest()
542
543 with self.assertRaises(cros_build_lib.DieSystemExit):
544 packages_controller.BuildsChrome(request, self.response, self.api_config)
Alex Kleine65131f2019-10-03 10:34:01 -0600545
546 def testBuilds(self):
547 """Test successful call handling."""
548 patch = self.PatchObject(packages_service, 'builds', return_value=True)
549
550 request = self._GetRequest(board='foo')
551 packages_controller.BuildsChrome(request, self.response, self.api_config)
552 self.assertTrue(self.response.builds_chrome)
David Burger0f9dd4e2019-10-08 12:33:42 -0600553 patch.assert_called_once_with(constants.CHROME_CP, BuildTarget('foo'), [])
554
555 def testBuildsChromeWithPackages(self):
556 """Test successful call with packages handling."""
557 patch = self.PatchObject(packages_service, 'builds', return_value=True)
558
559 package = common_pb2.PackageInfo(
560 category='category',
561 package_name='name',
562 version='1.01',
563 )
564 request = self._GetRequest(board='foo', packages=[package])
565 packages_controller.BuildsChrome(request, self.response, self.api_config)
566 self.assertTrue(self.response.builds_chrome)
567 patch.assert_called_once_with(constants.CHROME_CP, BuildTarget('foo'),
568 [controller_util.PackageInfoToCPV(package)])