Add autoscaling scenario in tempest tests

This change runs the gabbi integration tests with a tempest plugin.

Depends-On: I453b63972ec06e5d86535c4a84080e9f5dfe9196
Change-Id: If8410f8fe53f1dd29018d019d6549f45cc4ae681
This commit is contained in:
Mehdi Abaakouk 2016-04-12 11:45:21 +02:00
parent e5e5cf5ff6
commit 22811f60bc
2 changed files with 130 additions and 2 deletions

View File

@ -46,10 +46,29 @@ export NOVA_SERVICE_URL=$(openstack catalog show compute -c endpoints -f value |
export GLANCE_IMAGE_NAME=$(openstack image list | awk '/ cirros.*uec /{print $4}')
export ADMIN_TOKEN=$(openstack token issue -c id -f value)
# Run tests
if [ -d $BASE/new/devstack ]; then
# NOTE(sileht): on swift job permissions are wrong, I don't known why
sudo chown -R tempest:stack $BASE/new/tempest
sudo chown -R tempest:stack $BASE/data/tempest
# Run tests with tempest
cd $BASE/new/tempest
set +e
sudo -H -u tempest OS_TEST_TIMEOUT=$TEMPEST_OS_TEST_TIMEOUT tox -eall-plugin -- ceilometer.tests.tempest.scenario.test_autoscaling --concurrency=$TEMPEST_CONCURRENCY
TEMPEST_EXIT_CODE=$?
set -e
if [[ $TEMPEST_EXIT_CODE != 0 ]]; then
# Collect and parse result
generate_testr_results
exit $TEMPEST_EXIT_CODE
fi
cd $CEILOMETER_DIR
fi
# Run tests with gabbi
echo "Running telemetry integration test suite"
set +e
sudo -E -H -u ${STACK_USER:-${USER}} tox -eintegration
EXIT_CODE=$?

View File

@ -0,0 +1,109 @@
# 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 os
import unittest
from gabbi import driver
from tempest import config
from tempest import test
from ceilometer.tests.tempest.service import client
class ClientManager(client.Manager):
load_clients = [
'image_client_v2',
]
class TestAutoscalingGabbi(test.BaseTestCase):
credentials = ['admin']
client_manager = ClientManager
@classmethod
def skip_checks(cls):
super(TestAutoscalingGabbi, cls).skip_checks()
for name in ["aodh_plugin", "gnocchi", "nova", "heat",
"ceilometer", "glance"]:
cls._check_service(name)
@classmethod
def _check_service(cls, name):
if not getattr(config.CONF.service_available, name, False):
raise cls.skipException("%s support is required" %
name.capitalize())
@classmethod
def resource_setup(cls):
super(TestAutoscalingGabbi, cls).resource_setup()
test_dir = os.path.join(os.path.dirname(__file__), '..', '..',
'integration', 'gabbi', 'gabbits-live')
cls.tests = driver.build_tests(
test_dir, unittest.TestLoader(),
host='localhost', port='13245',
test_loader_name='tempest.scenario.telemetry-autoscaling.test')
auth = cls.os_admin.auth_provider.get_auth()
os.environ["ADMIN_TOKEN"] = auth[0]
os.environ["AODH_SERVICE_URL"] = cls._get_endpoint_for(
auth, "alarming_plugin")
os.environ["GNOCCHI_SERVICE_URL"] = cls._get_endpoint_for(
auth, "metric")
os.environ["HEAT_SERVICE_URL"] = cls._get_endpoint_for(
auth, "orchestration")
os.environ["NOVA_SERVICE_URL"] = cls._get_endpoint_for(auth, "compute")
os.environ["GLANCE_SERVICE_URL"] = cls._get_endpoint_for(auth, "image")
images = cls.os_admin.image_client_v2.list_images()["images"]
for img in images:
name = img["name"]
if name.startswith("cirros") and name.endswith("-uec"):
os.environ["GLANCE_IMAGE_NAME"] = name
break
else:
cls.skipException("A cirros-.*-uec image is required")
@staticmethod
def clear_credentials():
# FIXME(sileht): We don't want the token to be invalided, but
# for some obcurs reason, clear_credentials is called before/during run
# So, make the one used by tearDropClass a dump, and call it manually
# in run()
pass
def run(self, result=None):
self.setUp()
try:
self.tests.run(result)
finally:
super(TestAutoscalingGabbi, self).clear_credentials()
self.tearDown()
@staticmethod
def _get_endpoint_for(auth, service):
opt_section = getattr(config.CONF, service)
endpoint_type = opt_section.endpoint_type
if not endpoint_type.endswith("URL"):
endpoint_type += "URL"
endpoints = [e for e in auth[1]['serviceCatalog']
if e['type'] == opt_section.catalog_type]
if not endpoints:
raise Exception("%s endpoint not found" %
config.CONF.metric.catalog_type)
return endpoints[0]['endpoints'][0][endpoint_type]
@staticmethod
def test_fake():
# NOTE(sileht): A fake test is needed to have the class loaded
# by the test runner
pass