Merge "Use tempest-plugin service client registration"
This commit is contained in:
commit
111b188e56
32
manila_tempest_tests/clients.py
Normal file
32
manila_tempest_tests/clients.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Copyright (c) 2016 Hewlett-Packard Enterprise Development Company, L.P.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
from tempest import config
|
||||||
|
from tempest.lib.services import clients
|
||||||
|
|
||||||
|
|
||||||
|
CONF = config.CONF
|
||||||
|
|
||||||
|
|
||||||
|
class Clients(clients.ServiceClients):
|
||||||
|
"""Tempest stable service clients and loaded plugins service clients"""
|
||||||
|
|
||||||
|
def __init__(self, credentials, service=None):
|
||||||
|
"""Emulate the interface of Tempest's clients.Manager"""
|
||||||
|
# Identity settings
|
||||||
|
if CONF.identity.auth_version == 'v2':
|
||||||
|
identity_uri = CONF.identity.uri
|
||||||
|
else:
|
||||||
|
identity_uri = CONF.identity.uri_v3
|
||||||
|
super(Clients, self).__init__(credentials, identity_uri)
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from tempest import config
|
||||||
from tempest.test_discover import plugins
|
from tempest.test_discover import plugins
|
||||||
|
|
||||||
from manila_tempest_tests import config as config_share
|
from manila_tempest_tests import config as config_share
|
||||||
@ -54,3 +55,21 @@ class ManilaTempestPlugin(plugins.TempestPlugin):
|
|||||||
def get_opt_lists(self):
|
def get_opt_lists(self):
|
||||||
return [(config_share.share_group.name, config_share.ShareGroup),
|
return [(config_share.share_group.name, config_share.ShareGroup),
|
||||||
('service_available', [config_share.service_option])]
|
('service_available', [config_share.service_option])]
|
||||||
|
|
||||||
|
def get_service_clients(self):
|
||||||
|
shares_config = config.service_client_config('share')
|
||||||
|
v1_params = {
|
||||||
|
'name': 'share_v1',
|
||||||
|
'service_version': 'share.v1',
|
||||||
|
'module_path': 'manila_tempest_tests.services.share.json',
|
||||||
|
'client_names': ['SharesClient'],
|
||||||
|
}
|
||||||
|
v2_params = {
|
||||||
|
'name': 'share_v2',
|
||||||
|
'service_version': 'share.v2',
|
||||||
|
'module_path': 'manila_tempest_tests.services.share.v2',
|
||||||
|
'client_names': ['SharesV2Client'],
|
||||||
|
}
|
||||||
|
v1_params.update(shares_config)
|
||||||
|
v2_params.update(shares_config)
|
||||||
|
return [v1_params, v2_params]
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
# Copyright (c) 2016 Hewlett-Packard Enterprise Development Company, L.P.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
from manila_tempest_tests.services.share import json as v1
|
||||||
|
from manila_tempest_tests.services.share.v2 import json as v2
|
||||||
|
|
||||||
|
__all__ = ['v1', 'v2']
|
@ -0,0 +1,17 @@
|
|||||||
|
# Copyright (c) 2016 Hewlett-Packard Enterprise Development Company, L.P.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
from manila_tempest_tests.services.share.json.shares_client import SharesClient
|
||||||
|
|
||||||
|
__all__ = ['SharesClient']
|
@ -35,18 +35,12 @@ class SharesClient(rest_client.RestClient):
|
|||||||
It handles shares and access to it in OpenStack.
|
It handles shares and access to it in OpenStack.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, auth_provider):
|
def __init__(self, auth_provider, **kwargs):
|
||||||
super(SharesClient, self).__init__(
|
super(SharesClient, self).__init__(auth_provider, **kwargs)
|
||||||
auth_provider,
|
|
||||||
CONF.share.catalog_type,
|
|
||||||
CONF.share.region or CONF.identity.region,
|
|
||||||
endpoint_type=CONF.share.endpoint_type)
|
|
||||||
self.share_protocol = None
|
self.share_protocol = None
|
||||||
if CONF.share.enable_protocols:
|
if CONF.share.enable_protocols:
|
||||||
self.share_protocol = CONF.share.enable_protocols[0]
|
self.share_protocol = CONF.share.enable_protocols[0]
|
||||||
self.share_network_id = CONF.share.share_network_id
|
self.share_network_id = CONF.share.share_network_id
|
||||||
self.build_interval = CONF.share.build_interval
|
|
||||||
self.build_timeout = CONF.share.build_timeout
|
|
||||||
self.share_size = CONF.share.share_size
|
self.share_size = CONF.share.share_size
|
||||||
|
|
||||||
def create_share(self, share_protocol=None, size=None,
|
def create_share(self, share_protocol=None, size=None,
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
# Copyright (c) 2016 Hewlett-Packard Enterprise Development Company, L.P.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
from manila_tempest_tests.services.share.v2.json.shares_client import \
|
||||||
|
SharesV2Client
|
||||||
|
|
||||||
|
__all__ = ['SharesV2Client']
|
@ -39,8 +39,8 @@ class SharesV2Client(shares_client.SharesClient):
|
|||||||
"""
|
"""
|
||||||
api_version = 'v2'
|
api_version = 'v2'
|
||||||
|
|
||||||
def __init__(self, auth_provider):
|
def __init__(self, auth_provider, **kwargs):
|
||||||
super(SharesV2Client, self).__init__(auth_provider)
|
super(SharesV2Client, self).__init__(auth_provider, **kwargs)
|
||||||
self.API_MICROVERSIONS_HEADER = 'x-openstack-manila-api-version'
|
self.API_MICROVERSIONS_HEADER = 'x-openstack-manila-api-version'
|
||||||
|
|
||||||
def inject_microversion_header(self, headers, version,
|
def inject_microversion_header(self, headers, version,
|
||||||
|
@ -430,7 +430,7 @@ class MigrationOppositeDriverModesNFSTest(MigrationBase):
|
|||||||
# then we need it for DHSS=True
|
# then we need it for DHSS=True
|
||||||
new_share_network_id = self.provide_share_network(
|
new_share_network_id = self.provide_share_network(
|
||||||
self.shares_v2_client,
|
self.shares_v2_client,
|
||||||
self.os_admin.networks_client,
|
self.networks_client,
|
||||||
isolated_creds_client=None,
|
isolated_creds_client=None,
|
||||||
ignore_multitenancy_config=True,
|
ignore_multitenancy_config=True,
|
||||||
)
|
)
|
||||||
|
@ -21,7 +21,6 @@ import traceback
|
|||||||
from oslo_concurrency import lockutils
|
from oslo_concurrency import lockutils
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import six
|
import six
|
||||||
from tempest import clients
|
|
||||||
from tempest.common import credentials_factory as common_creds
|
from tempest.common import credentials_factory as common_creds
|
||||||
|
|
||||||
from tempest import config
|
from tempest import config
|
||||||
@ -30,10 +29,8 @@ from tempest.lib.common.utils import data_utils
|
|||||||
from tempest.lib import exceptions
|
from tempest.lib import exceptions
|
||||||
from tempest import test
|
from tempest import test
|
||||||
|
|
||||||
|
from manila_tempest_tests import clients
|
||||||
from manila_tempest_tests.common import constants
|
from manila_tempest_tests.common import constants
|
||||||
from manila_tempest_tests.services.share.json import shares_client
|
|
||||||
from manila_tempest_tests.services.share.v2.json import (
|
|
||||||
shares_client as shares_v2_client)
|
|
||||||
from manila_tempest_tests import share_exceptions
|
from manila_tempest_tests import share_exceptions
|
||||||
from manila_tempest_tests import utils
|
from manila_tempest_tests import utils
|
||||||
|
|
||||||
@ -138,6 +135,10 @@ class BaseSharesTest(test.BaseTestCase):
|
|||||||
# Will be cleaned up in tearDown method
|
# Will be cleaned up in tearDown method
|
||||||
method_isolated_creds = []
|
method_isolated_creds = []
|
||||||
|
|
||||||
|
# NOTE(andreaf) Override the client manager class to be used, so that
|
||||||
|
# a stable class is used, which includes plugin registered services as well
|
||||||
|
client_manager = clients.Clients
|
||||||
|
|
||||||
def skip_if_microversion_not_supported(self, microversion):
|
def skip_if_microversion_not_supported(self, microversion):
|
||||||
if not utils.is_microversion_supported(microversion):
|
if not utils.is_microversion_supported(microversion):
|
||||||
raise self.skipException(
|
raise self.skipException(
|
||||||
@ -212,11 +213,11 @@ class BaseSharesTest(test.BaseTestCase):
|
|||||||
ic.type_of_creds = type_of_creds
|
ic.type_of_creds = type_of_creds
|
||||||
|
|
||||||
# create client with isolated creds
|
# create client with isolated creds
|
||||||
os = clients.Manager(credentials=creds)
|
os = clients.Clients(creds)
|
||||||
if client_version == '1':
|
if client_version == '1':
|
||||||
client = shares_client.SharesClient(os.auth_provider)
|
client = os.share_v1.SharesClient()
|
||||||
elif client_version == '2':
|
elif client_version == '2':
|
||||||
client = shares_v2_client.SharesV2Client(os.auth_provider)
|
client = os.share_v2.SharesV2Client()
|
||||||
|
|
||||||
# Set place where will be deleted isolated creds
|
# Set place where will be deleted isolated creds
|
||||||
ic_res = {
|
ic_res = {
|
||||||
@ -233,7 +234,7 @@ class BaseSharesTest(test.BaseTestCase):
|
|||||||
if (not CONF.service_available.neutron and
|
if (not CONF.service_available.neutron and
|
||||||
CONF.share.create_networks_when_multitenancy_enabled):
|
CONF.share.create_networks_when_multitenancy_enabled):
|
||||||
raise cls.skipException("Neutron support is required")
|
raise cls.skipException("Neutron support is required")
|
||||||
nc = os.networks_client
|
nc = os.network.NetworksClient()
|
||||||
share_network_id = cls.provide_share_network(client, nc, ic)
|
share_network_id = cls.provide_share_network(client, nc, ic)
|
||||||
client.share_network_id = share_network_id
|
client.share_network_id = share_network_id
|
||||||
resource = {
|
resource = {
|
||||||
@ -263,7 +264,16 @@ class BaseSharesTest(test.BaseTestCase):
|
|||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
super(BaseSharesTest, cls).setup_clients()
|
super(BaseSharesTest, cls).setup_clients()
|
||||||
os = getattr(cls, 'os_%s' % cls.credentials[0])
|
os = getattr(cls, 'os_%s' % cls.credentials[0])
|
||||||
os.shares_client = shares_client.SharesClient(os.auth_provider)
|
# Initialise share clients for test credentials
|
||||||
|
cls.shares_client = os.share_v1.SharesClient()
|
||||||
|
cls.shares_v2_client = os.share_v2.SharesV2Client()
|
||||||
|
# Initialise network clients for test credentials
|
||||||
|
if CONF.service_available.neutron:
|
||||||
|
cls.networks_client = os.network.NetworksClient()
|
||||||
|
cls.subnets_client = os.network.SubnetsClient()
|
||||||
|
else:
|
||||||
|
cls.networks_client = None
|
||||||
|
cls.subnets_client = None
|
||||||
|
|
||||||
if CONF.identity.auth_version == 'v3':
|
if CONF.identity.auth_version == 'v3':
|
||||||
project_id = os.auth_provider.auth_data[1]['project']['id']
|
project_id = os.auth_provider.auth_data[1]['project']['id']
|
||||||
@ -272,16 +282,12 @@ class BaseSharesTest(test.BaseTestCase):
|
|||||||
cls.tenant_id = project_id
|
cls.tenant_id = project_id
|
||||||
cls.user_id = os.auth_provider.auth_data[1]['user']['id']
|
cls.user_id = os.auth_provider.auth_data[1]['user']['id']
|
||||||
|
|
||||||
cls.shares_client = os.shares_client
|
|
||||||
os.shares_v2_client = shares_v2_client.SharesV2Client(
|
|
||||||
os.auth_provider)
|
|
||||||
cls.shares_v2_client = os.shares_v2_client
|
|
||||||
if CONF.share.multitenancy_enabled:
|
if CONF.share.multitenancy_enabled:
|
||||||
if (not CONF.service_available.neutron and
|
if (not CONF.service_available.neutron and
|
||||||
CONF.share.create_networks_when_multitenancy_enabled):
|
CONF.share.create_networks_when_multitenancy_enabled):
|
||||||
raise cls.skipException("Neutron support is required")
|
raise cls.skipException("Neutron support is required")
|
||||||
share_network_id = cls.provide_share_network(
|
share_network_id = cls.provide_share_network(
|
||||||
cls.shares_v2_client, os.networks_client)
|
cls.shares_v2_client, cls.networks_client)
|
||||||
cls.shares_client.share_network_id = share_network_id
|
cls.shares_client.share_network_id = share_network_id
|
||||||
cls.shares_v2_client.share_network_id = share_network_id
|
cls.shares_v2_client.share_network_id = share_network_id
|
||||||
|
|
||||||
@ -1046,14 +1052,14 @@ class BaseSharesMixedTest(BaseSharesTest):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
super(BaseSharesMixedTest, cls).setup_clients()
|
super(BaseSharesMixedTest, cls).setup_clients()
|
||||||
cls.admin_shares_client = shares_client.SharesClient(
|
# Initialise share clients
|
||||||
cls.os_admin.auth_provider)
|
cls.admin_shares_client = cls.os_admin.share_v1.SharesClient()
|
||||||
cls.admin_shares_v2_client = shares_v2_client.SharesV2Client(
|
cls.admin_shares_v2_client = cls.os_admin.share_v2.SharesV2Client()
|
||||||
cls.os_admin.auth_provider)
|
cls.alt_shares_client = cls.os_alt.share_v1.SharesClient()
|
||||||
cls.alt_shares_client = shares_client.SharesClient(
|
cls.alt_shares_v2_client = cls.os_alt.share_v2.SharesV2Client()
|
||||||
cls.os_alt.auth_provider)
|
# Initialise network clients
|
||||||
cls.alt_shares_v2_client = shares_v2_client.SharesV2Client(
|
cls.os_admin.networks_client = cls.os_admin.network.NetworksClient()
|
||||||
cls.os_alt.auth_provider)
|
cls.os_alt.networks_client = cls.os_alt.network.NetworksClient()
|
||||||
|
|
||||||
if CONF.share.multitenancy_enabled:
|
if CONF.share.multitenancy_enabled:
|
||||||
admin_share_network_id = cls.provide_share_network(
|
admin_share_network_id = cls.provide_share_network(
|
||||||
|
@ -95,7 +95,7 @@ class SecServicesMappingNegativeTest(base.BaseSharesTest):
|
|||||||
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
|
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
|
||||||
def test_delete_ss_from_sn_used_by_share_server(self):
|
def test_delete_ss_from_sn_used_by_share_server(self):
|
||||||
sn = self.shares_client.get_share_network(
|
sn = self.shares_client.get_share_network(
|
||||||
self.os_primary.shares_client.share_network_id)
|
self.shares_client.share_network_id)
|
||||||
fresh_sn = self.create_share_network(
|
fresh_sn = self.create_share_network(
|
||||||
neutron_net_id=sn["neutron_net_id"],
|
neutron_net_id=sn["neutron_net_id"],
|
||||||
neutron_subnet_id=sn["neutron_subnet_id"])
|
neutron_subnet_id=sn["neutron_subnet_id"])
|
||||||
|
@ -81,7 +81,7 @@ class SecurityServicesNegativeTest(base.BaseSharesTest):
|
|||||||
ss = self.create_security_service(**ss_data)
|
ss = self.create_security_service(**ss_data)
|
||||||
|
|
||||||
sn = self.shares_client.get_share_network(
|
sn = self.shares_client.get_share_network(
|
||||||
self.os_primary.shares_client.share_network_id)
|
self.shares_client.share_network_id)
|
||||||
fresh_sn = self.create_share_network(
|
fresh_sn = self.create_share_network(
|
||||||
neutron_net_id=sn["neutron_net_id"],
|
neutron_net_id=sn["neutron_net_id"],
|
||||||
neutron_subnet_id=sn["neutron_subnet_id"])
|
neutron_subnet_id=sn["neutron_subnet_id"])
|
||||||
|
@ -247,8 +247,7 @@ class ShareNetworksTest(base.BaseSharesTest, ShareNetworkListMixin):
|
|||||||
@base.skip_if_microversion_lt("2.18")
|
@base.skip_if_microversion_lt("2.18")
|
||||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||||
def test_gateway_with_neutron(self):
|
def test_gateway_with_neutron(self):
|
||||||
os = getattr(self, 'os_%s' % self.credentials[0])
|
subnet_client = self.subnets_client
|
||||||
subnet_client = os.subnets_client
|
|
||||||
|
|
||||||
self.create_share(cleanup_in_class=False)
|
self.create_share(cleanup_in_class=False)
|
||||||
share_net_details = self.shares_v2_client.get_share_network(
|
share_net_details = self.shares_v2_client.get_share_network(
|
||||||
@ -267,8 +266,7 @@ class ShareNetworksTest(base.BaseSharesTest, ShareNetworkListMixin):
|
|||||||
@base.skip_if_microversion_lt("2.20")
|
@base.skip_if_microversion_lt("2.20")
|
||||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||||
def test_mtu_with_neutron(self):
|
def test_mtu_with_neutron(self):
|
||||||
os = getattr(self, 'os_%s' % self.credentials[0])
|
network_client = self.networks_client
|
||||||
network_client = os.networks_client
|
|
||||||
|
|
||||||
self.create_share(cleanup_in_class=False)
|
self.create_share(cleanup_in_class=False)
|
||||||
share_net_details = self.shares_v2_client.get_share_network(
|
share_net_details = self.shares_v2_client.get_share_network(
|
||||||
|
@ -21,9 +21,6 @@ from tempest.lib.common.utils import data_utils
|
|||||||
|
|
||||||
from manila_tempest_tests.common import constants
|
from manila_tempest_tests.common import constants
|
||||||
from manila_tempest_tests.common import remote_client
|
from manila_tempest_tests.common import remote_client
|
||||||
from manila_tempest_tests.services.share.json import shares_client
|
|
||||||
from manila_tempest_tests.services.share.v2.json import (
|
|
||||||
shares_client as shares_v2_client)
|
|
||||||
from manila_tempest_tests.tests.scenario import manager
|
from manila_tempest_tests.tests.scenario import manager
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
@ -41,14 +38,10 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
|||||||
super(ShareScenarioTest, cls).resource_setup()
|
super(ShareScenarioTest, cls).resource_setup()
|
||||||
|
|
||||||
# Manila clients
|
# Manila clients
|
||||||
cls.shares_client = shares_client.SharesClient(
|
cls.shares_client = cls.os_primary.share_v1.SharesClient()
|
||||||
cls.os_primary.auth_provider)
|
cls.shares_v2_client = cls.os_primary.share_v2.SharesV2Client()
|
||||||
cls.shares_v2_client = shares_v2_client.SharesV2Client(
|
cls.shares_admin_client = cls.os_admin.share_v1.SharesClient()
|
||||||
cls.os_primary.auth_provider)
|
cls.shares_admin_v2_client = cls.os_admin.share_v2.SharesV2Client()
|
||||||
cls.shares_admin_client = shares_client.SharesClient(
|
|
||||||
cls.os_admin.auth_provider)
|
|
||||||
cls.shares_admin_v2_client = shares_v2_client.SharesV2Client(
|
|
||||||
cls.os_admin.auth_provider)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def skip_checks(cls):
|
def skip_checks(cls):
|
||||||
|
Loading…
Reference in New Issue
Block a user