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 (
18 NetworkConfigError, NetworkConfig, SubnetConfig, SubnetConfigError,
19 IPv6Mode, PortConfig, PortConfigError)
22 class NetworkConfigUnitTests(unittest.TestCase):
24 Tests the construction of the NetworkConfig class
27 def test_no_params(self):
28 with self.assertRaises(NetworkConfigError):
31 def test_empty_config(self):
32 with self.assertRaises(NetworkConfigError):
33 NetworkConfig(**dict())
35 def test_name_only(self):
36 settings = NetworkConfig(name='foo')
37 self.assertEqual('foo', settings.name)
38 self.assertTrue(settings.admin_state_up)
39 self.assertIsNone(settings.shared)
40 self.assertIsNone(settings.project_name)
41 self.assertFalse(settings.external)
42 self.assertIsNone(settings.network_type)
43 self.assertIsNone(settings.segmentation_id)
44 self.assertEqual(0, len(settings.subnet_settings))
46 def test_config_with_name_only(self):
47 settings = NetworkConfig(**{'name': 'foo'})
48 self.assertEqual('foo', settings.name)
49 self.assertTrue(settings.admin_state_up)
50 self.assertIsNone(settings.shared)
51 self.assertIsNone(settings.project_name)
52 self.assertFalse(settings.external)
53 self.assertIsNone(settings.network_type)
54 self.assertIsNone(settings.segmentation_id)
55 self.assertEqual(0, len(settings.subnet_settings))
58 sub_settings = SubnetConfig(name='foo-subnet', cidr='10.0.0.0/24')
59 settings = NetworkConfig(
60 name='foo', admin_state_up=False, shared=True, project_name='bar',
61 external=True, network_type='vlan', physical_network='phy',
62 segmentation_id=2366, subnet_settings=[sub_settings])
63 self.assertEqual('foo', settings.name)
64 self.assertFalse(settings.admin_state_up)
65 self.assertTrue(settings.shared)
66 self.assertEqual('bar', settings.project_name)
67 self.assertTrue(settings.external)
68 self.assertEqual('vlan', settings.network_type)
69 self.assertEqual('phy', settings.physical_network)
70 self.assertEqual(2366, settings.segmentation_id)
71 self.assertEqual(1, len(settings.subnet_settings))
72 self.assertEqual('foo-subnet', settings.subnet_settings[0].name)
74 def test_config_all(self):
75 settings = NetworkConfig(
76 **{'name': 'foo', 'admin_state_up': False, 'shared': True,
77 'project_name': 'bar', 'external': True, 'network_type': 'vlan',
78 'physical_network': 'phy',
79 'segmentation_id': 2366,
81 [{'subnet': {'name': 'foo-subnet',
82 'cidr': '10.0.0.0/24'}}]})
83 self.assertEqual('foo', settings.name)
84 self.assertFalse(settings.admin_state_up)
85 self.assertTrue(settings.shared)
86 self.assertEqual('bar', settings.project_name)
87 self.assertTrue(settings.external)
88 self.assertEqual('vlan', settings.network_type)
89 self.assertEqual('phy', settings.physical_network)
90 self.assertEqual(2366, settings.segmentation_id)
91 self.assertEqual(1, len(settings.subnet_settings))
92 self.assertEqual('foo-subnet', settings.subnet_settings[0].name)
95 class SubnetConfigUnitTests(unittest.TestCase):
97 Tests the construction of the SubnetConfig class
100 def test_no_params(self):
101 with self.assertRaises(SubnetConfigError):
104 def test_empty_config(self):
105 with self.assertRaises(SubnetConfigError):
106 SubnetConfig(**dict())
108 def test_name_only(self):
109 with self.assertRaises(SubnetConfigError):
110 SubnetConfig(name='foo')
112 def test_config_with_name_only(self):
113 with self.assertRaises(SubnetConfigError):
114 SubnetConfig(**{'name': 'foo'})
116 def test_name_cidr_only(self):
117 settings = SubnetConfig(name='foo', cidr='10.0.0.0/24')
118 self.assertEqual('foo', settings.name)
119 self.assertEqual('10.0.0.0/24', settings.cidr)
120 self.assertEqual(4, settings.ip_version)
121 self.assertIsNone(settings.project_name)
122 self.assertIsNone(settings.start)
123 self.assertIsNone(settings.end)
124 self.assertIsNone(settings.enable_dhcp)
125 self.assertEqual(0, len(settings.dns_nameservers))
126 self.assertIsNone(settings.host_routes)
127 self.assertIsNone(settings.destination)
128 self.assertIsNone(settings.nexthop)
129 self.assertIsNone(settings.ipv6_ra_mode)
130 self.assertIsNone(settings.ipv6_address_mode)
132 def test_config_with_name_cidr_only(self):
133 settings = SubnetConfig(**{'name': 'foo', 'cidr': '10.0.0.0/24'})
134 self.assertEqual('foo', settings.name)
135 self.assertEqual('10.0.0.0/24', settings.cidr)
136 self.assertEqual(4, settings.ip_version)
137 self.assertIsNone(settings.project_name)
138 self.assertIsNone(settings.start)
139 self.assertIsNone(settings.end)
140 self.assertIsNone(settings.gateway_ip)
141 self.assertIsNone(settings.enable_dhcp)
142 self.assertEqual(0, len(settings.dns_nameservers))
143 self.assertIsNone(settings.host_routes)
144 self.assertIsNone(settings.destination)
145 self.assertIsNone(settings.nexthop)
146 self.assertIsNone(settings.ipv6_ra_mode)
147 self.assertIsNone(settings.ipv6_address_mode)
149 def test_all_string_enums(self):
150 host_routes = {'destination': '0.0.0.0/0', 'nexthop': '123.456.78.9'}
151 settings = SubnetConfig(
152 name='foo', cidr='10.0.0.0/24', ip_version=6,
153 project_name='bar-project', start='10.0.0.2', end='10.0.0.101',
154 gateway_ip='10.0.0.1', enable_dhcp=False,
155 dns_nameservers=['8.8.8.8'], host_routes=[host_routes],
156 destination='dest', nexthop='hop', ipv6_ra_mode='dhcpv6-stateful',
157 ipv6_address_mode='slaac')
158 self.assertEqual('foo', settings.name)
159 self.assertEqual('10.0.0.0/24', settings.cidr)
160 self.assertEqual(6, settings.ip_version)
161 self.assertEqual('bar-project', settings.project_name)
162 self.assertEqual('10.0.0.2', settings.start)
163 self.assertEqual('10.0.0.101', settings.end)
164 self.assertEqual('10.0.0.1', settings.gateway_ip)
165 self.assertEqual(False, settings.enable_dhcp)
166 self.assertEqual(1, len(settings.dns_nameservers))
167 self.assertEqual('8.8.8.8', settings.dns_nameservers[0])
168 self.assertEqual(1, len(settings.host_routes))
169 self.assertEqual(host_routes, settings.host_routes[0])
170 self.assertEqual('dest', settings.destination)
171 self.assertEqual('hop', settings.nexthop)
172 self.assertEqual(IPv6Mode.stateful, settings.ipv6_ra_mode)
173 self.assertEqual(IPv6Mode.slaac, settings.ipv6_address_mode)
175 def test_all_type_enums(self):
176 host_routes = {'destination': '0.0.0.0/0', 'nexthop': '123.456.78.9'}
177 settings = SubnetConfig(
178 name='foo', cidr='10.0.0.0/24', ip_version=6,
179 project_name='bar-project', start='10.0.0.2', end='10.0.0.101',
180 gateway_ip='10.0.0.1', enable_dhcp=False,
181 dns_nameservers=['8.8.8.8'], host_routes=[host_routes],
182 destination='dest', nexthop='hop', ipv6_ra_mode=IPv6Mode.stateful,
183 ipv6_address_mode=IPv6Mode.slaac)
184 self.assertEqual('foo', settings.name)
185 self.assertEqual('10.0.0.0/24', settings.cidr)
186 self.assertEqual(6, settings.ip_version)
187 self.assertEqual('bar-project', settings.project_name)
188 self.assertEqual('10.0.0.2', settings.start)
189 self.assertEqual('10.0.0.101', settings.end)
190 self.assertEqual('10.0.0.1', settings.gateway_ip)
191 self.assertEqual(False, settings.enable_dhcp)
192 self.assertEqual(1, len(settings.dns_nameservers))
193 self.assertEqual('8.8.8.8', settings.dns_nameservers[0])
194 self.assertEqual(1, len(settings.host_routes))
195 self.assertEqual(host_routes, settings.host_routes[0])
196 self.assertEqual('dest', settings.destination)
197 self.assertEqual('hop', settings.nexthop)
198 self.assertEqual(IPv6Mode.stateful, settings.ipv6_ra_mode)
199 self.assertEqual(IPv6Mode.slaac, settings.ipv6_address_mode)
201 def test_config_all(self):
202 host_routes = {'destination': '0.0.0.0/0', 'nexthop': '123.456.78.9'}
203 settings = SubnetConfig(
204 **{'name': 'foo', 'cidr': '10.0.0.0/24', 'ip_version': 6,
205 'project_name': 'bar-project', 'start': '10.0.0.2',
207 'gateway_ip': '10.0.0.1', 'enable_dhcp': False,
208 'dns_nameservers': ['8.8.8.8'], 'host_routes': [host_routes],
209 'destination': 'dest', 'nexthop': 'hop',
210 'ipv6_ra_mode': 'dhcpv6-stateless',
211 'ipv6_address_mode': 'slaac'})
212 self.assertEqual('foo', settings.name)
213 self.assertEqual('10.0.0.0/24', settings.cidr)
214 self.assertEqual(6, settings.ip_version)
215 self.assertEqual('bar-project', settings.project_name)
216 self.assertEqual('10.0.0.2', settings.start)
217 self.assertEqual('10.0.0.101', settings.end)
218 self.assertEqual('10.0.0.1', settings.gateway_ip)
219 self.assertEqual(False, settings.enable_dhcp)
220 self.assertEqual(1, len(settings.dns_nameservers))
221 self.assertEqual('8.8.8.8', settings.dns_nameservers[0])
222 self.assertEqual(1, len(settings.host_routes))
223 self.assertEqual(host_routes, settings.host_routes[0])
224 self.assertEqual('dest', settings.destination)
225 self.assertEqual('hop', settings.nexthop)
226 self.assertEqual(IPv6Mode.stateless, settings.ipv6_ra_mode)
227 self.assertEqual(IPv6Mode.slaac, settings.ipv6_address_mode)
230 class PortConfigUnitTests(unittest.TestCase):
232 Tests the construction of the PortConfig class
235 def test_no_params(self):
236 with self.assertRaises(PortConfigError):
239 def test_empty_config(self):
240 with self.assertRaises(PortConfigError):
243 def test_name_only(self):
244 with self.assertRaises(PortConfigError):
245 PortConfig(name='foo')
247 def test_config_name_only(self):
248 with self.assertRaises(PortConfigError):
249 PortConfig(**{'name': 'foo'})
251 def test_name_netname_only(self):
252 settings = PortConfig(name='foo', network_name='bar')
253 self.assertEqual('foo', settings.name)
254 self.assertEqual('bar', settings.network_name)
255 self.assertTrue(settings.admin_state_up)
256 self.assertIsNone(settings.project_name)
257 self.assertIsNone(settings.mac_address)
258 self.assertIsNone(settings.ip_addrs)
259 self.assertIsNone(settings.security_groups)
260 self.assertIsNone(settings.allowed_address_pairs)
261 self.assertIsNone(settings.opt_value)
262 self.assertIsNone(settings.opt_name)
263 self.assertIsNone(settings.device_owner)
264 self.assertIsNone(settings.device_id)
266 def test_config_with_name_netname_only(self):
267 settings = PortConfig(**{'name': 'foo', 'network_name': 'bar'})
268 self.assertEqual('foo', settings.name)
269 self.assertEqual('bar', settings.network_name)
270 self.assertTrue(settings.admin_state_up)
271 self.assertIsNone(settings.project_name)
272 self.assertIsNone(settings.mac_address)
273 self.assertIsNone(settings.ip_addrs)
274 self.assertIsNone(settings.security_groups)
275 self.assertIsNone(settings.port_security_enabled)
276 self.assertIsNone(settings.allowed_address_pairs)
277 self.assertIsNone(settings.opt_value)
278 self.assertIsNone(settings.opt_name)
279 self.assertIsNone(settings.device_owner)
280 self.assertIsNone(settings.device_id)
283 ip_addrs = [{'subnet_name', 'foo-sub', 'ip', '10.0.0.10'}]
284 allowed_address_pairs = {'10.0.0.101', '1234.5678'}
286 settings = PortConfig(
287 name='foo', network_name='bar', admin_state_up=False,
288 project_name='foo-project', mac_address='1234', ip_addrs=ip_addrs,
289 security_groups=['foo_grp_id'], port_security_enabled=False,
290 allowed_address_pairs=allowed_address_pairs, opt_value='opt value',
291 opt_name='opt name', device_owner='owner',
292 device_id='device number')
293 self.assertEqual('foo', settings.name)
294 self.assertEqual('bar', settings.network_name)
295 self.assertFalse(settings.admin_state_up)
296 self.assertEqual('foo-project', settings.project_name)
297 self.assertEqual('1234', settings.mac_address)
298 self.assertEqual(ip_addrs, settings.ip_addrs)
299 self.assertEqual(1, len(settings.security_groups))
300 self.assertFalse(settings.port_security_enabled)
301 self.assertEqual('foo_grp_id', settings.security_groups[0])
302 self.assertFalse(settings.port_security_enabled)
303 self.assertEqual(allowed_address_pairs, settings.allowed_address_pairs)
304 self.assertEqual('opt value', settings.opt_value)
305 self.assertEqual('opt name', settings.opt_name)
306 self.assertEqual('owner', settings.device_owner)
307 self.assertEqual('device number', settings.device_id)
309 def test_config_all(self):
310 ip_addrs = [{'subnet_name', 'foo-sub', 'ip', '10.0.0.10'}]
311 allowed_address_pairs = {'10.0.0.101', '1234.5678'}
313 settings = PortConfig(
314 **{'name': 'foo', 'network_name': 'bar', 'admin_state_up': False,
315 'project_name': 'foo-project', 'mac_address': '1234',
316 'ip_addrs': ip_addrs, 'security_groups': ['foo_grp_id'],
317 'port_security_enabled': 'false',
318 'allowed_address_pairs': allowed_address_pairs,
319 'opt_value': 'opt value', 'opt_name': 'opt name',
320 'device_owner': 'owner', 'device_id': 'device number'})
321 self.assertEqual('foo', settings.name)
322 self.assertEqual('bar', settings.network_name)
323 self.assertFalse(settings.admin_state_up)
324 self.assertEqual('foo-project', settings.project_name)
325 self.assertEqual('1234', settings.mac_address)
326 self.assertEqual(ip_addrs, settings.ip_addrs)
327 self.assertEqual(1, len(settings.security_groups))
328 self.assertFalse(settings.port_security_enabled)
329 self.assertEqual('foo_grp_id', settings.security_groups[0])
330 self.assertEqual(allowed_address_pairs, settings.allowed_address_pairs)
331 self.assertEqual('opt value', settings.opt_value)
332 self.assertEqual('opt name', settings.opt_name)
333 self.assertEqual('owner', settings.device_owner)
334 self.assertEqual('device number', settings.device_id)