Implemented the ability to create Magnum Cluster Type objects.
[snaps.git] / snaps / config / tests / cluster_template_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.cluster_template import ClusterTemplateConfig, \
18     ClusterTypeConfigError, ServerType, DockerStorageDriver, \
19     ContainerOrchestrationEngine
20
21
22 class ClusterTemplateConfigUnitTests(unittest.TestCase):
23     """
24     Tests the construction of the ClusterTemplateConfig class
25     """
26
27     def test_no_params(self):
28         with self.assertRaises(ClusterTypeConfigError):
29             ClusterTemplateConfig()
30
31     def test_empty_config(self):
32         with self.assertRaises(ClusterTypeConfigError):
33             ClusterTemplateConfig(config=dict())
34
35     def test_name_only(self):
36         with self.assertRaises(ClusterTypeConfigError):
37             ClusterTemplateConfig(name='foo')
38
39     def test_minimal_named(self):
40         config = ClusterTemplateConfig(
41             name='foo', image='bar', keypair='keys', external_net='external')
42         self.assertIsNotNone(config)
43         self.assertEqual('foo', config.name)
44         self.assertEqual('bar', config.image)
45         self.assertEqual('keys', config.keypair)
46         self.assertIsNone(config.network_driver)
47         self.assertEqual('external', config.external_net)
48         self.assertTrue(config.floating_ip_enabled)
49         self.assertEqual(3, config.docker_volume_size)
50         self.assertEqual(ServerType.vm, config.server_type)
51         self.assertIsNone(config.flavor)
52         self.assertIsNone(config.master_flavor)
53         self.assertEqual(ContainerOrchestrationEngine.kubernetes, config.coe)
54         self.assertIsNone(config.fixed_net)
55         self.assertIsNone(config.fixed_subnet)
56         self.assertTrue(config.registry_enabled)
57         self.assertIsNone(config.insecure_registry)
58         self.assertEqual(DockerStorageDriver.devicemapper,
59                          config.docker_storage_driver)
60         self.assertIsNone(config.dns_nameserver)
61         self.assertFalse(config.public)
62         self.assertFalse(config.tls_disabled)
63         self.assertIsNone(config.http_proxy)
64         self.assertIsNone(config.https_proxy)
65         self.assertIsNone(config.no_proxy)
66         self.assertIsNone(config.volume_driver)
67         self.assertTrue(config.master_lb_enabled)
68         self.assertIsNone(config.labels)
69
70     def test_minimal_config(self):
71         config = ClusterTemplateConfig(
72             **{'name': 'foo', 'image': 'bar', 'keypair': 'keys',
73                'external_net': 'external'})
74         self.assertIsNotNone(config)
75         self.assertEqual('foo', config.name)
76         self.assertEqual('bar', config.image)
77         self.assertEqual('keys', config.keypair)
78         self.assertIsNone(config.network_driver)
79         self.assertEqual('external', config.external_net)
80         self.assertTrue(config.floating_ip_enabled)
81         self.assertEqual(3, config.docker_volume_size)
82         self.assertEqual(ServerType.vm, config.server_type)
83         self.assertIsNone(config.flavor)
84         self.assertIsNone(config.master_flavor)
85         self.assertEqual(ContainerOrchestrationEngine.kubernetes, config.coe)
86         self.assertIsNone(config.fixed_net)
87         self.assertIsNone(config.fixed_subnet)
88         self.assertTrue(config.registry_enabled)
89         self.assertIsNone(config.insecure_registry)
90         self.assertEqual(DockerStorageDriver.devicemapper,
91                          config.docker_storage_driver)
92         self.assertIsNone(config.dns_nameserver)
93         self.assertFalse(config.public)
94         self.assertFalse(config.tls_disabled)
95         self.assertIsNone(config.http_proxy)
96         self.assertIsNone(config.https_proxy)
97         self.assertIsNone(config.no_proxy)
98         self.assertIsNone(config.volume_driver)
99         self.assertTrue(config.master_lb_enabled)
100         self.assertIsNone(config.labels)
101
102     def test_all_named(self):
103         labels = {'foo': 'bar'}
104         config = ClusterTemplateConfig(
105             name='foo', image='bar', keypair='keys', network_driver='driver',
106             external_net='external', docker_volume_size=99,
107             server_type=ServerType.baremetal, flavor='testFlavor',
108             master_flavor='masterFlavor',
109             coe=ContainerOrchestrationEngine.kubernetes, fixed_net='fixedNet',
110             fixed_subnet='fixedSubnet', registry_enabled=False,
111             docker_storage_driver=DockerStorageDriver.overlay,
112             dns_nameserver='8.8.4.4', public=True, tls=False,
113             http_proxy='http://foo:8080', https_proxy='https://foo:443',
114             no_proxy='foo,bar', volume_driver='volDriver',
115             master_lb_enabled=False, labels=labels)
116         self.assertIsNotNone(config)
117         self.assertEqual('foo', config.name)
118         self.assertEqual('bar', config.image)
119         self.assertEqual('keys', config.keypair)
120         self.assertEqual('driver', config.network_driver)
121         self.assertEqual('external', config.external_net)
122         self.assertEqual(99, config.docker_volume_size)
123         self.assertEqual(ServerType.baremetal, config.server_type)
124         self.assertEqual('testFlavor', config.flavor)
125         self.assertEqual('masterFlavor', config.master_flavor)
126         self.assertEqual(ContainerOrchestrationEngine.kubernetes, config.coe)
127         self.assertEqual('fixedNet', config.fixed_net)
128         self.assertEqual('fixedSubnet', config.fixed_subnet)
129         self.assertFalse(config.registry_enabled)
130         self.assertEqual(DockerStorageDriver.overlay,
131                          config.docker_storage_driver)
132         self.assertEqual('8.8.4.4', config.dns_nameserver)
133         self.assertTrue(config.public)
134         self.assertFalse(config.tls_disabled)
135         self.assertEqual('http://foo:8080', config.http_proxy)
136         self.assertEqual('https://foo:443', config.https_proxy)
137         self.assertEqual('foo,bar', config.no_proxy)
138         self.assertEqual('volDriver', config.volume_driver)
139         self.assertFalse(config.master_lb_enabled)
140         self.assertEqual(labels, config.labels)
141
142     def test_all_config(self):
143         labels = {'foo': 'bar'}
144         config = ClusterTemplateConfig(**{
145             'name': 'foo', 'image': 'bar', 'keypair': 'keys',
146             'network_driver': 'driver', 'external_net': 'external',
147             'docker_volume_size': '99', 'server_type': 'baremetal',
148             'flavor': 'testFlavor', 'master_flavor': 'masterFlavor',
149             'coe': 'kubernetes', 'fixed_net': 'fixedNet',
150             'fixed_subnet': 'fixedSubnet', 'registry_enabled': 'false',
151             'docker_storage_driver': 'overlay', 'dns_nameserver': '8.8.4.4',
152             'public': 'true', 'tls': 'false', 'http_proxy': 'http://foo:8080',
153             'https_proxy': 'https://foo:443', 'no_proxy': 'foo,bar',
154             'volume_driver': 'volDriver', 'master_lb_enabled': 'false',
155             'labels': labels})
156         self.assertIsNotNone(config)
157         self.assertEqual('foo', config.name)
158         self.assertEqual('bar', config.image)
159         self.assertEqual('keys', config.keypair)
160         self.assertEqual('driver', config.network_driver)
161         self.assertEqual('external', config.external_net)
162         self.assertEqual(99, config.docker_volume_size)
163         self.assertEqual(ServerType.baremetal, config.server_type)
164         self.assertEqual('testFlavor', config.flavor)
165         self.assertEqual('masterFlavor', config.master_flavor)
166         self.assertEqual(ContainerOrchestrationEngine.kubernetes, config.coe)
167         self.assertEqual('fixedNet', config.fixed_net)
168         self.assertEqual('fixedSubnet', config.fixed_subnet)
169         self.assertFalse(config.registry_enabled)
170         self.assertEqual(DockerStorageDriver.overlay,
171                          config.docker_storage_driver)
172         self.assertEqual('8.8.4.4', config.dns_nameserver)
173         self.assertTrue(config.public)
174         self.assertFalse(config.tls_disabled)
175         self.assertEqual('http://foo:8080', config.http_proxy)
176         self.assertEqual('https://foo:443', config.https_proxy)
177         self.assertEqual('foo,bar', config.no_proxy)
178         self.assertEqual('volDriver', config.volume_driver)
179         self.assertFalse(config.master_lb_enabled)
180         self.assertEqual(labels, config.labels)