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. """
|
"""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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue