1 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
2 # and others. All rights reserved.
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:
8 # http://www.apache.org/licenses/LICENSE-2.0
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.
17 from snaps.config.network import PortConfig
18 from snaps.config.vm_inst import (
19 FloatingIpConfig, VmInstanceConfig, FloatingIpConfigError,
20 VmInstanceConfigError)
23 class VmInstanceConfigUnitTests(unittest.TestCase):
25 Tests the construction of the VmInstanceConfig class
28 def test_no_params(self):
29 with self.assertRaises(VmInstanceConfigError):
32 def test_empty_config(self):
33 with self.assertRaises(VmInstanceConfigError):
34 VmInstanceConfig(config=dict())
36 def test_name_only(self):
37 with self.assertRaises(VmInstanceConfigError):
38 VmInstanceConfig(name='foo')
40 def test_config_with_name_only(self):
41 with self.assertRaises(VmInstanceConfigError):
42 VmInstanceConfig(config={'name': 'foo'})
44 def test_name_flavor_only(self):
45 with self.assertRaises(VmInstanceConfigError):
46 VmInstanceConfig(name='foo', flavor='bar')
48 def test_config_with_name_flavor_only(self):
49 with self.assertRaises(VmInstanceConfigError):
50 VmInstanceConfig(config={'name': 'foo', 'flavor': 'bar'})
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)
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)
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')
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])
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')
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])
156 class FloatingIpConfigUnitTests(unittest.TestCase):
158 Tests the construction of the FloatingIpConfig class
161 def test_no_params(self):
162 with self.assertRaises(FloatingIpConfigError):
165 def test_empty_config(self):
166 with self.assertRaises(FloatingIpConfigError):
167 FloatingIpConfig(**dict())
169 def test_name_only(self):
170 with self.assertRaises(FloatingIpConfigError):
171 FloatingIpConfig(name='foo')
173 def test_config_with_name_only(self):
174 with self.assertRaises(FloatingIpConfigError):
175 FloatingIpConfig(**{'name': 'foo'})
177 def test_name_port_only(self):
178 with self.assertRaises(FloatingIpConfigError):
179 FloatingIpConfig(name='foo', port_name='bar')
181 def test_config_with_name_port_only(self):
182 with self.assertRaises(FloatingIpConfigError):
183 FloatingIpConfig(**{'name': 'foo', 'port_name': 'bar'})
185 def test_name_router_only(self):
186 with self.assertRaises(FloatingIpConfigError):
187 FloatingIpConfig(name='foo', router_name='bar')
189 def test_config_with_name_router_only(self):
190 with self.assertRaises(FloatingIpConfigError):
191 FloatingIpConfig(**{'name': 'foo', 'router_name': 'bar'})
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)
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)
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)
225 settings = FloatingIpConfig(name='foo', port_name='foo-port',
226 router_name='bar-router',
227 subnet_name='bar-subnet',
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)
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)