--- /dev/null
+# 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)
utils.wait_until_true(lambda: ip.netns.exists(ns_name))
def test_namespace_exists(self):
- uuid = uuidutils.generate_uuid()
+ tenant_id = uuidutils.generate_uuid()
- router = self.client.create_router(
- body={'router': {'name': 'router-test',
- 'tenant_id': uuid}})
+ router = self.safe_client.create_router(tenant_id)
+ network = self.safe_client.create_network(tenant_id)
+ 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" % (
- self._get_namespace(router_id),
+ self._get_namespace(router['id']),
self.environment.l3_agent.get_namespace_suffix(), )
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'])