Added MTU network config and updated flavor_metadata test support
[snaps.git] / snaps / config / tests / vm_inst_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 import unittest
16
17 from snaps.config.network import PortConfig
18 from snaps.config.vm_inst import (
19     FloatingIpConfig, VmInstanceConfig, FloatingIpConfigError,
20     VmInstanceConfigError)
21
22
23 class VmInstanceConfigUnitTests(unittest.TestCase):
24     """
25     Tests the construction of the VmInstanceConfig class
26     """
27
28     def test_no_params(self):
29         with self.assertRaises(VmInstanceConfigError):
30             VmInstanceConfig()
31
32     def test_empty_config(self):
33         with self.assertRaises(VmInstanceConfigError):
34             VmInstanceConfig(config=dict())
35
36     def test_name_only(self):
37         with self.assertRaises(VmInstanceConfigError):
38             VmInstanceConfig(name='foo')
39
40     def test_config_with_name_only(self):
41         with self.assertRaises(VmInstanceConfigError):
42             VmInstanceConfig(config={'name': 'foo'})
43
44     def test_name_flavor_only(self):
45         with self.assertRaises(VmInstanceConfigError):
46             VmInstanceConfig(name='foo', flavor='bar')
47
48     def test_config_with_name_flavor_only(self):
49         with self.assertRaises(VmInstanceConfigError):
50             VmInstanceConfig(config={'name': 'foo', 'flavor': 'bar'})
51
52     def test_name_flavor_port_only(self):
53         port_settings = PortConfig(name='foo-port', network_name='bar-net')
54         settings = VmInstanceConfig(name='foo', flavor='bar',
55                                     port_settings=[port_settings])
56         self.assertEqual('foo', settings.name)
57         self.assertEqual('bar', settings.flavor)
58         self.assertEqual(1, len(settings.port_settings))
59         self.assertEqual('foo-port', settings.port_settings[0].name)
60         self.assertEqual('bar-net', settings.port_settings[0].network_name)
61         self.assertEqual(0, len(settings.security_group_names))
62         self.assertEqual(0, len(settings.floating_ip_settings))
63         self.assertIsNone(settings.sudo_user)
64         self.assertEqual(900, settings.vm_boot_timeout)
65         self.assertEqual(300, settings.vm_delete_timeout)
66         self.assertEqual(180, settings.ssh_connect_timeout)
67         self.assertEqual(300, settings.cloud_init_timeout)
68         self.assertIsNone(settings.availability_zone)
69         self.assertIsNone(settings.volume_names)
70
71     def test_config_with_name_flavor_port_only(self):
72         port_settings = PortConfig(name='foo-port', network_name='bar-net')
73         settings = VmInstanceConfig(
74             **{'name': 'foo', 'flavor': 'bar', 'ports': [port_settings]})
75         self.assertEqual('foo', settings.name)
76         self.assertEqual('bar', settings.flavor)
77         self.assertEqual(1, len(settings.port_settings))
78         self.assertEqual('foo-port', settings.port_settings[0].name)
79         self.assertEqual('bar-net', settings.port_settings[0].network_name)
80         self.assertEqual(0, len(settings.security_group_names))
81         self.assertEqual(0, len(settings.floating_ip_settings))
82         self.assertIsNone(settings.sudo_user)
83         self.assertEqual(900, settings.vm_boot_timeout)
84         self.assertEqual(300, settings.vm_delete_timeout)
85         self.assertEqual(180, settings.ssh_connect_timeout)
86         self.assertEqual(300, settings.cloud_init_timeout)
87         self.assertIsNone(settings.availability_zone)
88         self.assertIsNone(settings.volume_names)
89
90     def test_all(self):
91         port_settings = PortConfig(name='foo-port', network_name='bar-net')
92         fip_settings = FloatingIpConfig(name='foo-fip', port_name='bar-port',
93                                         router_name='foo-bar-router')
94
95         settings = VmInstanceConfig(
96             name='foo', flavor='bar', port_settings=[port_settings],
97             security_group_names=['sec_grp_1'],
98             floating_ip_settings=[fip_settings], sudo_user='joe',
99             vm_boot_timeout=999, vm_delete_timeout=333,
100             ssh_connect_timeout=111, cloud_init_timeout=998,
101             availability_zone='server name', volume_names=['vol1'])
102         self.assertEqual('foo', settings.name)
103         self.assertEqual('bar', settings.flavor)
104         self.assertEqual(1, len(settings.port_settings))
105         self.assertEqual('foo-port', settings.port_settings[0].name)
106         self.assertEqual('bar-net', settings.port_settings[0].network_name)
107         self.assertEqual(1, len(settings.security_group_names))
108         self.assertEqual('sec_grp_1', settings.security_group_names[0])
109         self.assertEqual(1, len(settings.floating_ip_settings))
110         self.assertEqual('foo-fip', settings.floating_ip_settings[0].name)
111         self.assertEqual('bar-port',
112                          settings.floating_ip_settings[0].port_name)
113         self.assertEqual('foo-bar-router',
114                          settings.floating_ip_settings[0].router_name)
115         self.assertEqual('joe', settings.sudo_user)
116         self.assertEqual(999, settings.vm_boot_timeout)
117         self.assertEqual(333, settings.vm_delete_timeout)
118         self.assertEqual(111, settings.ssh_connect_timeout)
119         self.assertEqual(998, settings.cloud_init_timeout)
120         self.assertEqual('server name', settings.availability_zone)
121         self.assertEqual('vol1', settings.volume_names[0])
122
123     def test_config_all(self):
124         port_settings = PortConfig(name='foo-port', network_name='bar-net')
125         fip_settings = FloatingIpConfig(name='foo-fip', port_name='bar-port',
126                                         router_name='foo-bar-router')
127
128         settings = VmInstanceConfig(
129             **{'name': 'foo', 'flavor': 'bar', 'ports': [port_settings],
130                'security_group_names': ['sec_grp_1'],
131                'floating_ips': [fip_settings], 'sudo_user': 'joe',
132                'vm_boot_timeout': 999, 'vm_delete_timeout': 333,
133                'ssh_connect_timeout': 111, 'cloud_init_timeout': 998,
134                'availability_zone': 'server name', 'volume_names': ['vol2']})
135         self.assertEqual('foo', settings.name)
136         self.assertEqual('bar', settings.flavor)
137         self.assertEqual(1, len(settings.port_settings))
138         self.assertEqual('foo-port', settings.port_settings[0].name)
139         self.assertEqual('bar-net', settings.port_settings[0].network_name)
140         self.assertEqual(1, len(settings.security_group_names))
141         self.assertEqual(1, len(settings.floating_ip_settings))
142         self.assertEqual('foo-fip', settings.floating_ip_settings[0].name)
143         self.assertEqual('bar-port',
144                          settings.floating_ip_settings[0].port_name)
145         self.assertEqual('foo-bar-router',
146                          settings.floating_ip_settings[0].router_name)
147         self.assertEqual('joe', settings.sudo_user)
148         self.assertEqual(999, settings.vm_boot_timeout)
149         self.assertEqual(333, settings.vm_delete_timeout)
150         self.assertEqual(111, settings.ssh_connect_timeout)
151         self.assertEqual(998, settings.cloud_init_timeout)
152         self.assertEqual('server name', settings.availability_zone)
153         self.assertEqual('vol2', settings.volume_names[0])
154
155
156 class FloatingIpConfigUnitTests(unittest.TestCase):
157     """
158     Tests the construction of the FloatingIpConfig class
159     """
160
161     def test_no_params(self):
162         with self.assertRaises(FloatingIpConfigError):
163             FloatingIpConfig()
164
165     def test_empty_config(self):
166         with self.assertRaises(FloatingIpConfigError):
167             FloatingIpConfig(**dict())
168
169     def test_name_only(self):
170         with self.assertRaises(FloatingIpConfigError):
171             FloatingIpConfig(name='foo')
172
173     def test_config_with_name_only(self):
174         with self.assertRaises(FloatingIpConfigError):
175             FloatingIpConfig(**{'name': 'foo'})
176
177     def test_name_port_only(self):
178         with self.assertRaises(FloatingIpConfigError):
179             FloatingIpConfig(name='foo', port_name='bar')
180
181     def test_config_with_name_port_only(self):
182         with self.assertRaises(FloatingIpConfigError):
183             FloatingIpConfig(**{'name': 'foo', 'port_name': 'bar'})
184
185     def test_name_router_only(self):
186         with self.assertRaises(FloatingIpConfigError):
187             FloatingIpConfig(name='foo', router_name='bar')
188
189     def test_config_with_name_router_only(self):
190         with self.assertRaises(FloatingIpConfigError):
191             FloatingIpConfig(**{'name': 'foo', 'router_name': 'bar'})
192
193     def test_name_port_router_name_only(self):
194         settings = FloatingIpConfig(name='foo', port_name='foo-port',
195                                     router_name='bar-router')
196         self.assertEqual('foo', settings.name)
197         self.assertEqual('foo-port', settings.port_name)
198         self.assertIsNone(settings.port_id)
199         self.assertEqual('bar-router', settings.router_name)
200         self.assertIsNone(settings.subnet_name)
201         self.assertTrue(settings.provisioning)
202
203     def test_name_port_router_id_only(self):
204         settings = FloatingIpConfig(name='foo', port_id='foo-port',
205                                     router_name='bar-router')
206         self.assertEqual('foo', settings.name)
207         self.assertEqual('foo-port', settings.port_id)
208         self.assertIsNone(settings.port_name)
209         self.assertEqual('bar-router', settings.router_name)
210         self.assertIsNone(settings.subnet_name)
211         self.assertTrue(settings.provisioning)
212
213     def test_config_with_name_port_router_only(self):
214         settings = FloatingIpConfig(
215             **{'name': 'foo', 'port_name': 'foo-port',
216                'router_name': 'bar-router'})
217         self.assertEqual('foo', settings.name)
218         self.assertEqual('foo-port', settings.port_name)
219         self.assertIsNone(settings.port_id)
220         self.assertEqual('bar-router', settings.router_name)
221         self.assertIsNone(settings.subnet_name)
222         self.assertTrue(settings.provisioning)
223
224     def test_all(self):
225         settings = FloatingIpConfig(name='foo', port_name='foo-port',
226                                     router_name='bar-router',
227                                     subnet_name='bar-subnet',
228                                     provisioning=False)
229         self.assertEqual('foo', settings.name)
230         self.assertEqual('foo-port', settings.port_name)
231         self.assertIsNone(settings.port_id)
232         self.assertEqual('bar-router', settings.router_name)
233         self.assertEqual('bar-subnet', settings.subnet_name)
234         self.assertFalse(settings.provisioning)
235
236     def test_config_all(self):
237         settings = FloatingIpConfig(
238             **{'name': 'foo', 'port_name': 'foo-port',
239                'router_name': 'bar-router', 'subnet_name': 'bar-subnet',
240                'provisioning': False})
241         self.assertEqual('foo', settings.name)
242         self.assertEqual('foo-port', settings.port_name)
243         self.assertIsNone(settings.port_id)
244         self.assertEqual('bar-router', settings.router_name)
245         self.assertEqual('bar-subnet', settings.subnet_name)
246         self.assertFalse(settings.provisioning)