Merge "Create base class for client to avoid code duplication"
This commit is contained in:
commit
5a5f36e884
|
@ -0,0 +1,47 @@
|
|||
# Copyright 2018 Samsung Electronics
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# 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 oslo_serialization import jsonutils as json
|
||||
from six.moves.urllib import parse as urllib
|
||||
|
||||
from tempest.lib.common import rest_client
|
||||
|
||||
|
||||
class BaseClient(rest_client.RestClient):
|
||||
|
||||
def show_resource(self, uri, expected_status_code=200, **fields):
|
||||
if fields:
|
||||
# Encode provided dict of fields into a series of key=value pairs
|
||||
# separated by '&' characters.
|
||||
#
|
||||
# The field value can be a sequence. Setting option doseq to True
|
||||
# enforces producing individual key-value pair for each element of
|
||||
# the sequence under the same key.
|
||||
#
|
||||
# e.g. {'foo': 'bar', 'baz': ['test1', 'test2']}
|
||||
# => foo=bar&baz=test1&baz=test2
|
||||
uri += '?' + urllib.urlencode(fields, doseq=True)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(expected_status_code, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_resources(self, uri, expected_status_code=200, **filters):
|
||||
if filters:
|
||||
uri += '?' + urllib.urlencode(filters, doseq=True)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(expected_status_code, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
|
@ -13,25 +13,16 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslo_serialization import jsonutils as json
|
||||
from six.moves import urllib
|
||||
from tempest.lib.common import rest_client
|
||||
from trove_tempest_plugin.services.database.json import base_client
|
||||
|
||||
|
||||
class DatabaseFlavorsClient(rest_client.RestClient):
|
||||
class FlavorsClient(base_client.BaseClient):
|
||||
|
||||
def list_db_flavors(self, params=None):
|
||||
url = 'flavors'
|
||||
if params:
|
||||
url += '?%s' % urllib.parse.urlencode(params)
|
||||
uri = '/flavors'
|
||||
|
||||
resp, body = self.get(url)
|
||||
self.expected_success(200, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
def list_flavors(self):
|
||||
return self.list_resources(self.uri)
|
||||
|
||||
def show_db_flavor(self, db_flavor_id):
|
||||
resp, body = self.get("flavors/%s" % db_flavor_id)
|
||||
self.expected_success(200, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
def show_flavor(self, flavor_id):
|
||||
uri = '%s/%s' % (self.uri, flavor_id)
|
||||
return self.show_resource(uri)
|
||||
|
|
|
@ -13,19 +13,13 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslo_serialization import jsonutils as json
|
||||
from six.moves.urllib import parse as urllib
|
||||
from tempest.lib.common import rest_client
|
||||
from trove_tempest_plugin.services.database.json import base_client
|
||||
|
||||
|
||||
class DatabaseLimitsClient(rest_client.RestClient):
|
||||
class LimitsClient(base_client.BaseClient):
|
||||
|
||||
def list_db_limits(self, params=None):
|
||||
uri = '/limits'
|
||||
|
||||
def list_limits(self):
|
||||
"""List all limits."""
|
||||
url = 'limits'
|
||||
if params:
|
||||
url += '?%s' % urllib.urlencode(params)
|
||||
resp, body = self.get(url)
|
||||
self.expected_success(200, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
return self.list_resources(self.uri)
|
||||
|
|
|
@ -13,25 +13,18 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslo_serialization import jsonutils as json
|
||||
from six.moves.urllib import parse as urllib
|
||||
from tempest.lib.common import rest_client
|
||||
from trove_tempest_plugin.services.database.json import base_client
|
||||
|
||||
|
||||
class DatabaseVersionsClient(rest_client.RestClient):
|
||||
class VersionsClient(base_client.BaseClient):
|
||||
|
||||
uri = ''
|
||||
|
||||
def __init__(self, auth_provider, service, region, **kwargs):
|
||||
super(DatabaseVersionsClient, self).__init__(
|
||||
super(VersionsClient, self).__init__(
|
||||
auth_provider, service, region, **kwargs)
|
||||
self.skip_path()
|
||||
|
||||
def list_db_versions(self, params=None):
|
||||
def list_versions(self):
|
||||
"""List all versions."""
|
||||
url = ''
|
||||
if params:
|
||||
url += '?%s' % urllib.urlencode(params)
|
||||
|
||||
resp, body = self.get(url)
|
||||
self.expected_success(200, resp.status)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
return self.list_resources(self.uri)
|
||||
|
|
|
@ -48,18 +48,18 @@ class BaseDatabaseTest(tempest.test.BaseTestCase):
|
|||
'build_timeout': CONF.compute.build_timeout
|
||||
}
|
||||
default_params_with_timeout_values.update(default_params)
|
||||
cls.database_flavors_client = flavors_client.DatabaseFlavorsClient(
|
||||
cls.database_flavors_client = flavors_client.FlavorsClient(
|
||||
cls.os_primary.auth_provider,
|
||||
CONF.database.catalog_type,
|
||||
CONF.identity.region,
|
||||
**default_params_with_timeout_values)
|
||||
cls.os_flavors_client = cls.os_primary.flavors_client
|
||||
cls.database_limits_client = limits_client.DatabaseLimitsClient(
|
||||
cls.database_limits_client = limits_client.LimitsClient(
|
||||
cls.os_primary.auth_provider,
|
||||
CONF.database.catalog_type,
|
||||
CONF.identity.region,
|
||||
**default_params_with_timeout_values)
|
||||
cls.database_versions_client = versions_client.DatabaseVersionsClient(
|
||||
cls.database_versions_client = versions_client.VersionsClient(
|
||||
cls.os_primary.auth_provider,
|
||||
CONF.database.catalog_type,
|
||||
CONF.identity.region,
|
||||
|
|
|
@ -31,7 +31,7 @@ class DatabaseFlavorsTest(base.BaseDatabaseTest):
|
|||
@decorators.idempotent_id('c94b825e-0132-4686-8049-8a4a2bc09525')
|
||||
def test_get_db_flavor(self):
|
||||
# The expected flavor details should be returned
|
||||
flavor = (self.client.show_db_flavor(self.db_flavor_ref)
|
||||
flavor = (self.client.show_flavor(self.db_flavor_ref)
|
||||
['flavor'])
|
||||
self.assertEqual(self.db_flavor_ref, str(flavor['id']))
|
||||
self.assertIn('ram', flavor)
|
||||
|
@ -41,10 +41,10 @@ class DatabaseFlavorsTest(base.BaseDatabaseTest):
|
|||
@testtools.attr('smoke')
|
||||
@decorators.idempotent_id('685025d6-0cec-4673-8a8d-995cb8e0d3bb')
|
||||
def test_list_db_flavors(self):
|
||||
flavor = (self.client.show_db_flavor(self.db_flavor_ref)
|
||||
flavor = (self.client.show_flavor(self.db_flavor_ref)
|
||||
['flavor'])
|
||||
# List of all flavors should contain the expected flavor
|
||||
flavors = self.client.list_db_flavors()['flavors']
|
||||
flavors = self.client.list_flavors()['flavors']
|
||||
self.assertIn(flavor, flavors)
|
||||
|
||||
def _check_values(self, names, db_flavor, os_flavor, in_db=True):
|
||||
|
@ -62,7 +62,7 @@ class DatabaseFlavorsTest(base.BaseDatabaseTest):
|
|||
@decorators.idempotent_id('afb2667f-4ec2-4925-bcb7-313fdcffb80d')
|
||||
@utils.services('compute')
|
||||
def test_compare_db_flavors_with_os(self):
|
||||
db_flavors = self.client.list_db_flavors()['flavors']
|
||||
db_flavors = self.client.list_flavors()['flavors']
|
||||
os_flavors = (self.os_flavors_client.list_flavors(detail=True)
|
||||
['flavors'])
|
||||
self.assertEqual(len(os_flavors), len(db_flavors),
|
||||
|
@ -70,7 +70,7 @@ class DatabaseFlavorsTest(base.BaseDatabaseTest):
|
|||
(os_flavors, db_flavors))
|
||||
for os_flavor in os_flavors:
|
||||
db_flavor =\
|
||||
self.client.show_db_flavor(os_flavor['id'])['flavor']
|
||||
self.client.show_flavor(os_flavor['id'])['flavor']
|
||||
if db_flavor['id']:
|
||||
self.assertIn('id', db_flavor)
|
||||
self.assertEqual(str(db_flavor['id']), str(os_flavor['id']),
|
||||
|
|
|
@ -33,4 +33,4 @@ class DatabaseFlavorsNegativeTest(base.BaseDatabaseTest):
|
|||
def test_get_non_existent_db_flavor(self):
|
||||
# flavor details are not returned for non-existent flavors
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
self.client.show_db_flavor, -1)
|
||||
self.client.show_flavor, -1)
|
||||
|
|
|
@ -31,7 +31,7 @@ class DatabaseLimitsTest(base.BaseDatabaseTest):
|
|||
def test_absolute_limits(self):
|
||||
# Test to verify if all absolute limit parameters are
|
||||
# present when verb is ABSOLUTE
|
||||
limits = self.client.list_db_limits()['limits']
|
||||
limits = self.client.list_limits()['limits']
|
||||
expected_abs_limits = ['max_backups', 'max_volumes',
|
||||
'max_instances', 'verb']
|
||||
absolute_limit = [l for l in limits
|
||||
|
|
|
@ -29,7 +29,7 @@ class DatabaseVersionsTest(base.BaseDatabaseTest):
|
|||
@testtools.attr('smoke')
|
||||
@decorators.idempotent_id('6952cd77-90cd-4dca-bb60-8e2c797940cf')
|
||||
def test_list_db_versions(self):
|
||||
versions = self.client.list_db_versions()['versions']
|
||||
versions = self.client.list_versions()['versions']
|
||||
self.assertTrue(len(versions) > 0, "No database versions found")
|
||||
# List of all versions should contain the current version, and there
|
||||
# should only be one 'current' version
|
||||
|
|
Loading…
Reference in New Issue