1 ##############################################################################
2 # Copyright (c) 2016 Dan Radez (Red Hat)
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 ##############################################################################
10 from apex.common.constants import (
16 from apex.network_settings import (
18 NetworkSettingsException,
21 from nose.tools import (
27 files_dir = '../config/network/'
30 class TestNetworkSettings(object):
32 def setup_class(klass):
33 """This method is run once for each class before any tests are run"""
36 def teardown_class(klass):
37 """This method is run once for each class _after_ all tests are run"""
40 """This method is run once before _each_ test method is executed"""
43 """This method is run once after _each_ test method is executed"""
47 NetworkSettings(files_dir+'network_settings.yaml'),
50 def test_init_vlans(self):
52 NetworkSettings(files_dir+'network_settings_vlans.yaml'),
55 # TODO, v6 test is stuck
56 # def test_init_v6(self):
58 # NetworkSettings(files_dir+'network_settings_v6.yaml', True),
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
68 ns['networks'].pop('admin', None)
69 assert_raises(NetworkSettingsException, NetworkSettings, ns)
71 def test_init_collapse_storage(self):
72 ns = NetworkSettings(files_dir+'network_settings.yaml')
74 ns['networks'].pop('storage', None)
75 assert_is_instance(NetworkSettings(ns), NetworkSettings)
77 def test_init_missing_dns_domain(self):
78 ns = NetworkSettings(files_dir+'network_settings.yaml')
80 ns.pop('dns-domain', None)
81 assert_is_instance(NetworkSettings(ns), NetworkSettings)
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)
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']:
94 for network in ns.enabled_network_list:
96 nic = 'eth' + str(nic_index - 1)
98 nic = 'nic' + str(nic_index)
99 assert_equal(ns.nics[role][network], nic)
102 def test_get_enabled_networks(self):
103 ns = NetworkSettings('../config/network/network_settings.yaml')
104 assert_is_instance(ns.enabled_network_list, list)
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']
110 storage_net_nicmap['controller']['members'][0] = 'nic1'
111 assert_raises(NetworkSettingsException, NetworkSettings, ns)
113 storage_net_nicmap['controller']['members'] = []
114 assert_raises(NetworkSettingsException, NetworkSettings, ns)
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)
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)
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)
139 def test_exception(self):
140 e = NetworkSettingsException("test")
142 assert_is_instance(e, NetworkSettingsException)
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'],
153 assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'],
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'],