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(1, len(settings.dns_nameservers))
126 self.assertEqual('8.8.8.8', settings.dns_nameservers[0])
127 self.assertIsNone(settings.host_routes)
128 self.assertIsNone(settings.destination)
129 self.assertIsNone(settings.nexthop)
130 self.assertIsNone(settings.ipv6_ra_mode)
131 self.assertIsNone(settings.ipv6_address_mode)
133 def test_config_with_name_cidr_only(self):
134 settings = SubnetConfig(**{'name': 'foo', 'cidr': '10.0.0.0/24'})
135 self.assertEqual('foo', settings.name)
136 self.assertEqual('10.0.0.0/24', settings.cidr)
137 self.assertEqual(4, settings.ip_version)
138 self.assertIsNone(settings.project_name)
139 self.assertIsNone(settings.start)
140 self.assertIsNone(settings.end)
141 self.assertIsNone(settings.gateway_ip)
142 self.assertIsNone(settings.enable_dhcp)
143 self.assertEqual(1, len(settings.dns_nameservers))
144 self.assertEqual('8.8.8.8', settings.dns_nameservers[0])
145 self.assertIsNone(settings.host_routes)
146 self.assertIsNone(settings.destination)
147 self.assertIsNone(settings.nexthop)
148 self.assertIsNone(settings.ipv6_ra_mode)
149 self.assertIsNone(settings.ipv6_address_mode)
151 def test_all_string_enums(self):
152 host_routes = {'destination': '0.0.0.0/0', 'nexthop': '123.456.78.9'}
153 settings = SubnetConfig(
154 name='foo', cidr='10.0.0.0/24', ip_version=6,
155 project_name='bar-project', start='10.0.0.2', end='10.0.0.101',
156 gateway_ip='10.0.0.1', enable_dhcp=False,
157 dns_nameservers=['8.8.8.8'], host_routes=[host_routes],
158 destination='dest', nexthop='hop', ipv6_ra_mode='dhcpv6-stateful',
159 ipv6_address_mode='slaac')
160 self.assertEqual('foo', settings.name)
161 self.assertEqual('10.0.0.0/24', settings.cidr)
162 self.assertEqual(6, settings.ip_version)
163 self.assertEqual('bar-project', settings.project_name)
164 self.assertEqual('10.0.0.2', settings.start)
165 self.assertEqual('10.0.0.101', settings.end)
166 self.assertEqual('10.0.0.1', settings.gateway_ip)
167 self.assertEqual(False, settings.enable_dhcp)
168 self.assertEqual(1, len(settings.dns_nameservers))
169 self.assertEqual('8.8.8.8', settings.dns_nameservers[0])
170 self.assertEqual(1, len(settings.host_routes))
171 self.assertEqual(host_routes, settings.host_routes[0])
172 self.assertEqual('dest', settings.destination)
173 self.assertEqual('hop', settings.nexthop)
174 self.assertEqual(IPv6Mode.stateful, settings.ipv6_ra_mode)
175 self.assertEqual(IPv6Mode.slaac, settings.ipv6_address_mode)
177 def test_all_type_enums(self):
178 host_routes = {'destination': '0.0.0.0/0', 'nexthop': '123.456.78.9'}
179 settings = SubnetConfig(
180 name='foo', cidr='10.0.0.0/24', ip_version=6,
181 project_name='bar-project', start='10.0.0.2', end='10.0.0.101',
182 gateway_ip='10.0.0.1', enable_dhcp=False,
183 dns_nameservers=['8.8.8.8'], host_routes=[host_routes],
184 destination='dest', nexthop='hop', ipv6_ra_mode=IPv6Mode.stateful,
185 ipv6_address_mode=IPv6Mode.slaac)
186 self.assertEqual('foo', settings.name)
187 self.assertEqual('10.0.0.0/24', settings.cidr)
188 self.assertEqual(6, settings.ip_version)
189 self.assertEqual('bar-project', settings.project_name)
190 self.assertEqual('10.0.0.2', settings.start)
191 self.assertEqual('10.0.0.101', settings.end)
192 self.assertEqual('10.0.0.1', settings.gateway_ip)
193 self.assertEqual(False, settings.enable_dhcp)
194 self.assertEqual(1, len(settings.dns_nameservers))
195 self.assertEqual('8.8.8.8', settings.dns_nameservers[0])
196 self.assertEqual(1, len(settings.host_routes))
197 self.assertEqual(host_routes, settings.host_routes[0])
198 self.assertEqual('dest', settings.destination)
199 self.assertEqual('hop', settings.nexthop)
200 self.assertEqual(IPv6Mode.stateful, settings.ipv6_ra_mode)
201 self.assertEqual(IPv6Mode.slaac, settings.ipv6_address_mode)
203 def test_config_all(self):
204 host_routes = {'destination': '0.0.0.0/0', 'nexthop': '123.456.78.9'}
205 settings = SubnetConfig(
206 **{'name': 'foo', 'cidr': '10.0.0.0/24', 'ip_version': 6,
207 'project_name': 'bar-project', 'start': '10.0.0.2',
209 'gateway_ip': '10.0.0.1', 'enable_dhcp': False,
210 'dns_nameservers': ['8.8.8.8'], 'host_routes': [host_routes],
211 'destination': 'dest', 'nexthop': 'hop',
212 'ipv6_ra_mode': 'dhcpv6-stateless',
213 'ipv6_address_mode': 'slaac'})
214 self.assertEqual('foo', settings.name)
215 self.assertEqual('10.0.0.0/24', settings.cidr)
216 self.assertEqual(6, settings.ip_version)
217 self.assertEqual('bar-project', settings.project_name)
218 self.assertEqual('10.0.0.2', settings.start)
219 self.assertEqual('10.0.0.101', settings.end)
220 self.assertEqual('10.0.0.1', settings.gateway_ip)
221 self.assertEqual(False, settings.enable_dhcp)
222 self.assertEqual(1, len(settings.dns_nameservers))
223 self.assertEqual('8.8.8.8', settings.dns_nameservers[0])
224 self.assertEqual(1, len(settings.host_routes))
225 self.assertEqual(host_routes, settings.host_routes[0])
226 self.assertEqual('dest', settings.destination)
227 self.assertEqual('hop', settings.nexthop)
228 self.assertEqual(IPv6Mode.stateless, settings.ipv6_ra_mode)
229 self.assertEqual(IPv6Mode.slaac, settings.ipv6_address_mode)
232 class PortConfigUnitTests(unittest.TestCase):
234 Tests the construction of the PortConfig class
237 def test_no_params(self):
238 with self.assertRaises(PortConfigError):
241 def test_empty_config(self):
242 with self.assertRaises(PortConfigError):
245 def test_name_only(self):
246 with self.assertRaises(PortConfigError):
247 PortConfig(name='foo')
249 def test_config_name_only(self):
250 with self.assertRaises(PortConfigError):
251 PortConfig(**{'name': 'foo'})
253 def test_name_netname_only(self):
254 settings = PortConfig(name='foo', network_name='bar')
255 self.assertEqual('foo', settings.name)
256 self.assertEqual('bar', settings.network_name)
257 self.assertTrue(settings.admin_state_up)
258 self.assertIsNone(settings.project_name)
259 self.assertIsNone(settings.mac_address)
260 self.assertIsNone(settings.ip_addrs)
261 self.assertIsNone(settings.security_groups)
262 self.assertIsNone(settings.allowed_address_pairs)
263 self.assertIsNone(settings.opt_value)
264 self.assertIsNone(settings.opt_name)
265 self.assertIsNone(settings.device_owner)
266 self.assertIsNone(settings.device_id)
268 def test_config_with_name_netname_only(self):
269 settings = PortConfig(**{'name': 'foo', 'network_name': 'bar'})
270 self.assertEqual('foo', settings.name)
271 self.assertEqual('bar', settings.network_name)
272 self.assertTrue(settings.admin_state_up)
273 self.assertIsNone(settings.project_name)
274 self.assertIsNone(settings.mac_address)
275 self.assertIsNone(settings.ip_addrs)
276 self.assertIsNone(settings.security_groups)
277 self.assertIsNone(settings.allowed_address_pairs)
278 self.assertIsNone(settings.opt_value)
279 self.assertIsNone(settings.opt_name)
280 self.assertIsNone(settings.device_owner)
281 self.assertIsNone(settings.device_id)
284 ip_addrs = [{'subnet_name', 'foo-sub', 'ip', '10.0.0.10'}]
285 allowed_address_pairs = {'10.0.0.101', '1234.5678'}
287 settings = PortConfig(
288 name='foo', network_name='bar', admin_state_up=False,
289 project_name='foo-project', mac_address='1234', ip_addrs=ip_addrs,
290 security_groups=['foo_grp_id'],
291 allowed_address_pairs=allowed_address_pairs, opt_value='opt value',
292 opt_name='opt name', device_owner='owner',
293 device_id='device number')
294 self.assertEqual('foo', settings.name)
295 self.assertEqual('bar', settings.network_name)
296 self.assertFalse(settings.admin_state_up)
297 self.assertEqual('foo-project', settings.project_name)
298 self.assertEqual('1234', settings.mac_address)
299 self.assertEqual(ip_addrs, settings.ip_addrs)
300 self.assertEqual(1, len(settings.security_groups))
301 self.assertEqual('foo_grp_id', settings.security_groups[0])
302 self.assertEqual(allowed_address_pairs, settings.allowed_address_pairs)
303 self.assertEqual('opt value', settings.opt_value)
304 self.assertEqual('opt name', settings.opt_name)
305 self.assertEqual('owner', settings.device_owner)
306 self.assertEqual('device number', settings.device_id)
308 def test_config_all(self):
309 ip_addrs = [{'subnet_name', 'foo-sub', 'ip', '10.0.0.10'}]
310 allowed_address_pairs = {'10.0.0.101', '1234.5678'}
312 settings = PortConfig(
313 **{'name': 'foo', 'network_name': 'bar', 'admin_state_up': False,
314 'project_name': 'foo-project', 'mac_address': '1234',
315 'ip_addrs': ip_addrs, 'security_groups': ['foo_grp_id'],
316 'allowed_address_pairs': allowed_address_pairs,
317 'opt_value': 'opt value', 'opt_name': 'opt name',
318 'device_owner': 'owner', 'device_id': 'device number'})
319 self.assertEqual('foo', settings.name)
320 self.assertEqual('bar', settings.network_name)
321 self.assertFalse(settings.admin_state_up)
322 self.assertEqual('foo-project', settings.project_name)
323 self.assertEqual('1234', settings.mac_address)
324 self.assertEqual(ip_addrs, settings.ip_addrs)
325 self.assertEqual(1, len(settings.security_groups))
326 self.assertEqual('foo_grp_id', settings.security_groups[0])
327 self.assertEqual(allowed_address_pairs, settings.allowed_address_pairs)
328 self.assertEqual('opt value', settings.opt_value)
329 self.assertEqual('opt name', settings.opt_name)
330 self.assertEqual('owner', settings.device_owner)
331 self.assertEqual('device number', settings.device_id)