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