diff --git a/barbicanclient/client.py b/barbicanclient/client.py index 7f02da03..5b3085e1 100644 --- a/barbicanclient/client.py +++ b/barbicanclient/client.py @@ -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.') diff --git a/functionaltests/client/test_client_connectivity.py b/functionaltests/client/test_client_connectivity.py new file mode 100644 index 00000000..31d5e121 --- /dev/null +++ b/functionaltests/client/test_client_connectivity.py @@ -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)