Merge "Force API test listing even if auth fails"

This commit is contained in:
Zuul 2018-04-24 21:31:45 +00:00 committed by Gerrit Code Review
commit b7011c73e6
2 changed files with 46 additions and 13 deletions

View File

@ -13,16 +13,19 @@
"""A test module to exercise the Heat API with gabbi. """ """A test module to exercise the Heat API with gabbi. """
import keystoneauth1
import os import os
import sys
import unittest import unittest
from gabbi import driver from gabbi import driver
from six.moves.urllib import parse as urlparse from oslo_log import log as logging
from tempest import config from tempest import config
from heat_tempest_plugin.common import test from heat_tempest_plugin.common import test
from heat_tempest_plugin.services import clients from heat_tempest_plugin.services import clients
LOG = logging.getLogger(__name__)
TESTS_DIR = 'gabbits' TESTS_DIR = 'gabbits'
@ -30,17 +33,46 @@ def load_tests(loader, tests, pattern):
"""Provide a TestSuite to the discovery process.""" """Provide a TestSuite to the discovery process."""
test_dir = os.path.join(os.path.dirname(__file__), TESTS_DIR) test_dir = os.path.join(os.path.dirname(__file__), TESTS_DIR)
endpoint = None
conf = config.CONF.heat_plugin conf = config.CONF.heat_plugin
if conf.auth_url is None: if conf.auth_url:
# It's not configured, let's not load tests try:
return
manager = clients.ClientManager(conf) manager = clients.ClientManager(conf)
endpoint = manager.identity_client.get_endpoint_url( endpoint = manager.identity_client.get_endpoint_url(
'orchestration', region=conf.region, endpoint_type=conf.endpoint_type) 'orchestration', region=conf.region,
host = urlparse.urlparse(endpoint).hostname endpoint_type=conf.endpoint_type)
os.environ['OS_TOKEN'] = manager.identity_client.auth_token os.environ['OS_TOKEN'] = manager.identity_client.auth_token
os.environ['PREFIX'] = test.rand_name('api') os.environ['PREFIX'] = test.rand_name('api')
# Catch the authentication exceptions that can happen if one of the
# following conditions occur:
# 1. conf.auth_url IP/port is incorrect or keystone not available
# (ConnectFailure)
# 2. conf.auth_url is malformed (BadRequest, UnknownConnectionError,
# EndpointNotFound, NotFound, or DiscoveryFailure)
# 3. conf.username/password is incorrect (Unauthorized)
# 4. conf.project_name is missing/incorrect (EmptyCatalog)
# These exceptions should not prevent a test list from being returned,
# so just issue a warning log and move forward with test listing.
except (keystoneauth1.exceptions.http.BadRequest,
keystoneauth1.exceptions.http.Unauthorized,
keystoneauth1.exceptions.http.NotFound,
keystoneauth1.exceptions.catalog.EmptyCatalog,
keystoneauth1.exceptions.catalog.EndpointNotFound,
keystoneauth1.exceptions.discovery.DiscoveryFailure,
keystoneauth1.exceptions.connection.UnknownConnectionError,
keystoneauth1.exceptions.connection.ConnectFailure):
LOG.warn("Keystone auth exception: %s: %s" % (sys.exc_info()[0],
sys.exc_info()[1]))
# Clear the auth_url, as there is no point in tempest trying
# to authenticate later with mis-configured or unreachable endpoint
conf.auth_url = None
except Exception:
LOG.error("Fatal exception: %s: %s" % (sys.exc_info()[0],
sys.exc_info()[1]))
raise
def register_test_case_id(test_case): def register_test_case_id(test_case):
tempest_id = test_case.test_data.get('desc') tempest_id = test_case.test_data.get('desc')
test_name = test_case.id() test_name = test_case.id()
@ -60,7 +92,8 @@ def load_tests(loader, tests, pattern):
else: else:
register_test_case_id(test_case) register_test_case_id(test_case)
api_tests = driver.build_tests(test_dir, loader, host=host, api_tests = driver.build_tests(test_dir, loader, url=endpoint, host="",
url=endpoint, test_loader_name=__name__) test_loader_name=__name__)
register_test_suite_ids(api_tests) register_test_suite_ids(api_tests)
return api_tests return api_tests

View File

@ -17,5 +17,5 @@ python-zaqarclient>=1.0.0 # Apache-2.0
testtools>=2.2.0 # MIT testtools>=2.2.0 # MIT
testscenarios>=0.4 # Apache-2.0/BSD testscenarios>=0.4 # Apache-2.0/BSD
tempest>=17.1.0 # Apache-2.0 tempest>=17.1.0 # Apache-2.0
gabbi>=1.35.0 # Apache-2.0 gabbi>=1.42.1 # Apache-2.0
kombu!=4.0.2,>=4.0.0 # BSD kombu!=4.0.2,>=4.0.0 # BSD