Merge "Force API test listing even if auth fails"
This commit is contained in:
commit
b7011c73e6
|
@ -13,16 +13,19 @@
|
|||
|
||||
"""A test module to exercise the Heat API with gabbi. """
|
||||
|
||||
import keystoneauth1
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
from gabbi import driver
|
||||
from six.moves.urllib import parse as urlparse
|
||||
from oslo_log import log as logging
|
||||
from tempest import config
|
||||
|
||||
from heat_tempest_plugin.common import test
|
||||
from heat_tempest_plugin.services import clients
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
TESTS_DIR = 'gabbits'
|
||||
|
||||
|
||||
|
@ -30,16 +33,45 @@ def load_tests(loader, tests, pattern):
|
|||
"""Provide a TestSuite to the discovery process."""
|
||||
test_dir = os.path.join(os.path.dirname(__file__), TESTS_DIR)
|
||||
|
||||
endpoint = None
|
||||
conf = config.CONF.heat_plugin
|
||||
if conf.auth_url is None:
|
||||
# It's not configured, let's not load tests
|
||||
return
|
||||
manager = clients.ClientManager(conf)
|
||||
endpoint = manager.identity_client.get_endpoint_url(
|
||||
'orchestration', region=conf.region, endpoint_type=conf.endpoint_type)
|
||||
host = urlparse.urlparse(endpoint).hostname
|
||||
os.environ['OS_TOKEN'] = manager.identity_client.auth_token
|
||||
os.environ['PREFIX'] = test.rand_name('api')
|
||||
if conf.auth_url:
|
||||
try:
|
||||
manager = clients.ClientManager(conf)
|
||||
endpoint = manager.identity_client.get_endpoint_url(
|
||||
'orchestration', region=conf.region,
|
||||
endpoint_type=conf.endpoint_type)
|
||||
os.environ['OS_TOKEN'] = manager.identity_client.auth_token
|
||||
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):
|
||||
tempest_id = test_case.test_data.get('desc')
|
||||
|
@ -60,7 +92,8 @@ def load_tests(loader, tests, pattern):
|
|||
else:
|
||||
register_test_case_id(test_case)
|
||||
|
||||
api_tests = driver.build_tests(test_dir, loader, host=host,
|
||||
url=endpoint, test_loader_name=__name__)
|
||||
api_tests = driver.build_tests(test_dir, loader, url=endpoint, host="",
|
||||
test_loader_name=__name__)
|
||||
|
||||
register_test_suite_ids(api_tests)
|
||||
return api_tests
|
||||
|
|
|
@ -17,5 +17,5 @@ python-zaqarclient>=1.0.0 # Apache-2.0
|
|||
testtools>=2.2.0 # MIT
|
||||
testscenarios>=0.4 # Apache-2.0/BSD
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue