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:
Ken'ichi Ohmichi 2016-04-04 11:59:13 -07:00
parent eda607cb1c
commit 43e7fcff6f
18 changed files with 25 additions and 111 deletions

View File

@ -38,7 +38,6 @@ class ServersTestJSON(base.BaseV2ComputeTest):
def setup_clients(cls): def setup_clients(cls):
super(ServersTestJSON, cls).setup_clients() super(ServersTestJSON, cls).setup_clients()
cls.client = cls.servers_client cls.client = cls.servers_client
cls.network_client = cls.os.network_client
cls.networks_client = cls.os.networks_client cls.networks_client = cls.os.networks_client
cls.subnets_client = cls.os.subnets_client cls.subnets_client = cls.os.subnets_client

View File

@ -28,7 +28,6 @@ class FloatingIPAdminTestJSON(base.BaseAdminNetworkTest):
@classmethod @classmethod
def setup_clients(cls): def setup_clients(cls):
super(FloatingIPAdminTestJSON, cls).setup_clients() super(FloatingIPAdminTestJSON, cls).setup_clients()
cls.alt_client = cls.alt_manager.network_client
cls.alt_floating_ips_client = cls.alt_manager.floating_ips_client cls.alt_floating_ips_client = cls.alt_manager.floating_ips_client
@classmethod @classmethod

View File

@ -67,7 +67,6 @@ class BaseNetworkTest(tempest.test.BaseTestCase):
@classmethod @classmethod
def setup_clients(cls): def setup_clients(cls):
super(BaseNetworkTest, cls).setup_clients() super(BaseNetworkTest, cls).setup_clients()
cls.client = cls.os.network_client
cls.agents_client = cls.os.network_agents_client cls.agents_client = cls.os.network_agents_client
cls.network_extensions_client = cls.os.network_extensions_client cls.network_extensions_client = cls.os.network_extensions_client
cls.networks_client = cls.os.networks_client cls.networks_client = cls.os.networks_client
@ -276,7 +275,6 @@ class BaseAdminNetworkTest(BaseNetworkTest):
@classmethod @classmethod
def setup_clients(cls): def setup_clients(cls):
super(BaseAdminNetworkTest, cls).setup_clients() 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_agents_client = cls.os_adm.network_agents_client
cls.admin_networks_client = cls.os_adm.networks_client cls.admin_networks_client = cls.os_adm.networks_client
cls.admin_routers_client = cls.os_adm.routers_client cls.admin_routers_client = cls.os_adm.routers_client

View File

@ -46,7 +46,6 @@ class BaseOrchestrationTest(tempest.test.BaseTestCase):
cls.client = cls.orchestration_client cls.client = cls.orchestration_client
cls.servers_client = cls.os.servers_client cls.servers_client = cls.os.servers_client
cls.keypairs_client = cls.os.keypairs_client cls.keypairs_client = cls.os.keypairs_client
cls.network_client = cls.os.network_client
cls.networks_client = cls.os.networks_client cls.networks_client = cls.os.networks_client
cls.volumes_client = cls.os.volumes_client cls.volumes_client = cls.os.volumes_client
cls.images_v2_client = cls.os.image_client_v2 cls.images_v2_client = cls.os.image_client_v2

View File

@ -44,7 +44,6 @@ class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
@classmethod @classmethod
def setup_clients(cls): def setup_clients(cls):
super(NeutronResourcesTestJSON, cls).setup_clients() super(NeutronResourcesTestJSON, cls).setup_clients()
cls.network_client = cls.os.network_client
cls.subnets_client = cls.os.subnets_client cls.subnets_client = cls.os.subnets_client
cls.ports_client = cls.os.ports_client cls.ports_client = cls.os.ports_client

View File

@ -132,7 +132,6 @@ from tempest.services.identity.v3.json.users_clients import \
UsersClient as UsersV3Client UsersClient as UsersV3Client
from tempest.services.image.v1.json.images_client import ImagesClient from tempest.services.image.v1.json.images_client import ImagesClient
from tempest.services.image.v2.json.images_client import ImagesClientV2 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.network.json.routers_client import RoutersClient
from tempest.services.object_storage.account_client import AccountClient from tempest.services.object_storage.account_client import AccountClient
from tempest.services.object_storage.container_client import ContainerClient from tempest.services.object_storage.container_client import ContainerClient
@ -237,14 +236,6 @@ class Manager(manager.Manager):
build_interval=CONF.network.build_interval, build_interval=CONF.network.build_interval,
build_timeout=CONF.network.build_timeout, build_timeout=CONF.network.build_timeout,
**self.default_params) **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.networks_client = NetworksClient(
self.auth_provider, self.auth_provider,
CONF.network.catalog_type, CONF.network.catalog_type,

View File

@ -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 roles_client
from tempest.services.identity.v2.json import tenants_client from tempest.services.identity.v2.json import tenants_client
from tempest.services.identity.v2.json import users_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 from tempest.services.network.json import routers_client
LOG = None LOG = None
@ -170,7 +169,6 @@ def get_admin_clients(opts):
endpoint_type='adminURL', endpoint_type='adminURL',
**params **params
) )
network_admin = None
networks_admin = None networks_admin = None
routers_admin = None routers_admin = None
subnets_admin = None subnets_admin = None
@ -178,12 +176,6 @@ def get_admin_clients(opts):
if (CONF.service_available.neutron and if (CONF.service_available.neutron and
CONF.auth.create_isolated_networks): CONF.auth.create_isolated_networks):
neutron_iso_networks = True 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( networks_admin = networks_client.NetworksClient(
_auth, _auth,
CONF.network.catalog_type, CONF.network.catalog_type,
@ -203,13 +195,13 @@ def get_admin_clients(opts):
endpoint_type='adminURL', endpoint_type='adminURL',
**params) **params)
return (identity_admin, tenants_admin, roles_admin, users_admin, 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) subnets_admin)
def create_resources(opts, resources): def create_resources(opts, resources):
(identity_admin, tenants_admin, roles_admin, users_admin, (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) subnets_admin) = get_admin_clients(opts)
roles = roles_admin.list_roles()['roles'] roles = roles_admin.list_roles()['roles']
for u in resources['users']: for u in resources['users']:
@ -255,7 +247,7 @@ def create_resources(opts, resources):
for u in resources['users']: for u in resources['users']:
tenant = identity.get_tenant_by_name(tenants_admin, u['tenant']) tenant = identity.get_tenant_by_name(tenants_admin, u['tenant'])
network_name, router_name = create_network_resources( 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']) tenant['id'], u['name'])
u['network'] = network_name u['network'] = network_name
u['router'] = router_name u['router'] = router_name
@ -282,7 +274,7 @@ def create_resources(opts, resources):
LOG.info('Resources deployed successfully!') 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, routers_admin_client, subnets_admin_client,
tenant_id, name): tenant_id, name):

View File

@ -382,7 +382,6 @@ class NovaQuotaService(BaseService):
class NetworkService(BaseService): class NetworkService(BaseService):
def __init__(self, manager, **kwargs): def __init__(self, manager, **kwargs):
super(NetworkService, self).__init__(kwargs) super(NetworkService, self).__init__(kwargs)
self.client = manager.network_client
self.networks_client = manager.networks_client self.networks_client = manager.networks_client
self.subnets_client = manager.subnets_client self.subnets_client = manager.subnets_client
self.ports_client = manager.ports_client self.ports_client = manager.ports_client

View File

@ -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_group_rules_client
from tempest.lib.services.compute import security_groups_client from tempest.lib.services.compute import security_groups_client
from tempest.lib.services.compute import servers_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 ports_client
from tempest.lib.services.network import subnets_client from tempest.lib.services.network import subnets_client
from tempest.services.identity.v2.json import identity_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 tenants_client
from tempest.services.identity.v2.json import users_client from tempest.services.identity.v2.json import users_client
from tempest.services.image.v2.json import images_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.network.json import routers_client
from tempest.services.object_storage import container_client from tempest.services.object_storage import container_client
from tempest.services.object_storage import object_client from tempest.services.object_storage import object_client
@ -264,7 +264,7 @@ class OSClient(object):
build_interval=CONF.volume.build_interval, build_interval=CONF.volume.build_interval,
build_timeout=CONF.volume.build_timeout, build_timeout=CONF.volume.build_timeout,
**default_params) **default_params)
self.networks = network_client.NetworkClient( self.networks = networks_client.NetworksClient(
_auth, _auth,
CONF.network.catalog_type, CONF.network.catalog_type,
CONF.network.region or CONF.identity.region, CONF.network.region or CONF.identity.region,

View File

@ -62,7 +62,6 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
self.users_admin_client, self.users_admin_client,
self.roles_admin_client, self.roles_admin_client,
self.domains_admin_client, self.domains_admin_client,
self.network_admin_client,
self.networks_admin_client, self.networks_admin_client,
self.routers_admin_client, self.routers_admin_client,
self.subnets_admin_client, self.subnets_admin_client,
@ -93,13 +92,13 @@ class DynamicCredentialProvider(cred_provider.CredentialProvider):
os = clients.Manager(self.default_admin_creds) os = clients.Manager(self.default_admin_creds)
if self.identity_version == 'v2': if self.identity_version == 'v2':
return (os.identity_client, os.tenants_client, os.users_client, 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.networks_client, os.routers_client, os.subnets_client,
os.ports_client, os.security_groups_client) os.ports_client, os.security_groups_client)
else: else:
return (os.identity_v3_client, os.projects_client, return (os.identity_v3_client, os.projects_client,
os.users_v3_client, os.roles_v3_client, os.domains_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.subnets_client, os.ports_client,
os.security_groups_client) os.security_groups_client)

View File

@ -4,5 +4,4 @@
./tempest/services/volume/base/base_qos_client.py ./tempest/services/volume/base/base_qos_client.py
./tempest/services/volume/base/base_backups_client.py ./tempest/services/volume/base/base_backups_client.py
./tempest/services/baremetal/base.py ./tempest/services/baremetal/base.py
./tempest/services/network/json/network_client.py
./tempest/services/network/json/routers_client.py ./tempest/services/network/json/routers_client.py

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from tempest.lib import exceptions as lib_exc
from tempest.lib.services.network import base from tempest.lib.services.network import base
@ -45,3 +46,10 @@ class PortsClient(base.BaseNetworkClient):
""" """
uri = '/ports' uri = '/ports'
return self.create_resource(uri, kwargs) 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

View File

@ -63,7 +63,6 @@ class ScenarioTest(tempest.test.BaseTestCase):
cls.servers_client = cls.manager.servers_client cls.servers_client = cls.manager.servers_client
cls.interface_client = cls.manager.interfaces_client cls.interface_client = cls.manager.interfaces_client
# Neutron network client # Neutron network client
cls.network_client = cls.manager.network_client
cls.networks_client = cls.manager.networks_client cls.networks_client = cls.manager.networks_client
cls.ports_client = cls.manager.ports_client cls.ports_client = cls.manager.ports_client
cls.routers_client = cls.manager.routers_client cls.routers_client = cls.manager.routers_client
@ -687,17 +686,15 @@ class NetworkScenarioTest(ScenarioTest):
super(NetworkScenarioTest, cls).resource_setup() super(NetworkScenarioTest, cls).resource_setup()
cls.tenant_id = cls.manager.identity_client.tenant_id 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, routers_client=None, tenant_id=None,
namestart='network-smoke-'): namestart='network-smoke-'):
if not client:
client = self.network_client
if not networks_client: if not networks_client:
networks_client = self.networks_client networks_client = self.networks_client
if not routers_client: if not routers_client:
routers_client = self.routers_client routers_client = self.routers_client
if not tenant_id: if not tenant_id:
tenant_id = client.tenant_id tenant_id = networks_client.tenant_id
name = data_utils.rand_name(namestart) name = data_utils.rand_name(namestart)
result = networks_client.create_network(name=name, tenant_id=tenant_id) result = networks_client.create_network(name=name, tenant_id=tenant_id)
network = net_resources.DeletableNetwork( network = net_resources.DeletableNetwork(
@ -737,15 +734,13 @@ class NetworkScenarioTest(ScenarioTest):
*args, **kwargs) *args, **kwargs)
return agents_list['agents'] 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', routers_client=None, namestart='subnet-smoke',
**kwargs): **kwargs):
"""Create a subnet for the given network """Create a subnet for the given network
within the cidr block configured for tenant networks. within the cidr block configured for tenant networks.
""" """
if not client:
client = self.network_client
if not subnets_client: if not subnets_client:
subnets_client = self.subnets_client subnets_client = self.subnets_client
if not routers_client: if not routers_client:
@ -796,7 +791,7 @@ class NetworkScenarioTest(ScenarioTest):
raise raise
self.assertIsNotNone(result, 'Unable to allocate tenant network') self.assertIsNotNone(result, 'Unable to allocate tenant network')
subnet = net_resources.DeletableSubnet( subnet = net_resources.DeletableSubnet(
network_client=client, subnets_client=subnets_client, subnets_client=subnets_client,
routers_client=routers_client, **result['subnet']) routers_client=routers_client, **result['subnet'])
self.assertEqual(subnet.cidr, str_cidr) self.assertEqual(subnet.cidr, str_cidr)
self.addCleanup(self.delete_wrapper, subnet.delete) self.addCleanup(self.delete_wrapper, subnet.delete)
@ -1169,7 +1164,7 @@ class NetworkScenarioTest(ScenarioTest):
router.update(admin_state_up=admin_state_up) router.update(admin_state_up=admin_state_up)
self.assertEqual(admin_state_up, router.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, routers_client=None, subnets_client=None,
tenant_id=None, dns_nameservers=None): tenant_id=None, dns_nameservers=None):
"""Create a network with a subnet connected to a router. """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 The baremetal driver is a special case since all nodes are
on the same shared network. on the same shared network.
:param client: network client to create resources with.
:param tenant_id: id of tenant to create resources in. :param tenant_id: id of tenant to create resources in.
:param dns_nameservers: list of dns servers to send to subnet. :param dns_nameservers: list of dns servers to send to subnet.
:returns: network, subnet, router :returns: network, subnet, router
@ -1197,12 +1191,12 @@ class NetworkScenarioTest(ScenarioTest):
subnet = None subnet = None
else: else:
network = self._create_network( network = self._create_network(
client=client, networks_client=networks_client, networks_client=networks_client,
tenant_id=tenant_id) tenant_id=tenant_id)
router = self._get_router(client=routers_client, router = self._get_router(client=routers_client,
tenant_id=tenant_id) tenant_id=tenant_id)
subnet_kwargs = dict(network=network, client=client, subnet_kwargs = dict(network=network,
subnets_client=subnets_client, subnets_client=subnets_client,
routers_client=routers_client) routers_client=routers_client)
# use explicit check because empty list is a valid option # use explicit check because empty list is a valid option

View File

@ -250,9 +250,8 @@ class TestNetworkBasicOps(manager.NetworkScenarioTest):
interface = self.interface_client.create_interface( interface = self.interface_client.create_interface(
server_id=server['id'], server_id=server['id'],
net_id=self.new_net.id)['interfaceAttachment'] net_id=self.new_net.id)['interfaceAttachment']
self.addCleanup(self.network_client.wait_for_resource_deletion, self.addCleanup(self.ports_client.wait_for_resource_deletion,
'port', interface['port_id'])
interface['port_id'], client=self.ports_client)
self.addCleanup(self.delete_wrapper, self.addCleanup(self.delete_wrapper,
self.interface_client.delete_interface, self.interface_client.delete_interface,
server['id'], interface['port_id']) server['id'], interface['port_id'])

View File

@ -321,7 +321,6 @@ class TestSecurityGroupsBasicOps(manager.NetworkScenarioTest):
def _create_tenant_network(self, tenant): def _create_tenant_network(self, tenant):
network, subnet, router = self.create_networks( network, subnet, router = self.create_networks(
client=tenant.manager.network_client,
networks_client=tenant.manager.networks_client, networks_client=tenant.manager.networks_client,
routers_client=tenant.manager.routers_client, routers_client=tenant.manager.routers_client,
subnets_client=tenant.manager.subnets_client) subnets_client=tenant.manager.subnets_client)

View File

@ -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

View File

@ -41,7 +41,6 @@ class DeletableResource(AttributeDict):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.client = kwargs.pop('client', None) self.client = kwargs.pop('client', None)
self.network_client = kwargs.pop('network_client', None)
self.networks_client = kwargs.pop('networks_client', None) self.networks_client = kwargs.pop('networks_client', None)
self.routers_client = kwargs.pop('routers_client', None) self.routers_client = kwargs.pop('routers_client', None)
self.subnets_client = kwargs.pop('subnets_client', None) self.subnets_client = kwargs.pop('subnets_client', None)

View File

@ -30,7 +30,6 @@ from tempest.services.identity.v2.json import tenants_client as \
json_tenants_client json_tenants_client
from tempest.services.identity.v2.json import users_client as \ from tempest.services.identity.v2.json import users_client as \
json_users_client 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.services.network.json import routers_client
from tempest.tests import base from tempest.tests import base
from tempest.tests import fake_config from tempest.tests import fake_config
@ -61,8 +60,6 @@ class TestDynamicCredentialProvider(base.TestCase):
creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params) creds = dynamic_creds.DynamicCredentialProvider(**self.fixed_params)
self.assertTrue(isinstance(creds.identity_admin_client, self.assertTrue(isinstance(creds.identity_admin_client,
json_iden_client.IdentityClient)) json_iden_client.IdentityClient))
self.assertTrue(isinstance(creds.network_admin_client,
json_network_client.NetworkClient))
def _get_fake_admin_creds(self): def _get_fake_admin_creds(self):
return credentials.get_credentials( return credentials.get_credentials(