diff options
Diffstat (limited to 'openstackclient/tests')
| -rw-r--r-- | openstackclient/tests/common/test_clientmanager.py | 87 | ||||
| -rw-r--r-- | openstackclient/tests/common/test_timing.py | 17 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/fakes.py | 6 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/test_security_group.py | 197 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/test_server.py | 8 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v3/fakes.py | 12 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v3/test_identity_provider.py | 236 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v3/test_project.py | 100 | ||||
| -rw-r--r-- | openstackclient/tests/image/v1/test_image.py | 53 | ||||
| -rw-r--r-- | openstackclient/tests/image/v2/fakes.py | 93 | ||||
| -rw-r--r-- | openstackclient/tests/image/v2/test_image.py | 63 | ||||
| -rw-r--r-- | openstackclient/tests/test_shell.py | 427 | ||||
| -rw-r--r-- | openstackclient/tests/volume/test_find_resource.py | 7 |
13 files changed, 1019 insertions, 287 deletions
diff --git a/openstackclient/tests/common/test_clientmanager.py b/openstackclient/tests/common/test_clientmanager.py index 3648bf57..26cf4967 100644 --- a/openstackclient/tests/common/test_clientmanager.py +++ b/openstackclient/tests/common/test_clientmanager.py @@ -34,6 +34,10 @@ AUTH_REF.update(fakes.TEST_RESPONSE_DICT['access']) SERVICE_CATALOG = service_catalog.ServiceCatalogV2(AUTH_REF) +# This is deferred in api.auth but we need it here... +auth.get_options_list() + + class Container(object): attr = clientmanager.ClientCache(lambda x: object()) @@ -44,13 +48,14 @@ class Container(object): class FakeOptions(object): def __init__(self, **kwargs): for option in auth.OPTIONS_LIST: - setattr(self, 'os_' + option.replace('-', '_'), None) - self.os_auth_type = None - self.os_identity_api_version = '2.0' + setattr(self, option.replace('-', '_'), None) + self.auth_type = None + self.identity_api_version = '2.0' self.timing = None - self.os_region_name = None - self.os_url = None - self.os_default_domain = 'default' + self.region_name = None + self.url = None + self.auth = {} + self.default_domain = 'default' self.__dict__.update(kwargs) @@ -82,9 +87,11 @@ class TestClientManager(utils.TestCase): client_manager = clientmanager.ClientManager( cli_options=FakeOptions( - os_token=fakes.AUTH_TOKEN, - os_url=fakes.AUTH_URL, - os_auth_type='token_endpoint', + auth_type='token_endpoint', + auth=dict( + token=fakes.AUTH_TOKEN, + url=fakes.AUTH_URL, + ), ), api_version=API_VERSION, verify=True @@ -110,9 +117,11 @@ class TestClientManager(utils.TestCase): client_manager = clientmanager.ClientManager( cli_options=FakeOptions( - os_token=fakes.AUTH_TOKEN, - os_auth_url=fakes.AUTH_URL, - os_auth_type='v2token', + auth=dict( + token=fakes.AUTH_TOKEN, + auth_url=fakes.AUTH_URL, + ), + auth_type='v2token', ), api_version=API_VERSION, verify=True @@ -134,10 +143,12 @@ class TestClientManager(utils.TestCase): client_manager = clientmanager.ClientManager( cli_options=FakeOptions( - os_auth_url=fakes.AUTH_URL, - os_username=fakes.USERNAME, - os_password=fakes.PASSWORD, - os_project_name=fakes.PROJECT_NAME, + auth=dict( + auth_url=fakes.AUTH_URL, + username=fakes.USERNAME, + password=fakes.PASSWORD, + project_name=fakes.PROJECT_NAME, + ), ), api_version=API_VERSION, verify=False, @@ -194,11 +205,13 @@ class TestClientManager(utils.TestCase): client_manager = clientmanager.ClientManager( cli_options=FakeOptions( - os_auth_url=fakes.AUTH_URL, - os_username=fakes.USERNAME, - os_password=fakes.PASSWORD, - os_project_name=fakes.PROJECT_NAME, - os_auth_type='v2password', + auth=dict( + auth_url=fakes.AUTH_URL, + username=fakes.USERNAME, + password=fakes.PASSWORD, + project_name=fakes.PROJECT_NAME, + ), + auth_type='v2password', ), api_version=API_VERSION, verify='cafile', @@ -210,8 +223,8 @@ class TestClientManager(utils.TestCase): self.assertEqual('cafile', client_manager._cacert) def _select_auth_plugin(self, auth_params, api_version, auth_plugin_name): - auth_params['os_auth_type'] = auth_plugin_name - auth_params['os_identity_api_version'] = api_version + auth_params['auth_type'] = auth_plugin_name + auth_params['identity_api_version'] = api_version client_manager = clientmanager.ClientManager( cli_options=FakeOptions(**auth_params), api_version=API_VERSION, @@ -226,19 +239,33 @@ class TestClientManager(utils.TestCase): def test_client_manager_select_auth_plugin(self): # test token auth - params = dict(os_token=fakes.AUTH_TOKEN, - os_auth_url=fakes.AUTH_URL) + params = dict( + auth=dict( + auth_url=fakes.AUTH_URL, + token=fakes.AUTH_TOKEN, + ), + ) self._select_auth_plugin(params, '2.0', 'v2token') self._select_auth_plugin(params, '3', 'v3token') self._select_auth_plugin(params, 'XXX', 'token') # test token/endpoint auth - params = dict(os_token=fakes.AUTH_TOKEN, os_url='test') + params = dict( + auth_plugin='token_endpoint', + auth=dict( + url='test', + token=fakes.AUTH_TOKEN, + ), + ) self._select_auth_plugin(params, 'XXX', 'token_endpoint') # test password auth - params = dict(os_auth_url=fakes.AUTH_URL, - os_username=fakes.USERNAME, - os_password=fakes.PASSWORD, - os_project_name=fakes.PROJECT_NAME) + params = dict( + auth=dict( + auth_url=fakes.AUTH_URL, + username=fakes.USERNAME, + password=fakes.PASSWORD, + project_name=fakes.PROJECT_NAME, + ), + ) self._select_auth_plugin(params, '2.0', 'v2password') self._select_auth_plugin(params, '3', 'v3password') self._select_auth_plugin(params, 'XXX', 'password') diff --git a/openstackclient/tests/common/test_timing.py b/openstackclient/tests/common/test_timing.py index aa910b91..a7f93b55 100644 --- a/openstackclient/tests/common/test_timing.py +++ b/openstackclient/tests/common/test_timing.py @@ -13,14 +13,15 @@ """Test Timing pseudo-command""" +import datetime + from openstackclient.common import timing from openstackclient.tests import fakes from openstackclient.tests import utils timing_url = 'GET http://localhost:5000' -timing_start = 1404802774.872809 -timing_end = 1404802775.724802 +timing_elapsed = 0.872809 class FakeGenericClient(object): @@ -66,9 +67,10 @@ class TestTiming(utils.TestCommand): self.assertEqual(datalist, data) def test_timing_list(self): - self.app.timing_data = [ - (timing_url, timing_start, timing_end), - ] + self.app.timing_data = [( + timing_url, + datetime.timedelta(microseconds=timing_elapsed*1000000), + )] arglist = [] verifylist = [] @@ -79,9 +81,8 @@ class TestTiming(utils.TestCommand): collist = ('URL', 'Seconds') self.assertEqual(collist, columns) - timing_sec = timing_end - timing_start datalist = [ - (timing_url, timing_sec), - ('Total', timing_sec) + (timing_url, timing_elapsed), + ('Total', timing_elapsed), ] self.assertEqual(datalist, data) diff --git a/openstackclient/tests/compute/v2/fakes.py b/openstackclient/tests/compute/v2/fakes.py index a22c1ce0..c18dea7e 100644 --- a/openstackclient/tests/compute/v2/fakes.py +++ b/openstackclient/tests/compute/v2/fakes.py @@ -16,6 +16,7 @@ import mock from openstackclient.tests import fakes +from openstackclient.tests.identity.v2_0 import fakes as identity_fakes from openstackclient.tests.image.v2 import fakes as image_fakes from openstackclient.tests.network.v2 import fakes as network_fakes from openstackclient.tests import utils @@ -85,6 +86,11 @@ class TestComputev2(utils.TestCommand): token=fakes.AUTH_TOKEN, ) + self.app.client_manager.identity = identity_fakes.FakeIdentityv2Client( + endpoint=fakes.AUTH_URL, + token=fakes.AUTH_TOKEN, + ) + self.app.client_manager.image = image_fakes.FakeImagev2Client( endpoint=fakes.AUTH_URL, token=fakes.AUTH_TOKEN, diff --git a/openstackclient/tests/compute/v2/test_security_group.py b/openstackclient/tests/compute/v2/test_security_group.py new file mode 100644 index 00000000..fdb659a8 --- /dev/null +++ b/openstackclient/tests/compute/v2/test_security_group.py @@ -0,0 +1,197 @@ +# 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 copy +import mock + +from openstackclient.compute.v2 import security_group +from openstackclient.tests.compute.v2 import fakes as compute_fakes +from openstackclient.tests import fakes +from openstackclient.tests.identity.v2_0 import fakes as identity_fakes + + +security_group_id = '11' +security_group_name = 'wide-open' +security_group_description = 'nothing but net' + +SECURITY_GROUP = { + 'id': security_group_id, + 'name': security_group_name, + 'description': security_group_description, + 'tenant_id': identity_fakes.project_id, +} + + +class FakeSecurityGroupResource(fakes.FakeResource): + + def get_keys(self): + return {'property': 'value'} + + +class TestSecurityGroup(compute_fakes.TestComputev2): + + def setUp(self): + super(TestSecurityGroup, self).setUp() + + self.secgroups_mock = mock.Mock() + self.secgroups_mock.resource_class = fakes.FakeResource(None, {}) + self.app.client_manager.compute.security_groups = self.secgroups_mock + self.secgroups_mock.reset_mock() + + self.projects_mock = mock.Mock() + self.projects_mock.resource_class = fakes.FakeResource(None, {}) + self.app.client_manager.identity.projects = self.projects_mock + self.projects_mock.reset_mock() + + +class TestSecurityGroupCreate(TestSecurityGroup): + + def setUp(self): + super(TestSecurityGroupCreate, self).setUp() + + self.secgroups_mock.create.return_value = FakeSecurityGroupResource( + None, + copy.deepcopy(SECURITY_GROUP), + loaded=True, + ) + + # Get the command object to test + self.cmd = security_group.CreateSecurityGroup(self.app, None) + + def test_security_group_create_no_options(self): + arglist = [ + security_group_name, + ] + verifylist = [ + ('name', security_group_name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + + # SecurityGroupManager.create(name, description) + self.secgroups_mock.create.assert_called_with( + security_group_name, + security_group_name, + ) + + collist = ( + 'description', + 'id', + 'name', + 'tenant_id', + ) + self.assertEqual(collist, columns) + datalist = ( + security_group_description, + security_group_id, + security_group_name, + identity_fakes.project_id, + ) + self.assertEqual(datalist, data) + + def test_security_group_create_description(self): + arglist = [ + security_group_name, + '--description', security_group_description, + ] + verifylist = [ + ('name', security_group_name), + ('description', security_group_description), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + + # SecurityGroupManager.create(name, description) + self.secgroups_mock.create.assert_called_with( + security_group_name, + security_group_description, + ) + + collist = ( + 'description', + 'id', + 'name', + 'tenant_id', + ) + self.assertEqual(collist, columns) + datalist = ( + security_group_description, + security_group_id, + security_group_name, + identity_fakes.project_id, + ) + self.assertEqual(datalist, data) + + +class TestSecurityGroupList(TestSecurityGroup): + + def setUp(self): + super(TestSecurityGroupList, self).setUp() + + self.secgroups_mock.list.return_value = [ + FakeSecurityGroupResource( + None, + copy.deepcopy(SECURITY_GROUP), + loaded=True, + ), + ] + + # Get the command object to test + self.cmd = security_group.ListSecurityGroup(self.app, None) + + def test_security_group_list_no_options(self): + self.projects_mock.list.return_value = [ + fakes.FakeResource( + None, + copy.deepcopy(identity_fakes.PROJECT), + loaded=True, + ), + ] + + arglist = [] + verifylist = [ + ('all_projects', False), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'search_opts': { + 'all_tenants': False, + }, + } + + self.secgroups_mock.list.assert_called_with( + **kwargs + ) + + collist = ( + 'ID', + 'Name', + 'Description', + ) + self.assertEqual(collist, columns) + datalist = (( + security_group_id, + security_group_name, + security_group_description, + ), ) + self.assertEqual(datalist, tuple(data)) diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py index 079f301e..baf53742 100644 --- a/openstackclient/tests/compute/v2/test_server.py +++ b/openstackclient/tests/compute/v2/test_server.py @@ -361,14 +361,14 @@ class TestServerImageCreate(TestServer): compute_fakes.server_name, ) - collist = ('id', 'is_public', 'name', 'owner', 'protected') + collist = ('id', 'name', 'owner', 'protected', 'visibility') self.assertEqual(collist, columns) datalist = ( image_fakes.image_id, - image_fakes.image_public, image_fakes.image_name, image_fakes.image_owner, image_fakes.image_protected, + image_fakes.image_visibility, ) self.assertEqual(datalist, data) @@ -392,14 +392,14 @@ class TestServerImageCreate(TestServer): 'img-nam', ) - collist = ('id', 'is_public', 'name', 'owner', 'protected') + collist = ('id', 'name', 'owner', 'protected', 'visibility') self.assertEqual(collist, columns) datalist = ( image_fakes.image_id, - image_fakes.image_public, image_fakes.image_name, image_fakes.image_owner, image_fakes.image_protected, + image_fakes.image_visibility, ) self.assertEqual(datalist, data) diff --git a/openstackclient/tests/identity/v3/fakes.py b/openstackclient/tests/identity/v3/fakes.py index eb8673ef..dfbcf44f 100644 --- a/openstackclient/tests/identity/v3/fakes.py +++ b/openstackclient/tests/identity/v3/fakes.py @@ -135,6 +135,16 @@ REGION = { 'links': base_url + 'regions/' + region_id, } +PROJECT_WITH_PARENT = { + 'id': project_id + '-with-parent', + 'name': project_name + ' and their parents', + 'description': project_description + ' plus another four', + 'enabled': True, + 'domain_id': domain_id, + 'parent_id': project_id, + 'links': base_url + 'projects/' + (project_id + '-with-parent'), +} + role_id = 'r1' role_name = 'roller' @@ -231,9 +241,11 @@ TOKEN_WITH_DOMAIN_ID = { idp_id = 'test_idp' idp_description = 'super exciting IdP description' +idp_remote_ids = ['entity1', 'entity2'] IDENTITY_PROVIDER = { 'id': idp_id, + 'remote_ids': idp_remote_ids, 'enabled': True, 'description': idp_description } diff --git a/openstackclient/tests/identity/v3/test_identity_provider.py b/openstackclient/tests/identity/v3/test_identity_provider.py index 527f01b5..cd328c1d 100644 --- a/openstackclient/tests/identity/v3/test_identity_provider.py +++ b/openstackclient/tests/identity/v3/test_identity_provider.py @@ -14,6 +14,8 @@ import copy +import mock + from openstackclient.identity.v3 import identity_provider from openstackclient.tests import fakes from openstackclient.tests.identity.v3 import fakes as identity_fakes @@ -51,6 +53,7 @@ class TestIdentityProviderCreate(TestIdentityProvider): # Set expected values kwargs = { + 'remote_ids': None, 'enabled': True, 'description': None, } @@ -60,12 +63,13 @@ class TestIdentityProviderCreate(TestIdentityProvider): **kwargs ) - collist = ('description', 'enabled', 'id') + collist = ('description', 'enabled', 'id', 'remote_ids') self.assertEqual(collist, columns) datalist = ( identity_fakes.idp_description, True, identity_fakes.idp_id, + identity_fakes.idp_remote_ids ) self.assertEqual(datalist, data) @@ -83,6 +87,7 @@ class TestIdentityProviderCreate(TestIdentityProvider): # Set expected values kwargs = { + 'remote_ids': None, 'description': identity_fakes.idp_description, 'enabled': True, } @@ -92,12 +97,121 @@ class TestIdentityProviderCreate(TestIdentityProvider): **kwargs ) - collist = ('description', 'enabled', 'id') + collist = ('description', 'enabled', 'id', 'remote_ids') + self.assertEqual(collist, columns) + datalist = ( + identity_fakes.idp_description, + True, + identity_fakes.idp_id, + identity_fakes.idp_remote_ids + ) + self.assertEqual(datalist, data) + + def test_create_identity_provider_remote_id(self): + arglist = [ + identity_fakes.idp_id, + '--remote-id', identity_fakes.idp_remote_ids[0] + ] + verifylist = [ + ('identity_provider_id', identity_fakes.idp_id), + ('remote_id', identity_fakes.idp_remote_ids[:1]), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'remote_ids': identity_fakes.idp_remote_ids[:1], + 'description': None, + 'enabled': True, + } + + self.identity_providers_mock.create.assert_called_with( + id=identity_fakes.idp_id, + **kwargs + ) + + collist = ('description', 'enabled', 'id', 'remote_ids') + self.assertEqual(collist, columns) + datalist = ( + identity_fakes.idp_description, + True, + identity_fakes.idp_id, + identity_fakes.idp_remote_ids + ) + self.assertEqual(datalist, data) + + def test_create_identity_provider_remote_ids_multiple(self): + arglist = [ + '--remote-id', identity_fakes.idp_remote_ids[0], + '--remote-id', identity_fakes.idp_remote_ids[1], + identity_fakes.idp_id + ] + verifylist = [ + ('identity_provider_id', identity_fakes.idp_id), + ('remote_id', identity_fakes.idp_remote_ids), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'remote_ids': identity_fakes.idp_remote_ids, + 'description': None, + 'enabled': True, + } + + self.identity_providers_mock.create.assert_called_with( + id=identity_fakes.idp_id, + **kwargs + ) + + collist = ('description', 'enabled', 'id', 'remote_ids') self.assertEqual(collist, columns) datalist = ( identity_fakes.idp_description, True, identity_fakes.idp_id, + identity_fakes.idp_remote_ids + ) + self.assertEqual(datalist, data) + + def test_create_identity_provider_remote_ids_file(self): + arglist = [ + '--remote-id-file', '/tmp/file_name', + identity_fakes.idp_id, + ] + verifylist = [ + ('identity_provider_id', identity_fakes.idp_id), + ('remote_id_file', '/tmp/file_name'), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + mocker = mock.Mock() + mocker.return_value = "\n".join(identity_fakes.idp_remote_ids) + with mock.patch("openstackclient.identity.v3.identity_provider." + "utils.read_blob_file_contents", mocker): + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'remote_ids': identity_fakes.idp_remote_ids, + 'description': None, + 'enabled': True, + } + + self.identity_providers_mock.create.assert_called_with( + id=identity_fakes.idp_id, + **kwargs + ) + + collist = ('description', 'enabled', 'id', 'remote_ids') + self.assertEqual(collist, columns) + datalist = ( + identity_fakes.idp_description, + True, + identity_fakes.idp_id, + identity_fakes.idp_remote_ids ) self.assertEqual(datalist, data) @@ -123,6 +237,7 @@ class TestIdentityProviderCreate(TestIdentityProvider): # Set expected values kwargs = { + 'remote_ids': None, 'enabled': False, 'description': None, } @@ -132,12 +247,13 @@ class TestIdentityProviderCreate(TestIdentityProvider): **kwargs ) - collist = ('description', 'enabled', 'id') + collist = ('description', 'enabled', 'id', 'remote_ids') self.assertEqual(collist, columns) datalist = ( None, False, identity_fakes.idp_id, + identity_fakes.idp_remote_ids ) self.assertEqual(datalist, data) @@ -241,12 +357,13 @@ class TestIdentityProviderShow(TestIdentityProvider): identity_fakes.idp_id, ) - collist = ('description', 'enabled', 'id') + collist = ('description', 'enabled', 'id', 'remote_ids') self.assertEqual(collist, columns) datalist = ( identity_fakes.idp_description, True, identity_fakes.idp_id, + identity_fakes.idp_remote_ids ) self.assertEqual(datalist, data) @@ -276,11 +393,14 @@ class TestIdentityProviderSet(TestIdentityProvider): prepare(self) arglist = [ '--disable', identity_fakes.idp_id, + '--remote-id', identity_fakes.idp_remote_ids[0], + '--remote-id', identity_fakes.idp_remote_ids[1] ] verifylist = [ ('identity_provider', identity_fakes.idp_id), ('enable', False), ('disable', True), + ('remote_id', identity_fakes.idp_remote_ids) ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -288,14 +408,16 @@ class TestIdentityProviderSet(TestIdentityProvider): self.identity_providers_mock.update.assert_called_with( identity_fakes.idp_id, enabled=False, + remote_ids=identity_fakes.idp_remote_ids ) - collist = ('description', 'enabled', 'id') + collist = ('description', 'enabled', 'id', 'remote_ids') self.assertEqual(collist, columns) datalist = ( identity_fakes.idp_description, False, identity_fakes.idp_id, + identity_fakes.idp_remote_ids ) self.assertEqual(datalist, data) @@ -316,23 +438,122 @@ class TestIdentityProviderSet(TestIdentityProvider): prepare(self) arglist = [ '--enable', identity_fakes.idp_id, + '--remote-id', identity_fakes.idp_remote_ids[0], + '--remote-id', identity_fakes.idp_remote_ids[1] ] verifylist = [ ('identity_provider', identity_fakes.idp_id), ('enable', True), ('disable', False), + ('remote_id', identity_fakes.idp_remote_ids) ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) columns, data = self.cmd.take_action(parsed_args) self.identity_providers_mock.update.assert_called_with( - identity_fakes.idp_id, enabled=True) - collist = ('description', 'enabled', 'id') + identity_fakes.idp_id, enabled=True, + remote_ids=identity_fakes.idp_remote_ids) + collist = ('description', 'enabled', 'id', 'remote_ids') + self.assertEqual(collist, columns) + datalist = ( + identity_fakes.idp_description, + True, + identity_fakes.idp_id, + identity_fakes.idp_remote_ids + ) + self.assertEqual(datalist, data) + + def test_identity_provider_replace_remote_ids(self): + """Enable Identity Provider. + + Set Identity Provider's ``enabled`` attribute to True. + """ + def prepare(self): + """Prepare fake return objects before the test is executed""" + self.new_remote_id = 'new_entity' + + updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) + updated_idp['remote_ids'] = [self.new_remote_id] + resources = fakes.FakeResource( + None, + updated_idp, + loaded=True + ) + self.identity_providers_mock.update.return_value = resources + + prepare(self) + arglist = [ + '--enable', identity_fakes.idp_id, + '--remote-id', self.new_remote_id + ] + verifylist = [ + ('identity_provider', identity_fakes.idp_id), + ('enable', True), + ('disable', False), + ('remote_id', [self.new_remote_id]) + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.identity_providers_mock.update.assert_called_with( + identity_fakes.idp_id, enabled=True, + remote_ids=[self.new_remote_id]) + collist = ('description', 'enabled', 'id', 'remote_ids') + self.assertEqual(collist, columns) + datalist = ( + identity_fakes.idp_description, + True, + identity_fakes.idp_id, + [self.new_remote_id] + ) + self.assertEqual(datalist, data) + + def test_identity_provider_replace_remote_ids_file(self): + """Enable Identity Provider. + + Set Identity Provider's ``enabled`` attribute to True. + """ + def prepare(self): + """Prepare fake return objects before the test is executed""" + self.new_remote_id = 'new_entity' + + updated_idp = copy.deepcopy(identity_fakes.IDENTITY_PROVIDER) + updated_idp['remote_ids'] = [self.new_remote_id] + resources = fakes.FakeResource( + None, + updated_idp, + loaded=True + ) + self.identity_providers_mock.update.return_value = resources + + prepare(self) + arglist = [ + '--enable', identity_fakes.idp_id, + '--remote-id-file', self.new_remote_id, + ] + verifylist = [ + ('identity_provider', identity_fakes.idp_id), + ('enable', True), + ('disable', False), + ('remote_id_file', self.new_remote_id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + mocker = mock.Mock() + mocker.return_value = self.new_remote_id + with mock.patch("openstackclient.identity.v3.identity_provider." + "utils.read_blob_file_contents", mocker): + columns, data = self.cmd.take_action(parsed_args) + self.identity_providers_mock.update.assert_called_with( + identity_fakes.idp_id, enabled=True, + remote_ids=[self.new_remote_id]) + collist = ('description', 'enabled', 'id', 'remote_ids') self.assertEqual(collist, columns) datalist = ( identity_fakes.idp_description, True, identity_fakes.idp_id, + [self.new_remote_id] ) self.assertEqual(datalist, data) @@ -361,6 +582,7 @@ class TestIdentityProviderSet(TestIdentityProvider): ('identity_provider', identity_fakes.idp_id), ('enable', False), ('disable', False), + ('remote_id', None) ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) diff --git a/openstackclient/tests/identity/v3/test_project.py b/openstackclient/tests/identity/v3/test_project.py index 874908da..ec50da0c 100644 --- a/openstackclient/tests/identity/v3/test_project.py +++ b/openstackclient/tests/identity/v3/test_project.py @@ -16,6 +16,7 @@ import copy import mock +from openstackclient.common import exceptions from openstackclient.identity.v3 import project from openstackclient.tests import fakes from openstackclient.tests.identity.v3 import fakes as identity_fakes @@ -60,6 +61,7 @@ class TestProjectCreate(TestProject): identity_fakes.project_name, ] verifylist = [ + ('parent', None), ('enable', False), ('disable', False), ('name', identity_fakes.project_name), @@ -75,6 +77,7 @@ class TestProjectCreate(TestProject): 'domain': None, 'description': None, 'enabled': True, + 'parent': None, } # ProjectManager.create(name=, domain=, description=, # enabled=, **kwargs) @@ -103,6 +106,7 @@ class TestProjectCreate(TestProject): ('enable', False), ('disable', False), ('name', identity_fakes.project_name), + ('parent', None), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -115,6 +119,7 @@ class TestProjectCreate(TestProject): 'domain': None, 'description': 'new desc', 'enabled': True, + 'parent': None, } # ProjectManager.create(name=, domain=, description=, # enabled=, **kwargs) @@ -143,6 +148,7 @@ class TestProjectCreate(TestProject): ('enable', False), ('disable', False), ('name', identity_fakes.project_name), + ('parent', None), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -155,6 +161,7 @@ class TestProjectCreate(TestProject): 'domain': identity_fakes.domain_id, 'description': None, 'enabled': True, + 'parent': None, } # ProjectManager.create(name=, domain=, description=, # enabled=, **kwargs) @@ -183,6 +190,7 @@ class TestProjectCreate(TestProject): ('enable', False), ('disable', False), ('name', identity_fakes.project_name), + ('parent', None), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) mocker = mock.Mock() @@ -197,6 +205,7 @@ class TestProjectCreate(TestProject): 'domain': identity_fakes.domain_id, 'description': None, 'enabled': True, + 'parent': None, } self.projects_mock.create.assert_called_with( **kwargs @@ -221,6 +230,7 @@ class TestProjectCreate(TestProject): ('enable', True), ('disable', False), ('name', identity_fakes.project_name), + ('parent', None), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -233,6 +243,7 @@ class TestProjectCreate(TestProject): 'domain': None, 'description': None, 'enabled': True, + 'parent': None, } # ProjectManager.create(name=, domain=, description=, # enabled=, **kwargs) @@ -260,6 +271,7 @@ class TestProjectCreate(TestProject): ('enable', False), ('disable', True), ('name', identity_fakes.project_name), + ('parent', None), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -272,6 +284,7 @@ class TestProjectCreate(TestProject): 'domain': None, 'description': None, 'enabled': False, + 'parent': None, } # ProjectManager.create(name=, domain=, # description=, enabled=, **kwargs) @@ -311,6 +324,7 @@ class TestProjectCreate(TestProject): 'domain': None, 'description': None, 'enabled': True, + 'parent': None, 'fee': 'fi', 'fo': 'fum', } @@ -331,6 +345,92 @@ class TestProjectCreate(TestProject): ) self.assertEqual(datalist, data) + def test_project_create_parent(self): + self.projects_mock.get.return_value = fakes.FakeResource( + None, + copy.deepcopy(identity_fakes.PROJECT), + loaded=True, + ) + self.projects_mock.create.return_value = fakes.FakeResource( + None, + copy.deepcopy(identity_fakes.PROJECT_WITH_PARENT), + loaded=True, + ) + + arglist = [ + '--domain', identity_fakes.PROJECT_WITH_PARENT['domain_id'], + '--parent', identity_fakes.PROJECT['name'], + identity_fakes.PROJECT_WITH_PARENT['name'], + ] + verifylist = [ + ('domain', identity_fakes.PROJECT_WITH_PARENT['domain_id']), + ('parent', identity_fakes.PROJECT['name']), + ('enable', False), + ('disable', False), + ('name', identity_fakes.PROJECT_WITH_PARENT['name']), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + kwargs = { + 'name': identity_fakes.PROJECT_WITH_PARENT['name'], + 'domain': identity_fakes.PROJECT_WITH_PARENT['domain_id'], + 'parent': identity_fakes.PROJECT['id'], + 'description': None, + 'enabled': True, + } + + self.projects_mock.create.assert_called_with( + **kwargs + ) + + collist = ( + 'description', + 'domain_id', + 'enabled', + 'id', + 'name', + 'parent_id', + ) + self.assertEqual(columns, collist) + datalist = ( + identity_fakes.PROJECT_WITH_PARENT['description'], + identity_fakes.PROJECT_WITH_PARENT['domain_id'], + identity_fakes.PROJECT_WITH_PARENT['enabled'], + identity_fakes.PROJECT_WITH_PARENT['id'], + identity_fakes.PROJECT_WITH_PARENT['name'], + identity_fakes.PROJECT['id'], + ) + self.assertEqual(data, datalist) + + def test_project_create_invalid_parent(self): + self.projects_mock.resource_class.__name__ = 'Project' + self.projects_mock.get.side_effect = exceptions.NotFound( + 'Invalid parent') + self.projects_mock.find.side_effect = exceptions.NotFound( + 'Invalid parent') + + arglist = [ + '--domain', identity_fakes.domain_name, + '--parent', 'invalid', + identity_fakes.project_name, + ] + verifylist = [ + ('domain', identity_fakes.domain_name), + ('parent', 'invalid'), + ('enable', False), + ('disable', False), + ('name', identity_fakes.project_name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.assertRaises( + exceptions.CommandError, + self.cmd.take_action, + parsed_args, + ) + class TestProjectDelete(TestProject): diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py index 2776e744..ef7ca9ea 100644 --- a/openstackclient/tests/image/v1/test_image.py +++ b/openstackclient/tests/image/v1/test_image.py @@ -306,8 +306,8 @@ class TestImageList(TestImage): super(TestImageList, self).setUp() self.api_mock = mock.Mock() - self.api_mock.image_list.return_value = [ - copy.deepcopy(image_fakes.IMAGE), + self.api_mock.image_list.side_effect = [ + [copy.deepcopy(image_fakes.IMAGE)], [], ] self.app.client_manager.image.api = self.api_mock @@ -327,6 +327,7 @@ class TestImageList(TestImage): columns, data = self.cmd.take_action(parsed_args) self.api_mock.image_list.assert_called_with( detailed=False, + marker=image_fakes.image_id, ) collist = ('ID', 'Name') @@ -354,6 +355,7 @@ class TestImageList(TestImage): self.api_mock.image_list.assert_called_with( detailed=False, public=True, + marker=image_fakes.image_id, ) collist = ('ID', 'Name') @@ -381,6 +383,7 @@ class TestImageList(TestImage): self.api_mock.image_list.assert_called_with( detailed=False, private=True, + marker=image_fakes.image_id, ) collist = ('ID', 'Name') @@ -405,6 +408,7 @@ class TestImageList(TestImage): columns, data = self.cmd.take_action(parsed_args) self.api_mock.image_list.assert_called_with( detailed=True, + marker=image_fakes.image_id, ) collist = ( @@ -437,8 +441,8 @@ class TestImageList(TestImage): @mock.patch('openstackclient.api.utils.simple_filter') def test_image_list_property_option(self, sf_mock): - sf_mock.return_value = [ - copy.deepcopy(image_fakes.IMAGE), + sf_mock.side_effect = [ + [copy.deepcopy(image_fakes.IMAGE)], [], ] arglist = [ @@ -453,6 +457,7 @@ class TestImageList(TestImage): columns, data = self.cmd.take_action(parsed_args) self.api_mock.image_list.assert_called_with( detailed=True, + marker=image_fakes.image_id, ) sf_mock.assert_called_with( [image_fakes.IMAGE], @@ -472,8 +477,8 @@ class TestImageList(TestImage): @mock.patch('openstackclient.common.utils.sort_items') def test_image_list_sort_option(self, si_mock): - si_mock.return_value = [ - copy.deepcopy(image_fakes.IMAGE) + si_mock.side_effect = [ + [copy.deepcopy(image_fakes.IMAGE)], [], ] arglist = ['--sort', 'name:asc'] @@ -483,7 +488,8 @@ class TestImageList(TestImage): # DisplayCommandBase.take_action() returns two tuples columns, data = self.cmd.take_action(parsed_args) self.api_mock.image_list.assert_called_with( - detailed=False + detailed=False, + marker=image_fakes.image_id, ) si_mock.assert_called_with( [image_fakes.IMAGE], @@ -653,3 +659,36 @@ class TestImageSet(TestImage): image_fakes.image_id, **kwargs ) + + +class TestImageShow(TestImage): + + def setUp(self): + super(TestImageShow, self).setUp() + + self.images_mock.get.return_value = fakes.FakeResource( + None, + copy.deepcopy(image_fakes.IMAGE), + loaded=True, + ) + + # Get the command object to test + self.cmd = image.ShowImage(self.app, None) + + def test_image_show(self): + arglist = [ + image_fakes.image_id, + ] + verifylist = [ + ('image', image_fakes.image_id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + self.images_mock.get.assert_called_with( + image_fakes.image_id, + ) + + self.assertEqual(image_fakes.IMAGE_columns, columns) + self.assertEqual(image_fakes.IMAGE_data, data) diff --git a/openstackclient/tests/image/v2/fakes.py b/openstackclient/tests/image/v2/fakes.py index 1b7edf08..678291bb 100644 --- a/openstackclient/tests/image/v2/fakes.py +++ b/openstackclient/tests/image/v2/fakes.py @@ -19,18 +19,105 @@ from openstackclient.tests import fakes from openstackclient.tests import utils -image_id = 'im1' +image_id = '0f41529e-7c12-4de8-be2d-181abb825b3c' image_name = 'graven' image_owner = 'baal' -image_public = False image_protected = False +image_visibility = 'public' IMAGE = { 'id': image_id, 'name': image_name, - 'is_public': image_public, 'owner': image_owner, 'protected': image_protected, + 'visibility': image_visibility, +} + +IMAGE_columns = tuple(sorted(IMAGE)) +IMAGE_data = tuple((IMAGE[x] for x in sorted(IMAGE))) + +# Just enough v2 schema to do some testing +IMAGE_schema = { + "additionalProperties": { + "type": "string" + }, + "name": "image", + "links": [ + { + "href": "{self}", + "rel": "self" + }, + { + "href": "{file}", + "rel": "enclosure" + }, + { + "href": "{schema}", + "rel": "describedby" + } + ], + "properties": { + "id": { + "pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$", # noqa + "type": "string", + "description": "An identifier for the image" + }, + "name": { + "type": [ + "null", + "string" + ], + "description": "Descriptive name for the image", + "maxLength": 255 + }, + "owner": { + "type": [ + "null", + "string" + ], + "description": "Owner of the image", + "maxLength": 255 + }, + "protected": { + "type": "boolean", + "description": "If true, image will not be deletable." + }, + "self": { + "type": "string", + "description": "(READ-ONLY)" + }, + "schema": { + "type": "string", + "description": "(READ-ONLY)" + }, + "size": { + "type": [ + "null", + "integer" + ], + "description": "Size of image file in bytes (READ-ONLY)" + }, + "status": { + "enum": [ + "queued", + "saving", + "active", + "killed", + "deleted", + "pending_delete" + ], + "type": "string", + "description": "Status of the image (READ-ONLY)" + }, + "visibility": { + "enum": [ + "public", + "private" + ], + "type": "string", + "description": "Scope of image accessibility" + }, + } } diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py index 6a28b1ec..73b5d39a 100644 --- a/openstackclient/tests/image/v2/test_image.py +++ b/openstackclient/tests/image/v2/test_image.py @@ -16,6 +16,9 @@ import copy import mock +import warlock + +from glanceclient.v2 import schemas from openstackclient.image.v2 import image from openstackclient.tests import fakes from openstackclient.tests.image.v2 import fakes as image_fakes @@ -70,8 +73,8 @@ class TestImageList(TestImage): super(TestImageList, self).setUp() self.api_mock = mock.Mock() - self.api_mock.image_list.return_value = [ - copy.deepcopy(image_fakes.IMAGE), + self.api_mock.image_list.side_effect = [ + [copy.deepcopy(image_fakes.IMAGE)], [], ] self.app.client_manager.image.api = self.api_mock @@ -90,7 +93,9 @@ class TestImageList(TestImage): # DisplayCommandBase.take_action() returns two tuples columns, data = self.cmd.take_action(parsed_args) - self.api_mock.image_list.assert_called_with() + self.api_mock.image_list.assert_called_with( + marker=image_fakes.image_id, + ) collist = ('ID', 'Name') @@ -117,6 +122,7 @@ class TestImageList(TestImage): columns, data = self.cmd.take_action(parsed_args) self.api_mock.image_list.assert_called_with( public=True, + marker=image_fakes.image_id, ) collist = ('ID', 'Name') @@ -144,6 +150,7 @@ class TestImageList(TestImage): columns, data = self.cmd.take_action(parsed_args) self.api_mock.image_list.assert_called_with( private=True, + marker=image_fakes.image_id, ) collist = ('ID', 'Name') @@ -171,6 +178,7 @@ class TestImageList(TestImage): columns, data = self.cmd.take_action(parsed_args) self.api_mock.image_list.assert_called_with( shared=True, + marker=image_fakes.image_id, ) collist = ('ID', 'Name') @@ -193,7 +201,9 @@ class TestImageList(TestImage): # DisplayCommandBase.take_action() returns two tuples columns, data = self.cmd.take_action(parsed_args) - self.api_mock.image_list.assert_called_with() + self.api_mock.image_list.assert_called_with( + marker=image_fakes.image_id, + ) collist = ( 'ID', @@ -216,7 +226,7 @@ class TestImageList(TestImage): '', '', '', - '', + 'public', False, image_fakes.image_owner, '', @@ -239,7 +249,9 @@ class TestImageList(TestImage): # DisplayCommandBase.take_action() returns two tuples columns, data = self.cmd.take_action(parsed_args) - self.api_mock.image_list.assert_called_with() + self.api_mock.image_list.assert_called_with( + marker=image_fakes.image_id, + ) sf_mock.assert_called_with( [image_fakes.IMAGE], attr='a', @@ -268,7 +280,9 @@ class TestImageList(TestImage): # DisplayCommandBase.take_action() returns two tuples columns, data = self.cmd.take_action(parsed_args) - self.api_mock.image_list.assert_called_with() + self.api_mock.image_list.assert_called_with( + marker=image_fakes.image_id, + ) si_mock.assert_called_with( [image_fakes.IMAGE], 'name:asc' @@ -282,3 +296,38 @@ class TestImageList(TestImage): image_fakes.image_name ), ) self.assertEqual(datalist, tuple(data)) + + +class TestImageShow(TestImage): + + def setUp(self): + super(TestImageShow, self).setUp() + + # Set up the schema + self.model = warlock.model_factory( + image_fakes.IMAGE_schema, + schemas.SchemaBasedModel, + ) + + self.images_mock.get.return_value = self.model(**image_fakes.IMAGE) + + # Get the command object to test + self.cmd = image.ShowImage(self.app, None) + + def test_image_show(self): + arglist = [ + image_fakes.image_id, + ] + verifylist = [ + ('image', image_fakes.image_id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # DisplayCommandBase.take_action() returns two tuples + columns, data = self.cmd.take_action(parsed_args) + self.images_mock.get.assert_called_with( + image_fakes.image_id, + ) + + self.assertEqual(image_fakes.IMAGE_columns, columns) + self.assertEqual(image_fakes.IMAGE_data, data) diff --git a/openstackclient/tests/test_shell.py b/openstackclient/tests/test_shell.py index f1043072..a43be954 100644 --- a/openstackclient/tests/test_shell.py +++ b/openstackclient/tests/test_shell.py @@ -82,34 +82,62 @@ class TestShell(utils.TestCase): fake_execute(_shell, _cmd) self.app.assert_called_with(["list", "project"]) - self.assertEqual(default_args["auth_url"], - _shell.options.os_auth_url) - self.assertEqual(default_args["project_id"], - _shell.options.os_project_id) - self.assertEqual(default_args["project_name"], - _shell.options.os_project_name) - self.assertEqual(default_args["domain_id"], - _shell.options.os_domain_id) - self.assertEqual(default_args["domain_name"], - _shell.options.os_domain_name) - self.assertEqual(default_args["user_domain_id"], - _shell.options.os_user_domain_id) - self.assertEqual(default_args["user_domain_name"], - _shell.options.os_user_domain_name) - self.assertEqual(default_args["project_domain_id"], - _shell.options.os_project_domain_id) - self.assertEqual(default_args["project_domain_name"], - _shell.options.os_project_domain_name) - self.assertEqual(default_args["username"], - _shell.options.os_username) - self.assertEqual(default_args["password"], - _shell.options.os_password) - self.assertEqual(default_args["region_name"], - _shell.options.os_region_name) - self.assertEqual(default_args["trust_id"], - _shell.options.os_trust_id) - self.assertEqual(default_args['auth_type'], - _shell.options.os_auth_type) + self.assertEqual( + default_args.get("auth_url", ''), + _shell.options.auth_url, + ) + self.assertEqual( + default_args.get("project_id", ''), + _shell.options.project_id, + ) + self.assertEqual( + default_args.get("project_name", ''), + _shell.options.project_name, + ) + self.assertEqual( + default_args.get("domain_id", ''), + _shell.options.domain_id, + ) + self.assertEqual( + default_args.get("domain_name", ''), + _shell.options.domain_name, + ) + self.assertEqual( + default_args.get("user_domain_id", ''), + _shell.options.user_domain_id, + ) + self.assertEqual( + default_args.get("user_domain_name", ''), + _shell.options.user_domain_name, + ) + self.assertEqual( + default_args.get("project_domain_id", ''), + _shell.options.project_domain_id, + ) + self.assertEqual( + default_args.get("project_domain_name", ''), + _shell.options.project_domain_name, + ) + self.assertEqual( + default_args.get("username", ''), + _shell.options.username, + ) + self.assertEqual( + default_args.get("password", ''), + _shell.options.password, + ) + self.assertEqual( + default_args.get("region_name", ''), + _shell.options.region_name, + ) + self.assertEqual( + default_args.get("trust_id", ''), + _shell.options.trust_id, + ) + self.assertEqual( + default_args.get('auth_type', ''), + _shell.options.auth_type, + ) def _assert_token_auth(self, cmd_options, default_args): with mock.patch("openstackclient.shell.OpenStackShell.initialize_app", @@ -118,9 +146,34 @@ class TestShell(utils.TestCase): fake_execute(_shell, _cmd) self.app.assert_called_with(["list", "role"]) - self.assertEqual(default_args["os_token"], _shell.options.os_token) - self.assertEqual(default_args["os_auth_url"], - _shell.options.os_auth_url) + self.assertEqual( + default_args.get("token", ''), + _shell.options.token, + "token" + ) + self.assertEqual( + default_args.get("auth_url", ''), + _shell.options.auth_url, + "auth_url" + ) + + def _assert_token_endpoint_auth(self, cmd_options, default_args): + with mock.patch("openstackclient.shell.OpenStackShell.initialize_app", + self.app): + _shell, _cmd = make_shell(), cmd_options + " list role" + fake_execute(_shell, _cmd) + + self.app.assert_called_with(["list", "role"]) + self.assertEqual( + default_args.get("token", ''), + _shell.options.token, + "token", + ) + self.assertEqual( + default_args.get("url", ''), + _shell.options.url, + "url", + ) def _assert_cli(self, cmd_options, default_args): with mock.patch("openstackclient.shell.OpenStackShell.initialize_app", @@ -178,301 +231,233 @@ class TestShellPasswordAuth(TestShell): flag = "--os-auth-url " + DEFAULT_AUTH_URL kwargs = { "auth_url": DEFAULT_AUTH_URL, - "project_id": "", - "project_name": "", - "user_domain_id": "", - "domain_id": "", - "domain_name": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_project_id_flow(self): flag = "--os-project-id " + DEFAULT_PROJECT_ID kwargs = { - "auth_url": "", "project_id": DEFAULT_PROJECT_ID, - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_project_name_flow(self): flag = "--os-project-name " + DEFAULT_PROJECT_NAME kwargs = { - "auth_url": "", - "project_id": "", "project_name": DEFAULT_PROJECT_NAME, - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_domain_id_flow(self): flag = "--os-domain-id " + DEFAULT_DOMAIN_ID kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", "domain_id": DEFAULT_DOMAIN_ID, - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_domain_name_flow(self): flag = "--os-domain-name " + DEFAULT_DOMAIN_NAME kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", "domain_name": DEFAULT_DOMAIN_NAME, - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_user_domain_id_flow(self): flag = "--os-user-domain-id " + DEFAULT_USER_DOMAIN_ID kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", "user_domain_id": DEFAULT_USER_DOMAIN_ID, - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_user_domain_name_flow(self): flag = "--os-user-domain-name " + DEFAULT_USER_DOMAIN_NAME kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", "user_domain_name": DEFAULT_USER_DOMAIN_NAME, - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_project_domain_id_flow(self): flag = "--os-project-domain-id " + DEFAULT_PROJECT_DOMAIN_ID kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", "project_domain_id": DEFAULT_PROJECT_DOMAIN_ID, - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_project_domain_name_flow(self): flag = "--os-project-domain-name " + DEFAULT_PROJECT_DOMAIN_NAME kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", "project_domain_name": DEFAULT_PROJECT_DOMAIN_NAME, - "username": "", - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_username_flow(self): flag = "--os-username " + DEFAULT_USERNAME kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", "username": DEFAULT_USERNAME, - "password": "", - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_password_flow(self): flag = "--os-password " + DEFAULT_PASSWORD kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", "password": DEFAULT_PASSWORD, - "region_name": "", - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_region_name_flow(self): flag = "--os-region-name " + DEFAULT_REGION_NAME kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", "region_name": DEFAULT_REGION_NAME, - "trust_id": "", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_trust_id_flow(self): flag = "--os-trust-id " + "1234" kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", "trust_id": "1234", - "auth_type": "", } self._assert_password_auth(flag, kwargs) def test_only_auth_type_flow(self): flag = "--os-auth-type " + "v2password" kwargs = { - "auth_url": "", - "project_id": "", - "project_name": "", - "domain_id": "", - "domain_name": "", - "user_domain_id": "", - "user_domain_name": "", - "project_domain_id": "", - "project_domain_name": "", - "username": "", - "password": "", - "region_name": "", - "trust_id": "", "auth_type": DEFAULT_AUTH_PLUGIN } self._assert_password_auth(flag, kwargs) class TestShellTokenAuth(TestShell): + def test_only_token(self): + flag = "--os-token " + DEFAULT_TOKEN + kwargs = { + "token": DEFAULT_TOKEN, + "auth_url": '', + } + self._assert_token_auth(flag, kwargs) + + def test_only_auth_url(self): + flag = "--os-auth-url " + DEFAULT_AUTH_URL + kwargs = { + "token": '', + "auth_url": DEFAULT_AUTH_URL, + } + self._assert_token_auth(flag, kwargs) + + def test_empty_auth(self): + os.environ = {} + flag = "" + kwargs = {} + self._assert_token_auth(flag, kwargs) + + +class TestShellTokenAuthEnv(TestShell): def setUp(self): - super(TestShellTokenAuth, self).setUp() + super(TestShellTokenAuthEnv, self).setUp() env = { "OS_TOKEN": DEFAULT_TOKEN, - "OS_AUTH_URL": DEFAULT_SERVICE_URL, + "OS_AUTH_URL": DEFAULT_AUTH_URL, } self.orig_env, os.environ = os.environ, env.copy() def tearDown(self): - super(TestShellTokenAuth, self).tearDown() + super(TestShellTokenAuthEnv, self).tearDown() os.environ = self.orig_env - def test_default_auth(self): + def test_env(self): flag = "" kwargs = { - "os_token": DEFAULT_TOKEN, - "os_auth_url": DEFAULT_SERVICE_URL + "token": DEFAULT_TOKEN, + "auth_url": DEFAULT_AUTH_URL, + } + self._assert_token_auth(flag, kwargs) + + def test_only_token(self): + flag = "--os-token xyzpdq" + kwargs = { + "token": "xyzpdq", + "auth_url": DEFAULT_AUTH_URL, + } + self._assert_token_auth(flag, kwargs) + + def test_only_auth_url(self): + flag = "--os-auth-url http://cloud.local:555" + kwargs = { + "token": DEFAULT_TOKEN, + "auth_url": "http://cloud.local:555", + } + self._assert_token_auth(flag, kwargs) + + def test_empty_auth(self): + os.environ = {} + flag = "" + kwargs = { + "token": '', + "auth_url": '', + } + self._assert_token_auth(flag, kwargs) + + +class TestShellTokenEndpointAuth(TestShell): + def test_only_token(self): + flag = "--os-token " + DEFAULT_TOKEN + kwargs = { + "token": DEFAULT_TOKEN, + "url": '', + } + self._assert_token_endpoint_auth(flag, kwargs) + + def test_only_url(self): + flag = "--os-url " + DEFAULT_SERVICE_URL + kwargs = { + "token": '', + "url": DEFAULT_SERVICE_URL, + } + self._assert_token_endpoint_auth(flag, kwargs) + + def test_empty_auth(self): + os.environ = {} + flag = "" + kwargs = { + "token": '', + "auth_url": '', + } + self._assert_token_endpoint_auth(flag, kwargs) + + +class TestShellTokenEndpointAuthEnv(TestShell): + def setUp(self): + super(TestShellTokenEndpointAuthEnv, self).setUp() + env = { + "OS_TOKEN": DEFAULT_TOKEN, + "OS_URL": DEFAULT_SERVICE_URL, + } + self.orig_env, os.environ = os.environ, env.copy() + + def tearDown(self): + super(TestShellTokenEndpointAuthEnv, self).tearDown() + os.environ = self.orig_env + + def test_env(self): + flag = "" + kwargs = { + "token": DEFAULT_TOKEN, + "url": DEFAULT_SERVICE_URL, + } + self._assert_token_auth(flag, kwargs) + + def test_only_token(self): + flag = "--os-token xyzpdq" + kwargs = { + "token": "xyzpdq", + "url": DEFAULT_SERVICE_URL, + } + self._assert_token_auth(flag, kwargs) + + def test_only_url(self): + flag = "--os-url http://cloud.local:555" + kwargs = { + "token": DEFAULT_TOKEN, + "url": "http://cloud.local:555", } self._assert_token_auth(flag, kwargs) @@ -480,8 +465,8 @@ class TestShellTokenAuth(TestShell): os.environ = {} flag = "" kwargs = { - "os_token": "", - "os_auth_url": "" + "token": '', + "url": '', } self._assert_token_auth(flag, kwargs) diff --git a/openstackclient/tests/volume/test_find_resource.py b/openstackclient/tests/volume/test_find_resource.py index 56081966..00cc46a6 100644 --- a/openstackclient/tests/volume/test_find_resource.py +++ b/openstackclient/tests/volume/test_find_resource.py @@ -24,6 +24,13 @@ from openstackclient.tests import utils as test_utils from openstackclient.volume import client # noqa +# Monkey patch for v1 cinderclient +# NOTE(dtroyer): Do here because openstackclient.volume.client +# doesn't do it until the client object is created now. +volumes.Volume.NAME_ATTR = 'display_name' +volume_snapshots.Snapshot.NAME_ATTR = 'display_name' + + ID = '1after909' NAME = 'PhilSpector' |
