Coverage for manila/tests/api/openstack/test_api_version_request.py: 100%
102 statements
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
1# Copyright 2014 IBM Corp.
2# Copyright 2015 Clinton Knight
3# All Rights Reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License. You may obtain
7# a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations
15# under the License.
17import ddt
19from manila.api.openstack import api_version_request
20from manila.api.openstack import versioned_method
21from manila import exception
22from manila import test
25@ddt.ddt
26class APIVersionRequestTests(test.TestCase):
28 def test_init(self):
30 result = api_version_request.APIVersionRequest()
32 self.assertIsNone(result._ver_major)
33 self.assertIsNone(result._ver_minor)
34 self.assertFalse(result._experimental)
36 def test_min_version(self):
38 self.assertEqual(
39 api_version_request.APIVersionRequest(
40 api_version_request._MIN_API_VERSION),
41 api_version_request.min_api_version())
43 def test_max_api_version(self):
45 self.assertEqual(
46 api_version_request.APIVersionRequest(
47 api_version_request._MAX_API_VERSION),
48 api_version_request.max_api_version())
50 @ddt.data(
51 ('1.1', 1, 1),
52 ('2.10', 2, 10),
53 ('5.234', 5, 234),
54 ('12.5', 12, 5),
55 ('2.0', 2, 0),
56 ('2.200', 2, 200)
57 )
58 @ddt.unpack
59 def test_valid_version_strings(self, version_string, major, minor):
61 request = api_version_request.APIVersionRequest(version_string)
63 self.assertEqual(major, request._ver_major)
64 self.assertEqual(minor, request._ver_minor)
66 def test_null_version(self):
68 v = api_version_request.APIVersionRequest()
70 self.assertTrue(v.is_null())
72 @ddt.data('2', '200', '2.1.4', '200.23.66.3', '5 .3', '5. 3',
73 '5.03', '02.1', '2.001', '', ' 2.1', '2.1 ')
74 def test_invalid_version_strings(self, version_string):
76 self.assertRaises(exception.InvalidAPIVersionString,
77 api_version_request.APIVersionRequest,
78 version_string)
80 def test_cmpkey(self):
81 request = api_version_request.APIVersionRequest('1.2')
82 self.assertEqual((1, 2), request._cmpkey())
84 @ddt.data(True, False)
85 def test_experimental_property(self, experimental):
87 request = api_version_request.APIVersionRequest()
88 request.experimental = experimental
90 self.assertEqual(experimental, request.experimental)
92 def test_experimental_property_value_error(self):
94 request = api_version_request.APIVersionRequest()
96 def set_non_boolean():
97 request.experimental = 'non_bool_value'
99 self.assertRaises(exception.InvalidParameterValue, set_non_boolean)
101 def test_version_comparisons(self):
102 v1 = api_version_request.APIVersionRequest('2.0')
103 v2 = api_version_request.APIVersionRequest('2.5')
104 v3 = api_version_request.APIVersionRequest('5.23')
105 v4 = api_version_request.APIVersionRequest('2.0')
106 v_null = api_version_request.APIVersionRequest()
108 self.assertTrue(v1 < v2)
109 self.assertTrue(v1 <= v2)
110 self.assertTrue(v3 > v2)
111 self.assertTrue(v3 >= v2)
112 self.assertTrue(v1 != v2)
113 self.assertTrue(v1 == v4)
114 self.assertTrue(v1 != v_null)
115 self.assertTrue(v_null == v_null)
116 self.assertFalse(v1 == '2.0')
118 def test_version_matches(self):
119 v1 = api_version_request.APIVersionRequest('2.0')
120 v2 = api_version_request.APIVersionRequest('2.5')
121 v3 = api_version_request.APIVersionRequest('2.45')
122 v4 = api_version_request.APIVersionRequest('3.3')
123 v5 = api_version_request.APIVersionRequest('3.23')
124 v6 = api_version_request.APIVersionRequest('2.0')
125 v7 = api_version_request.APIVersionRequest('3.3')
126 v8 = api_version_request.APIVersionRequest('4.0')
127 v_null = api_version_request.APIVersionRequest()
129 self.assertTrue(v2.matches(v1, v3))
130 self.assertTrue(v2.matches(v1, v_null))
131 self.assertTrue(v1.matches(v6, v2))
132 self.assertTrue(v4.matches(v2, v7))
133 self.assertTrue(v4.matches(v_null, v7))
134 self.assertTrue(v4.matches(v_null, v8))
135 self.assertFalse(v1.matches(v2, v3))
136 self.assertFalse(v5.matches(v2, v4))
137 self.assertFalse(v2.matches(v3, v1))
138 self.assertTrue(v1.matches(v_null, v_null))
140 self.assertRaises(ValueError, v_null.matches, v1, v3)
142 def test_version_matches_experimental_request(self):
144 experimental_request = api_version_request.APIVersionRequest('2.0')
145 experimental_request.experimental = True
147 non_experimental_request = api_version_request.APIVersionRequest('2.0')
149 experimental_function = versioned_method.VersionedMethod(
150 'experimental_function',
151 api_version_request.APIVersionRequest('2.0'),
152 api_version_request.APIVersionRequest('2.1'),
153 True,
154 None)
156 non_experimental_function = versioned_method.VersionedMethod(
157 'non_experimental_function',
158 api_version_request.APIVersionRequest('2.0'),
159 api_version_request.APIVersionRequest('2.1'),
160 False,
161 None)
163 self.assertTrue(experimental_request.matches_versioned_method(
164 experimental_function))
165 self.assertTrue(experimental_request.matches_versioned_method(
166 non_experimental_function))
167 self.assertTrue(non_experimental_request.matches_versioned_method(
168 non_experimental_function))
169 self.assertFalse(non_experimental_request.matches_versioned_method(
170 experimental_function))
172 def test_matches_versioned_method(self):
174 request = api_version_request.APIVersionRequest('2.0')
176 self.assertRaises(exception.InvalidParameterValue,
177 request.matches_versioned_method,
178 'fake_method')
180 def test_get_string(self):
181 v1_string = '3.23'
182 v1 = api_version_request.APIVersionRequest(v1_string)
183 self.assertEqual(v1_string, v1.get_string())
185 self.assertRaises(ValueError,
186 api_version_request.APIVersionRequest().get_string)
188 @ddt.data(('1', '0', False), ('1', '1', False), ('1', '0', True))
189 @ddt.unpack
190 def test_str(self, major, minor, experimental):
191 request_input = '%s.%s' % (major, minor)
192 request = api_version_request.APIVersionRequest(
193 request_input, experimental=experimental)
194 request_string = str(request)
196 self.assertEqual('API Version Request '
197 'Major: %s, Minor: %s, Experimental: %s' %
198 (major, minor, experimental), request_string)