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