diff options
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/compute/v2/agent.py | 6 | ||||
| -rw-r--r-- | openstackclient/compute/v2/host.py | 4 | ||||
| -rw-r--r-- | openstackclient/compute/v2/keypair.py | 27 | ||||
| -rw-r--r-- | openstackclient/compute/v2/service.py | 24 | ||||
| -rw-r--r-- | openstackclient/network/v2/network.py | 2 | ||||
| -rw-r--r-- | openstackclient/network/v2/subnet.py | 8 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/fakes.py | 19 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/test_keypair.py | 62 | ||||
| -rw-r--r-- | openstackclient/tests/compute/v2/test_service.py | 55 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v2_0/fakes.py | 70 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v2_0/test_endpoint.py | 6 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v2_0/test_role.py | 227 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v2_0/test_service.py | 121 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v2_0/test_token.py | 9 | ||||
| -rw-r--r-- | openstackclient/tests/identity/v2_0/test_user.py | 269 | ||||
| -rw-r--r-- | openstackclient/tests/volume/v2/test_backup.py | 8 | ||||
| -rw-r--r-- | openstackclient/volume/v1/backup.py | 6 | ||||
| -rw-r--r-- | openstackclient/volume/v2/backup.py | 11 |
18 files changed, 515 insertions, 419 deletions
diff --git a/openstackclient/compute/v2/agent.py b/openstackclient/compute/v2/agent.py index 62be2424..4d923955 100644 --- a/openstackclient/compute/v2/agent.py +++ b/openstackclient/compute/v2/agent.py @@ -29,7 +29,7 @@ LOG = logging.getLogger(__name__) class CreateAgent(command.ShowOne): - """Create compute agent command""" + """Create compute agent""" def get_parser(self, prog_name): parser = super(CreateAgent, self).get_parser(prog_name) @@ -112,7 +112,7 @@ class DeleteAgent(command.Command): class ListAgent(command.Lister): - """List compute agent command""" + """List compute agents""" def get_parser(self, prog_name): parser = super(ListAgent, self).get_parser(prog_name) @@ -142,7 +142,7 @@ class ListAgent(command.Lister): class SetAgent(command.Command): - """Set compute agent command""" + """Set compute agent properties""" def get_parser(self, prog_name): parser = super(SetAgent, self).get_parser(prog_name) diff --git a/openstackclient/compute/v2/host.py b/openstackclient/compute/v2/host.py index 78567589..4785377e 100644 --- a/openstackclient/compute/v2/host.py +++ b/openstackclient/compute/v2/host.py @@ -22,7 +22,7 @@ from openstackclient.i18n import _ class ListHost(command.Lister): - """List host command""" + """List hosts""" def get_parser(self, prog_name): parser = super(ListHost, self).get_parser(prog_name) @@ -107,7 +107,7 @@ class SetHost(command.Command): class ShowHost(command.Lister): - """Show host command""" + """Display host details""" def get_parser(self, prog_name): parser = super(ShowHost, self).get_parser(prog_name) diff --git a/openstackclient/compute/v2/keypair.py b/openstackclient/compute/v2/keypair.py index 13c0a99c..3725a3a8 100644 --- a/openstackclient/compute/v2/keypair.py +++ b/openstackclient/compute/v2/keypair.py @@ -16,6 +16,7 @@ """Keypair action implementations""" import io +import logging import os import sys @@ -27,6 +28,9 @@ import six from openstackclient.i18n import _ +LOG = logging.getLogger(__name__) + + class CreateKeypair(command.ShowOne): """Create new public key""" @@ -78,20 +82,37 @@ class CreateKeypair(command.ShowOne): class DeleteKeypair(command.Command): - """Delete public key""" + """Delete public key(s)""" def get_parser(self, prog_name): parser = super(DeleteKeypair, self).get_parser(prog_name) parser.add_argument( 'name', metavar='<key>', - help=_("Public key to delete (name only)") + nargs='+', + help=_("Public key(s) to delete (name only)") ) return parser def take_action(self, parsed_args): compute_client = self.app.client_manager.compute - compute_client.keypairs.delete(parsed_args.name) + result = 0 + for n in parsed_args.name: + try: + data = utils.find_resource( + compute_client.keypairs, n) + compute_client.keypairs.delete(data.name) + except Exception as e: + result += 1 + LOG.error(_("Failed to delete public key with name " + "'%(name)s': %(e)s") + % {'name': n, 'e': e}) + + if result > 0: + total = len(parsed_args.name) + msg = (_("%(result)s of %(total)s public keys failed " + "to delete.") % {'result': result, 'total': total}) + raise exceptions.CommandError(msg) class ListKeypair(command.Lister): diff --git a/openstackclient/compute/v2/service.py b/openstackclient/compute/v2/service.py index 2e40dd7f..53624f55 100644 --- a/openstackclient/compute/v2/service.py +++ b/openstackclient/compute/v2/service.py @@ -29,25 +29,39 @@ LOG = logging.getLogger(__name__) class DeleteService(command.Command): - """Delete service command""" + """Delete compute service(s)""" def get_parser(self, prog_name): parser = super(DeleteService, self).get_parser(prog_name) parser.add_argument( "service", metavar="<service>", - help=_("Compute service to delete (ID only)") + nargs='+', + help=_("Compute service(s) to delete (ID only)") ) return parser def take_action(self, parsed_args): compute_client = self.app.client_manager.compute + result = 0 + for s in parsed_args.service: + try: + compute_client.services.delete(s) + except Exception as e: + result += 1 + LOG.error(_("Failed to delete compute service with " + "ID '%(service)s': %(e)s") + % {'service': s, 'e': e}) - compute_client.services.delete(parsed_args.service) + if result > 0: + total = len(parsed_args.service) + msg = (_("%(result)s of %(total)s compute services failed " + "to delete.") % {'result': result, 'total': total}) + raise exceptions.CommandError(msg) class ListService(command.Lister): - """List service command""" + """List compute services""" def get_parser(self, prog_name): parser = super(ListService, self).get_parser(prog_name) @@ -101,7 +115,7 @@ class ListService(command.Lister): class SetService(command.Command): - """Set service command""" + """Set compute service properties""" def get_parser(self, prog_name): parser = super(SetService, self).get_parser(prog_name) diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py index 41735500..31dfc798 100644 --- a/openstackclient/network/v2/network.py +++ b/openstackclient/network/v2/network.py @@ -108,7 +108,7 @@ def _add_additional_network_options(parser): 'vlan', 'vxlan'], help=_("The physical mechanism by which the virtual network " "is implemented. The supported options are: " - "flat, geneve, gre, local, vlan, vxlan")) + "flat, geneve, gre, local, vlan, vxlan.")) parser.add_argument( '--provider-physical-network', metavar='<provider-physical-network>', diff --git a/openstackclient/network/v2/subnet.py b/openstackclient/network/v2/subnet.py index 752923f7..b076d82e 100644 --- a/openstackclient/network/v2/subnet.py +++ b/openstackclient/network/v2/subnet.py @@ -235,7 +235,7 @@ class CreateSubnet(command.ShowOne): "'auto': Gateway address should automatically be chosen " "from within the subnet itself, 'none': This subnet will " "not use a gateway, e.g.: --gateway 192.168.9.1, " - "--gateway auto, --gateway none (default is 'auto')") + "--gateway auto, --gateway none (default is 'auto').") ) parser.add_argument( '--ip-version', @@ -244,7 +244,7 @@ class CreateSubnet(command.ShowOne): choices=[4, 6], help=_("IP version (default is 4). Note that when subnet pool is " "specified, IP version is determined from the subnet pool " - "and this option is ignored") + "and this option is ignored.") ) parser.add_argument( '--ipv6-ra-mode', @@ -334,7 +334,7 @@ class ListSubnet(command.Lister): choices=[4, 6], metavar='<ip-version>', dest='ip_version', - help=_("List only subnets of given IP version in output" + help=_("List only subnets of given IP version in output." "Allowed values for IP version are 4 and 6."), ) return parser @@ -395,7 +395,7 @@ class SetSubnet(command.Command): help=_("Specify a gateway for the subnet. The options are: " "<ip-address>: Specific IP address to use as the gateway, " "'none': This subnet will not use a gateway, " - "e.g.: --gateway 192.168.9.1, --gateway none") + "e.g.: --gateway 192.168.9.1, --gateway none.") ) _get_common_parse_arguments(parser) return parser diff --git a/openstackclient/tests/compute/v2/fakes.py b/openstackclient/tests/compute/v2/fakes.py index b7f17fbc..882d8480 100644 --- a/openstackclient/tests/compute/v2/fakes.py +++ b/openstackclient/tests/compute/v2/fakes.py @@ -826,6 +826,25 @@ class FakeKeypair(object): return keypairs + @staticmethod + def get_keypairs(keypairs=None, count=2): + """Get an iterable MagicMock object with a list of faked keypairs. + + If keypairs list is provided, then initialize the Mock object with the + list. Otherwise create one. + + :param List keypairs: + A list of FakeResource objects faking keypairs + :param int count: + The number of keypairs to fake + :return: + An iterable Mock object with side_effect set to a list of faked + keypairs + """ + if keypairs is None: + keypairs = FakeKeypair.create_keypairs(count) + return mock.MagicMock(side_effect=keypairs) + class FakeAvailabilityZone(object): """Fake one or more compute availability zones (AZs).""" diff --git a/openstackclient/tests/compute/v2/test_keypair.py b/openstackclient/tests/compute/v2/test_keypair.py index a50a5323..25949e31 100644 --- a/openstackclient/tests/compute/v2/test_keypair.py +++ b/openstackclient/tests/compute/v2/test_keypair.py @@ -14,6 +14,10 @@ # import mock +from mock import call + +from osc_lib import exceptions +from osc_lib import utils from openstackclient.compute.v2 import keypair from openstackclient.tests.compute.v2 import fakes as compute_fakes @@ -114,22 +118,23 @@ class TestKeypairCreate(TestKeypair): class TestKeypairDelete(TestKeypair): - keypair = compute_fakes.FakeKeypair.create_one_keypair() + keypairs = compute_fakes.FakeKeypair.create_keypairs(count=2) def setUp(self): super(TestKeypairDelete, self).setUp() - self.keypairs_mock.get.return_value = self.keypair + self.keypairs_mock.get = compute_fakes.FakeKeypair.get_keypairs( + self.keypairs) self.keypairs_mock.delete.return_value = None self.cmd = keypair.DeleteKeypair(self.app, None) def test_keypair_delete(self): arglist = [ - self.keypair.name + self.keypairs[0].name ] verifylist = [ - ('name', self.keypair.name), + ('name', [self.keypairs[0].name]), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -137,7 +142,54 @@ class TestKeypairDelete(TestKeypair): ret = self.cmd.take_action(parsed_args) self.assertIsNone(ret) - self.keypairs_mock.delete.assert_called_with(self.keypair.name) + self.keypairs_mock.delete.assert_called_with(self.keypairs[0].name) + + def test_delete_multiple_keypairs(self): + arglist = [] + for k in self.keypairs: + arglist.append(k.name) + verifylist = [ + ('name', arglist), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + calls = [] + for k in self.keypairs: + calls.append(call(k.name)) + self.keypairs_mock.delete.assert_has_calls(calls) + self.assertIsNone(result) + + def test_delete_multiple_keypairs_with_exception(self): + arglist = [ + self.keypairs[0].name, + 'unexist_keypair', + ] + verifylist = [ + ('name', arglist), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + find_mock_result = [self.keypairs[0], exceptions.CommandError] + with mock.patch.object(utils, 'find_resource', + side_effect=find_mock_result) as find_mock: + try: + self.cmd.take_action(parsed_args) + self.fail('CommandError should be raised.') + except exceptions.CommandError as e: + self.assertEqual('1 of 2 public keys failed to delete.', + str(e)) + + find_mock.assert_any_call( + self.keypairs_mock, self.keypairs[0].name) + find_mock.assert_any_call(self.keypairs_mock, 'unexist_keypair') + + self.assertEqual(2, find_mock.call_count) + self.keypairs_mock.delete.assert_called_once_with( + self.keypairs[0].name + ) class TestKeypairList(TestKeypair): diff --git a/openstackclient/tests/compute/v2/test_service.py b/openstackclient/tests/compute/v2/test_service.py index e41d633a..1599f466 100644 --- a/openstackclient/tests/compute/v2/test_service.py +++ b/openstackclient/tests/compute/v2/test_service.py @@ -14,6 +14,7 @@ # import mock +from mock import call from osc_lib import exceptions @@ -33,32 +34,74 @@ class TestService(compute_fakes.TestComputev2): class TestServiceDelete(TestService): + services = compute_fakes.FakeService.create_services(count=2) + def setUp(self): super(TestServiceDelete, self).setUp() - self.service = compute_fakes.FakeService.create_one_service() - self.service_mock.delete.return_value = None # Get the command object to test self.cmd = service.DeleteService(self.app, None) - def test_service_delete_no_options(self): + def test_service_delete(self): arglist = [ - self.service.binary, + self.services[0].binary, ] verifylist = [ - ('service', self.service.binary), + ('service', [self.services[0].binary]), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.service_mock.delete.assert_called_with( - self.service.binary, + self.services[0].binary, ) self.assertIsNone(result) + def test_multi_services_delete(self): + arglist = [] + for s in self.services: + arglist.append(s.binary) + verifylist = [ + ('service', arglist), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + result = self.cmd.take_action(parsed_args) + + calls = [] + for s in self.services: + calls.append(call(s.binary)) + self.service_mock.delete.assert_has_calls(calls) + self.assertIsNone(result) + + def test_multi_services_delete_with_exception(self): + arglist = [ + self.services[0].binary, + 'unexist_service', + ] + verifylist = [ + ('service', arglist) + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + delete_mock_result = [None, exceptions.CommandError] + self.service_mock.delete = ( + mock.MagicMock(side_effect=delete_mock_result) + ) + + try: + self.cmd.take_action(parsed_args) + self.fail('CommandError should be raised.') + except exceptions.CommandError as e: + self.assertEqual( + '1 of 2 compute services failed to delete.', str(e)) + + self.service_mock.delete.assert_any_call(self.services[0].binary) + self.service_mock.delete.assert_any_call('unexist_service') + class TestServiceList(TestService): diff --git a/openstackclient/tests/identity/v2_0/fakes.py b/openstackclient/tests/identity/v2_0/fakes.py index 10b8b49e..662d56b6 100644 --- a/openstackclient/tests/identity/v2_0/fakes.py +++ b/openstackclient/tests/identity/v2_0/fakes.py @@ -76,19 +76,19 @@ USER = { } token_expires = '2014-01-01T00:00:00Z' -token_id = 'tttttttt-tttt-tttt-tttt-tttttttttttt' +token_id = 'token-id-' + uuid.uuid4().hex TOKEN = { 'expires': token_expires, 'id': token_id, - 'tenant_id': project_id, - 'user_id': user_id, + 'tenant_id': 'project-id', + 'user_id': 'user-id', } UNSCOPED_TOKEN = { 'expires': token_expires, 'id': token_id, - 'user_id': user_id, + 'user_id': 'user-id', } endpoint_name = service_name @@ -110,8 +110,6 @@ ENDPOINT = { 'publicurl': endpoint_publicurl, 'service_id': endpoint_service_id, } -SERVICE_NAME = 'service-name-' + uuid.uuid4().hex -SERVICE_ID = 'service-id-' + uuid.uuid4().hex def fake_auth_ref(fake_token, fake_service=None): @@ -244,7 +242,7 @@ class FakeCatalog(object): # Set default attributes. catalog_info = { - 'id': SERVICE_ID, + 'id': 'service-id-' + uuid.uuid4().hex, 'type': 'compute', 'name': 'supernova', 'endpoints': [ @@ -295,8 +293,8 @@ class FakeProject(object): # set default attributes. project_info = { - 'id': 'project-id' + uuid.uuid4().hex, - 'name': 'project-name' + uuid.uuid4().hex, + 'id': 'project-id-' + uuid.uuid4().hex, + 'name': 'project-name-' + uuid.uuid4().hex, 'description': 'project_description', 'enabled': True, } @@ -341,14 +339,14 @@ class FakeEndpoint(object): # set default attributes. endpoint_info = { - 'service_name': SERVICE_NAME, + 'service_name': 'service-name-' + uuid.uuid4().hex, 'adminurl': 'http://endpoint_adminurl', 'region': 'endpoint_region', 'internalurl': 'http://endpoint_internalurl', 'service_type': 'service_type', 'id': 'endpoint-id-' + uuid.uuid4().hex, 'publicurl': 'http://endpoint_publicurl', - 'service_id': SERVICE_ID, + 'service_id': 'service-name-' + uuid.uuid4().hex, } endpoint_info.update(attrs) @@ -392,8 +390,8 @@ class FakeService(object): # set default attributes. service_info = { - 'id': SERVICE_ID, - 'name': SERVICE_NAME, + 'id': 'service-id-' + uuid.uuid4().hex, + 'name': 'service-name-' + uuid.uuid4().hex, 'description': 'service_description', 'type': 'service_type', @@ -464,3 +462,49 @@ class FakeRole(object): roles.append(FakeRole.create_one_role(attrs)) return roles + + +class FakeUser(object): + """Fake one or more user.""" + + @staticmethod + def create_one_user(attrs=None): + """Create a fake user. + + :param Dictionary attrs: + A dictionary with all attributes + :return: + A FakeResource object, with id, name, and so on + """ + attrs = attrs or {} + + # set default attributes. + user_info = { + 'id': 'user-id-' + uuid.uuid4().hex, + 'name': 'user-name-' + uuid.uuid4().hex, + 'tenantId': 'project-id-' + uuid.uuid4().hex, + 'email': 'admin@openstack.org', + 'enabled': True, + } + user_info.update(attrs) + + user = fakes.FakeResource(info=copy.deepcopy(user_info), + loaded=True) + return user + + @staticmethod + def create_users(attrs=None, count=2): + """Create multiple fake users. + + :param Dictionary attrs: + A dictionary with all attributes + :param int count: + The number of users to fake + :return: + A list of FakeResource objects faking the users + """ + users = [] + for i in range(0, count): + users.append(FakeUser.create_one_user(attrs)) + + return users diff --git a/openstackclient/tests/identity/v2_0/test_endpoint.py b/openstackclient/tests/identity/v2_0/test_endpoint.py index 0b539702..b2b6d0f1 100644 --- a/openstackclient/tests/identity/v2_0/test_endpoint.py +++ b/openstackclient/tests/identity/v2_0/test_endpoint.py @@ -17,8 +17,12 @@ from openstackclient.tests.identity.v2_0 import fakes as identity_fakes class TestEndpoint(identity_fakes.TestIdentityv2): - fake_endpoint = identity_fakes.FakeEndpoint.create_one_endpoint() fake_service = identity_fakes.FakeService.create_one_service() + attr = { + 'service_name': fake_service.name, + 'service_id': fake_service.id, + } + fake_endpoint = identity_fakes.FakeEndpoint.create_one_endpoint(attr) def setUp(self): super(TestEndpoint, self).setUp() diff --git a/openstackclient/tests/identity/v2_0/test_role.py b/openstackclient/tests/identity/v2_0/test_role.py index 74bd8f27..3d379356 100644 --- a/openstackclient/tests/identity/v2_0/test_role.py +++ b/openstackclient/tests/identity/v2_0/test_role.py @@ -13,14 +13,12 @@ # under the License. # -import copy import mock from keystoneauth1 import exceptions as ks_exc from osc_lib import exceptions from openstackclient.identity.v2_0 import role -from openstackclient.tests import fakes from openstackclient.tests.identity.v2_0 import fakes as identity_fakes @@ -34,6 +32,12 @@ class TestRole(identity_fakes.TestIdentityv2): ] fake_service = identity_fakes.FakeService.create_one_service(attr) fake_role = identity_fakes.FakeRole.create_one_role() + fake_project = identity_fakes.FakeProject.create_one_project() + attr = {} + attr = { + 'tenantId': fake_project.id, + } + fake_user = identity_fakes.FakeUser.create_one_user(attr) def setUp(self): super(TestRole, self).setUp() @@ -63,42 +67,26 @@ class TestRoleAdd(TestRole): def setUp(self): super(TestRoleAdd, self).setUp() - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT), - loaded=True, - ) + self.projects_mock.get.return_value = self.fake_project - self.users_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ) + self.users_mock.get.return_value = self.fake_user - self.roles_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.ROLE), - loaded=True, - ) - self.roles_mock.add_user_role.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.ROLE), - loaded=True, - ) + self.roles_mock.get.return_value = self.fake_role + self.roles_mock.add_user_role.return_value = self.fake_role # Get the command object to test self.cmd = role.AddRole(self.app, None) def test_role_add(self): arglist = [ - '--project', identity_fakes.project_name, - '--user', identity_fakes.user_name, - identity_fakes.role_name, + '--project', self.fake_project.name, + '--user', self.fake_user.name, + self.fake_role.name, ] verifylist = [ - ('project', identity_fakes.project_name), - ('user', identity_fakes.user_name), - ('role', identity_fakes.role_name), + ('project', self.fake_project.name), + ('user', self.fake_user.name), + ('role', self.fake_role.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -109,49 +97,46 @@ class TestRoleAdd(TestRole): # RoleManager.add_user_role(user, role, tenant=None) self.roles_mock.add_user_role.assert_called_with( - identity_fakes.user_id, - identity_fakes.role_id, - identity_fakes.project_id, + self.fake_user.id, + self.fake_role.id, + self.fake_project.id, ) collist = ('id', 'name') self.assertEqual(collist, columns) datalist = ( - identity_fakes.role_id, - identity_fakes.role_name, + self.fake_role.id, + self.fake_role.name, ) self.assertEqual(datalist, data) class TestRoleCreate(TestRole): + fake_role_c = identity_fakes.FakeRole.create_one_role() columns = ( 'id', 'name' ) datalist = ( - identity_fakes.role_id, - identity_fakes.role_name, + fake_role_c.id, + fake_role_c.name, ) def setUp(self): super(TestRoleCreate, self).setUp() - self.roles_mock.create.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.ROLE), - loaded=True, - ) + self.roles_mock.create.return_value = self.fake_role_c # Get the command object to test self.cmd = role.CreateRole(self.app, None) def test_role_create_no_options(self): arglist = [ - identity_fakes.role_name, + self.fake_role_c.name, ] verifylist = [ - ('role_name', identity_fakes.role_name), + ('role_name', self.fake_role_c.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -162,7 +147,7 @@ class TestRoleCreate(TestRole): # RoleManager.create(name) self.roles_mock.create.assert_called_with( - identity_fakes.role_name, + self.fake_role_c.name, ) self.assertEqual(self.columns, columns) @@ -175,18 +160,14 @@ class TestRoleCreate(TestRole): # need to make this throw an exception... self.roles_mock.create.side_effect = _raise_conflict - self.roles_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.ROLE), - loaded=True, - ) + self.roles_mock.get.return_value = self.fake_role_c arglist = [ '--or-show', - identity_fakes.role_name, + self.fake_role_c.name, ] verifylist = [ - ('role_name', identity_fakes.role_name), + ('role_name', self.fake_role_c.name), ('or_show', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -197,11 +178,11 @@ class TestRoleCreate(TestRole): columns, data = self.cmd.take_action(parsed_args) # RoleManager.get(name, description, enabled) - self.roles_mock.get.assert_called_with(identity_fakes.role_name) + self.roles_mock.get.assert_called_with(self.fake_role_c.name) # RoleManager.create(name) self.roles_mock.create.assert_called_with( - identity_fakes.role_name, + self.fake_role_c.name, ) self.assertEqual(self.columns, columns) @@ -210,10 +191,10 @@ class TestRoleCreate(TestRole): def test_role_create_or_show_not_exists(self): arglist = [ '--or-show', - identity_fakes.role_name, + self.fake_role_c.name, ] verifylist = [ - ('role_name', identity_fakes.role_name), + ('role_name', self.fake_role_c.name), ('or_show', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -225,7 +206,7 @@ class TestRoleCreate(TestRole): # RoleManager.create(name) self.roles_mock.create.assert_called_with( - identity_fakes.role_name, + self.fake_role_c.name, ) self.assertEqual(self.columns, columns) @@ -237,11 +218,7 @@ class TestRoleDelete(TestRole): def setUp(self): super(TestRoleDelete, self).setUp() - self.roles_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.ROLE), - loaded=True, - ) + self.roles_mock.get.return_value = self.fake_role self.roles_mock.delete.return_value = None # Get the command object to test @@ -249,17 +226,17 @@ class TestRoleDelete(TestRole): def test_role_delete_no_options(self): arglist = [ - identity_fakes.role_name, + self.fake_role.name, ] verifylist = [ - ('roles', [identity_fakes.role_name]), + ('roles', [self.fake_role.name]), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.roles_mock.delete.assert_called_with( - identity_fakes.role_id, + self.fake_role.id, ) self.assertIsNone(result) @@ -269,13 +246,7 @@ class TestRoleList(TestRole): def setUp(self): super(TestRoleList, self).setUp() - self.roles_mock.list.return_value = [ - fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.ROLE), - loaded=True, - ), - ] + self.roles_mock.list.return_value = [self.fake_role] # Get the command object to test self.cmd = role.ListRole(self.app, None) @@ -295,8 +266,8 @@ class TestRoleList(TestRole): collist = ('ID', 'Name') self.assertEqual(collist, columns) datalist = (( - identity_fakes.role_id, - identity_fakes.role_name, + self.fake_role.id, + self.fake_role.name, ), ) self.assertEqual(datalist, tuple(data)) @@ -313,25 +284,11 @@ class TestUserRoleList(TestRole): def setUp(self): super(TestUserRoleList, self).setUp() - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT), - loaded=True, - ) + self.projects_mock.get.return_value = self.fake_project - self.users_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ) + self.users_mock.get.return_value = self.fake_user - self.roles_mock.roles_for_user.return_value = [ - fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.ROLE), - loaded=True, - ), - ] + self.roles_mock.roles_for_user.return_value = [self.fake_role] # Get the command object to test self.cmd = role.ListUserRole(self.app, None) @@ -366,17 +323,17 @@ class TestUserRoleList(TestRole): columns, data = self.cmd.take_action(parsed_args) self.roles_mock.roles_for_user.assert_called_with( - identity_fakes.user_id, - identity_fakes.project_id, + self.fake_user.id, + self.fake_project.id, ) collist = ('ID', 'Name', 'Project', 'User') self.assertEqual(collist, columns) datalist = (( - identity_fakes.role_id, - identity_fakes.role_name, - identity_fakes.project_name, - identity_fakes.user_name, + self.fake_role.id, + self.fake_role.name, + self.fake_project.name, + self.fake_user.name, ), ) self.assertEqual(datalist, tuple(data)) @@ -388,16 +345,12 @@ class TestUserRoleList(TestRole): self.ar_mock = mock.PropertyMock(return_value=auth_ref) type(self.app.client_manager).auth_ref = self.ar_mock - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT_2), - loaded=True, - ) + self.projects_mock.get.return_value = self.fake_project arglist = [ - '--project', identity_fakes.PROJECT_2['name'], + '--project', self.fake_project.name, ] verifylist = [ - ('project', identity_fakes.PROJECT_2['name']), + ('project', self.fake_project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -407,30 +360,26 @@ class TestUserRoleList(TestRole): columns, data = self.cmd.take_action(parsed_args) self.roles_mock.roles_for_user.assert_called_with( - identity_fakes.user_id, - identity_fakes.PROJECT_2['id'], + self.fake_user.id, + self.fake_project.id, ) self.assertEqual(columns, columns) datalist = (( - identity_fakes.role_id, - identity_fakes.role_name, - identity_fakes.PROJECT_2['name'], - identity_fakes.user_name, + self.fake_role.id, + self.fake_role.name, + self.fake_project.name, + self.fake_user.name, ), ) self.assertEqual(datalist, tuple(data)) def test_user_role_list_project_scoped_token(self): - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT_2), - loaded=True, - ) + self.projects_mock.get.return_value = self.fake_project arglist = [ - '--project', identity_fakes.PROJECT_2['name'], + '--project', self.fake_project.name, ] verifylist = [ - ('project', identity_fakes.PROJECT_2['name']), + ('project', self.fake_project.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -440,16 +389,16 @@ class TestUserRoleList(TestRole): columns, data = self.cmd.take_action(parsed_args) self.roles_mock.roles_for_user.assert_called_with( - identity_fakes.user_id, - identity_fakes.PROJECT_2['id'], + self.fake_user.id, + self.fake_project.id, ) self.assertEqual(columns, columns) datalist = (( - identity_fakes.role_id, - identity_fakes.role_name, - identity_fakes.PROJECT_2['name'], - identity_fakes.user_name, + self.fake_role.id, + self.fake_role.name, + self.fake_project.name, + self.fake_user.name, ), ) self.assertEqual(datalist, tuple(data)) @@ -459,23 +408,11 @@ class TestRoleRemove(TestRole): def setUp(self): super(TestRoleRemove, self).setUp() - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT), - loaded=True, - ) + self.projects_mock.get.return_value = self.fake_project - self.users_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ) + self.users_mock.get.return_value = self.fake_user - self.roles_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.ROLE), - loaded=True, - ) + self.roles_mock.get.return_value = self.fake_role self.roles_mock.remove_user_role.return_value = None # Get the command object to test @@ -483,14 +420,14 @@ class TestRoleRemove(TestRole): def test_role_remove(self): arglist = [ - '--project', identity_fakes.project_name, - '--user', identity_fakes.user_name, - identity_fakes.role_name, + '--project', self.fake_project.name, + '--user', self.fake_user.name, + self.fake_role.name, ] verifylist = [ - ('role', identity_fakes.role_name), - ('project', identity_fakes.project_name), - ('user', identity_fakes.user_name), + ('role', self.fake_role.name), + ('project', self.fake_project.name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -498,9 +435,9 @@ class TestRoleRemove(TestRole): # RoleManager.remove_user_role(user, role, tenant=None) self.roles_mock.remove_user_role.assert_called_with( - identity_fakes.user_id, - identity_fakes.role_id, - identity_fakes.project_id, + self.fake_user.id, + self.fake_role.id, + self.fake_project.id, ) self.assertIsNone(result) diff --git a/openstackclient/tests/identity/v2_0/test_service.py b/openstackclient/tests/identity/v2_0/test_service.py index ba976f4c..318fa83d 100644 --- a/openstackclient/tests/identity/v2_0/test_service.py +++ b/openstackclient/tests/identity/v2_0/test_service.py @@ -13,14 +13,12 @@ # under the License. # -import copy - from openstackclient.identity.v2_0 import service -from openstackclient.tests import fakes from openstackclient.tests.identity.v2_0 import fakes as identity_fakes class TestService(identity_fakes.TestIdentityv2): + fake_service = identity_fakes.FakeService.create_one_service() def setUp(self): super(TestService, self).setUp() @@ -32,6 +30,7 @@ class TestService(identity_fakes.TestIdentityv2): class TestServiceCreate(TestService): + fake_service_c = identity_fakes.FakeService.create_one_service() columns = ( 'description', 'id', @@ -39,30 +38,26 @@ class TestServiceCreate(TestService): 'type', ) datalist = ( - identity_fakes.service_description, - identity_fakes.service_id, - identity_fakes.service_name, - identity_fakes.service_type, + fake_service_c.description, + fake_service_c.id, + fake_service_c.name, + fake_service_c.type, ) def setUp(self): super(TestServiceCreate, self).setUp() - self.services_mock.create.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.SERVICE), - loaded=True, - ) + self.services_mock.create.return_value = self.fake_service_c # Get the command object to test self.cmd = service.CreateService(self.app, None) def test_service_create_with_type_positional(self): arglist = [ - identity_fakes.service_type, + self.fake_service_c.type, ] verifylist = [ - ('type_or_name', identity_fakes.service_type), + ('type_or_name', self.fake_service_c.type), ('type', None), ('description', None), ('name', None), @@ -77,7 +72,7 @@ class TestServiceCreate(TestService): # ServiceManager.create(name, service_type, description) self.services_mock.create.assert_called_with( None, - identity_fakes.service_type, + self.fake_service_c.type, None, ) @@ -86,12 +81,12 @@ class TestServiceCreate(TestService): def test_service_create_with_type_option(self): arglist = [ - '--type', identity_fakes.service_type, - identity_fakes.service_name, + '--type', self.fake_service_c.type, + self.fake_service_c.name, ] verifylist = [ - ('type_or_name', identity_fakes.service_name), - ('type', identity_fakes.service_type), + ('type_or_name', self.fake_service_c.name), + ('type', self.fake_service_c.type), ('description', None), ('name', None), ] @@ -104,8 +99,8 @@ class TestServiceCreate(TestService): # ServiceManager.create(name, service_type, description) self.services_mock.create.assert_called_with( - identity_fakes.service_name, - identity_fakes.service_type, + self.fake_service_c.name, + self.fake_service_c.type, None, ) @@ -114,14 +109,14 @@ class TestServiceCreate(TestService): def test_service_create_with_name_option(self): arglist = [ - '--name', identity_fakes.service_name, - identity_fakes.service_type, + '--name', self.fake_service_c.name, + self.fake_service_c.type, ] verifylist = [ - ('type_or_name', identity_fakes.service_type), + ('type_or_name', self.fake_service_c.type), ('type', None), ('description', None), - ('name', identity_fakes.service_name), + ('name', self.fake_service_c.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -132,8 +127,8 @@ class TestServiceCreate(TestService): # ServiceManager.create(name, service_type, description) self.services_mock.create.assert_called_with( - identity_fakes.service_name, - identity_fakes.service_type, + self.fake_service_c.name, + self.fake_service_c.type, None, ) @@ -142,15 +137,15 @@ class TestServiceCreate(TestService): def test_service_create_description(self): arglist = [ - '--name', identity_fakes.service_name, - '--description', identity_fakes.service_description, - identity_fakes.service_type, + '--name', self.fake_service_c.name, + '--description', self.fake_service_c.description, + self.fake_service_c.type, ] verifylist = [ - ('type_or_name', identity_fakes.service_type), + ('type_or_name', self.fake_service_c.type), ('type', None), - ('description', identity_fakes.service_description), - ('name', identity_fakes.service_name), + ('description', self.fake_service_c.description), + ('name', self.fake_service_c.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -161,9 +156,9 @@ class TestServiceCreate(TestService): # ServiceManager.create(name, service_type, description) self.services_mock.create.assert_called_with( - identity_fakes.service_name, - identity_fakes.service_type, - identity_fakes.service_description, + self.fake_service_c.name, + self.fake_service_c.type, + self.fake_service_c.description, ) self.assertEqual(self.columns, columns) @@ -175,11 +170,7 @@ class TestServiceDelete(TestService): def setUp(self): super(TestServiceDelete, self).setUp() - self.services_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.SERVICE), - loaded=True, - ) + self.services_mock.get.return_value = self.fake_service self.services_mock.delete.return_value = None # Get the command object to test @@ -187,17 +178,17 @@ class TestServiceDelete(TestService): def test_service_delete_no_options(self): arglist = [ - identity_fakes.service_name, + self.fake_service.name, ] verifylist = [ - ('services', [identity_fakes.service_name]), + ('services', [self.fake_service.name]), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.services_mock.delete.assert_called_with( - identity_fakes.service_id, + self.fake_service.id, ) self.assertIsNone(result) @@ -207,13 +198,7 @@ class TestServiceList(TestService): def setUp(self): super(TestServiceList, self).setUp() - self.services_mock.list.return_value = [ - fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.SERVICE), - loaded=True, - ), - ] + self.services_mock.list.return_value = [self.fake_service] # Get the command object to test self.cmd = service.ListService(self.app, None) @@ -233,9 +218,9 @@ class TestServiceList(TestService): collist = ('ID', 'Name', 'Type') self.assertEqual(collist, columns) datalist = (( - identity_fakes.service_id, - identity_fakes.service_name, - identity_fakes.service_type, + self.fake_service.id, + self.fake_service.name, + self.fake_service.type, ), ) self.assertEqual(datalist, tuple(data)) @@ -258,10 +243,10 @@ class TestServiceList(TestService): collist = ('ID', 'Name', 'Type', 'Description') self.assertEqual(collist, columns) datalist = (( - identity_fakes.service_id, - identity_fakes.service_name, - identity_fakes.service_type, - identity_fakes.service_description, + self.fake_service.id, + self.fake_service.name, + self.fake_service.type, + self.fake_service.description, ), ) self.assertEqual(datalist, tuple(data)) @@ -271,21 +256,17 @@ class TestServiceShow(TestService): def setUp(self): super(TestServiceShow, self).setUp() - self.services_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.SERVICE), - loaded=True, - ) + self.services_mock.get.return_value = self.fake_service # Get the command object to test self.cmd = service.ShowService(self.app, None) def test_service_show(self): arglist = [ - identity_fakes.service_name, + self.fake_service.name, ] verifylist = [ - ('service', identity_fakes.service_name), + ('service', self.fake_service.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -296,15 +277,15 @@ class TestServiceShow(TestService): # ServiceManager.get(id) self.services_mock.get.assert_called_with( - identity_fakes.service_name, + self.fake_service.name, ) collist = ('description', 'id', 'name', 'type') self.assertEqual(collist, columns) datalist = ( - identity_fakes.service_description, - identity_fakes.service_id, - identity_fakes.service_name, - identity_fakes.service_type, + self.fake_service.description, + self.fake_service.id, + self.fake_service.name, + self.fake_service.type, ) self.assertEqual(datalist, data) diff --git a/openstackclient/tests/identity/v2_0/test_token.py b/openstackclient/tests/identity/v2_0/test_token.py index 96f08e87..bb776707 100644 --- a/openstackclient/tests/identity/v2_0/test_token.py +++ b/openstackclient/tests/identity/v2_0/test_token.py @@ -21,6 +21,9 @@ from openstackclient.tests.identity.v2_0 import fakes as identity_fakes class TestToken(identity_fakes.TestIdentityv2): + fake_user = identity_fakes.FakeUser.create_one_user() + fake_project = identity_fakes.FakeProject.create_one_project() + def setUp(self): super(TestToken, self).setUp() @@ -57,8 +60,8 @@ class TestTokenIssue(TestToken): datalist = ( auth_ref.expires, identity_fakes.token_id, - identity_fakes.project_id, - identity_fakes.user_id, + 'project-id', + 'user-id', ) self.assertEqual(datalist, data) @@ -85,7 +88,7 @@ class TestTokenIssue(TestToken): datalist = ( auth_ref.expires, identity_fakes.token_id, - identity_fakes.user_id, + 'user-id', ) self.assertEqual(datalist, data) diff --git a/openstackclient/tests/identity/v2_0/test_user.py b/openstackclient/tests/identity/v2_0/test_user.py index f7a7b08c..ba871247 100644 --- a/openstackclient/tests/identity/v2_0/test_user.py +++ b/openstackclient/tests/identity/v2_0/test_user.py @@ -13,19 +13,23 @@ # under the License. # -import copy import mock from keystoneauth1 import exceptions as ks_exc from osc_lib import exceptions from openstackclient.identity.v2_0 import user -from openstackclient.tests import fakes from openstackclient.tests.identity.v2_0 import fakes as identity_fakes class TestUser(identity_fakes.TestIdentityv2): + fake_project = identity_fakes.FakeProject.create_one_project() + attr = { + 'tenantId': fake_project.id, + } + fake_user = identity_fakes.FakeUser.create_one_user(attr) + def setUp(self): super(TestUser, self).setUp() @@ -40,6 +44,12 @@ class TestUser(identity_fakes.TestIdentityv2): class TestUserCreate(TestUser): + fake_project_c = identity_fakes.FakeProject.create_one_project() + attr = { + 'tenantId': fake_project_c.id, + } + fake_user_c = identity_fakes.FakeUser.create_one_user(attr) + columns = ( 'email', 'enabled', @@ -48,39 +58,31 @@ class TestUserCreate(TestUser): 'project_id', ) datalist = ( - identity_fakes.user_email, + fake_user_c.email, True, - identity_fakes.user_id, - identity_fakes.user_name, - identity_fakes.project_id, + fake_user_c.id, + fake_user_c.name, + fake_project_c.id, ) def setUp(self): super(TestUserCreate, self).setUp() - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT), - loaded=True, - ) + self.projects_mock.get.return_value = self.fake_project_c - self.users_mock.create.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ) + self.users_mock.create.return_value = self.fake_user_c # Get the command object to test self.cmd = user.CreateUser(self.app, None) def test_user_create_no_options(self): arglist = [ - identity_fakes.user_name, + self.fake_user_c.name, ] verifylist = [ ('enable', False), ('disable', False), - ('name', identity_fakes.user_name), + ('name', self.fake_user_c.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -96,7 +98,7 @@ class TestUserCreate(TestUser): } # UserManager.create(name, password, email, tenant_id=, enabled=) self.users_mock.create.assert_called_with( - identity_fakes.user_name, + self.fake_user_c.name, None, None, **kwargs @@ -108,10 +110,10 @@ class TestUserCreate(TestUser): def test_user_create_password(self): arglist = [ '--password', 'secret', - identity_fakes.user_name, + self.fake_user_c.name, ] verifylist = [ - ('name', identity_fakes.user_name), + ('name', self.fake_user_c.name), ('password_prompt', False), ('password', 'secret') ] @@ -129,7 +131,7 @@ class TestUserCreate(TestUser): } # UserManager.create(name, password, email, tenant_id=, enabled=) self.users_mock.create.assert_called_with( - identity_fakes.user_name, + self.fake_user_c.name, 'secret', None, **kwargs @@ -140,10 +142,10 @@ class TestUserCreate(TestUser): def test_user_create_password_prompt(self): arglist = [ '--password-prompt', - identity_fakes.user_name, + self.fake_user_c.name, ] verifylist = [ - ('name', identity_fakes.user_name), + ('name', self.fake_user_c.name), ('password_prompt', True) ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -163,7 +165,7 @@ class TestUserCreate(TestUser): } # UserManager.create(name, password, email, tenant_id=, enabled=) self.users_mock.create.assert_called_with( - identity_fakes.user_name, + self.fake_user_c.name, 'abc123', None, **kwargs @@ -175,10 +177,10 @@ class TestUserCreate(TestUser): def test_user_create_email(self): arglist = [ '--email', 'barney@example.com', - identity_fakes.user_name, + self.fake_user_c.name, ] verifylist = [ - ('name', identity_fakes.user_name), + ('name', self.fake_user_c.name), ('email', 'barney@example.com'), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -195,7 +197,7 @@ class TestUserCreate(TestUser): } # UserManager.create(name, password, email, tenant_id=, enabled=) self.users_mock.create.assert_called_with( - identity_fakes.user_name, + self.fake_user_c.name, None, 'barney@example.com', **kwargs @@ -206,27 +208,22 @@ class TestUserCreate(TestUser): def test_user_create_project(self): # Return the new project - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT_2), - loaded=True, - ) + self.projects_mock.get.return_value = self.fake_project_c + # Set up to return an updated user - USER_2 = copy.deepcopy(identity_fakes.USER) - USER_2['tenantId'] = identity_fakes.PROJECT_2['id'] - self.users_mock.create.return_value = fakes.FakeResource( - None, - USER_2, - loaded=True, - ) + attr = { + 'tenantId': self.fake_project_c.id, + } + user_2 = identity_fakes.FakeUser.create_one_user(attr) + self.users_mock.create.return_value = user_2 arglist = [ - '--project', identity_fakes.PROJECT_2['name'], - identity_fakes.user_name, + '--project', self.fake_project_c.name, + user_2.name, ] verifylist = [ - ('name', identity_fakes.user_name), - ('project', identity_fakes.PROJECT_2['name']), + ('name', user_2.name), + ('project', self.fake_project_c.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -238,11 +235,11 @@ class TestUserCreate(TestUser): # Set expected values kwargs = { 'enabled': True, - 'tenant_id': identity_fakes.PROJECT_2['id'], + 'tenant_id': self.fake_project_c.id, } # UserManager.create(name, password, email, tenant_id=, enabled=) self.users_mock.create.assert_called_with( - identity_fakes.user_name, + user_2.name, None, None, **kwargs @@ -250,21 +247,21 @@ class TestUserCreate(TestUser): self.assertEqual(self.columns, columns) datalist = ( - identity_fakes.user_email, + user_2.email, True, - identity_fakes.user_id, - identity_fakes.user_name, - identity_fakes.PROJECT_2['id'], + user_2.id, + user_2.name, + self.fake_project_c.id, ) self.assertEqual(datalist, data) def test_user_create_enable(self): arglist = [ '--enable', - identity_fakes.user_name, + self.fake_user_c.name, ] verifylist = [ - ('name', identity_fakes.user_name), + ('name', self.fake_user_c.name), ('enable', True), ('disable', False), ] @@ -282,7 +279,7 @@ class TestUserCreate(TestUser): } # UserManager.create(name, password, email, tenant_id=, enabled=) self.users_mock.create.assert_called_with( - identity_fakes.user_name, + self.fake_user_c.name, None, None, **kwargs @@ -294,10 +291,10 @@ class TestUserCreate(TestUser): def test_user_create_disable(self): arglist = [ '--disable', - identity_fakes.user_name, + self.fake_user_c.name, ] verifylist = [ - ('name', identity_fakes.user_name), + ('name', self.fake_user_c.name), ('enable', False), ('disable', True), ] @@ -315,7 +312,7 @@ class TestUserCreate(TestUser): } # UserManager.create(name, password, email, tenant_id=, enabled=) self.users_mock.create.assert_called_with( - identity_fakes.user_name, + self.fake_user_c.name, None, None, **kwargs @@ -331,18 +328,14 @@ class TestUserCreate(TestUser): # need to make this throw an exception... self.users_mock.create.side_effect = _raise_conflict - self.users_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ) + self.users_mock.get.return_value = self.fake_user_c arglist = [ '--or-show', - identity_fakes.user_name, + self.fake_user_c.name, ] verifylist = [ - ('name', identity_fakes.user_name), + ('name', self.fake_user_c.name), ('or_show', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -353,7 +346,7 @@ class TestUserCreate(TestUser): columns, data = self.cmd.take_action(parsed_args) # UserManager.create(name, password, email, tenant_id=, enabled=) - self.users_mock.get.assert_called_with(identity_fakes.user_name) + self.users_mock.get.assert_called_with(self.fake_user_c.name) self.assertEqual(self.columns, columns) self.assertEqual(self.datalist, data) @@ -361,10 +354,10 @@ class TestUserCreate(TestUser): def test_user_create_or_show_not_exists(self): arglist = [ '--or-show', - identity_fakes.user_name, + self.fake_user_c.name, ] verifylist = [ - ('name', identity_fakes.user_name), + ('name', self.fake_user_c.name), ('or_show', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -381,7 +374,7 @@ class TestUserCreate(TestUser): } # UserManager.create(name, password, email, tenant_id=, enabled=) self.users_mock.create.assert_called_with( - identity_fakes.user_name, + self.fake_user_c.name, None, None, **kwargs @@ -396,11 +389,7 @@ class TestUserDelete(TestUser): super(TestUserDelete, self).setUp() # This is the return value for utils.find_resource() - self.users_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ) + self.users_mock.get.return_value = self.fake_user self.users_mock.delete.return_value = None # Get the command object to test @@ -408,57 +397,47 @@ class TestUserDelete(TestUser): def test_user_delete_no_options(self): arglist = [ - identity_fakes.user_id, + self.fake_user.id, ] verifylist = [ - ('users', [identity_fakes.user_id]), + ('users', [self.fake_user.id]), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) self.users_mock.delete.assert_called_with( - identity_fakes.user_id, + self.fake_user.id, ) self.assertIsNone(result) class TestUserList(TestUser): + fake_project_l = identity_fakes.FakeProject.create_one_project() + attr = { + 'tenantId': fake_project_l.id, + } + fake_user_l = identity_fakes.FakeUser.create_one_user(attr) + columns = ( 'ID', 'Name', ) datalist = ( ( - identity_fakes.user_id, - identity_fakes.user_name, + fake_user_l.id, + fake_user_l.name, ), ) def setUp(self): super(TestUserList, self).setUp() - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT_2), - loaded=True, - ) - self.projects_mock.list.return_value = [ - fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT), - loaded=True, - ), - ] + self.projects_mock.get.return_value = self.fake_project_l + self.projects_mock.list.return_value = [self.fake_project_l] - self.users_mock.list.return_value = [ - fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ), - ] + self.users_mock.list.return_value = [self.fake_user_l] # Get the command object to test self.cmd = user.ListUser(self.app, None) @@ -480,13 +459,13 @@ class TestUserList(TestUser): def test_user_list_project(self): arglist = [ - '--project', identity_fakes.project_id, + '--project', self.fake_project_l.id, ] verifylist = [ - ('project', identity_fakes.project_id), + ('project', self.fake_project_l.id), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) - project_id = identity_fakes.PROJECT_2['id'] + project_id = self.fake_project_l.id # In base command class Lister in cliff, abstract method take_action() # returns a tuple containing the column names and an iterable @@ -517,10 +496,10 @@ class TestUserList(TestUser): collist = ('ID', 'Name', 'Project', 'Email', 'Enabled') self.assertEqual(collist, columns) datalist = (( - identity_fakes.user_id, - identity_fakes.user_name, - identity_fakes.project_name, - identity_fakes.user_email, + self.fake_user_l.id, + self.fake_user_l.name, + self.fake_project_l.name, + self.fake_user_l.email, True, ), ) self.assertEqual(datalist, tuple(data)) @@ -531,23 +510,15 @@ class TestUserSet(TestUser): def setUp(self): super(TestUserSet, self).setUp() - self.projects_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.PROJECT), - loaded=True, - ) - self.users_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ) + self.projects_mock.get.return_value = self.fake_project + self.users_mock.get.return_value = self.fake_user # Get the command object to test self.cmd = user.SetUser(self.app, None) def test_user_set_no_options(self): arglist = [ - identity_fakes.user_name, + self.fake_user.name, ] verifylist = [ ('name', None), @@ -556,7 +527,7 @@ class TestUserSet(TestUser): ('project', None), ('enable', False), ('disable', False), - ('user', identity_fakes.user_name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -588,7 +559,7 @@ class TestUserSet(TestUser): def test_user_set_name(self): arglist = [ '--name', 'qwerty', - identity_fakes.user_name, + self.fake_user.name, ] verifylist = [ ('name', 'qwerty'), @@ -597,7 +568,7 @@ class TestUserSet(TestUser): ('project', None), ('enable', False), ('disable', False), - ('user', identity_fakes.user_name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -610,7 +581,7 @@ class TestUserSet(TestUser): } # UserManager.update(user, **kwargs) self.users_mock.update.assert_called_with( - identity_fakes.user_id, + self.fake_user.id, **kwargs ) self.assertIsNone(result) @@ -618,7 +589,7 @@ class TestUserSet(TestUser): def test_user_set_password(self): arglist = [ '--password', 'secret', - identity_fakes.user_name, + self.fake_user.name, ] verifylist = [ ('name', None), @@ -628,7 +599,7 @@ class TestUserSet(TestUser): ('project', None), ('enable', False), ('disable', False), - ('user', identity_fakes.user_name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -636,7 +607,7 @@ class TestUserSet(TestUser): # UserManager.update_password(user, password) self.users_mock.update_password.assert_called_with( - identity_fakes.user_id, + self.fake_user.id, 'secret', ) self.assertIsNone(result) @@ -644,7 +615,7 @@ class TestUserSet(TestUser): def test_user_set_password_prompt(self): arglist = [ '--password-prompt', - identity_fakes.user_name, + self.fake_user.name, ] verifylist = [ ('name', None), @@ -654,7 +625,7 @@ class TestUserSet(TestUser): ('project', None), ('enable', False), ('disable', False), - ('user', identity_fakes.user_name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -665,7 +636,7 @@ class TestUserSet(TestUser): # UserManager.update_password(user, password) self.users_mock.update_password.assert_called_with( - identity_fakes.user_id, + self.fake_user.id, 'abc123', ) self.assertIsNone(result) @@ -673,7 +644,7 @@ class TestUserSet(TestUser): def test_user_set_email(self): arglist = [ '--email', 'barney@example.com', - identity_fakes.user_name, + self.fake_user.name, ] verifylist = [ ('name', None), @@ -682,7 +653,7 @@ class TestUserSet(TestUser): ('project', None), ('enable', False), ('disable', False), - ('user', identity_fakes.user_name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -695,24 +666,24 @@ class TestUserSet(TestUser): } # UserManager.update(user, **kwargs) self.users_mock.update.assert_called_with( - identity_fakes.user_id, + self.fake_user.id, **kwargs ) self.assertIsNone(result) def test_user_set_project(self): arglist = [ - '--project', identity_fakes.project_id, - identity_fakes.user_name, + '--project', self.fake_project.id, + self.fake_user.name, ] verifylist = [ ('name', None), ('password', None), ('email', None), - ('project', identity_fakes.project_id), + ('project', self.fake_project.id), ('enable', False), ('disable', False), - ('user', identity_fakes.user_name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -720,15 +691,15 @@ class TestUserSet(TestUser): # UserManager.update_tenant(user, tenant) self.users_mock.update_tenant.assert_called_with( - identity_fakes.user_id, - identity_fakes.project_id, + self.fake_user.id, + self.fake_project.id, ) self.assertIsNone(result) def test_user_set_enable(self): arglist = [ '--enable', - identity_fakes.user_name, + self.fake_user.name, ] verifylist = [ ('name', None), @@ -737,7 +708,7 @@ class TestUserSet(TestUser): ('project', None), ('enable', True), ('disable', False), - ('user', identity_fakes.user_name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -749,7 +720,7 @@ class TestUserSet(TestUser): } # UserManager.update(user, **kwargs) self.users_mock.update.assert_called_with( - identity_fakes.user_id, + self.fake_user.id, **kwargs ) self.assertIsNone(result) @@ -757,7 +728,7 @@ class TestUserSet(TestUser): def test_user_set_disable(self): arglist = [ '--disable', - identity_fakes.user_name, + self.fake_user.name, ] verifylist = [ ('name', None), @@ -766,7 +737,7 @@ class TestUserSet(TestUser): ('project', None), ('enable', False), ('disable', True), - ('user', identity_fakes.user_name), + ('user', self.fake_user.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -778,7 +749,7 @@ class TestUserSet(TestUser): } # UserManager.update(user, **kwargs) self.users_mock.update.assert_called_with( - identity_fakes.user_id, + self.fake_user.id, **kwargs ) self.assertIsNone(result) @@ -789,21 +760,17 @@ class TestUserShow(TestUser): def setUp(self): super(TestUserShow, self).setUp() - self.users_mock.get.return_value = fakes.FakeResource( - None, - copy.deepcopy(identity_fakes.USER), - loaded=True, - ) + self.users_mock.get.return_value = self.fake_user # Get the command object to test self.cmd = user.ShowUser(self.app, None) def test_user_show(self): arglist = [ - identity_fakes.user_id, + self.fake_user.id, ] verifylist = [ - ('user', identity_fakes.user_id), + ('user', self.fake_user.id), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -812,15 +779,15 @@ class TestUserShow(TestUser): # data to be shown. columns, data = self.cmd.take_action(parsed_args) - self.users_mock.get.assert_called_with(identity_fakes.user_id) + self.users_mock.get.assert_called_with(self.fake_user.id) collist = ('email', 'enabled', 'id', 'name', 'project_id') self.assertEqual(collist, columns) datalist = ( - identity_fakes.user_email, + self.fake_user.email, True, - identity_fakes.user_id, - identity_fakes.user_name, - identity_fakes.project_id, + self.fake_user.id, + self.fake_user.name, + self.fake_project.id, ) self.assertEqual(datalist, data) diff --git a/openstackclient/tests/volume/v2/test_backup.py b/openstackclient/tests/volume/v2/test_backup.py index 8a151a91..ba0f1c18 100644 --- a/openstackclient/tests/volume/v2/test_backup.py +++ b/openstackclient/tests/volume/v2/test_backup.py @@ -72,12 +72,14 @@ class TestBackupCreate(TestBackup): "--name", self.new_backup.name, "--description", self.new_backup.description, "--container", self.new_backup.container, + "--force", self.new_backup.volume_id, ] verifylist = [ ("name", self.new_backup.name), ("description", self.new_backup.description), ("container", self.new_backup.container), + ("force", True), ("volume", self.new_backup.volume_id), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -88,7 +90,8 @@ class TestBackupCreate(TestBackup): self.new_backup.volume_id, container=self.new_backup.container, name=self.new_backup.name, - description=self.new_backup.description + description=self.new_backup.description, + force=True, ) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -112,7 +115,8 @@ class TestBackupCreate(TestBackup): self.new_backup.volume_id, container=self.new_backup.container, name=None, - description=self.new_backup.description + description=self.new_backup.description, + force=False, ) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) diff --git a/openstackclient/volume/v1/backup.py b/openstackclient/volume/v1/backup.py index 212c74ef..5f34a2c5 100644 --- a/openstackclient/volume/v1/backup.py +++ b/openstackclient/volume/v1/backup.py @@ -76,7 +76,7 @@ class DeleteBackup(command.Command): 'backups', metavar='<backup>', nargs="+", - help=_('Backup(s) to delete (ID only)'), + help=_('Backup(s) to delete (name or ID)'), ) return parser @@ -150,7 +150,7 @@ class RestoreBackup(command.Command): parser.add_argument( 'backup', metavar='<backup>', - help=_('Backup to restore (ID only)') + help=_('Backup to restore (name or ID)') ) parser.add_argument( 'volume', @@ -177,7 +177,7 @@ class ShowBackup(command.ShowOne): parser.add_argument( 'backup', metavar='<backup>', - help=_('Backup to display (ID only)') + help=_('Backup to display (name or ID)') ) return parser diff --git a/openstackclient/volume/v2/backup.py b/openstackclient/volume/v2/backup.py index 6a44e30c..519913a9 100644 --- a/openstackclient/volume/v2/backup.py +++ b/openstackclient/volume/v2/backup.py @@ -48,6 +48,12 @@ class CreateBackup(command.ShowOne): metavar="<container>", help=_("Optional backup container name") ) + parser.add_argument( + '--force', + action='store_true', + default=False, + help=_("Allow to back up an in-use volume") + ) return parser def take_action(self, parsed_args): @@ -58,7 +64,8 @@ class CreateBackup(command.ShowOne): volume_id, container=parsed_args.container, name=parsed_args.name, - description=parsed_args.description + description=parsed_args.description, + force=parsed_args.force, ) backup._info.pop("links", None) return zip(*sorted(six.iteritems(backup._info))) @@ -147,7 +154,7 @@ class RestoreBackup(command.ShowOne): parser.add_argument( "backup", metavar="<backup>", - help=_("Backup to restore (ID only)") + help=_("Backup to restore (name or ID)") ) parser.add_argument( "volume", |
