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:
95 nic = 'nic' + str(nic_index)
96 assert_equal(ns.nics[role][network], nic)
99 def test_get_enabled_networks(self):
100 ns = NetworkSettings('../config/network/network_settings.yaml')
101 assert_is_instance(ns.enabled_network_list, list)
103 def test_invalid_nic_members(self):
104 ns = NetworkSettings(files_dir+'network_settings.yaml')
105 storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
107 storage_net_nicmap['compute']['members'][0] = 'nic1'
108 assert_raises(NetworkSettingsException, NetworkSettings, ns)
110 storage_net_nicmap['compute']['members'] = []
111 assert_raises(NetworkSettingsException, NetworkSettings, ns)
113 def test_missing_vlan(self):
114 ns = NetworkSettings(files_dir+'network_settings.yaml')
115 storage_net_nicmap = ns['networks'][STORAGE_NETWORK]['nic_mapping']
116 # remove vlan from storage net
117 storage_net_nicmap['compute'].pop('vlan', None)
118 assert_is_instance(NetworkSettings(ns), NetworkSettings)
121 # need to manipulate interfaces some how
122 # maybe for ip_utils to return something to pass this
123 # def test_admin_auto_detect(self):
124 # ns = NetworkSettings(files_dir+'network_settings.yaml')
125 # # remove cidr to force autodetection
126 # ns['networks'][ADMIN_NETWORK].pop('cidr', None)
127 # assert_is_instance(NetworkSettings(ns), NetworkSettings)
129 def test_admin_fail_auto_detect(self):
130 ns = NetworkSettings(files_dir+'network_settings.yaml')
131 # remove cidr and installer_vm to fail autodetect
132 ns['networks'][ADMIN_NETWORK].pop('cidr', None)
133 ns['networks'][ADMIN_NETWORK].pop('installer_vm', None)
134 assert_raises(NetworkSettingsException, NetworkSettings, ns)
136 def test_exception(self):
137 e = NetworkSettingsException("test")
139 assert_is_instance(e, NetworkSettingsException)
141 def test_config_ip(self):
142 ns = NetworkSettings(files_dir+'network_settings.yaml')
143 # set the provisioner ip to None to force _gen_ip to generate one
144 ns['networks'][ADMIN_NETWORK]['installer_vm']['ip'] = None
145 ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'] = None
146 # Now rebuild network settings object and check for repopulated values
147 ns = NetworkSettings(ns)
148 assert_equal(ns['networks'][ADMIN_NETWORK]['installer_vm']['ip'],
150 assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'],
153 def test_config_gateway(self):
154 ns = NetworkSettings(files_dir+'network_settings.yaml')
155 # set the gateway ip to None to force _config_gateway to generate one
156 ns['networks'][EXTERNAL_NETWORK][0]['gateway'] = None
157 # Now rebuild network settings object and check for a repopulated value
158 ns = NetworkSettings(ns)
159 assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['gateway'],