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):
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

View File

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

View File

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

View File

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

View File

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

View File

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

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 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):

View File

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

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_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,

View File

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

View File

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

View File

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

View File

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

View File

@ -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'])

View File

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

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):
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)

View File

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