Attempt to fix domain support.
[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_invalid_auth_url(self):
139         with self.assertRaises(OSCredsError):
140             OSCreds(username='foo', password='bar',
141                     auth_url='http://foo.bar', project_name='hello')
142
143     def test_invalid_auth_url_kwargs(self):
144         with self.assertRaises(OSCredsError):
145             OSCreds(**{'username': 'foo', 'password': 'bar',
146                     'auth_url': 'http://foo.bar', 'project_name': 'hello'})
147
148     def test_minimal(self):
149         os_creds = OSCreds(
150             username='foo', password='bar', auth_url='http://foo.bar:5000/v2',
151             project_name='hello')
152         self.assertEqual('foo', os_creds.username)
153         self.assertEqual('bar', os_creds.password)
154         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
155         self.assertEqual('hello', os_creds.project_name)
156         self.assertEqual(2, os_creds.identity_api_version)
157         self.assertEqual(2, os_creds.image_api_version)
158         self.assertEqual(2, os_creds.compute_api_version)
159         self.assertEqual(1, os_creds.heat_api_version)
160         self.assertIsNone(os_creds.user_domain_id)
161         self.assertEqual('default', os_creds.user_domain_name)
162         self.assertIsNone(os_creds.project_domain_id)
163         self.assertEqual('default', os_creds.project_domain_name)
164         self.assertEqual('admin', os_creds.interface)
165         self.assertFalse(os_creds.cacert)
166         self.assertIsNone(os_creds.proxy_settings)
167         self.assertIsNone(os_creds.region_name)
168
169     def test_minimal_kwargs(self):
170         os_creds = OSCreds(**{'username': 'foo', 'password': 'bar',
171                               'auth_url': 'http://foo.bar:5000/v2',
172                               'project_name': 'hello'})
173         self.assertEqual('foo', os_creds.username)
174         self.assertEqual('bar', os_creds.password)
175         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
176         self.assertEqual('hello', os_creds.project_name)
177         self.assertEqual(2, os_creds.identity_api_version)
178         self.assertEqual(2, os_creds.image_api_version)
179         self.assertEqual(2, os_creds.compute_api_version)
180         self.assertEqual(1, os_creds.heat_api_version)
181         self.assertIsNone(os_creds.user_domain_id)
182         self.assertEqual('default', os_creds.user_domain_name)
183         self.assertIsNone(os_creds.project_domain_id)
184         self.assertEqual('default', os_creds.project_domain_name)
185         self.assertEqual('admin', os_creds.interface)
186         self.assertFalse(os_creds.cacert)
187         self.assertIsNone(os_creds.proxy_settings)
188         self.assertIsNone(os_creds.region_name)
189
190     def test_all_kwargs_versions_str(self):
191         os_creds = OSCreds(
192             **{'username': 'foo', 'password': 'bar',
193                'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
194                'identity_api_version': '5', 'image_api_version': '6',
195                'compute_api_version': '7', 'heat_api_version': '8.0',
196                'cacert': 'true', 'region_name': 'test_region'})
197         self.assertEqual('foo', os_creds.username)
198         self.assertEqual('bar', os_creds.password)
199         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
200         self.assertEqual('hello', os_creds.project_name)
201         self.assertEqual(5, os_creds.identity_api_version)
202         self.assertEqual(6, os_creds.image_api_version)
203         self.assertEqual(7, os_creds.compute_api_version)
204         self.assertEqual(8.0, os_creds.heat_api_version)
205         self.assertIsNone(os_creds.user_domain_id)
206         self.assertEqual('default', os_creds.user_domain_name)
207         self.assertIsNone(os_creds.project_domain_id)
208         self.assertEqual('default', os_creds.project_domain_name)
209         self.assertEqual('admin', os_creds.interface)
210         self.assertTrue(os_creds.cacert)
211         self.assertIsNone(os_creds.proxy_settings)
212         self.assertEqual('test_region', os_creds.region_name)
213
214     def test_all_kwargs_versions_num(self):
215         os_creds = OSCreds(
216             **{'username': 'foo', 'password': 'bar',
217                'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
218                'identity_api_version': 5, 'image_api_version': 6,
219                'compute_api_version': 7, 'heat_api_version': 8.0,
220                'cacert': True, 'region_name': 'test_region'})
221         self.assertEqual('foo', os_creds.username)
222         self.assertEqual('bar', os_creds.password)
223         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
224         self.assertEqual('hello', os_creds.project_name)
225         self.assertEqual(5, os_creds.identity_api_version)
226         self.assertEqual(6, os_creds.image_api_version)
227         self.assertEqual(7, os_creds.compute_api_version)
228         self.assertEqual(8.0, os_creds.heat_api_version)
229         self.assertIsNone(os_creds.user_domain_id)
230         self.assertEqual('default', os_creds.user_domain_name)
231         self.assertIsNone(os_creds.project_domain_id)
232         self.assertEqual('default', os_creds.project_domain_name)
233         self.assertEqual('admin', os_creds.interface)
234         self.assertTrue(os_creds.cacert)
235         self.assertIsNone(os_creds.proxy_settings)
236         self.assertEqual('test_region', os_creds.region_name)
237
238     def test_proxy_settings_obj(self):
239         proxy_settings = ProxySettings(host='foo', port=1234)
240         os_creds = OSCreds(
241             username='foo', password='bar', auth_url='http://foo.bar:5000/v2',
242             project_name='hello', proxy_settings=proxy_settings)
243         self.assertEqual('foo', os_creds.username)
244         self.assertEqual('bar', os_creds.password)
245         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
246         self.assertEqual('hello', os_creds.project_name)
247         self.assertEqual(2, os_creds.identity_api_version)
248         self.assertEqual(2, os_creds.image_api_version)
249         self.assertEqual(2, os_creds.compute_api_version)
250         self.assertEqual(1, os_creds.heat_api_version)
251         self.assertIsNone(os_creds.user_domain_id)
252         self.assertEqual('default', os_creds.user_domain_name)
253         self.assertIsNone(os_creds.project_domain_id)
254         self.assertEqual('default', os_creds.project_domain_name)
255         self.assertEqual('admin', os_creds.interface)
256         self.assertFalse(os_creds.cacert)
257         self.assertEqual('foo', os_creds.proxy_settings.host)
258         self.assertEqual('1234', os_creds.proxy_settings.port)
259         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
260         self.assertIsNone(os_creds.region_name)
261
262     def test_proxy_settings_obj_kwargs(self):
263         proxy_settings = ProxySettings(host='foo', port=1234)
264         os_creds = OSCreds(
265             **{'username': 'foo', 'password': 'bar',
266                'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
267                'proxy_settings': proxy_settings, 'region_name': 'test_region',
268                'user_domain_id': 'domain1', 'user_domain_name': 'domain2',
269                'project_domain_id': 'domain3',
270                'project_domain_name': 'domain4'})
271         self.assertEqual('foo', os_creds.username)
272         self.assertEqual('bar', os_creds.password)
273         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
274         self.assertEqual('hello', os_creds.project_name)
275         self.assertEqual(2, os_creds.identity_api_version)
276         self.assertEqual(2, os_creds.image_api_version)
277         self.assertEqual(2, os_creds.compute_api_version)
278         self.assertEqual(1, os_creds.heat_api_version)
279         self.assertEqual('domain1', os_creds.user_domain_id)
280         self.assertEqual('domain2', os_creds.user_domain_name)
281         self.assertEqual('domain3', os_creds.project_domain_id)
282         self.assertEqual('domain4', os_creds.project_domain_name)
283         self.assertEqual('admin', os_creds.interface)
284         self.assertFalse(os_creds.cacert)
285         self.assertEqual('foo', os_creds.proxy_settings.host)
286         self.assertEqual('1234', os_creds.proxy_settings.port)
287         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
288         self.assertEqual('test_region', os_creds.region_name)
289
290     def test_proxy_settings_dict(self):
291         os_creds = OSCreds(
292             username='foo', password='bar', auth_url='http://foo.bar:5000/v2',
293             project_name='hello', proxy_settings={'host': 'foo', 'port': 1234},
294             user_domain_id='domain1', user_domain_name='domain2',
295             project_domain_id='domain3', project_domain_name='domain4')
296         self.assertEqual('foo', os_creds.username)
297         self.assertEqual('bar', os_creds.password)
298         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
299         self.assertEqual('hello', os_creds.project_name)
300         self.assertEqual(2, os_creds.identity_api_version)
301         self.assertEqual(2, os_creds.image_api_version)
302         self.assertEqual(2, os_creds.compute_api_version)
303         self.assertEqual(1, os_creds.heat_api_version)
304         self.assertEqual('domain1', os_creds.user_domain_id)
305         self.assertEqual('domain2', os_creds.user_domain_name)
306         self.assertEqual('domain3', os_creds.project_domain_id)
307         self.assertEqual('domain4', os_creds.project_domain_name)
308         self.assertEqual('admin', os_creds.interface)
309         self.assertFalse(os_creds.cacert)
310         self.assertEqual('foo', os_creds.proxy_settings.host)
311         self.assertEqual('1234', os_creds.proxy_settings.port)
312         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
313
314     def test_proxy_settings_dict_kwargs(self):
315         os_creds = OSCreds(
316             **{'username': 'foo', 'password': 'bar',
317                'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello',
318                'proxy_settings': {'host': 'foo', 'port': 1234},
319                'region_name': 'test_region'})
320         self.assertEqual('foo', os_creds.username)
321         self.assertEqual('bar', os_creds.password)
322         self.assertEqual('http://foo.bar:5000/v2', os_creds.auth_url)
323         self.assertEqual('hello', os_creds.project_name)
324         self.assertEqual(2, os_creds.identity_api_version)
325         self.assertEqual(2, os_creds.image_api_version)
326         self.assertEqual(2, os_creds.compute_api_version)
327         self.assertEqual(1, os_creds.heat_api_version)
328         self.assertIsNone(os_creds.user_domain_id)
329         self.assertEqual('default', os_creds.user_domain_name)
330         self.assertIsNone(os_creds.project_domain_id)
331         self.assertEqual('default', os_creds.project_domain_name)
332         self.assertEqual('admin', os_creds.interface)
333         self.assertFalse(os_creds.cacert)
334         self.assertEqual('foo', os_creds.proxy_settings.host)
335         self.assertEqual('1234', os_creds.proxy_settings.port)
336         self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
337         self.assertEqual('test_region', os_creds.region_name)