Use keystoneclient to get endpoint if it's empty

We used to rely on keystoneclient code to get the proper endpoint from
keystone if it was not provided in the command line or as an
environment variable. This changed in a recent commit. So now that we
are using an adapter for the keystone sessions, we use the function
provided by that adapter.

Change-Id: I927a105831642d4fb00691ea2a97e27e79ebc7fd
Closes-Bug: #1443436
This commit is contained in:
Juan Antonio Osorio Robles
2015-04-13 18:17:52 +03:00
parent 8083923114
commit 3f84b0c5c3
2 changed files with 97 additions and 11 deletions

View File

@@ -38,19 +38,17 @@ class _HTTPClient(adapter.Adapter):
def __init__(self, session, project_id=None, **kwargs):
kwargs.setdefault('interface', _DEFAULT_SERVICE_INTERFACE)
kwargs.setdefault('service_type', _DEFAULT_SERVICE_TYPE)
self._base_url = None
try:
endpoint = kwargs.pop('endpoint')
except KeyError:
pass
else:
self._base_url = '{0}/{1}'.format(endpoint, _DEFAULT_API_VERSION)
kwargs.setdefault('endpoint_override', self._base_url)
endpoint = kwargs.pop('endpoint', None)
super(_HTTPClient, self).__init__(session, **kwargs)
if not endpoint:
endpoint = self.get_endpoint()
self.endpoint_override = '{0}/{1}'.format(endpoint,
_DEFAULT_API_VERSION)
self._base_url = self.endpoint_override
if project_id is None:
self._default_headers = dict()
else:
@@ -159,7 +157,7 @@ class Client(object):
session = ks_session.Session(verify=kwargs.pop('verify', True))
if session.auth is None and kwargs.get('auth') is None:
if kwargs.get('endpoint') is None:
if not kwargs.get('endpoint'):
raise ValueError('Barbican endpoint url must be provided when '
'not using auth in the Keystone Session.')

View File

@@ -0,0 +1,88 @@
# Copyright (c) 2015 Ericsson AB.
#
# 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 logging
from functionaltests.base import BaseTestCase
from barbicanclient import client
from keystoneclient.auth import identity
from keystoneclient import session
from tempest import config
CONF = config.CONF
class WhenTestingClientConnectivity(BaseTestCase):
@classmethod
def setUpClass(cls):
super(WhenTestingClientConnectivity, cls).setUpClass()
if 'v2' in CONF.identity.auth_version:
cls.auth = identity.v2.Password(
auth_url=CONF.identity.uri,
username=CONF.keymanager.username,
password=CONF.keymanager.password,
tenant_name=CONF.keymanager.project_name)
else:
cls.auth = identity.v3.Password(
auth_url=CONF.identity.uri_v3,
username=CONF.keymanager.username,
user_domain_name=CONF.identity.domain_name,
password=CONF.keymanager.password,
project_name=CONF.keymanager.project_name,
project_domain_name=CONF.keymanager.project_domain_name)
# enables the tests in this class to share a keystone token
cls.sess = session.Session(auth=cls.auth)
def setUp(self):
self.LOG.info('Starting: %s', self._testMethodName)
super(WhenTestingClientConnectivity, self).setUp()
def assert_client_can_contact_barbican(self, client):
"""Asserts that the client has connectivity to Barbican.
If there was an error with the connectivity, the operations that are
attempted through the client would throw an exception.
"""
containers = client.containers.list()
orders = client.orders.list()
secrets = client.secrets.list()
self.assertIsNotNone(containers)
self.assertIsNotNone(orders)
self.assertIsNotNone(secrets)
def test_can_access_server_if_endpoint_and_session_specified(self):
barbicanclient = client.Client(
endpoint=CONF.keymanager.url,
project_id=CONF.keymanager.project_id,
session=self.sess)
self.assert_client_can_contact_barbican(barbicanclient)
def test_client_can_access_server_if_no_endpoint_specified(self):
barbicanclient = client.Client(
project_id=CONF.keymanager.project_id,
session=self.sess)
self.assert_client_can_contact_barbican(barbicanclient)
def test_client_can_access_server_if_no_session_specified(self):
barbicanclient = client.Client(
endpoint=CONF.keymanager.url,
project_id=CONF.keymanager.project_id,
auth=self.auth)
self.assert_client_can_contact_barbican(barbicanclient)