Kingbird Refactor(Part 2/Final):
Add configuration for auto discovery of kingbird Tempest testcases. Restructure and fixed minor issues in existing tempest. Added README.rst for the steps to run Kingbird tempest plugin. The configurations which are specific to kingbird plugin are in kingbird/tests/tempest/scenario/config.py and currently the default configuration is used from here. Change-Id: I1b652c82beea61d84b3f42bf657925b1571f7a8d
This commit is contained in:
parent
623d913cc5
commit
4f2d5f290a
@ -2,7 +2,7 @@
|
|||||||
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
|
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
|
||||||
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
|
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
|
||||||
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \
|
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \
|
||||||
${PYTHON:-python} -m subunit.run discover -t ./ . $LISTOPT $IDOPTION
|
${PYTHON:-python} -m subunit.run discover $DISCOVER_DIRECTORY $LISTOPT $IDOPTION
|
||||||
test_id_option=--load-list $IDFILE
|
test_id_option=--load-list $IDFILE
|
||||||
test_list_option=--list
|
test_list_option=--list
|
||||||
|
|
||||||
|
106
kingbird/tests/tempest/scenario/README.rst
Normal file
106
kingbird/tests/tempest/scenario/README.rst
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
Tests for Kingbird in Tempest
|
||||||
|
====================================
|
||||||
|
|
||||||
|
How to run
|
||||||
|
----------
|
||||||
|
|
||||||
|
Get the latest kingbird resources from the appropriate mirror:
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
$ git clone https://github.com/openstack/kingbird.git
|
||||||
|
..
|
||||||
|
|
||||||
|
Install kingbird, in order to register the tempest plugin interface:
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
$ cd kingbird
|
||||||
|
$ python setup.py install
|
||||||
|
..
|
||||||
|
|
||||||
|
Get the latest tempest resources from the appropriate mirror:
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
$ git clone https://github.com/openstack/tempest.git
|
||||||
|
..
|
||||||
|
|
||||||
|
Create a configuration file ``tempest/etc/tempest.conf`` for tempest.
|
||||||
|
The sample file can be generated and used for this purpose:
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
$ cd $TEMPEST_ROOT_DIR
|
||||||
|
$ tox -e genconfig
|
||||||
|
$ cp etc/tempest.conf.sample etc/tempest.conf
|
||||||
|
..
|
||||||
|
|
||||||
|
Some configuration options are required for running tests. Here is the list:
|
||||||
|
|
||||||
|
.. sourcecode:: ini
|
||||||
|
|
||||||
|
[auth]
|
||||||
|
admin_username=
|
||||||
|
admin_project_name=
|
||||||
|
admin_password=
|
||||||
|
admin_domain_name=
|
||||||
|
|
||||||
|
[identity]
|
||||||
|
uri=
|
||||||
|
uri_v3=
|
||||||
|
auth_version=
|
||||||
|
username=
|
||||||
|
password=
|
||||||
|
region=
|
||||||
|
tenant_name=
|
||||||
|
domain_name=
|
||||||
|
alt_domain_name=
|
||||||
|
default_domain_id=
|
||||||
|
|
||||||
|
[compute]
|
||||||
|
image_ref=
|
||||||
|
|
||||||
|
..
|
||||||
|
|
||||||
|
All the parameters above are defined by tempest.
|
||||||
|
|
||||||
|
The parameters which are only specific to kingbird tempest plugin
|
||||||
|
are configured in kingbird/tests/tempest/scenario/config.py by group name KBGroup.
|
||||||
|
|
||||||
|
..
|
||||||
|
endpoint_type=publicURL
|
||||||
|
TIME_TO_SYNC=30
|
||||||
|
endpoint_url=http://127.0.0.1:8118/
|
||||||
|
api_version=v1.0
|
||||||
|
|
||||||
|
..
|
||||||
|
|
||||||
|
When configuration is finished, you can list the testcases in Kingbird plugin:
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
$ testr list-tests | grep kingbird
|
||||||
|
..
|
||||||
|
|
||||||
|
|
||||||
|
If you want to launch the tests from tempest, you can do with:
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
$ tox -e all-plugin -- scenario.quota_management.client_tests
|
||||||
|
..
|
||||||
|
|
||||||
|
If you want to launch all Kingbird tests in Tempest, you can do this with ``quota_management`` tag:
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
$ tox -e all-plugin -- quota_management
|
||||||
|
..
|
||||||
|
|
||||||
|
If you want to launch a single Kingbird testcase in Tempest, you can do this with:
|
||||||
|
|
||||||
|
.. sourcecode:: console
|
||||||
|
|
||||||
|
$ tox -e all-plugin scenario.quota_management.client_tests.test_quota_management_api.KingbirdQMTestJSON.test_kingbird_delete_method
|
||||||
|
..
|
33
kingbird/tests/tempest/scenario/config.py
Normal file
33
kingbird/tests/tempest/scenario/config.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# Copyright 2016 Ericsson AB
|
||||||
|
# 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.
|
||||||
|
"""Configurations for Kingbird Tempest Plugin."""
|
||||||
|
|
||||||
|
from oslo_config import cfg
|
||||||
|
|
||||||
|
|
||||||
|
KBGroup = [
|
||||||
|
cfg.StrOpt('endpoint_type',
|
||||||
|
default='publicURL',
|
||||||
|
help="Endpoint type of Kingbird service."),
|
||||||
|
cfg.IntOpt('TIME_TO_SYNC',
|
||||||
|
default=30,
|
||||||
|
help="Maximum time to wait for a sync call to complete."),
|
||||||
|
cfg.StrOpt('endpoint_url',
|
||||||
|
default='http://127.0.0.1:8118/',
|
||||||
|
help="Endpoint URL of Kingbird service."),
|
||||||
|
cfg.StrOpt('api_version',
|
||||||
|
default='v1.0',
|
||||||
|
help="Api version of Kingbird service.")
|
||||||
|
]
|
27
kingbird/tests/tempest/scenario/consts.py
Normal file
27
kingbird/tests/tempest/scenario/consts.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Copyright 2016 Ericsson AB
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
|
||||||
|
DEFAULT_QUOTAS = {
|
||||||
|
u'quota_set': {
|
||||||
|
u'metadata_items': 128, u'subnet': 10, u'consistencygroups': 10,
|
||||||
|
u'floatingip': 50, u'gigabytes': 1000, u'backup_gigabytes': 1000,
|
||||||
|
u'ram': 51200, u'floating_ips': 10, u'snapshots': 10,
|
||||||
|
u'security_group_rule': 100,
|
||||||
|
u'instances': 10, u'key_pairs': 100, u'volumes': 10, u'router': 10,
|
||||||
|
u'security_group': 10, u'cores': 20, u'backups': 10, u'fixed_ips': -1,
|
||||||
|
u'port': 50, u'security_groups': 10, u'network': 10
|
||||||
|
}
|
||||||
|
}
|
@ -18,17 +18,21 @@ import os
|
|||||||
|
|
||||||
from tempest.test_discover import plugins
|
from tempest.test_discover import plugins
|
||||||
|
|
||||||
|
import kingbird.tests.tempest.scenario.config as kb_config
|
||||||
|
|
||||||
|
|
||||||
class KingbirdTempestPlugin(plugins.TempestPlugin):
|
class KingbirdTempestPlugin(plugins.TempestPlugin):
|
||||||
def load_tests(self):
|
def load_tests(self):
|
||||||
base_path = os.path.split(os.path.dirname(
|
base_path = os.path.split(os.path.dirname(
|
||||||
os.path.abspath(__file__)))[0]
|
os.path.abspath(__file__)))[0]
|
||||||
test_dir = "tempest/tests/"
|
test_dir = 'scenario'
|
||||||
full_test_dir = os.path.join(base_path, test_dir)
|
full_test_dir = os.path.join(base_path, test_dir)
|
||||||
return full_test_dir, base_path
|
return full_test_dir, base_path
|
||||||
|
|
||||||
def register_opts(self, conf):
|
def register_opts(self, conf):
|
||||||
pass
|
# additional options for Kingbird
|
||||||
|
conf.register_opts(kb_config.KBGroup,
|
||||||
|
'kingbird')
|
||||||
|
|
||||||
def get_opt_lists(self):
|
def get_opt_lists(self):
|
||||||
pass
|
return [('kingbird', kb_config.KbGroup)]
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2012 OpenStack Foundation
|
# Copyright 2016 Ericsson AB
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
@ -12,27 +12,22 @@
|
|||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from tempest.common import kingbird
|
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib.common import api_version_utils
|
from tempest.lib.common import api_version_utils
|
||||||
from tempest.lib.common.utils import data_utils
|
from tempest.lib.common.utils import data_utils
|
||||||
import tempest.test
|
import tempest.test
|
||||||
|
|
||||||
|
from kingbird.tests.tempest.scenario import consts
|
||||||
|
from kingbird.tests.tempest.scenario.quota_management \
|
||||||
|
import sync_client
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
Global_instance_limit = 10
|
Global_instance_limit = 10
|
||||||
DEFAULT_QUOTAS = {
|
DEFAULT_QUOTAS = consts.DEFAULT_QUOTAS
|
||||||
u'quota_set': {
|
|
||||||
u'metadata_items': 128, u'subnet': 10, u'consistencygroups': 10,
|
|
||||||
u'floatingip': 50, u'gigabytes': 1000, u'backup_gigabytes': 1000,
|
|
||||||
u'ram': 51200, u'floating_ips': 10, u'snapshots': 10,
|
|
||||||
u'instances': 10, u'key_pairs': 100, u'volumes': 10, u'router': 10,
|
|
||||||
u'security_group': 10, u'cores': 20, u'backups': 10, u'fixed_ips': -1,
|
|
||||||
u'port': 50, u'security_groups': 10, u'network': 10
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# Time to wait for sync to finish
|
# Time to wait for sync to finish
|
||||||
TIME_TO_SYNC = CONF.kingbird.TIME_TO_SYNC
|
TIME_TO_SYNC = CONF.kingbird.TIME_TO_SYNC
|
||||||
|
|
||||||
@ -44,17 +39,14 @@ class BaseKingbirdTest(api_version_utils.BaseMicroversionTest,
|
|||||||
@classmethod
|
@classmethod
|
||||||
def skip_checks(cls):
|
def skip_checks(cls):
|
||||||
super(BaseKingbirdTest, cls).skip_checks()
|
super(BaseKingbirdTest, cls).skip_checks()
|
||||||
if not CONF.service_available.kingbird:
|
|
||||||
raise cls.skipException("Kingbird is not available")
|
|
||||||
# import config variables
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_credentials(cls):
|
def setup_credentials(cls):
|
||||||
super(BaseKingbirdTest, cls).setup_credentials()
|
super(BaseKingbirdTest, cls).setup_credentials()
|
||||||
session = kingbird.get_session()
|
session = sync_client.get_session()
|
||||||
cls.auth_token = session.get_token()
|
cls.auth_token = session.get_token()
|
||||||
cls.key_client = kingbird.get_key_client(session)
|
cls.key_client = sync_client.get_key_client(session)
|
||||||
cls.regions = kingbird.get_regions(cls.key_client)
|
cls.regions = sync_client.get_regions(cls.key_client)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_clients(cls):
|
def setup_clients(cls):
|
||||||
@ -64,16 +56,16 @@ class BaseKingbirdTest(api_version_utils.BaseMicroversionTest,
|
|||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
super(BaseKingbirdTest, cls).resource_setup()
|
super(BaseKingbirdTest, cls).resource_setup()
|
||||||
# Create Project, User, flavor, subnet & network for test
|
# Create Project, User, flavor, subnet & network for test
|
||||||
project_name = data_utils.rand_name(__name__ + '-project')
|
project_name = data_utils.rand_name('kb-project')
|
||||||
user_name = data_utils.rand_name(__name__ + '-user')
|
user_name = data_utils.rand_name('kb-user')
|
||||||
password = data_utils.rand_name(__name__ + '-password')
|
password = data_utils.rand_name('kb-password')
|
||||||
openstack_details = kingbird.get_openstack_drivers(cls.key_client,
|
openstack_details = sync_client.get_openstack_drivers(cls.key_client,
|
||||||
cls.regions[0],
|
cls.regions[0],
|
||||||
project_name,
|
project_name,
|
||||||
user_name,
|
user_name,
|
||||||
password)
|
password)
|
||||||
cls.openstack_drivers = openstack_details['os_drivers']
|
cls.openstack_drivers = openstack_details['os_drivers']
|
||||||
cls.resource_ids = kingbird.create_resources(cls.openstack_drivers)
|
cls.resource_ids = sync_client.create_resources(cls.openstack_drivers)
|
||||||
cls.resource_ids.update(openstack_details)
|
cls.resource_ids.update(openstack_details)
|
||||||
cls.session = openstack_details['session']
|
cls.session = openstack_details['session']
|
||||||
|
|
||||||
@ -83,61 +75,61 @@ class BaseKingbirdTest(api_version_utils.BaseMicroversionTest,
|
|||||||
default_quota = {'instances': DEFAULT_QUOTAS['quota_set']['instances'],
|
default_quota = {'instances': DEFAULT_QUOTAS['quota_set']['instances'],
|
||||||
'cores': DEFAULT_QUOTAS['quota_set']['cores'],
|
'cores': DEFAULT_QUOTAS['quota_set']['cores'],
|
||||||
'ram': DEFAULT_QUOTAS['quota_set']['ram']}
|
'ram': DEFAULT_QUOTAS['quota_set']['ram']}
|
||||||
cls.set_default_quota(CONF.kingbird.project_id, default_quota)
|
cls.set_default_quota(cls.resource_ids['project_id'], default_quota)
|
||||||
kingbird.resource_cleanup(cls.openstack_drivers, cls.resource_ids)
|
sync_client.resource_cleanup(cls.openstack_drivers, cls.resource_ids)
|
||||||
kingbird.delete_custom_kingbird_quota(
|
sync_client.delete_custom_kingbird_quota(
|
||||||
cls.auth_token, CONF.kingbird.project_id, None)
|
cls.auth_token, cls.resource_ids['project_id'], None)
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(BaseKingbirdTest, self).setUp()
|
super(BaseKingbirdTest, self).setUp()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_custom_kingbird_quota(cls, project_id, new_quota_values):
|
def create_custom_kingbird_quota(cls, project_id, new_quota_values):
|
||||||
new_values = kingbird.create_custom_kingbird_quota(
|
new_values = sync_client.create_custom_kingbird_quota(
|
||||||
cls.auth_token, project_id, new_quota_values)
|
cls.auth_token, project_id, new_quota_values)
|
||||||
return new_values
|
return new_values
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_custom_kingbird_quota(cls, project_id):
|
def get_custom_kingbird_quota(cls, project_id):
|
||||||
return_quotas = kingbird.get_custom_kingbird_quota(
|
return_quotas = sync_client.get_custom_kingbird_quota(
|
||||||
cls.auth_token, project_id)
|
cls.auth_token, project_id)
|
||||||
return return_quotas
|
return return_quotas
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def delete_custom_kingbird_quota(cls, project_id, quota_to_delete=None):
|
def delete_custom_kingbird_quota(cls, project_id, quota_to_delete=None):
|
||||||
deleted_quotas = kingbird.delete_custom_kingbird_quota(
|
deleted_quotas = sync_client.delete_custom_kingbird_quota(
|
||||||
cls.auth_token, project_id, quota_to_delete)
|
cls.auth_token, project_id, quota_to_delete)
|
||||||
return deleted_quotas
|
return deleted_quotas
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_default_kingbird_quota(cls):
|
def get_default_kingbird_quota(cls):
|
||||||
return_quotas = kingbird.get_default_kingbird_quota(cls.auth_token)
|
return_quotas = sync_client.get_default_kingbird_quota(cls.auth_token)
|
||||||
return return_quotas
|
return return_quotas
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def quota_sync_for_project(cls, project_id):
|
def quota_sync_for_project(cls, project_id):
|
||||||
sync_status = kingbird.quota_sync_for_project(
|
sync_status = sync_client.quota_sync_for_project(
|
||||||
cls.auth_token, project_id)
|
cls.auth_token, project_id)
|
||||||
return sync_status
|
return sync_status
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_quota_usage_for_project(cls, project_id):
|
def get_quota_usage_for_project(cls, project_id):
|
||||||
quota_usage = kingbird.get_quota_usage_for_project(
|
quota_usage = sync_client.get_quota_usage_for_project(
|
||||||
cls.auth_token, project_id)
|
cls.auth_token, project_id)
|
||||||
return quota_usage
|
return quota_usage
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_custom_kingbird_quota_wrong_token(cls, project_id,
|
def create_custom_kingbird_quota_wrong_token(cls, project_id,
|
||||||
new_quota_values):
|
new_quota_values):
|
||||||
new_values = kingbird.create_custom_kingbird_quota_wrong_token(
|
new_values = sync_client.create_custom_kingbird_quota_wrong_token(
|
||||||
cls.auth_token, project_id, new_quota_values)
|
cls.auth_token, project_id, new_quota_values)
|
||||||
return new_values
|
return new_values
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_instance(cls, count=1):
|
def create_instance(cls, count=1):
|
||||||
try:
|
try:
|
||||||
server_ids = kingbird.create_instance(cls.openstack_drivers,
|
server_ids = sync_client.create_instance(cls.openstack_drivers,
|
||||||
cls.resource_ids, count)
|
cls.resource_ids, count)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
server_ids = {'server_ids': list(e.args)}
|
server_ids = {'server_ids': list(e.args)}
|
||||||
raise
|
raise
|
||||||
@ -146,13 +138,13 @@ class BaseKingbirdTest(api_version_utils.BaseMicroversionTest,
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def delete_instance(cls):
|
def delete_instance(cls):
|
||||||
kingbird.delete_instance(cls.openstack_drivers, cls.resource_ids)
|
sync_client.delete_instance(cls.openstack_drivers, cls.resource_ids)
|
||||||
cls.resource_ids['instances'] = None
|
cls.resource_ids['instances'] = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def calculate_quota_limits(cls, project_id):
|
def calculate_quota_limits(cls, project_id):
|
||||||
calculated_quota_limits = collections.defaultdict(dict)
|
calculated_quota_limits = collections.defaultdict(dict)
|
||||||
resource_usage = kingbird.get_usage_from_os_client(
|
resource_usage = sync_client.get_usage_from_os_client(
|
||||||
cls.session, cls.regions, project_id)
|
cls.session, cls.regions, project_id)
|
||||||
total_usages = cls.get_summation(resource_usage)
|
total_usages = cls.get_summation(resource_usage)
|
||||||
for current_region in cls.regions:
|
for current_region in cls.regions:
|
||||||
@ -177,14 +169,14 @@ class BaseKingbirdTest(api_version_utils.BaseMicroversionTest,
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_usage_manually(cls, project_id):
|
def get_usage_manually(cls, project_id):
|
||||||
resource_usage = kingbird.get_usage_from_os_client(
|
resource_usage = sync_client.get_usage_from_os_client(
|
||||||
cls.session, cls.regions, project_id)
|
cls.session, cls.regions, project_id)
|
||||||
resource_usage = cls.get_summation(resource_usage)
|
resource_usage = cls.get_summation(resource_usage)
|
||||||
return {'quota_set': resource_usage}
|
return {'quota_set': resource_usage}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_actual_limits(cls, project_id):
|
def get_actual_limits(cls, project_id):
|
||||||
actual_limits = kingbird.get_actual_limits(
|
actual_limits = sync_client.get_actual_limits(
|
||||||
cls.session, cls.regions, project_id)
|
cls.session, cls.regions, project_id)
|
||||||
return actual_limits
|
return actual_limits
|
||||||
|
|
||||||
@ -194,5 +186,5 @@ class BaseKingbirdTest(api_version_utils.BaseMicroversionTest,
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set_default_quota(cls, project_id, quota_to_set):
|
def set_default_quota(cls, project_id, quota_to_set):
|
||||||
kingbird.set_default_quota(
|
sync_client.set_default_quota(
|
||||||
cls.session, cls.regions, project_id, **quota_to_set)
|
cls.session, cls.regions, project_id, **quota_to_set)
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2012 OpenStack Foundation
|
# Copyright 2016 Ericsson AB
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
@ -13,7 +13,8 @@
|
|||||||
# 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.api.kingbird import base
|
from kingbird.tests.tempest.scenario.quota_management. \
|
||||||
|
client_tests import base
|
||||||
from tempest import config
|
from tempest import config
|
||||||
|
|
||||||
import novaclient
|
import novaclient
|
@ -34,6 +34,7 @@ NETWORK_NAME = "kb_test_network"
|
|||||||
SUBNET_NAME = "kb_test_subnet"
|
SUBNET_NAME = "kb_test_subnet"
|
||||||
SERVER_NAME = "kb_test_server"
|
SERVER_NAME = "kb_test_server"
|
||||||
SUBNET_RANGE = "192.168.199.0/24"
|
SUBNET_RANGE = "192.168.199.0/24"
|
||||||
|
quota_api_url = "/os-quota-sets/"
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -42,7 +43,7 @@ def get_session():
|
|||||||
return get_current_session(
|
return get_current_session(
|
||||||
CONF.identity.username,
|
CONF.identity.username,
|
||||||
CONF.identity.password,
|
CONF.identity.password,
|
||||||
CONF.identity.tenant_name
|
CONF.identity.project_name
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -100,35 +101,35 @@ def create_instance(openstack_drivers, resource_ids, count=1):
|
|||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
|
||||||
def get_urlstring_and_headers(token):
|
def get_urlstring_and_headers(token, api_url):
|
||||||
admin_tenant_id = CONF.auth.admin_tenant_name
|
admin_tenant_id = CONF.auth.admin_project_name
|
||||||
headers = {
|
headers = {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'X-Auth-Token': token,
|
'X-Auth-Token': token,
|
||||||
'X-ROLE': 'admin',
|
'X-ROLE': 'admin',
|
||||||
}
|
}
|
||||||
url_string = CONF.kingbird.endpoint_url + CONF.kingbird.api_version + \
|
url_string = CONF.kingbird.endpoint_url + CONF.kingbird.api_version + \
|
||||||
"/" + admin_tenant_id + "/os-quota-sets/"
|
"/" + admin_tenant_id + api_url
|
||||||
return headers, url_string
|
return headers, url_string
|
||||||
|
|
||||||
|
|
||||||
def create_custom_kingbird_quota(token, project_id, new_quota_values):
|
def create_custom_kingbird_quota(token, project_id, new_quota_values):
|
||||||
body = json.dumps(new_quota_values)
|
body = json.dumps(new_quota_values)
|
||||||
headers, url_string = get_urlstring_and_headers(token)
|
headers, url_string = get_urlstring_and_headers(token, quota_api_url)
|
||||||
url_string = url_string + project_id
|
url_string = url_string + project_id
|
||||||
response = requests.put(url_string, headers=headers, data=body)
|
response = requests.put(url_string, headers=headers, data=body)
|
||||||
return response.text
|
return response.text
|
||||||
|
|
||||||
|
|
||||||
def get_custom_kingbird_quota(token, project_id):
|
def get_custom_kingbird_quota(token, project_id):
|
||||||
headers, url_string = get_urlstring_and_headers(token)
|
headers, url_string = get_urlstring_and_headers(token, quota_api_url)
|
||||||
url_string = url_string + project_id
|
url_string = url_string + project_id
|
||||||
response = requests.get(url_string, headers=headers)
|
response = requests.get(url_string, headers=headers)
|
||||||
return response.text
|
return response.text
|
||||||
|
|
||||||
|
|
||||||
def delete_custom_kingbird_quota(token, project_id, quota_to_delete=None):
|
def delete_custom_kingbird_quota(token, project_id, quota_to_delete=None):
|
||||||
headers, url_string = get_urlstring_and_headers(token)
|
headers, url_string = get_urlstring_and_headers(token, quota_api_url)
|
||||||
url_string = url_string + project_id
|
url_string = url_string + project_id
|
||||||
if quota_to_delete:
|
if quota_to_delete:
|
||||||
body = json.dumps(quota_to_delete)
|
body = json.dumps(quota_to_delete)
|
||||||
@ -139,21 +140,21 @@ def delete_custom_kingbird_quota(token, project_id, quota_to_delete=None):
|
|||||||
|
|
||||||
|
|
||||||
def get_default_kingbird_quota(token):
|
def get_default_kingbird_quota(token):
|
||||||
headers, url_string = get_urlstring_and_headers(token)
|
headers, url_string = get_urlstring_and_headers(token, quota_api_url)
|
||||||
url_string = url_string + "defaults"
|
url_string = url_string + "defaults"
|
||||||
response = requests.get(url_string, headers=headers)
|
response = requests.get(url_string, headers=headers)
|
||||||
return response.text
|
return response.text
|
||||||
|
|
||||||
|
|
||||||
def quota_sync_for_project(token, project_id):
|
def quota_sync_for_project(token, project_id):
|
||||||
headers, url_string = get_urlstring_and_headers(token)
|
headers, url_string = get_urlstring_and_headers(token, quota_api_url)
|
||||||
url_string = url_string + project_id + "/sync"
|
url_string = url_string + project_id + "/sync"
|
||||||
response = requests.put(url_string, headers=headers)
|
response = requests.put(url_string, headers=headers)
|
||||||
return response.text
|
return response.text
|
||||||
|
|
||||||
|
|
||||||
def get_quota_usage_for_project(token, project_id):
|
def get_quota_usage_for_project(token, project_id):
|
||||||
headers, url_string = get_urlstring_and_headers(token)
|
headers, url_string = get_urlstring_and_headers(token, quota_api_url)
|
||||||
url_string = url_string + project_id + "/detail"
|
url_string = url_string + project_id + "/detail"
|
||||||
response = requests.get(url_string, headers=headers)
|
response = requests.get(url_string, headers=headers)
|
||||||
return response.text
|
return response.text
|
||||||
@ -161,7 +162,7 @@ def get_quota_usage_for_project(token, project_id):
|
|||||||
|
|
||||||
def create_custom_kingbird_quota_wrong_token(token,
|
def create_custom_kingbird_quota_wrong_token(token,
|
||||||
project_id, new_quota_values):
|
project_id, new_quota_values):
|
||||||
headers, url_string = get_urlstring_and_headers(token)
|
headers, url_string = get_urlstring_and_headers(token, quota_api_url)
|
||||||
headers['X-Auth-Token'] = 'fake_token'
|
headers['X-Auth-Token'] = 'fake_token'
|
||||||
url_string = url_string + project_id
|
url_string = url_string + project_id
|
||||||
body = json.dumps(new_quota_values)
|
body = json.dumps(new_quota_values)
|
@ -47,14 +47,14 @@ flake8args="kingbird"
|
|||||||
function run_tests {
|
function run_tests {
|
||||||
echo 'Running tests'
|
echo 'Running tests'
|
||||||
# Remove any extraneous DB migrations
|
# Remove any extraneous DB migrations
|
||||||
#find kingbird/db/sqlalchemy/migrate_repo/versions/ -name '*.pyc' -delete
|
find kingbird/db/sqlalchemy/migrate_repo/versions/ -name '*.pyc' -delete
|
||||||
|
|
||||||
if [ $debug -eq 1 ]; then
|
if [ $debug -eq 1 ]; then
|
||||||
echo "Debugging..."
|
echo "Debugging..."
|
||||||
if [ "$args" = "" ]; then
|
if [ "$args" = "" ]; then
|
||||||
# Default to running all tests if specific test is not
|
# Default to running all tests if specific test is not
|
||||||
# provided.
|
# provided.
|
||||||
testrargs="discover ./kingbird/tests"
|
testrargs="discover ./kingbird/tests/unit"
|
||||||
fi
|
fi
|
||||||
${wrapper} python -m testtools.run $args $testrargs
|
${wrapper} python -m testtools.run $args $testrargs
|
||||||
|
|
||||||
|
@ -29,6 +29,9 @@ console_scripts =
|
|||||||
kingbird-engine = kingbird.cmd.engine:main
|
kingbird-engine = kingbird.cmd.engine:main
|
||||||
kingbird-manage = kingbird.cmd.manage:main
|
kingbird-manage = kingbird.cmd.manage:main
|
||||||
|
|
||||||
|
tempest.test_plugins =
|
||||||
|
kingbird_tests = kingbird.tests.tempest.scenario.plugin:KingbirdTempestPlugin
|
||||||
|
|
||||||
oslo.config.opts =
|
oslo.config.opts =
|
||||||
kingbird.common.config = kingbird.common.config:list_opts
|
kingbird.common.config = kingbird.common.config:list_opts
|
||||||
kingbird.common.manager = kingbird.common.manager:list_opts
|
kingbird.common.manager = kingbird.common.manager:list_opts
|
||||||
|
14
tox.ini
14
tox.ini
@ -4,16 +4,24 @@ envlist = py34,py27,pypy,pep8
|
|||||||
skipsdist = True
|
skipsdist = True
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
sitepackages = True
|
|
||||||
usedevelop = True
|
usedevelop = True
|
||||||
install_command = pip install -U --force-reinstall {opts} {packages}
|
install_command = pip install -U {opts} {packages}
|
||||||
setenv =
|
setenv =
|
||||||
VIRTUAL_ENV={envdir}
|
VIRTUAL_ENV={envdir}
|
||||||
|
DISCOVER_DIRECTORY=kingbird/tests/unit
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps = -r{toxinidir}/requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
-r{toxinidir}/test-requirements.txt
|
||||||
commands = python setup.py testr --slowest --testr-args='{posargs}'
|
commands = python setup.py testr --slowest --testr-args='{posargs}'
|
||||||
whitelist_externals = rm
|
whitelist_externals = rm
|
||||||
|
|
||||||
|
[testenv:debug-py27]
|
||||||
|
basepython = python2.7
|
||||||
|
commands = oslo_debug_helper {posargs}
|
||||||
|
|
||||||
|
[testenv:debug-py34]
|
||||||
|
basepython = python3.4
|
||||||
|
commands = oslo_debug_helper {posargs}
|
||||||
|
|
||||||
[testenv:pep8]
|
[testenv:pep8]
|
||||||
deps = hacking<0.11,>=0.10.2
|
deps = hacking<0.11,>=0.10.2
|
||||||
commands = flake8
|
commands = flake8
|
||||||
|
Loading…
Reference in New Issue
Block a user