fuel-web/nailgun/nailgun/test/unit/test_deployment_network_ser...

143 lines
5.0 KiB
Python

# Copyright 2014 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from mock import patch
from nailgun.test import base
from nailgun.extensions.network_manager.serializers import neutron_serializers
CREDS = {'tenant': {'value': 'NONDEFAULT'}}
class BaseTestNeutronDeploymentSerializer(base.BaseTestCase):
env_version = None
serializer = None
def setUp(self):
super(BaseTestNeutronDeploymentSerializer, self).setUp()
self.cluster = self.env.create(
cluster_kwargs={'net_provider': 'neutron'},
release_kwargs={'version': self.env_version}
)
def check_shared_attrs_of_external_network(self, external_net):
self.assertEqual(
external_net['L2'],
{
'network_type': 'local',
'physnet': None,
'router_ext': True,
'segment_id': None
},
)
self.assertFalse(external_net['shared'])
self.assertEqual(external_net['tenant'], 'admin')
@patch('nailgun.orchestrator.deployment_serializers.objects.Cluster.get_creds',
return_value=CREDS)
class NetworkTenantNameMixin(object):
def verify_network_tenant(self, network):
self.assertEqual(network['tenant'], CREDS['tenant']['value'])
def test_internal_network_changes_tenant_name(self, creds):
int_network = self.serializer._generate_internal_network(self.cluster)
self.verify_network_tenant(int_network)
def test_external_network_changes_tenant_name(self, creds):
ext_network = self.serializer.generate_external_network(self.cluster)
self.verify_network_tenant(ext_network)
def test_predefined_networks_tenant_name(self, creds):
predefined_network = self.serializer.generate_predefined_networks(
self.cluster)
self.verify_network_tenant(predefined_network['admin_internal_net'])
self.verify_network_tenant(predefined_network['admin_floating_net'])
class TestNeutronDeploymentSerializer(BaseTestNeutronDeploymentSerializer,
NetworkTenantNameMixin):
env_version = '1111-5.1'
serializer = neutron_serializers.NeutronNetworkDeploymentSerializer
class TestNeutronDeploymentSerializer70(BaseTestNeutronDeploymentSerializer,
NetworkTenantNameMixin):
serializer = neutron_serializers.NeutronNetworkDeploymentSerializer70
env_version = '1111-7.0'
def test_external_network(self):
self.cluster.network_config.floating_ranges = [
["172.16.0.130", "172.16.0.150"]
]
external_net = self.serializer.generate_external_network(self.cluster)
self.check_shared_attrs_of_external_network(external_net)
self.assertEqual(
external_net['L3'],
{'enable_dhcp': False,
'floating': "172.16.0.130:172.16.0.150",
'gateway': '172.16.0.1',
'nameservers': [],
'subnet': '172.16.0.0/24'
}
)
class TestNeutronDeploymentSerializer80(BaseTestNeutronDeploymentSerializer,
NetworkTenantNameMixin):
serializer = neutron_serializers.NeutronNetworkDeploymentSerializer80
env_version = '1111-8.0'
def test_external_network(self):
self.cluster.network_config.floating_ranges = [
["172.16.0.130", "172.16.0.150"],
["172.16.0.200", "172.16.0.254"]
]
external_net = self.serializer.generate_external_network(self.cluster)
self.assertEqual(
external_net['L3'],
{'enable_dhcp': False,
'floating': ['172.16.0.130:172.16.0.150',
'172.16.0.200:172.16.0.254'],
'gateway': '172.16.0.1',
'nameservers': [],
'subnet': '172.16.0.0/24'
}
)
self.assertEqual(
external_net["L2"],
{
'network_type': "flat",
'physnet': 'physnet1',
"segment_id": None,
"router_ext": True,
}
)
self.assertFalse(external_net['shared'])
self.assertEqual(external_net['tenant'], 'admin')
def test_generate_l2(self):
phys_nets = self.serializer.generate_l2(self.cluster)["phys_nets"]
self.assertIn("physnet1", phys_nets)
self.assertEqual(
phys_nets["physnet1"],
{
'bridge': 'br-floating',
'vlan_range': None
}
)