Make ports_client use common waiter method
wait_for_resource_deletion() of network_client is used only for ports_client and Tempest has a common waiter method in its rest client. So this patch makes ports_client use the method and removes network_client module for the cleanup. Partially implements blueprint consistent-service-method-names Change-Id: I3145163621dbf7c053f040d4c75b1dd16770ba55
This commit is contained in:
parent
eda607cb1c
commit
43e7fcff6f
|
@ -38,7 +38,6 @@ class ServersTestJSON(base.BaseV2ComputeTest):
|
|||
def setup_clients(cls):
|
||||
super(ServersTestJSON, cls).setup_clients()
|
||||
cls.client = cls.servers_client
|
||||
cls.network_client = cls.os.network_client
|
||||
cls.networks_client = cls.os.networks_client
|
||||
cls.subnets_client = cls.os.subnets_client
|
||||
|
||||
|
|
|
@ -28,7 +28,6 @@ class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
|
|||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super(FloatingIPAdminTestJSON, cls).setup_clients()
|
||||
cls.alt_client = cls.alt_manager.network_client
|
||||
cls.alt_floating_ips_client = cls.alt_manager.floating_ips_client
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -67,7 +67,6 @@ class BaseNetworkTest(tempest.test.BaseTestCase):
|
|||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super(BaseNetworkTest, cls).setup_clients()
|
||||
cls.client = cls.os.network_client
|
||||
cls.agents_client = cls.os.network_agents_client
|
||||
cls.network_extensions_client = cls.os.network_extensions_client
|
||||
cls.networks_client = cls.os.networks_client
|
||||
|
@ -276,7 +275,6 @@ class BaseAdminNetworkTest(BaseNetworkTest):
|
|||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super(BaseAdminNetworkTest, cls).setup_clients()
|
||||
cls.admin_client = cls.os_adm.network_client
|
||||
cls.admin_agents_client = cls.os_adm.network_agents_client
|
||||
cls.admin_networks_client = cls.os_adm.networks_client
|
||||
cls.admin_routers_client = cls.os_adm.routers_client
|
||||
|
|
|
@ -46,7 +46,6 @@ class BaseOrchestrationTest(tempest.test.BaseTestCase):
|
|||
cls.client = cls.orchestration_client
|
||||
cls.servers_client = cls.os.servers_client
|
||||
cls.keypairs_client = cls.os.keypairs_client
|
||||
cls.network_client = cls.os.network_client
|
||||
cls.networks_client = cls.os.networks_client
|
||||
cls.volumes_client = cls.os.volumes_client
|
||||
cls.images_v2_client = cls.os.image_client_v2
|
||||
|
|
|
@ -44,7 +44,6 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
|
|||
@classmethod
|
||||
def setup_clients(cls):
|
||||
super(NeutronResourcesTestJSON, cls).setup_clients()
|
||||
cls.network_client = cls.os.network_client
|
||||
cls.subnets_client = cls.os.subnets_client
|
||||
cls.ports_client = cls.os.ports_client
|
||||
|
||||
|
|
|
@ -132,7 +132,6 @@ from tempest.services.identity.v3.json.users_clients import \
|
|||
UsersClient as UsersV3Client
|
||||
from tempest.services.image.v1.json.images_client import ImagesClient
|
||||
from tempest.services.image.v2.json.images_client import ImagesClientV2
|
||||
from tempest.services.network.json.network_client import NetworkClient
|
||||
from tempest.services.network.json.routers_client import RoutersClient
|
||||
from tempest.services.object_storage.account_client import AccountClient
|
||||
from tempest.services.object_storage.container_client import ContainerClient
|
||||
|
@ -237,14 +236,6 @@ class Manager(manager.Manager):
|
|||
build_interval=CONF.network.build_interval,
|
||||
build_timeout=CONF.network.build_timeout,
|
||||
**self.default_params)
|
||||
self.network_client = NetworkClient(
|
||||
self.auth_provider,
|
||||
CONF.network.catalog_type,
|
||||
CONF.network.region or CONF.identity.region,
|
||||
endpoint_type=CONF.network.endpoint_type,
|
||||
build_interval=CONF.network.build_interval,
|
||||
build_timeout=CONF.network.build_timeout,
|
||||
**self.default_params)
|
||||
self.networks_client = NetworksClient(
|
||||
self.auth_provider,
|
||||
CONF.network.catalog_type,
|
||||
|
|
|
@ -103,7 +103,6 @@ from tempest.services.identity.v2.json import identity_client
|
|||
from tempest.services.identity.v2.json import roles_client
|
||||
from tempest.services.identity.v2.json import tenants_client
|
||||
from tempest.services.identity.v2.json import users_client
|
||||
from tempest.services.network.json import network_client
|
||||
from tempest.services.network.json import routers_client
|
||||
|
||||
LOG = None
|
||||
|
@ -170,7 +169,6 @@ def get_admin_clients(opts):
|
|||
endpoint_type='adminURL',
|
||||
**params
|
||||
)
|
||||
network_admin = None
|
||||
networks_admin = None
|
||||
routers_admin = None
|
||||
subnets_admin = None
|
||||
|
@ -178,12 +176,6 @@ def get_admin_clients(opts):
|
|||
if (CONF.service_available.neutron and
|
||||
CONF.auth.create_isolated_networks):
|
||||
neutron_iso_networks = True
|
||||
network_admin = network_client.NetworkClient(
|
||||
_auth,
|
||||
CONF.network.catalog_type,
|
||||
CONF.network.region or CONF.identity.region,
|
||||
endpoint_type='adminURL',
|
||||
**params)
|
||||
networks_admin = networks_client.NetworksClient(
|
||||
_auth,
|
||||
CONF.network.catalog_type,
|
||||
|
@ -203,13 +195,13 @@ def get_admin_clients(opts):
|
|||
endpoint_type='adminURL',
|
||||
**params)
|
||||
return (identity_admin, tenants_admin, roles_admin, users_admin,
|
||||
neutron_iso_networks, network_admin, networks_admin, routers_admin,
|
||||
neutron_iso_networks, networks_admin, routers_admin,
|
||||
subnets_admin)
|
||||
|
||||
|
||||
def create_resources(opts, resources):
|
||||
(identity_admin, tenants_admin, roles_admin, users_admin,
|
||||
neutron_iso_networks, network_admin, networks_admin, routers_admin,
|
||||
neutron_iso_networks, networks_admin, routers_admin,
|
||||
subnets_admin) = get_admin_clients(opts)
|
||||
roles = roles_admin.list_roles()['roles']
|
||||
for u in resources['users']:
|
||||
|
@ -255,7 +247,7 @@ def create_resources(opts, resources):
|
|||
for u in resources['users']:
|
||||
tenant = identity.get_tenant_by_name(tenants_admin, u['tenant'])
|
||||
network_name, router_name = create_network_resources(
|
||||
network_admin, networks_admin, routers_admin, subnets_admin,
|
||||
networks_admin, routers_admin, subnets_admin,
|
||||
tenant['id'], u['name'])
|
||||
u['network'] = network_name
|
||||
u['router'] = router_name
|
||||
|
@ -282,7 +274,7 @@ def create_resources(opts, resources):
|
|||
LOG.info('Resources deployed successfully!')
|
||||
|
||||
|
||||
def create_network_resources(network_admin_client, networks_admin_client,
|
||||
def create_network_resources(networks_admin_client,
|
||||
routers_admin_client, subnets_admin_client,
|
||||
tenant_id, name):
|
||||
|
||||
|
|
|
@ -382,7 +382,6 @@ class NovaQuotaService(BaseService):
|
|||
class NetworkService(BaseService):
|
||||
def __init__(self, manager, **kwargs):
|
||||
super(NetworkService, self).__init__(kwargs)
|
||||
self.client = manager.network_client
|
||||
self.networks_client = manager.networks_client
|
||||
self.subnets_client = manager.subnets_client
|
||||
self.ports_client = manager.ports_client
|
||||
|
|
|
@ -127,6 +127,7 @@ from tempest.lib.services.compute import floating_ips_client
|
|||
from tempest.lib.services.compute import security_group_rules_client
|
||||
from tempest.lib.services.compute import security_groups_client
|
||||
from tempest.lib.services.compute import servers_client
|
||||
from tempest.lib.services.network import networks_client
|
||||
from tempest.lib.services.network import ports_client
|
||||
from tempest.lib.services.network import subnets_client
|
||||
from tempest.services.identity.v2.json import identity_client
|
||||
|
@ -134,7 +135,6 @@ from tempest.services.identity.v2.json import roles_client
|
|||
from tempest.services.identity.v2.json import tenants_client
|
||||
from tempest.services.identity.v2.json import users_client
|
||||
from tempest.services.image.v2.json import images_client
|
||||
from tempest.services.network.json import network_client
|
||||
from tempest.services.network.json import routers_client
|
||||
from tempest.services.object_storage import container_client
|
||||
from tempest.services.object_storage import object_client
|
||||
|
@ -264,7 +264,7 @@ class OSClient(object):
|
|||
build_interval=CONF.volume.build_interval,
|
||||
build_timeout=CONF.volume.build_timeout,
|
||||
**default_params)
|
||||
self.networks = network_client.NetworkClient(
|
||||
self.networks = networks_client.NetworksClient(
|
||||
_auth,
|
||||
CONF.network.catalog_type,
|
||||
CONF.network.region or CONF.identity.region,
|
||||
|
|
|
@ -62,7 +62,6 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
|||
self.users_admin_client,
|
||||
self.roles_admin_client,
|
||||
self.domains_admin_client,
|
||||
self.network_admin_client,
|
||||
self.networks_admin_client,
|
||||
self.routers_admin_client,
|
||||
self.subnets_admin_client,
|
||||
|
@ -93,13 +92,13 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
|
|||
os = clients.Manager(self.default_admin_creds)
|
||||
if self.identity_version == 'v2':
|
||||
return (os.identity_client, os.tenants_client, os.users_client,
|
||||
os.roles_client, None, os.network_client,
|
||||
os.roles_client, None,
|
||||
os.networks_client, os.routers_client, os.subnets_client,
|
||||
os.ports_client, os.security_groups_client)
|
||||
else:
|
||||
return (os.identity_v3_client, os.projects_client,
|
||||
os.users_v3_client, os.roles_v3_client, os.domains_client,
|
||||
os.network_client, os.networks_client, os.routers_client,
|
||||
os.networks_client, os.routers_client,
|
||||
os.subnets_client, os.ports_client,
|
||||
os.security_groups_client)
|
||||
|
||||
|
|
|
@ -4,5 +4,4 @@
|
|||
./tempest/services/volume/base/base_qos_client.py
|
||||
./tempest/services/volume/base/base_backups_client.py
|
||||
./tempest/services/baremetal/base.py
|
||||
./tempest/services/network/json/network_client.py
|
||||
./tempest/services/network/json/routers_client.py
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest.lib.services.network import base
|
||||
|
||||
|
||||
|
@ -45,3 +46,10 @@ class PortsClient(base.BaseNetworkClient):
|
|||
"""
|
||||
uri = '/ports'
|
||||
return self.create_resource(uri, kwargs)
|
||||
|
||||
def is_resource_deleted(self, id):
|
||||
try:
|
||||
self.show_port(id)
|
||||
except lib_exc.NotFound:
|
||||
return True
|
||||
return False
|
||||
|
|
|
@ -63,7 +63,6 @@ class ScenarioTest(tempest.test.BaseTestCase):
|
|||
cls.servers_client = cls.manager.servers_client
|
||||
cls.interface_client = cls.manager.interfaces_client
|
||||
# Neutron network client
|
||||
cls.network_client = cls.manager.network_client
|
||||
cls.networks_client = cls.manager.networks_client
|
||||
cls.ports_client = cls.manager.ports_client
|
||||
cls.routers_client = cls.manager.routers_client
|
||||
|
@ -687,17 +686,15 @@ class NetworkScenarioTest(ScenarioTest):
|
|||
super(NetworkScenarioTest, cls).resource_setup()
|
||||
cls.tenant_id = cls.manager.identity_client.tenant_id
|
||||
|
||||
def _create_network(self, client=None, networks_client=None,
|
||||
def _create_network(self, networks_client=None,
|
||||
routers_client=None, tenant_id=None,
|
||||
namestart='network-smoke-'):
|
||||
if not client:
|
||||
client = self.network_client
|
||||
if not networks_client:
|
||||
networks_client = self.networks_client
|
||||
if not routers_client:
|
||||
routers_client = self.routers_client
|
||||
if not tenant_id:
|
||||
tenant_id = client.tenant_id
|
||||
tenant_id = networks_client.tenant_id
|
||||
name = data_utils.rand_name(namestart)
|
||||
result = networks_client.create_network(name=name, tenant_id=tenant_id)
|
||||
network = net_resources.DeletableNetwork(
|
||||
|
@ -737,15 +734,13 @@ class NetworkScenarioTest(ScenarioTest):
|
|||
*args, **kwargs)
|
||||
return agents_list['agents']
|
||||
|
||||
def _create_subnet(self, network, client=None, subnets_client=None,
|
||||
def _create_subnet(self, network, subnets_client=None,
|
||||
routers_client=None, namestart='subnet-smoke',
|
||||
**kwargs):
|
||||
"""Create a subnet for the given network
|
||||
|
||||
within the cidr block configured for tenant networks.
|
||||
"""
|
||||
if not client:
|
||||
client = self.network_client
|
||||
if not subnets_client:
|
||||
subnets_client = self.subnets_client
|
||||
if not routers_client:
|
||||
|
@ -796,7 +791,7 @@ class NetworkScenarioTest(ScenarioTest):
|
|||
raise
|
||||
self.assertIsNotNone(result, 'Unable to allocate tenant network')
|
||||
subnet = net_resources.DeletableSubnet(
|
||||
network_client=client, subnets_client=subnets_client,
|
||||
subnets_client=subnets_client,
|
||||
routers_client=routers_client, **result['subnet'])
|
||||
self.assertEqual(subnet.cidr, str_cidr)
|
||||
self.addCleanup(self.delete_wrapper, subnet.delete)
|
||||
|
@ -1169,7 +1164,7 @@ class NetworkScenarioTest(ScenarioTest):
|
|||
router.update(admin_state_up=admin_state_up)
|
||||
self.assertEqual(admin_state_up, router.admin_state_up)
|
||||
|
||||
def create_networks(self, client=None, networks_client=None,
|
||||
def create_networks(self, networks_client=None,
|
||||
routers_client=None, subnets_client=None,
|
||||
tenant_id=None, dns_nameservers=None):
|
||||
"""Create a network with a subnet connected to a router.
|
||||
|
@ -1177,7 +1172,6 @@ class NetworkScenarioTest(ScenarioTest):
|
|||
The baremetal driver is a special case since all nodes are
|
||||
on the same shared network.
|
||||
|
||||
:param client: network client to create resources with.
|
||||
:param tenant_id: id of tenant to create resources in.
|
||||
:param dns_nameservers: list of dns servers to send to subnet.
|
||||
:returns: network, subnet, router
|
||||
|
@ -1197,12 +1191,12 @@ class NetworkScenarioTest(ScenarioTest):
|
|||
subnet = None
|
||||
else:
|
||||
network = self._create_network(
|
||||
client=client, networks_client=networks_client,
|
||||
networks_client=networks_client,
|
||||
tenant_id=tenant_id)
|
||||
router = self._get_router(client=routers_client,
|
||||
tenant_id=tenant_id)
|
||||
|
||||
subnet_kwargs = dict(network=network, client=client,
|
||||
subnet_kwargs = dict(network=network,
|
||||
subnets_client=subnets_client,
|
||||
routers_client=routers_client)
|
||||
# use explicit check because empty list is a valid option
|
||||
|
|
|
@ -250,9 +250,8 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
|
|||
interface = self.interface_client.create_interface(
|
||||
server_id=server['id'],
|
||||
net_id=self.new_net.id)['interfaceAttachment']
|
||||
self.addCleanup(self.network_client.wait_for_resource_deletion,
|
||||
'port',
|
||||
interface['port_id'], client=self.ports_client)
|
||||
self.addCleanup(self.ports_client.wait_for_resource_deletion,
|
||||
interface['port_id'])
|
||||
self.addCleanup(self.delete_wrapper,
|
||||
self.interface_client.delete_interface,
|
||||
server['id'], interface['port_id'])
|
||||
|
|
|
@ -321,7 +321,6 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
|
|||
|
||||
def _create_tenant_network(self, tenant):
|
||||
network, subnet, router = self.create_networks(
|
||||
client=tenant.manager.network_client,
|
||||
networks_client=tenant.manager.networks_client,
|
||||
routers_client=tenant.manager.routers_client,
|
||||
subnets_client=tenant.manager.subnets_client)
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
# 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 time
|
||||
|
||||
from tempest import exceptions
|
||||
from tempest.lib import exceptions as lib_exc
|
||||
from tempest.lib.services.network import base
|
||||
|
||||
|
||||
class NetworkClient(base.BaseNetworkClient):
|
||||
|
||||
"""Tempest REST client for Neutron.
|
||||
|
||||
Uses v2 of the Neutron API, since the V1 API has been removed from the
|
||||
code base.
|
||||
|
||||
Implements create, delete, update, list and show for the basic Neutron
|
||||
abstractions (networks, sub-networks, routers, ports and floating IP):
|
||||
|
||||
Implements add/remove interface to router using subnet ID / port ID
|
||||
|
||||
It also implements list, show, update and reset for OpenStack Networking
|
||||
quotas
|
||||
"""
|
||||
|
||||
def wait_for_resource_deletion(self, resource_type, id, client=None):
|
||||
"""Waits for a resource to be deleted."""
|
||||
start_time = int(time.time())
|
||||
while True:
|
||||
if self.is_resource_deleted(resource_type, id, client=client):
|
||||
return
|
||||
if int(time.time()) - start_time >= self.build_timeout:
|
||||
raise exceptions.TimeoutException
|
||||
time.sleep(self.build_interval)
|
||||
|
||||
def is_resource_deleted(self, resource_type, id, client=None):
|
||||
if client is None:
|
||||
client = self
|
||||
method = 'show_' + resource_type
|
||||
try:
|
||||
getattr(client, method)(id)
|
||||
except AttributeError:
|
||||
raise Exception("Unknown resource type %s " % resource_type)
|
||||
except lib_exc.NotFound:
|
||||
return True
|
||||
return False
|
|
@ -41,7 +41,6 @@ class DeletableResource(AttributeDict):
|
|||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.client = kwargs.pop('client', None)
|
||||
self.network_client = kwargs.pop('network_client', None)
|
||||
self.networks_client = kwargs.pop('networks_client', None)
|
||||
self.routers_client = kwargs.pop('routers_client', None)
|
||||
self.subnets_client = kwargs.pop('subnets_client', None)
|
||||
|
|
|
@ -30,7 +30,6 @@ from tempest.services.identity.v2.json import tenants_client as \
|
|||
json_tenants_client
|
||||
from tempest.services.identity.v2.json import users_client as \
|
||||
json_users_client
|
||||
from tempest.services.network.json import network_client as json_network_client
|
||||
from tempest.services.network.json import routers_client
|
||||
from tempest.tests import base
|
||||
from tempest.tests import fake_config
|
||||
|
@ -61,8 +60,6 @@ class TestDynamicCredentialProvider(base.TestCase):
|
|||
creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
|
||||
self.assertTrue(isinstance(creds.identity_admin_client,
|
||||
json_iden_client.IdentityClient))
|
||||
self.assertTrue(isinstance(creds.network_admin_client,
|
||||
json_network_client.NetworkClient))
|
||||
|
||||
def _get_fake_admin_creds(self):
|
||||
return credentials.get_credentials(
|
||||
|
|
Loading…
Reference in New Issue