Merge "Define fullstack router/network/subnet management fixture"
This commit is contained in:
commit
d4e6e9ab42
|
@ -18,6 +18,7 @@ from oslo_db.sqlalchemy import test_base
|
||||||
from neutron.db.migration.models import head # noqa
|
from neutron.db.migration.models import head # noqa
|
||||||
from neutron.db import model_base
|
from neutron.db import model_base
|
||||||
from neutron.tests.common import base
|
from neutron.tests.common import base
|
||||||
|
from neutron.tests.fullstack.resources import client as client_resource
|
||||||
|
|
||||||
|
|
||||||
class BaseFullStackTestCase(base.MySQLTestCase):
|
class BaseFullStackTestCase(base.MySQLTestCase):
|
||||||
|
@ -35,6 +36,8 @@ class BaseFullStackTestCase(base.MySQLTestCase):
|
||||||
self.useFixture(self.environment)
|
self.useFixture(self.environment)
|
||||||
|
|
||||||
self.client = self.environment.neutron_server.client
|
self.client = self.environment.neutron_server.client
|
||||||
|
self.safe_client = self.useFixture(
|
||||||
|
client_resource.ClientFixture(self.client))
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
class_name, test_name = self.id().split(".")[-2:]
|
class_name, test_name = self.id().split(".")[-2:]
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
# Copyright (c) 2015 Thales Services SAS
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
import fixtures
|
||||||
|
|
||||||
|
from neutron.tests import base
|
||||||
|
|
||||||
|
|
||||||
|
class ClientFixture(fixtures.Fixture):
|
||||||
|
"""Manage and cleanup neutron resources."""
|
||||||
|
|
||||||
|
def __init__(self, client):
|
||||||
|
super(ClientFixture, self).__init__()
|
||||||
|
self.client = client
|
||||||
|
|
||||||
|
def _create_resource(self, resource_type, spec):
|
||||||
|
create = getattr(self.client, 'create_%s' % resource_type)
|
||||||
|
delete = getattr(self.client, 'delete_%s' % resource_type)
|
||||||
|
|
||||||
|
body = {resource_type: spec}
|
||||||
|
resp = create(body=body)
|
||||||
|
data = resp[resource_type]
|
||||||
|
self.addCleanup(delete, data['id'])
|
||||||
|
return data
|
||||||
|
|
||||||
|
def create_router(self, tenant_id, name=None):
|
||||||
|
resource_type = 'router'
|
||||||
|
|
||||||
|
name = name or base.get_rand_name(prefix=resource_type)
|
||||||
|
spec = {'tenant_id': tenant_id, 'name': name}
|
||||||
|
|
||||||
|
return self._create_resource(resource_type, spec)
|
||||||
|
|
||||||
|
def create_network(self, tenant_id, name=None):
|
||||||
|
resource_type = 'network'
|
||||||
|
|
||||||
|
name = name or base.get_rand_name(prefix=resource_type)
|
||||||
|
spec = {'tenant_id': tenant_id, 'name': name}
|
||||||
|
|
||||||
|
return self._create_resource(resource_type, spec)
|
||||||
|
|
||||||
|
def create_subnet(self, tenant_id, network_id,
|
||||||
|
cidr, gateway_ip=None, ip_version=4,
|
||||||
|
name=None, enable_dhcp=True):
|
||||||
|
resource_type = 'subnet'
|
||||||
|
|
||||||
|
name = name or base.get_rand_name(prefix=resource_type)
|
||||||
|
spec = {'tenant_id': tenant_id, 'network_id': network_id, 'name': name,
|
||||||
|
'cidr': cidr, 'ip_version': ip_version,
|
||||||
|
'enable_dhcp': enable_dhcp}
|
||||||
|
if gateway_ip:
|
||||||
|
spec['gateway_ip'] = gateway_ip
|
||||||
|
|
||||||
|
return self._create_resource(resource_type, spec)
|
||||||
|
|
||||||
|
def add_router_interface(self, router_id, subnet_id):
|
||||||
|
body = {'subnet_id': subnet_id}
|
||||||
|
self.client.add_interface_router(router=router_id, body=body)
|
||||||
|
self.addCleanup(self.client.remove_interface_router,
|
||||||
|
router=router_id, body=body)
|
|
@ -56,39 +56,15 @@ class TestLegacyL3Agent(base.BaseFullStackTestCase):
|
||||||
utils.wait_until_true(lambda: ip.netns.exists(ns_name))
|
utils.wait_until_true(lambda: ip.netns.exists(ns_name))
|
||||||
|
|
||||||
def test_namespace_exists(self):
|
def test_namespace_exists(self):
|
||||||
uuid = uuidutils.generate_uuid()
|
tenant_id = uuidutils.generate_uuid()
|
||||||
|
|
||||||
router = self.client.create_router(
|
router = self.safe_client.create_router(tenant_id)
|
||||||
body={'router': {'name': 'router-test',
|
network = self.safe_client.create_network(tenant_id)
|
||||||
'tenant_id': uuid}})
|
subnet = self.safe_client.create_subnet(
|
||||||
|
tenant_id, network['id'], '20.0.0.0/24', gateway_ip='20.0.0.1')
|
||||||
|
self.safe_client.add_router_interface(router['id'], subnet['id'])
|
||||||
|
|
||||||
network = self.client.create_network(
|
|
||||||
body={'network': {'name': 'network-test',
|
|
||||||
'tenant_id': uuid}})
|
|
||||||
|
|
||||||
subnet = self.client.create_subnet(
|
|
||||||
body={'subnet': {'name': 'subnet-test',
|
|
||||||
'tenant_id': uuid,
|
|
||||||
'network_id': network['network']['id'],
|
|
||||||
'cidr': '20.0.0.0/24',
|
|
||||||
'gateway_ip': '20.0.0.1',
|
|
||||||
'ip_version': 4,
|
|
||||||
'enable_dhcp': True}})
|
|
||||||
|
|
||||||
self.client.add_interface_router(
|
|
||||||
router=router['router']['id'],
|
|
||||||
body={'subnet_id': subnet['subnet']['id']})
|
|
||||||
|
|
||||||
router_id = router['router']['id']
|
|
||||||
namespace = "%s@%s" % (
|
namespace = "%s@%s" % (
|
||||||
self._get_namespace(router_id),
|
self._get_namespace(router['id']),
|
||||||
self.environment.l3_agent.get_namespace_suffix(), )
|
self.environment.l3_agent.get_namespace_suffix(), )
|
||||||
self._assert_namespace_exists(namespace)
|
self._assert_namespace_exists(namespace)
|
||||||
|
|
||||||
self.client.remove_interface_router(
|
|
||||||
router=router['router']['id'],
|
|
||||||
body={'subnet_id': subnet['subnet']['id']})
|
|
||||||
|
|
||||||
self.client.delete_subnet(subnet['subnet']['id'])
|
|
||||||
self.client.delete_network(network['network']['id'])
|
|
||||||
self.client.delete_router(router['router']['id'])
|
|
||||||
|
|
Loading…
Reference in New Issue