Refactoring of RouterSettings to extend RouterConfig
[snaps.git] / snaps / config / tests / router_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.router import RouterConfig, RouterConfigError
18 from snaps.openstack.create_network import PortSettings
19
20
21 class RouterConfigUnitTests(unittest.TestCase):
22     """
23     Class for testing the RouterConfig class
24     """
25
26     def test_no_params(self):
27         with self.assertRaises(RouterConfigError):
28             RouterConfig()
29
30     def test_empty_config(self):
31         with self.assertRaises(RouterConfigError):
32             RouterConfig(**dict())
33
34     def test_name_only(self):
35         settings = RouterConfig(name='foo')
36         self.assertEqual('foo', settings.name)
37         self.assertIsNone(settings.project_name)
38         self.assertIsNone(settings.external_gateway)
39         self.assertTrue(settings.admin_state_up)
40         self.assertIsNone(settings.enable_snat)
41         self.assertIsNotNone(settings.internal_subnets)
42         self.assertTrue(isinstance(settings.internal_subnets, list))
43         self.assertEqual(0, len(settings.internal_subnets))
44         self.assertIsNotNone(settings.port_settings)
45         self.assertTrue(isinstance(settings.port_settings, list))
46         self.assertEqual(0, len(settings.port_settings))
47
48     def test_config_with_name_only(self):
49         settings = RouterConfig(**{'name': 'foo'})
50         self.assertEqual('foo', settings.name)
51         self.assertIsNone(settings.project_name)
52         self.assertIsNone(settings.external_gateway)
53         self.assertTrue(settings.admin_state_up)
54         self.assertIsNone(settings.enable_snat)
55         self.assertIsNotNone(settings.internal_subnets)
56         self.assertTrue(isinstance(settings.internal_subnets, list))
57         self.assertEqual(0, len(settings.internal_subnets))
58         self.assertIsNotNone(settings.port_settings)
59         self.assertTrue(isinstance(settings.port_settings, list))
60         self.assertEqual(0, len(settings.port_settings))
61
62     def test_all(self):
63         port_settings = PortSettings(name='foo', network_name='bar')
64         settings = RouterConfig(
65             name='foo', project_name='bar', external_gateway='foo_gateway',
66             admin_state_up=True, enable_snat=False,
67             internal_subnets=['10.0.0.1/24'], interfaces=[port_settings])
68         self.assertEqual('foo', settings.name)
69         self.assertEqual('bar', settings.project_name)
70         self.assertEqual('foo_gateway', settings.external_gateway)
71         self.assertTrue(settings.admin_state_up)
72         self.assertFalse(settings.enable_snat)
73         self.assertIsNotNone(settings.internal_subnets)
74         self.assertTrue(isinstance(settings.internal_subnets, list))
75         self.assertEqual(1, len(settings.internal_subnets))
76         self.assertEqual(['10.0.0.1/24'], settings.internal_subnets)
77         self.assertEqual([port_settings], settings.port_settings)
78
79     def test_config_all(self):
80         settings = RouterConfig(
81             **{'name': 'foo', 'project_name': 'bar',
82                'external_gateway': 'foo_gateway', 'admin_state_up': True,
83                'enable_snat': False, 'internal_subnets': ['10.0.0.1/24'],
84                'interfaces':
85                    [{'port': {'name': 'foo-port',
86                               'network_name': 'bar-net'}}]})
87         self.assertEqual('foo', settings.name)
88         self.assertEqual('bar', settings.project_name)
89         self.assertEqual('foo_gateway', settings.external_gateway)
90         self.assertTrue(settings.admin_state_up)
91         self.assertFalse(settings.enable_snat)
92         self.assertIsNotNone(settings.internal_subnets)
93         self.assertTrue(isinstance(settings.internal_subnets, list))
94         self.assertEqual(1, len(settings.internal_subnets))
95         self.assertEqual(['10.0.0.1/24'], settings.internal_subnets)
96         self.assertEqual([PortSettings(**{'name': 'foo-port',
97                                           'network_name': 'bar-net'})],
98                          settings.port_settings)