Migrates Apex to Python
[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 assert_equal
15 from nose.tools import assert_is_instance
16 from nose.tools import assert_not_equal
17 from nose.tools import assert_raises
18
19 from apex.common.constants import (
20     EXTERNAL_NETWORK,
21     TENANT_NETWORK,
22     STORAGE_NETWORK,
23     API_NETWORK,
24     NET_ENV_FILE)
25 from apex import NetworkEnvironment
26 from apex.network.network_environment import NetworkEnvException
27 from apex import NetworkSettings
28 from apex.tests.constants import TEST_CONFIG_DIR
29 from apex.tests.constants import TEST_BUILD_DIR
30
31
32 class TestNetworkEnvironment(object):
33     @classmethod
34     def setup_class(klass):
35         """This method is run once for each class before any tests are run"""
36         klass.ns = NetworkSettings(
37             os.path.join(TEST_CONFIG_DIR, 'network/network_settings.yaml'))
38         klass.ns_vlans = NetworkSettings(
39             os.path.join(TEST_CONFIG_DIR,
40                          'network/network_settings_vlans.yaml'))
41         klass.ns_ipv6 = NetworkSettings(
42             os.path.join(TEST_CONFIG_DIR, 'network/network_settings_v6.yaml'))
43
44     @classmethod
45     def teardown_class(klass):
46         """This method is run once for each class _after_ all tests are run"""
47
48     def setUp(self):
49         """This method is run once before _each_ test method is executed"""
50
51     def teardown(self):
52         """This method is run once after _each_ test method is executed"""
53
54     def test_init(self):
55         assert_raises(NetworkEnvException, NetworkEnvironment,
56                       None, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
57
58     def test_netenv_settings_external_network_vlans(self):
59         # test vlans
60         ne = NetworkEnvironment(self.ns_vlans,
61                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
62         assert_equal(ne['parameter_defaults']['NeutronExternalNetworkBridge'],
63                      '""')
64         assert_equal(ne['parameter_defaults']['ExternalNetworkVlanID'], 501)
65
66     def test_netenv_settings_external_network_ipv6(self):
67         # Test IPv6
68         ne = NetworkEnvironment(self.ns_ipv6,
69                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
70         regstr = ne['resource_registry']['OS::TripleO::Network::External']
71         assert_equal(regstr.split('/')[-1], 'external_v6.yaml')
72
73     def test_netenv_settings_external_network_removed(self):
74         ns = copy(self.ns)
75         # Test removing EXTERNAL_NETWORK
76         ns.enabled_network_list.remove(EXTERNAL_NETWORK)
77         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
78         regstr = ne['resource_registry']['OS::TripleO::Network::External']
79         assert_equal(regstr.split('/')[-1], 'OS::Heat::None')
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         regstr = ne['resource_registry']['OS::TripleO::Network::Tenant']
104         assert_equal(regstr.split('/')[-1], 'OS::Heat::None')
105
106     def test_netenv_settings_storage_network_vlans(self):
107         # test vlans
108         ne = NetworkEnvironment(self.ns_vlans,
109                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
110         assert_equal(ne['parameter_defaults']['StorageNetworkVlanID'], 201)
111
112     def test_netenv_settings_storage_network_v6(self):
113         # Test IPv6
114         ne = NetworkEnvironment(self.ns_ipv6,
115                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
116         regstr = ne['resource_registry']['OS::TripleO::Network::Storage']
117         assert_equal(regstr.split('/')[-1], 'storage_v6.yaml')
118
119     def test_netenv_settings_storage_network_removed(self):
120         ns = copy(self.ns)
121         # Test removing STORAGE_NETWORK
122         ns.enabled_network_list.remove(STORAGE_NETWORK)
123         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
124         regstr = ne['resource_registry']['OS::TripleO::Network::Storage']
125         assert_equal(regstr.split('/')[-1], 'OS::Heat::None')
126
127     def test_netenv_settings_api_network_v4(self):
128         ns = copy(self.ns_vlans)
129         ns['networks'][API_NETWORK]['enabled'] = True
130         ns['networks'][API_NETWORK]['cidr'] = '10.11.12.0/24'
131         ns = NetworkSettings(ns)
132         # test vlans
133         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
134         assert_equal(ne['parameter_defaults']['InternalApiNetworkVlanID'], 101)
135
136     def test_netenv_settings_api_network_vlans(self):
137         ns = copy(self.ns_vlans)
138         ns['networks'][API_NETWORK]['enabled'] = True
139         ns = NetworkSettings(ns)
140         # test vlans
141         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
142         assert_equal(ne['parameter_defaults']['InternalApiNetworkVlanID'], 101)
143
144     def test_netenv_settings_api_network_v6(self):
145         # Test IPv6
146         ne = NetworkEnvironment(self.ns_ipv6,
147                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
148         regstr = ne['resource_registry']['OS::TripleO::Network::InternalApi']
149         assert_equal(regstr.split('/')[-1], 'internal_api_v6.yaml')
150
151     def test_netenv_settings_api_network_removed(self):
152         ns = copy(self.ns)
153         # API_NETWORK is not in the default network settings file
154         ne = NetworkEnvironment(ns, os.path.join(TEST_BUILD_DIR, NET_ENV_FILE))
155         regstr = ne['resource_registry']['OS::TripleO::Network::InternalApi']
156         assert_equal(regstr.split('/')[-1], 'OS::Heat::None')
157
158     def test_numa_configs(self):
159         ne = NetworkEnvironment(self.ns,
160                                 os.path.join(TEST_BUILD_DIR, NET_ENV_FILE),
161                                 compute_pre_config=True,
162                                 controller_pre_config=True)
163         assert_is_instance(ne, dict)
164         assert_not_equal(ne, {})
165
166     def test_exception(self):
167         e = NetworkEnvException("test")
168         print(e)
169         assert_is_instance(e, NetworkEnvException)