blob: 4049f6a32e389f9de6a6fca49e4c56b54bc8673f [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
12from chromite.api.controller import packages as packages_controller
13from chromite.api.gen.chromite.api import binhost_pb2
14from chromite.api.gen.chromite.api import packages_pb2
15from chromite.lib import constants
16from chromite.lib import cros_build_lib
17from chromite.lib import cros_test_lib
David Burger1e0fe232019-07-01 14:52:07 -060018from chromite.lib import portage_util
Alex Kleineb77ffa2019-05-28 14:47:44 -060019from chromite.service import packages as packages_service
20
21
22class UprevTest(cros_test_lib.MockTestCase):
23 """Uprev tests."""
24
25 _PUBLIC = binhost_pb2.OVERLAYTYPE_PUBLIC
26 _PRIVATE = binhost_pb2.OVERLAYTYPE_PRIVATE
27 _BOTH = binhost_pb2.OVERLAYTYPE_BOTH
28 _NONE = binhost_pb2.OVERLAYTYPE_NONE
29
30 def setUp(self):
31 self.uprev_patch = self.PatchObject(packages_service, 'uprev_build_targets')
32
33 def _GetRequest(self, targets=None, overlay_type=None, output_dir=None):
34 return packages_pb2.UprevPackagesRequest(
35 build_targets=[{'name': name} for name in targets or []],
36 overlay_type=overlay_type,
37 output_dir=output_dir,
38 )
39
40 def _GetResponse(self):
41 return packages_pb2.UprevPackagesResponse()
42
43 def testNoOverlayTypeFails(self):
44 """No overlay type provided should fail."""
45 request = self._GetRequest(targets=['foo'])
46 response = self._GetResponse()
47
48 with self.assertRaises(cros_build_lib.DieSystemExit):
49 packages_controller.Uprev(request, response)
50
51 def testOverlayTypeNoneFails(self):
52 """Overlay type none means nothing here and should fail."""
53 request = self._GetRequest(targets=['foo'], overlay_type=self._NONE)
54 response = self._GetResponse()
55
56 with self.assertRaises(cros_build_lib.DieSystemExit):
57 packages_controller.Uprev(request, response)
58
59 def testSuccess(self):
60 """Test overall successful argument handling."""
61 targets = ['foo', 'bar']
62 output_dir = '/tmp/uprev_output_dir'
63 expected_type = constants.BOTH_OVERLAYS
64 request = self._GetRequest(targets=targets, overlay_type=self._BOTH,
65 output_dir=output_dir)
66 response = self._GetResponse()
67 uprev_patch = self.PatchObject(packages_service, 'uprev_build_targets')
68
69 packages_controller.Uprev(request, response)
70
71 # Make sure the type is right, verify build targets after.
72 uprev_patch.assert_called_once_with(mock.ANY, expected_type, mock.ANY,
73 output_dir)
74 # First argument (build targets) of the first (only) call.
75 call_targets = uprev_patch.call_args[0][0]
76 self.assertItemsEqual(targets, [t.name for t in call_targets])
David Burger1e0fe232019-07-01 14:52:07 -060077
78
79class GetBestVisibleTest(cros_test_lib.MockTestCase):
80 """GetBestVisible tests."""
81
82 def _GetRequest(self, atom=None):
83 return packages_pb2.GetBestVisibleRequest(
84 atom=atom,
85 )
86
87 def _GetResponse(self):
88 return packages_pb2.GetBestVisibleResponse()
89
90 def _MakeCpv(self, category, package, version):
91 unused = {
92 'cp': None,
93 'cpv': None,
94 'cpf': None,
95 'pv': None,
96 'version_no_rev': None,
97 'rev': None,
98 }
99 return portage_util.CPV(
100 category=category,
101 package=package,
102 version=version,
103 **unused
104 )
105
106 def testNoAtomFails(self):
107 """No atom provided should fail."""
108 request = self._GetRequest()
109 response = self._GetResponse()
110
111 with self.assertRaises(cros_build_lib.DieSystemExit):
112 packages_controller.GetBestVisible(request, response)
113
114 def testSuccess(self):
115 """Test overall success, argument handling, result forwarding."""
116 cpv = self._MakeCpv('category', 'package', 'version')
117 self.PatchObject(packages_service, 'get_best_visible', return_value=cpv)
118
119 request = self._GetRequest(atom='chromeos-chrome')
120 response = self._GetResponse()
121
122 packages_controller.GetBestVisible(request, response)
123
124 package_info = response.package_info
125 self.assertEqual(package_info.category, cpv.category)
126 self.assertEqual(package_info.package_name, cpv.package)
127 self.assertEqual(package_info.version, cpv.version)