blob: 6b9ad9b9955b282ea935930db62be092933412a4 [file] [log] [blame]
Alex Kleina9d500b2019-04-22 15:37:51 -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"""controller_util unittests."""
7
8from __future__ import print_function
9
10from chromite.api.controller import controller_util
11from chromite.api.gen.chromiumos import common_pb2
12from chromite.lib import cros_test_lib
13from chromite.lib import portage_util
14
15
16class CPVToPackageInfoTest(cros_test_lib.TestCase):
17 """CPVToPackageInfo tests."""
18
19 def testAllFields(self):
20 pi = common_pb2.PackageInfo()
21 cpv = portage_util.SplitCPV('cat/pkg-2.0.0', strict=False)
22
23 controller_util.CPVToPackageInfo(cpv, pi)
24 self.assertEqual('cat', pi.category)
25 self.assertEqual('pkg', pi.package_name)
26 self.assertEqual('2.0.0', pi.version)
27
28 def testNoVersion(self):
29 pi = common_pb2.PackageInfo()
30 cpv = portage_util.SplitCPV('cat/pkg', strict=False)
31
32 controller_util.CPVToPackageInfo(cpv, pi)
33 self.assertEqual('cat', pi.category)
34 self.assertEqual('pkg', pi.package_name)
35 self.assertEqual('', pi.version)
36
37 def testPackageOnly(self):
38 pi = common_pb2.PackageInfo()
39 cpv = portage_util.SplitCPV('pkg', strict=False)
40
41 controller_util.CPVToPackageInfo(cpv, pi)
42 self.assertEqual('', pi.category)
43 self.assertEqual('pkg', pi.package_name)
44 self.assertEqual('', pi.version)
45
46
47class PackageInfoToCPVTest(cros_test_lib.TestCase):
48 """PackageInfoToCPV tests."""
49
50 def testAllFields(self):
51 """Quick sanity check it's working properly."""
52 pi = common_pb2.PackageInfo()
53 pi.package_name = 'pkg'
54 pi.category = 'cat'
55 pi.version = '2.0.0'
56
57 cpv = controller_util.PackageInfoToCPV(pi)
58
59 self.assertEqual('pkg', cpv.package)
60 self.assertEqual('cat', cpv.category)
61 self.assertEqual('2.0.0', cpv.version)
62
63 def testNoPackageInfo(self):
64 """Test no package info given."""
65 self.assertIsNone(controller_util.PackageInfoToCPV(None))
66
67 def testNoPackageName(self):
68 """Test no package name given."""
69 pi = common_pb2.PackageInfo()
70 pi.category = 'cat'
71 pi.version = '2.0.0'
72
73 self.assertIsNone(controller_util.PackageInfoToCPV(pi))
74
75
76class PackageInfoToStringTest(cros_test_lib.TestCase):
77 """PackageInfoToString tests."""
78
79 def testAllFields(self):
80 """Test all fields present."""
81 pi = common_pb2.PackageInfo()
82 pi.package_name = 'pkg'
83 pi.category = 'cat'
84 pi.version = '2.0.0'
85
86 cpv_str = controller_util.PackageInfoToString(pi)
87
88 self.assertEqual('cat/pkg-2.0.0', cpv_str)
89
90 def testNoVersion(self):
91 """Test no version provided."""
92 pi = common_pb2.PackageInfo()
93 pi.package_name = 'pkg'
94 pi.category = 'cat'
95
96 cpv_str = controller_util.PackageInfoToString(pi)
97
98 self.assertEqual('cat/pkg', cpv_str)
99
100 def testPackageOnly(self):
101 """Test no version provided."""
102 pi = common_pb2.PackageInfo()
103 pi.package_name = 'pkg'
104
105 cpv_str = controller_util.PackageInfoToString(pi)
106
107 self.assertEqual('pkg', cpv_str)
108
109 def testNoPackageName(self):
110 """Test no package name given."""
111 pi = common_pb2.PackageInfo()
112
113 with self.assertRaises(ValueError):
114 controller_util.PackageInfoToString(pi)
115
116
117class CPVToStringTest(cros_test_lib.TestCase):
118 """CPVToString tests."""
119
120 def testTranslations(self):
121 """Test standard translations used."""
122 cases = [
123 'cat/pkg-2.0.0-r1',
124 'cat/pkg-2.0.0',
125 'cat/pkg',
126 'pkg',
127 ]
128
129 for case in cases:
130 cpv = portage_util.SplitCPV(case, strict=False)
131 # We should end up with as much info as is available, so we should see
132 # the original value in each case.
133 self.assertEqual(case, controller_util.CPVToString(cpv))
134
135 def testInvalidCPV(self):
136 """Test invalid CPV object."""
137 cpv = portage_util.SplitCPV('', strict=False)
138 with self.assertRaises(ValueError):
139 controller_util.CPVToString(cpv)