Reformat auth_url based on the ID API version.
[snaps.git] / snaps / openstack / tests / conf / os_credentials_tests.py
1 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
2 #                    and others.  All rights reserved.
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at:
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15
16 import logging
17 import unittest
18
19 from snaps.openstack.os_credentials import (
20     OSCredsError, OSCreds, ProxySettings, ProxySettingsError)
21
22 __author__ = 'spisarski'
23
24 logger = logging.getLogger('os_credentials_test')
25
26
27 class ProxySettingsUnitTests(unittest.TestCase):
28     """
29     Tests the construction of the ProxySettings class
30     """
31
32     def test_no_params(self):
33         with self.assertRaises(ProxySettingsError):
34             ProxySettings()
35
36     def test_empty_kwargs(self):
37         with self.assertRaises(ProxySettingsError):
38             ProxySettings(**dict())
39
40     def test_host_only(self):
41         with self.assertRaises(ProxySettingsError):
42             ProxySettings(host='foo')
43
44     def test_host_only_kwargs(self):
45         with self.assertRaises(ProxySettingsError):
46             ProxySettings(**{'host': 'foo'})
47
48     def test_port_only(self):
49         with self.assertRaises(ProxySettingsError):
50             ProxySettings(port=1234)
51
52     def test_port_only_kwargs(self):
53         with self.assertRaises(ProxySettingsError):
54             ProxySettings(**{'port': 1234})
55
56     def test_minimum(self):
57         proxy_settings = ProxySettings(host='foo', port=1234)
58         self.assertEqual('foo', proxy_settings.host)
59         self.assertEqual('1234', proxy_settings.port)
60         self.assertEqual('foo', proxy_settings.https_host)
61         self.assertEqual('1234', proxy_settings.https_port)
62         self.assertIsNone(proxy_settings.ssh_proxy_cmd)
63
64     def test_minimum_kwargs(self):
65         proxy_settings = ProxySettings(**{'host': 'foo', 'port': 1234})
66         self.assertEqual('foo', proxy_settings.host)
67         self.assertEqual('1234', proxy_settings.port)
68         self.assertEqual('foo', proxy_settings.https_host)
69         self.assertEqual('1234', proxy_settings.https_port)
70         self.assertIsNone(proxy_settings.ssh_proxy_cmd)
71
72     def test_all(self):
73         proxy_settings = ProxySettings(
74             host='foo', port=1234, https_host='bar', https_port=2345,
75             ssh_proxy_cmd='proxy command')
76         self.assertEqual('foo', proxy_settings.host)
77         self.assertEqual('1234', proxy_settings.port)
78         self.assertEqual('bar', proxy_settings.https_host)
79         self.assertEqual('2345', proxy_settings.https_port)
80         self.assertEqual('proxy command', proxy_settings.ssh_proxy_cmd)
81
82     def test_all_kwargs(self):
83         proxy_settings = ProxySettings(
84             **{'host': 'foo', 'port': 1234, 'https_host': 'bar',
85                'https_port': 2345, 'ssh_proxy_cmd': 'proxy command'})
86         self.assertEqual('foo', proxy_settings.host)
87         self.assertEqual('1234', proxy_settings.port)
88         self.assertEqual('bar', proxy_settings.https_host)
89         self.assertEqual('2345', proxy_settings.https_port)
90         self.assertEqual('proxy command', proxy_settings.ssh_proxy_cmd)
91
92
93 class OSCredsUnitTests(unittest.TestCase):
94     """
95     Tests the construction of the OSCreds class
96     """
97
98     def test_no_params(self):
99         with self.assertRaises(OSCredsError):
100             OSCreds()
101
102     def test_empty_kwargs(self):
103         with self.assertRaises(OSCredsError):
104             OSCreds(**dict())
105
106     def test_username_only(self):
107         with self.assertRaises(OSCredsError):
108             OSCreds(username='foo')
109
110     def test_username_only_kwargs(self):
111         with self.assertRaises(OSCredsError):
112             OSCreds(**{'username': 'foo'})
113
114     def test_password_only(self):
115         with self.assertRaises(OSCredsError):
116             OSCreds(password='foo')
117
118     def test_password_only_kwargs(self):
119         with self.assertRaises(OSCredsError):
120             OSCreds(**{'password': 'foo'})
121
122     def test_auth_url_only(self):
123         with self.assertRaises(OSCredsError):
124             OSCreds(auth_url='foo')
125
126     def test_auth_url_only_kwargs(self):
127         with self.assertRaises(OSCredsError):
128             OSCreds(**{'auth_url': 'foo'})
129
130     def test_project_name_only(self):
131         with self.assertRaises(OSCredsError):
132             OSCreds(project_name='foo')
133
134     def test_project_name_only_kwargs(self):
135         with self.assertRaises(OSCredsError):
136             OSCreds(**{'project_name': 'foo'})
137
138     def test_minimal(self):
139         os_creds = OSCreds(
140             username='foo', password='bar', auth_url='http://foo.bar:5000/v2',
141             project_name='hello')
142         self.assertEqual('foo', os_creds.username)
143         self.assertEqual('bar', os_creds.password)
144         self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
145         self.assertEqual('hello', os_creds.project_name)
146         self.assertEqual(2, os_creds.identity_api_version)
147         self.assertEqual(2, os_creds.image_api_version)
148         self.assertEqual(2, os_creds.compute_api_version)
149         self.assertEqual(1, os_creds.heat_api_version)
150         self.assertIsNone(os_creds.user_domain_id)
151         self.assertEqual('default', os_creds.user_domain_name)
152         self.assertIsNone(os_creds.project_domain_id)
153         self.assertEqual('default', os_creds.project_domain_name)
154         self.assertEqual('admin', os_creds.interface)
155         self.assertFalse(os_creds.cacert)
156         self.assertIsNone(os_creds.proxy_settings)
157         self.assertIsNone(os_creds.region_name)
158
159     def test_minimal_kwargs(self):
160         os_creds = OSCreds(**{'username': 'foo', 'password': 'bar',
161                               'auth_url': 'http://foo.bar:5000/v2',
162                               'project_name': 'hello'})
163         self.assertEqual('foo', os_creds.username)
164         self.assertEqual('bar', os_creds.password)
165         self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
166         self.assertEqual('hello', os_creds.project_name)
167         self.assertEqual(2, os_creds.identity_api_version)
168         self.assertEqual(2, os_creds.image_api_version)
169         self.assertEqual(2, os_creds.compute_api_version)
170         self.assertEqual(1, os_creds.heat_api_version)
171         self.assertIsNone(os_creds.user_domain_id)
172         self.assertEqual('default', os_creds.user_domain_name)
173         self.assertIsNone(os_creds.project_domain_id)
174         self.assertEqual('default', os_creds.project_domain_name)
175         self.assertEqual('admin', os_creds.interface)
176         self.assertFalse(os_creds.cacert)
177         self.assertIsNone(os_creds.proxy_settings)
178         self.assertIsNone(os_creds.region_name)
179
180     def test_all_kwargs_versions_str(self):
181         os_creds = OSCreds(
182             **{'username': 'foo', 'password': 'bar',
183                'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
184                'identity_api_version': '5', 'image_api_version': '6',
185                'compute_api_version': '7', 'heat_api_version': '8.0',
186                'cacert': 'true', 'region_name': 'test_region'})
187         self.assertEqual('foo', os_creds.username)
188         self.assertEqual('bar', os_creds.password)
189         self.assertEqual('http://foo.bar:5000/v5', os_creds.auth_url)
190         self.assertEqual('hello', os_creds.project_name)
191         self.assertEqual(5, os_creds.identity_api_version)
192         self.assertEqual(6, os_creds.image_api_version)
193         self.assertEqual(7, os_creds.compute_api_version)
194         self.assertEqual(8.0, os_creds.heat_api_version)
195         self.assertIsNone(os_creds.user_domain_id)
196         self.assertEqual('default', os_creds.user_domain_name)
197         self.assertIsNone(os_creds.project_domain_id)
198         self.assertEqual('default', os_creds.project_domain_name)
199         self.assertEqual('admin', os_creds.interface)
200         self.assertTrue(os_creds.cacert)
201         self.assertIsNone(os_creds.proxy_settings)
202         self.assertEqual('test_region', os_creds.region_name)
203
204     def test_all_kwargs_versions_num(self):
205         os_creds = OSCreds(
206             **{'username': 'foo', 'password': 'bar',
207                'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
208                'identity_api_version': 5, 'image_api_version': 6,
209                'compute_api_version': 7, 'heat_api_version': 8.0,
210                'cacert': True, 'region_name': 'test_region'})
211         self.assertEqual('foo', os_creds.username)
212         self.assertEqual('bar', os_creds.password)
213         self.assertEqual('http://foo.bar:5000/v5', os_creds.auth_url)
214         self.assertEqual('hello', os_creds.project_name)
215         self.assertEqual(5, os_creds.identity_api_version)
216         self.assertEqual(6, os_creds.image_api_version)
217         self.assertEqual(7, os_creds.compute_api_version)
218         self.assertEqual(8.0, os_creds.heat_api_version)
219         self.assertIsNone(os_creds.user_domain_id)
220         self.assertEqual('default', os_creds.user_domain_name)
221         self.assertIsNone(os_creds.project_domain_id)
222         self.assertEqual('default', os_creds.project_domain_name)
223         self.assertEqual('admin', os_creds.interface)
224         self.assertTrue(os_creds.cacert)
225         self.assertIsNone(os_creds.proxy_settings)
226         self.assertEqual('test_region', os_creds.region_name)
227
228     def test_proxy_settings_obj(self):
229         proxy_settings = ProxySettings(host='foo', port=1234)
230         os_creds = OSCreds(
231             username='foo', password='bar', auth_url='http://foo.bar:5000/',
232             project_name='hello', proxy_settings=proxy_settings)
233         self.assertEqual('foo', os_creds.username)
234         self.assertEqual('bar', os_creds.password)
235         self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
236         self.assertEqual('hello', os_creds.project_name)
237         self.assertEqual(2, os_creds.identity_api_version)
238         self.assertEqual(2, os_creds.image_api_version)
239         self.assertEqual(2, os_creds.compute_api_version)
240         self.assertEqual(1, os_creds.heat_api_version)
241         self.assertIsNone(os_creds.user_domain_id)
242         self.assertEqual('default', os_creds.user_domain_name)
243         self.assertIsNone(os_creds.project_domain_id)
244         self.assertEqual('default', os_creds.project_domain_name)
245         self.assertEqual('admin', os_creds.interface)
246         self.assertFalse(os_creds.cacert)
247         self.assertEqual('foo', os_creds.proxy_settings.host)
248         self.assertEqual('1234', os_creds.proxy_settings.port)
249         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
250         self.assertIsNone(os_creds.region_name)
251
252     def test_proxy_settings_obj_kwargs(self):
253         proxy_settings = ProxySettings(host='foo', port=1234)
254         os_creds = OSCreds(
255             **{'username': 'foo', 'password': 'bar',
256                'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
257                'proxy_settings': proxy_settings, 'region_name': 'test_region',
258                'user_domain_id': 'domain1', 'user_domain_name': 'domain2',
259                'project_domain_id': 'domain3',
260                'project_domain_name': 'domain4'})
261         self.assertEqual('foo', os_creds.username)
262         self.assertEqual('bar', os_creds.password)
263         self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
264         self.assertEqual('hello', os_creds.project_name)
265         self.assertEqual(2, os_creds.identity_api_version)
266         self.assertEqual(2, os_creds.image_api_version)
267         self.assertEqual(2, os_creds.compute_api_version)
268         self.assertEqual(1, os_creds.heat_api_version)
269         self.assertEqual('domain1', os_creds.user_domain_id)
270         self.assertEqual('domain2', os_creds.user_domain_name)
271         self.assertEqual('domain3', os_creds.project_domain_id)
272         self.assertEqual('domain4', os_creds.project_domain_name)
273         self.assertEqual('admin', os_creds.interface)
274         self.assertFalse(os_creds.cacert)
275         self.assertEqual('foo', os_creds.proxy_settings.host)
276         self.assertEqual('1234', os_creds.proxy_settings.port)
277         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
278         self.assertEqual('test_region', os_creds.region_name)
279
280     def test_proxy_settings_dict(self):
281         os_creds = OSCreds(
282             username='foo', password='bar', auth_url='http://foo.bar:5000/v2',
283             project_name='hello', proxy_settings={'host': 'foo', 'port': 1234},
284             user_domain_id='domain1', user_domain_name='domain2',
285             project_domain_id='domain3', project_domain_name='domain4')
286         self.assertEqual('foo', os_creds.username)
287         self.assertEqual('bar', os_creds.password)
288         self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
289         self.assertEqual('hello', os_creds.project_name)
290         self.assertEqual(2, os_creds.identity_api_version)
291         self.assertEqual(2, os_creds.image_api_version)
292         self.assertEqual(2, os_creds.compute_api_version)
293         self.assertEqual(1, os_creds.heat_api_version)
294         self.assertEqual('domain1', os_creds.user_domain_id)
295         self.assertEqual('domain2', os_creds.user_domain_name)
296         self.assertEqual('domain3', os_creds.project_domain_id)
297         self.assertEqual('domain4', os_creds.project_domain_name)
298         self.assertEqual('admin', os_creds.interface)
299         self.assertFalse(os_creds.cacert)
300         self.assertEqual('foo', os_creds.proxy_settings.host)
301         self.assertEqual('1234', os_creds.proxy_settings.port)
302         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
303
304     def test_proxy_settings_dict_kwargs(self):
305         os_creds = OSCreds(
306             **{'username': 'foo', 'password': 'bar',
307                'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
308                'proxy_settings': {'host': 'foo', 'port': 1234},
309                'region_name': 'test_region'})
310         self.assertEqual('foo', os_creds.username)
311         self.assertEqual('bar', os_creds.password)
312         self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
313         self.assertEqual('hello', os_creds.project_name)
314         self.assertEqual(2, os_creds.identity_api_version)
315         self.assertEqual(2, os_creds.image_api_version)
316         self.assertEqual(2, os_creds.compute_api_version)
317         self.assertEqual(1, os_creds.heat_api_version)
318         self.assertIsNone(os_creds.user_domain_id)
319         self.assertEqual('default', os_creds.user_domain_name)
320         self.assertIsNone(os_creds.project_domain_id)
321         self.assertEqual('default', os_creds.project_domain_name)
322         self.assertEqual('admin', os_creds.interface)
323         self.assertFalse(os_creds.cacert)
324         self.assertEqual('foo', os_creds.proxy_settings.host)
325         self.assertEqual('1234', os_creds.proxy_settings.port)
326         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
327         self.assertEqual('test_region', os_creds.region_name)