8f994352aa3b6df9d5131157679be39d68b5449e
[apex.git] / tests / test_apex_network_settings.py
1 ##############################################################################
2 # Copyright (c) 2016 Dan Radez (Red Hat)
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9
10 from apex.common.constants import (
11     EXTERNAL_NETWORK,
12     STORAGE_NETWORK,
13     ADMIN_NETWORK,
14 )
15
16 from apex.network_settings import (
17     NetworkSettings,
18     NetworkSettingsException,
19 )
20
21 from nose.tools import (
22     assert_equal,
23     assert_is_instance,
24     assert_raises
25 )
26
27 files_dir = '../config/network/'
28
29
30 class TestNetworkSettings(object):
31     @classmethod
32     def setup_class(klass):
33         """This method is run once for each class before any tests are run"""
34
35     @classmethod
36     def teardown_class(klass):
37         """This method is run once for each class _after_ all tests are run"""
38
39     def setUp(self):
40         """This method is run once before _each_ test method is executed"""
41
42     def teardown(self):
43         """This method is run once after _each_ test method is executed"""
44
45     def test_init(self):
46         assert_is_instance(
47             NetworkSettings(files_dir+'network_settings.yaml'),
48             NetworkSettings)
49
50     def test_init_vlans(self):
51         assert_is_instance(
52             NetworkSettings(files_dir+'network_settings_vlans.yaml'),
53             NetworkSettings)
54
55 # TODO, v6 test is stuck
56     # def test_init_v6(self):
57     #     assert_is_instance(
58     #         NetworkSettings(files_dir+'network_settings_v6.yaml', True),
59     #         NetworkSettings)
60
61     def test_init_admin_disabled_or_missing(self):
62         ns = NetworkSettings(files_dir+'network_settings.yaml')
63         # remove admin, apex section will re-add it
64         ns['networks'].pop('admin', None)
65         assert_raises(NetworkSettingsException, NetworkSettings, ns)
66         # remove admin and apex
67         ns.pop('apex', None)
68         ns['networks'].pop('admin', None)
69         assert_raises(NetworkSettingsException, NetworkSettings, ns)
70
71     def test_init_collapse_storage(self):
72         ns = NetworkSettings(files_dir+'network_settings.yaml')
73         # remove storage
74         ns['networks'].pop('storage', None)
75         assert_is_instance(NetworkSettings(ns), NetworkSettings)
76
77     def test_init_missing_dns_domain(self):
78         ns = NetworkSettings(files_dir+'network_settings.yaml')
79         # remove storage
80         ns.pop('dns-domain', None)
81         assert_is_instance(NetworkSettings(ns), NetworkSettings)
82
83     def test_dump_bash(self):
84         ns = NetworkSettings('../config/network/network_settings.yaml')
85         assert_equal(ns.dump_bash(), None)
86         assert_equal(ns.dump_bash(path='/dev/null'), None)
87
88     def test_get_network_settings(self):
89         ns = NetworkSettings('../config/network/network_settings.yaml')
90         assert_is_instance(ns, NetworkSettings)
91         for role in ['controller', 'compute']:
92             nic_index = 1
93             print(ns.nics)
94             for network in ns.enabled_network_list:
95                 if role == 'compute':
96                     nic = 'eth' + str(nic_index - 1)
97                 else:
98                     nic = 'nic' + str(nic_index)
99                 assert_equal(ns.nics[role][network], nic)
100                 nic_index += 1
101
102     def test_get_enabled_networks(self):
103         ns = NetworkSettings('../config/network/network_settings.yaml')
104         assert_is_instance(ns.enabled_network_list, list)
105
106     def test_invalid_nic_members(self):
107         ns = NetworkSettings(files_dir+'network_settings.yaml')
108         storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
109         # set duplicate nic
110         storage_net_nicmap['controller']['members'][0] = 'nic1'
111         assert_raises(NetworkSettingsException, NetworkSettings, ns)
112         # remove nic members
113         storage_net_nicmap['controller']['members'] = []
114         assert_raises(NetworkSettingsException, NetworkSettings, ns)
115
116     def test_missing_vlan(self):
117         ns = NetworkSettings(files_dir+'network_settings.yaml')
118         storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
119         # remove vlan from storage net
120         storage_net_nicmap['compute'].pop('vlan', None)
121         assert_is_instance(NetworkSettings(ns), NetworkSettings)
122
123 # TODO
124 # need to manipulate interfaces some how
125 # maybe for ip_utils to return something to pass this
126 #    def test_admin_auto_detect(self):
127 #        ns = NetworkSettings(files_dir+'network_settings.yaml')
128 #        # remove cidr to force autodetection
129 #        ns['networks'][ADMIN_NETWORK].pop('cidr', None)
130 #        assert_is_instance(NetworkSettings(ns), NetworkSettings)
131
132     def test_admin_fail_auto_detect(self):
133         ns = NetworkSettings(files_dir+'network_settings.yaml')
134         # remove cidr and installer_vm to fail autodetect
135         ns['networks'][ADMIN_NETWORK].pop('cidr', None)
136         ns['networks'][ADMIN_NETWORK].pop('installer_vm', None)
137         assert_raises(NetworkSettingsException, NetworkSettings, ns)
138
139     def test_exception(self):
140         e = NetworkSettingsException("test")
141         print(e)
142         assert_is_instance(e, NetworkSettingsException)
143
144     def test_config_ip(self):
145         ns = NetworkSettings(files_dir+'network_settings.yaml')
146         # set the provisioner ip to None to force _gen_ip to generate one
147         ns['networks'][ADMIN_NETWORK]['installer_vm']['ip'] = None
148         ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'] = None
149         # Now rebuild network settings object and check for repopulated values
150         ns = NetworkSettings(ns)
151         assert_equal(ns['networks'][ADMIN_NETWORK]['installer_vm']['ip'],
152                      '192.0.2.1')
153         assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'],
154                      '192.168.37.1')
155
156     def test_config_gateway(self):
157         ns = NetworkSettings(files_dir+'network_settings.yaml')
158         # set the gateway ip to None to force _config_gateway to generate one
159         ns['networks'][EXTERNAL_NETWORK][0]['gateway'] = None
160         # Now rebuild network settings object and check for a repopulated value
161         ns = NetworkSettings(ns)
162         assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['gateway'],
163                      '192.168.37.1')