diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-07-08 14:15:48 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-07-08 14:15:48 +0000 |
commit | 19c1acc1a4ae17e6b45f7beb3d5791050d7dd7b9 (patch) | |
tree | 8a98d50732b8dc984d47b3d76d3d1d153fb32d1a | |
parent | ffde06ed757cf31904df943b592bf37d7e370021 (diff) | |
parent | d6ae7b064de36552dde1e111734e3b7aec599a1f (diff) | |
download | python-barbicanclient-19c1acc1a4ae17e6b45f7beb3d5791050d7dd7b9.tar.gz |
Merge "Enable endpoint filter parameters for the CLI"
-rw-r--r-- | barbicanclient/barbican.py | 39 | ||||
-rw-r--r-- | barbicanclient/tests/test_barbican.py | 34 | ||||
-rw-r--r-- | functionaltests/client/test_client_connectivity.py | 74 |
3 files changed, 144 insertions, 3 deletions
diff --git a/barbicanclient/barbican.py b/barbicanclient/barbican.py index 562ce84..b5fc052 100644 --- a/barbicanclient/barbican.py +++ b/barbicanclient/barbican.py @@ -121,6 +121,7 @@ class Barbican(app.App): def create_client(self, args): created_client = None + endpoint_filter_kwargs = self._get_endpoint_filter_kwargs(args) api_version = args.os_identity_api_version if args.no_auth and args.os_auth_url: @@ -138,7 +139,8 @@ class Barbican(app.App): created_client = client.Client( endpoint=args.endpoint, project_id=args.os_tenant_id or args.os_project_id, - verify=not args.insecure + verify=not args.insecure, + **endpoint_filter_kwargs ) # Token-based authentication elif args.os_auth_token: @@ -153,7 +155,8 @@ class Barbican(app.App): ) created_client = client.Client( session=session, - endpoint=args.endpoint + endpoint=args.endpoint, + **endpoint_filter_kwargs ) # Password-based authentication @@ -169,13 +172,23 @@ class Barbican(app.App): ) created_client = client.Client( session=session, - endpoint=args.endpoint + endpoint=args.endpoint, + **endpoint_filter_kwargs ) else: raise Exception('ERROR: please specify authentication credentials') return created_client + def _get_endpoint_filter_kwargs(self, args): + endpoint_filter_keys = ('interface', 'service_type', 'service_name', + 'barbican_api_version', 'region_name') + kwargs = dict((key, getattr(args, key)) for key in endpoint_filter_keys + if getattr(args, key, None)) + if 'barbican_api_version' in kwargs: + kwargs['version'] = kwargs.pop('barbican_api_version') + return kwargs + def build_option_parser(self, description, version, argparse_kwargs=None): """Introduces global arguments for the application. This is inherited from the framework. @@ -252,6 +265,26 @@ class Barbican(app.App): metavar='<barbican-url>', default=client.env('BARBICAN_ENDPOINT'), help='Defaults to env[BARBICAN_ENDPOINT].') + parser.add_argument('--interface', + metavar='<barbican-interface>', + default=client.env('BARBICAN_INTERFACE'), + help='Defaults to env[BARBICAN_INTERFACE].') + parser.add_argument('--service-type', + metavar='<barbican-service-type>', + default=client.env('BARBICAN_SERVICE_TYPE'), + help='Defaults to env[BARBICAN_SERVICE_TYPE].') + parser.add_argument('--service-name', + metavar='<barbican-service-name>', + default=client.env('BARBICAN_SERVICE_NAME'), + help='Defaults to env[BARBICAN_SERVICE_NAME].') + parser.add_argument('--region-name', + metavar='<barbican-region-name>', + default=client.env('BARBICAN_REGION_NAME'), + help='Defaults to env[BARBICAN_REGION_NAME].') + parser.add_argument('--barbican-api-version', + metavar='<barbican-api-version>', + default=client.env('BARBICAN_API_VERSION'), + help='Defaults to env[BARBICAN_API_VERSION].') session.Session.register_cli_options(parser) return parser diff --git a/barbicanclient/tests/test_barbican.py b/barbicanclient/tests/test_barbican.py index eee5dc8..b6aa403 100644 --- a/barbicanclient/tests/test_barbican.py +++ b/barbicanclient/tests/test_barbican.py @@ -14,6 +14,7 @@ # limitations under the License. import six +from barbicanclient import client from barbicanclient import barbican as barb from barbicanclient.tests import keystone_client_fixtures from barbicanclient.tests import test_client @@ -156,6 +157,39 @@ class WhenTestingBarbicanCLI(test_client.BaseEntityResource): response = barb.main(args) self.assertEqual(1, response) + def test_default_endpoint_filter_kwargs_set_correctly(self): + auth_args = ('--no-auth --endpoint http://barbican_endpoint:9311/v1 ' + '--os-project-id project1') + argv, remainder = self.parser.parse_known_args(auth_args.split()) + barbican_client = self.barbican.create_client(argv) + httpclient = barbican_client.secrets._api + + self.assertEqual(client._DEFAULT_SERVICE_INTERFACE, + httpclient.interface) + self.assertEqual(client._DEFAULT_SERVICE_TYPE, httpclient.service_type) + self.assertEqual(client._DEFAULT_API_VERSION, httpclient.version) + self.assertEqual(None, httpclient.service_name) + + def test_endpoint_filter_kwargs_set_correctly(self): + from testtools.content import text_content + auth_args = ('--no-auth --endpoint http://barbican_endpoint:9311/v1 ' + '--os-project-id project1') + endpoint_filter_args = ('--interface private ' + '--service-type custom-type ' + '--service-name Burrbican ' + '--region-name RegionTwo ' + '--barbican-api-version v2') + args = auth_args + ' ' + endpoint_filter_args + argv, remainder = self.parser.parse_known_args(args.split()) + barbican_client = self.barbican.create_client(argv) + httpclient = barbican_client.secrets._api + + self.assertEqual('private', httpclient.interface) + self.assertEqual('custom-type', httpclient.service_type) + self.assertEqual('Burrbican', httpclient.service_name) + self.assertEqual('RegionTwo', httpclient.region_name) + self.assertEqual('v2', httpclient.version) + class TestBarbicanWithKeystonePasswordAuth( keystone_client_fixtures.KeystoneClientFixture): diff --git a/functionaltests/client/test_client_connectivity.py b/functionaltests/client/test_client_connectivity.py index 0306769..21ad689 100644 --- a/functionaltests/client/test_client_connectivity.py +++ b/functionaltests/client/test_client_connectivity.py @@ -20,6 +20,7 @@ from barbicanclient import client from barbicanclient import exceptions from keystoneclient.auth import identity from keystoneclient import session +import keystoneclient.openstack.common.apiclient.exceptions as ks_exceptions CONF = config.get_config() @@ -70,6 +71,14 @@ class WhenTestingClientConnectivity(BaseTestCase): self.assertRaises(exceptions.HTTPClientError, client.orders.list) self.assertRaises(exceptions.HTTPClientError, client.secrets.list) + def assert_client_cannot_get_endpoint(self, client): + self.assertRaises(ks_exceptions.EndpointNotFound, + client.containers.list) + self.assertRaises(ks_exceptions.EndpointNotFound, + client.orders.list) + self.assertRaises(ks_exceptions.EndpointNotFound, + client.secrets.list) + def test_can_access_server_if_endpoint_and_session_specified(self): barbicanclient = client.Client( endpoint=CONF.keymanager.url, @@ -93,6 +102,71 @@ class WhenTestingClientConnectivity(BaseTestCase): self.assert_client_can_contact_barbican(barbicanclient) + def test_client_can_access_server_if_endpoint_filters_specified(self): + barbicanclient = client.Client( + project_id=CONF.keymanager.project_id, + auth=self.auth, + interface=client._DEFAULT_SERVICE_INTERFACE, + service_type=client._DEFAULT_SERVICE_TYPE, + version=client._DEFAULT_API_VERSION, + ) + + self.assert_client_can_contact_barbican(barbicanclient) + + def test_client_cannot_access_server_if_endpoint_filter_wrong(self): + barbicanclient = client.Client( + project_id=CONF.keymanager.project_id, + auth=self.auth, + interface=client._DEFAULT_SERVICE_INTERFACE, + service_type='wrong-service-type', + version=client._DEFAULT_API_VERSION, + ) + + self.assert_client_cannot_get_endpoint(barbicanclient) + + barbicanclient = client.Client( + project_id=CONF.keymanager.project_id, + auth=self.auth, + interface='wrong-interface', + service_type=client._DEFAULT_SERVICE_TYPE, + version=client._DEFAULT_API_VERSION, + ) + + self.assert_client_cannot_get_endpoint(barbicanclient) + + barbicanclient = client.Client( + project_id=CONF.keymanager.project_id, + auth=self.auth, + interface=client._DEFAULT_SERVICE_INTERFACE, + service_type=client._DEFAULT_SERVICE_TYPE, + service_name='wrong-service-name', + version=client._DEFAULT_API_VERSION, + ) + + self.assert_client_cannot_get_endpoint(barbicanclient) + + barbicanclient = client.Client( + project_id=CONF.keymanager.project_id, + auth=self.auth, + interface=client._DEFAULT_SERVICE_INTERFACE, + service_type=client._DEFAULT_SERVICE_TYPE, + region_name='wrong-region-name', + version=client._DEFAULT_API_VERSION, + ) + + self.assert_client_cannot_get_endpoint(barbicanclient) + + def test_client_cannot_access_server_if_nonexistent_version_specified(self): + barbicanclient = client.Client( + project_id=CONF.keymanager.project_id, + auth=self.auth, + interface=client._DEFAULT_SERVICE_INTERFACE, + service_type=client._DEFAULT_SERVICE_TYPE, + version='wrong-version', + ) + + self.assertRaises(TypeError, barbicanclient.containers.list) + def test_client_cannot_access_server_if_nonexistent_version_specified(self): barbicanclient = client.Client( endpoint=CONF.keymanager.url, |