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 ##############################################################################
12 from nose.tools import (
18 from apex.common.constants import (
23 from apex import NetworkSettings
24 from apex.settings.network_settings import NetworkSettingsException
25 from apex.tests.constants import TEST_CONFIG_DIR
27 files_dir = os.path.join(TEST_CONFIG_DIR, '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(os.path.join(files_dir, 'network_settings.yaml')),
50 def test_init_vlans(self):
52 NetworkSettings(os.path.join(files_dir,
53 'network_settings_vlans.yaml')),
56 # TODO, v6 test is stuck
57 # def test_init_v6(self):
59 # NetworkSettings(files_dir+'network_settings_v6.yaml', True),
62 def test_init_admin_disabled_or_missing(self):
63 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
64 # remove admin, apex section will re-add it
65 ns['networks'].pop('admin', None)
66 assert_raises(NetworkSettingsException, NetworkSettings, ns)
67 # remove admin and apex
69 ns['networks'].pop('admin', None)
70 assert_raises(NetworkSettingsException, NetworkSettings, ns)
72 def test_init_collapse_storage(self):
73 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
75 ns['networks'].pop('storage', None)
76 assert_is_instance(NetworkSettings(ns), NetworkSettings)
78 def test_init_missing_dns_domain(self):
79 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
81 ns.pop('dns-domain', None)
82 assert_is_instance(NetworkSettings(ns), NetworkSettings)
84 def test_get_network_settings(self):
85 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
86 assert_is_instance(ns, NetworkSettings)
87 for role in ['controller', 'compute']:
90 for network in ns.enabled_network_list:
91 nic = 'eth' + str(nic_index)
92 assert_equal(ns.nics[role][network], nic)
95 def test_get_enabled_networks(self):
96 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
97 assert_is_instance(ns.enabled_network_list, list)
99 def test_invalid_nic_members(self):
100 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
101 storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
103 storage_net_nicmap['controller']['members'][0] = 'eth0'
104 assert_raises(NetworkSettingsException, NetworkSettings, ns)
106 storage_net_nicmap['controller']['members'] = []
107 assert_raises(NetworkSettingsException, NetworkSettings, ns)
109 def test_missing_vlan(self):
110 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
111 storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
112 # remove vlan from storage net
113 storage_net_nicmap['compute'].pop('vlan', None)
114 assert_is_instance(NetworkSettings(ns), NetworkSettings)
117 # need to manipulate interfaces some how
118 # maybe for ip_utils to return something to pass this
119 # def test_admin_auto_detect(self):
120 # ns = NetworkSettings(files_dir+'network_settings.yaml')
121 # # remove cidr to force autodetection
122 # ns['networks'][ADMIN_NETWORK].pop('cidr', None)
123 # assert_is_instance(NetworkSettings(ns), NetworkSettings)
125 def test_admin_fail_auto_detect(self):
126 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
127 # remove cidr and installer_vm to fail autodetect
128 ns['networks'][ADMIN_NETWORK].pop('cidr', None)
129 ns['networks'][ADMIN_NETWORK].pop('installer_vm', None)
130 assert_raises(NetworkSettingsException, NetworkSettings, ns)
132 def test_exception(self):
133 e = NetworkSettingsException("test")
135 assert_is_instance(e, NetworkSettingsException)
137 def test_config_ip(self):
138 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
139 # set the provisioner ip to None to force _gen_ip to generate one
140 ns['networks'][ADMIN_NETWORK]['installer_vm']['ip'] = None
141 ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'] = None
142 # Now rebuild network settings object and check for repopulated values
143 ns = NetworkSettings(ns)
144 assert_equal(ns['networks'][ADMIN_NETWORK]['installer_vm']['ip'],
146 assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'],
149 def test_config_gateway(self):
150 ns = NetworkSettings(os.path.join(files_dir, 'network_settings.yaml'))
151 # set the gateway ip to None to force _config_gateway to generate one
152 ns['networks'][EXTERNAL_NETWORK][0]['gateway'] = None
153 # Now rebuild network settings object and check for a repopulated value
154 ns = NetworkSettings(ns)
155 assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['gateway'],