7aa6ef150a850821ceb0053cf218ca6d6dad4d29
[apex.git] / apex / tests / test_apex_network_environment.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 import os
11
12 from copy import copy
13
14 from nose.tools import (
15     assert_equal,
16     assert_is_instance,
17     assert_not_equal,
18     assert_raises)
19
20 from apex.common.constants import (
21     EXTERNAL_NETWORK,
22     TENANT_NETWORK,
23     STORAGE_NETWORK,
24     API_NETWORK,
25     NET_ENV_FILE)
26 from apex import NetworkEnvironment
27 from apex.network.network_environment import NetworkEnvException
28 from apex import NetworkSettings
29 from apex.tests.constants import TEST_CONFIG_DIR
30 from apex.tests.constants import TEST_BUILD_DIR
31
32
33 class TestNetworkEnvironment:
34     @classmethod
35     def setup_class(cls):
36         """This method is run once for each class before any tests are run"""
37         cls.ns = NetworkSettings(
38             os.path.join(TEST_CONFIG_DIR, 'network/network_settings.yaml'))
39         cls.ns_vlans = NetworkSettings(
40             os.path.join(TEST_CONFIG_DIR,
41                          'network/network_settings_vlans.yaml'))
42         cls.ns_ipv6 = NetworkSettings(
43             os.path.join(TEST_CONFIG_DIR, 'network/network_settings_v6.yaml'))
44
45     @classmethod
46     def teardown_class(klass):
47         """This method is run once for each class _after_ all tests are run"""
48
49     def setup(self):
50         """This method is run once before _each_ test method is executed"""
51
52     def teardown(self):
53         """This method is run once after _each_ test method is executed"""
54
55     def test_init(self):
56         assert_raises(NetworkEnvException, NetworkEnvironment,
57                       None, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
58
59     def test_netenv_settings_external_network_vlans(self):
60         # test vlans
61         ne = NetworkEnvironment(self.ns_vlans,
62                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
63         assert_equal(ne['parameter_defaults']['NeutronExternalNetworkBridge'],
64                      '""')
65         assert_equal(ne['parameter_defaults']['ExternalNetworkVlanID'], 501)
66
67     def test_netenv_settings_external_network_ipv6(self):
68         # Test IPv6
69         ne = NetworkEnvironment(self.ns_ipv6,
70                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
71         regstr = ne['resource_registry']['OS::TripleO::Network::External']
72         assert_equal(regstr.split('/')[-1], 'external_v6.yaml')
73
74     def test_netenv_settings_external_network_removed(self):
75         ns = copy(self.ns)
76         # Test removing EXTERNAL_NETWORK
77         ns.enabled_network_list.remove(EXTERNAL_NETWORK)
78         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
79         assert 'OS::TripleO::Network::External' not in ne['resource_registry']
80
81     def test_netenv_settings_tenant_network_vlans(self):
82         # test vlans
83         ne = NetworkEnvironment(self.ns_vlans,
84                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
85         assert_equal(ne['parameter_defaults']['TenantNetworkVlanID'], 401)
86
87 # Apex is does not support v6 tenant networks
88 # Though there is code that would fire if a
89 # v6 cidr was passed in, just uncomment this to
90 # cover that code
91 #    def test_netenv_settings_tenant_network_v6(self):
92 #        # Test IPv6
93 #        ne = NetworkEnvironment(self.ns_ipv6,
94 #                                '../build/network-environment.yaml')
95 #        regstr = ne['resource_registry'][next(iter(TENANT_RESOURCES.keys()))]
96 #        assert_equal(regstr.split('/')[-1], 'tenant_v6.yaml')
97
98     def test_netenv_settings_tenant_network_removed(self):
99         ns = copy(self.ns)
100         # Test removing TENANT_NETWORK
101         ns.enabled_network_list.remove(TENANT_NETWORK)
102         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
103         assert 'OS::TripleO::Network::Tenant' not in ne['resource_registry']
104
105     def test_netenv_settings_storage_network_vlans(self):
106         # test vlans
107         ne = NetworkEnvironment(self.ns_vlans,
108                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
109         assert_equal(ne['parameter_defaults']['StorageNetworkVlanID'], 201)
110
111     def test_netenv_settings_storage_network_v6(self):
112         # Test IPv6
113         ne = NetworkEnvironment(self.ns_ipv6,
114                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
115         regstr = ne['resource_registry']['OS::TripleO::Network::Storage']
116         assert_equal(regstr.split('/')[-1], 'storage_v6.yaml')
117
118     def test_netenv_settings_storage_network_removed(self):
119         ns = copy(self.ns)
120         # Test removing STORAGE_NETWORK
121         ns.enabled_network_list.remove(STORAGE_NETWORK)
122         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
123         assert 'OS::TripleO::Network::Storage' not in ne['resource_registry']
124
125     def test_netenv_settings_api_network_v4(self):
126         ns = copy(self.ns_vlans)
127         ns['networks'][API_NETWORK]['enabled'] = True
128         ns['networks'][API_NETWORK]['cidr'] = '10.11.12.0/24'
129         ns = NetworkSettings(ns)
130         # test vlans
131         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
132         assert_equal(ne['parameter_defaults']['InternalApiNetworkVlanID'], 101)
133
134     def test_netenv_settings_api_network_vlans(self):
135         ns = copy(self.ns_vlans)
136         ns['networks'][API_NETWORK]['enabled'] = True
137         ns = NetworkSettings(ns)
138         # test vlans
139         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
140         assert_equal(ne['parameter_defaults']['InternalApiNetworkVlanID'], 101)
141
142     def test_netenv_settings_api_network_v6(self):
143         # Test IPv6
144         ne = NetworkEnvironment(self.ns_ipv6,
145                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
146         regstr = ne['resource_registry']['OS::TripleO::Network::InternalApi']
147         assert_equal(regstr.split('/')[-1], 'internal_api_v6.yaml')
148
149     def test_netenv_settings_api_network_removed(self):
150         ns = copy(self.ns)
151         # API_NETWORK is not in the default network settings file
152         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
153         assert 'OS::TripleO::Network::InternalApi' not in ne[
154             'resource_registry']
155
156     def test_numa_configs(self):
157         ne = NetworkEnvironment(self.ns,
158                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE),
159                                 compute_pre_config=True,
160                                 controller_pre_config=True)
161         assert_is_instance(ne, dict)
162         assert_not_equal(ne, {})
163
164     def test_exception(self):
165         e = NetworkEnvException("test")
166         print(e)
167         assert_is_instance(e, NetworkEnvException)
168
169     def test_service_netmap(self):
170         ns = copy(self.ns)
171         ns.enabled_network_list = ['admin']
172         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
173         for network in ne['parameter_defaults']['ServiceNetMap'].values():
174             assert_equal(network, 'ctlplane')