Fixes OVS DPDK scenarios
[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 = 0
93             print(ns.nics)
94             for network in ns.enabled_network_list:
95                 nic = 'eth' + str(nic_index)
96                 assert_equal(ns.nics[role][network], nic)
97                 nic_index += 1
98
99     def test_get_enabled_networks(self):
100         ns = NetworkSettings('../config/network/network_settings.yaml')
101         assert_is_instance(ns.enabled_network_list, list)
102
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']
106         # set duplicate nic
107         storage_net_nicmap['controller']['members'][0] = 'eth0'
108         assert_raises(NetworkSettingsException, NetworkSettings, ns)
109         # remove nic members
110         storage_net_nicmap['controller']['members'] = []
111         assert_raises(NetworkSettingsException, NetworkSettings, ns)
112
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)
119
120 # TODO
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)
128
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)
135
136     def test_exception(self):
137         e = NetworkSettingsException("test")
138         print(e)
139         assert_is_instance(e, NetworkSettingsException)
140
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'],
149                      '192.0.2.1')
150         assert_equal(ns['networks'][EXTERNAL_NETWORK][0]['installer_vm']['ip'],
151                      '192.168.37.1')
152
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'],
160                      '192.168.37.1')