python-openstackclient 7.4.0__py3-none-any.whl → 8.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openstackclient/common/availability_zone.py +3 -6
- openstackclient/common/clientmanager.py +2 -1
- openstackclient/common/envvars.py +57 -0
- openstackclient/common/extension.py +3 -11
- openstackclient/common/limits.py +1 -1
- openstackclient/common/project_cleanup.py +3 -2
- openstackclient/common/quota.py +54 -28
- openstackclient/compute/client.py +7 -5
- openstackclient/compute/v2/agent.py +5 -5
- openstackclient/compute/v2/aggregate.py +17 -15
- openstackclient/compute/v2/console.py +10 -4
- openstackclient/compute/v2/console_connection.py +48 -0
- openstackclient/compute/v2/flavor.py +14 -18
- openstackclient/compute/v2/host.py +3 -3
- openstackclient/compute/v2/hypervisor.py +10 -4
- openstackclient/compute/v2/hypervisor_stats.py +1 -1
- openstackclient/compute/v2/keypair.py +18 -13
- openstackclient/compute/v2/server.py +144 -121
- openstackclient/compute/v2/server_backup.py +1 -1
- openstackclient/compute/v2/server_event.py +8 -17
- openstackclient/compute/v2/server_group.py +6 -6
- openstackclient/compute/v2/server_image.py +1 -1
- openstackclient/compute/v2/server_migration.py +6 -6
- openstackclient/compute/v2/server_volume.py +4 -4
- openstackclient/compute/v2/service.py +9 -13
- openstackclient/compute/v2/usage.py +4 -6
- openstackclient/identity/client.py +2 -4
- openstackclient/identity/common.py +95 -17
- openstackclient/identity/v2_0/ec2creds.py +4 -3
- openstackclient/identity/v2_0/endpoint.py +12 -10
- openstackclient/identity/v2_0/project.py +6 -6
- openstackclient/identity/v2_0/role.py +1 -1
- openstackclient/identity/v2_0/service.py +7 -7
- openstackclient/identity/v2_0/user.py +6 -21
- openstackclient/identity/v3/access_rule.py +2 -5
- openstackclient/identity/v3/application_credential.py +2 -2
- openstackclient/identity/v3/consumer.py +4 -3
- openstackclient/identity/v3/credential.py +6 -7
- openstackclient/identity/v3/domain.py +63 -44
- openstackclient/identity/v3/ec2creds.py +4 -3
- openstackclient/identity/v3/endpoint.py +104 -88
- openstackclient/identity/v3/endpoint_group.py +1 -1
- openstackclient/identity/v3/group.py +116 -72
- openstackclient/identity/v3/identity_provider.py +1 -2
- openstackclient/identity/v3/limit.py +4 -9
- openstackclient/identity/v3/mapping.py +4 -3
- openstackclient/identity/v3/policy.py +5 -8
- openstackclient/identity/v3/project.py +23 -6
- openstackclient/identity/v3/region.py +2 -5
- openstackclient/identity/v3/registered_limit.py +4 -8
- openstackclient/identity/v3/role.py +15 -16
- openstackclient/identity/v3/service.py +8 -8
- openstackclient/identity/v3/service_provider.py +3 -6
- openstackclient/identity/v3/tag.py +2 -2
- openstackclient/identity/v3/token.py +1 -2
- openstackclient/identity/v3/trust.py +74 -25
- openstackclient/identity/v3/user.py +47 -11
- openstackclient/image/client.py +7 -5
- openstackclient/image/v1/image.py +11 -15
- openstackclient/image/v2/cache.py +2 -4
- openstackclient/image/v2/image.py +41 -48
- openstackclient/image/v2/metadef_namespaces.py +4 -3
- openstackclient/image/v2/metadef_resource_type_association.py +1 -2
- openstackclient/image/v2/metadef_resource_types.py +1 -2
- openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +9 -1370
- openstackclient/network/client.py +4 -16
- openstackclient/network/common.py +16 -12
- openstackclient/network/utils.py +3 -3
- openstackclient/network/v2/address_group.py +5 -9
- openstackclient/network/v2/address_scope.py +2 -3
- openstackclient/network/v2/default_security_group_rule.py +1 -2
- openstackclient/network/v2/floating_ip.py +69 -47
- openstackclient/network/v2/floating_ip_port_forwarding.py +7 -7
- openstackclient/network/v2/ip_availability.py +1 -2
- openstackclient/network/v2/l3_conntrack_helper.py +8 -12
- openstackclient/network/v2/local_ip.py +24 -26
- openstackclient/network/v2/local_ip_association.py +4 -5
- openstackclient/network/v2/ndp_proxy.py +9 -10
- openstackclient/network/v2/network.py +12 -16
- openstackclient/network/v2/network_agent.py +29 -37
- openstackclient/network/v2/network_auto_allocated_topology.py +4 -5
- openstackclient/network/v2/network_flavor.py +1 -1
- openstackclient/network/v2/network_flavor_profile.py +5 -5
- openstackclient/network/v2/network_meter.py +3 -3
- openstackclient/network/v2/network_meter_rule.py +5 -8
- openstackclient/network/v2/network_qos_policy.py +4 -4
- openstackclient/network/v2/network_qos_rule.py +7 -16
- openstackclient/network/v2/network_rbac.py +4 -4
- openstackclient/network/v2/network_segment.py +6 -7
- openstackclient/network/v2/network_segment_range.py +16 -20
- openstackclient/network/v2/network_trunk.py +24 -16
- openstackclient/network/v2/port.py +28 -29
- openstackclient/network/v2/router.py +53 -42
- openstackclient/network/v2/security_group.py +13 -19
- openstackclient/network/v2/security_group_rule.py +10 -11
- openstackclient/network/v2/subnet.py +31 -30
- openstackclient/network/v2/subnet_pool.py +4 -4
- openstackclient/object/client.py +2 -3
- openstackclient/object/v1/container.py +2 -3
- openstackclient/object/v1/object.py +2 -9
- openstackclient/shell.py +22 -5
- openstackclient/tests/functional/base.py +7 -3
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +12 -6
- openstackclient/tests/functional/compute/v2/test_keypair.py +41 -5
- openstackclient/tests/functional/compute/v2/test_server.py +2 -3
- openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
- openstackclient/tests/functional/identity/v2/test_user.py +1 -1
- openstackclient/tests/functional/identity/v3/common.py +3 -8
- openstackclient/tests/functional/identity/v3/test_application_credential.py +10 -10
- openstackclient/tests/functional/identity/v3/test_endpoint.py +3 -3
- openstackclient/tests/functional/identity/v3/test_group.py +3 -3
- openstackclient/tests/functional/identity/v3/test_idp.py +3 -7
- openstackclient/tests/functional/identity/v3/test_limit.py +4 -4
- openstackclient/tests/functional/identity/v3/test_project.py +5 -14
- openstackclient/tests/functional/identity/v3/test_region.py +1 -3
- openstackclient/tests/functional/identity/v3/test_registered_limit.py +3 -3
- openstackclient/tests/functional/identity/v3/test_role.py +1 -1
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +13 -31
- openstackclient/tests/functional/identity/v3/test_service_provider.py +3 -7
- openstackclient/tests/functional/identity/v3/test_user.py +8 -8
- openstackclient/tests/functional/network/v2/common.py +7 -3
- openstackclient/tests/functional/network/v2/test_address_group.py +4 -0
- openstackclient/tests/functional/network/v2/test_l3_conntrack_helper.py +15 -11
- openstackclient/tests/functional/network/v2/test_local_ip.py +4 -0
- openstackclient/tests/functional/network/v2/test_network_meter_rule.py +2 -2
- openstackclient/tests/functional/network/v2/test_network_ndp_proxy.py +2 -3
- openstackclient/tests/functional/network/v2/test_network_rbac.py +2 -2
- openstackclient/tests/functional/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/functional/network/v2/test_port.py +17 -7
- openstackclient/tests/functional/network/v2/test_router.py +42 -0
- openstackclient/tests/functional/network/v2/test_subnet_pool.py +4 -0
- openstackclient/tests/unit/api/test_compute_v2.py +67 -87
- openstackclient/tests/unit/common/test_availability_zone.py +6 -14
- openstackclient/tests/unit/common/test_command.py +1 -1
- openstackclient/tests/unit/common/test_extension.py +5 -7
- openstackclient/tests/unit/common/test_limits.py +1 -1
- openstackclient/tests/unit/common/test_project_cleanup.py +5 -6
- openstackclient/tests/unit/common/test_quota.py +51 -28
- openstackclient/tests/unit/compute/v2/fakes.py +85 -315
- openstackclient/tests/unit/compute/v2/test_agent.py +16 -16
- openstackclient/tests/unit/compute/v2/test_aggregate.py +56 -60
- openstackclient/tests/unit/compute/v2/test_console.py +34 -17
- openstackclient/tests/unit/compute/v2/test_console_connection.py +72 -0
- openstackclient/tests/unit/compute/v2/test_flavor.py +72 -72
- openstackclient/tests/unit/compute/v2/test_host.py +8 -8
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +22 -30
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
- openstackclient/tests/unit/compute/v2/test_keypair.py +36 -29
- openstackclient/tests/unit/compute/v2/test_server.py +693 -606
- openstackclient/tests/unit/compute/v2/test_server_backup.py +36 -77
- openstackclient/tests/unit/compute/v2/test_server_event.py +18 -20
- openstackclient/tests/unit/compute/v2/test_server_group.py +25 -31
- openstackclient/tests/unit/compute/v2/test_server_image.py +37 -78
- openstackclient/tests/unit/compute/v2/test_server_migration.py +41 -41
- openstackclient/tests/unit/compute/v2/test_server_volume.py +12 -12
- openstackclient/tests/unit/compute/v2/test_service.py +39 -45
- openstackclient/tests/unit/compute/v2/test_usage.py +5 -5
- openstackclient/tests/unit/identity/v2_0/fakes.py +1 -1
- openstackclient/tests/unit/identity/v3/test_access_rule.py +1 -3
- openstackclient/tests/unit/identity/v3/test_application_credential.py +48 -26
- openstackclient/tests/unit/identity/v3/test_domain.py +115 -105
- openstackclient/tests/unit/identity/v3/test_endpoint.py +167 -172
- openstackclient/tests/unit/identity/v3/test_group.py +353 -202
- openstackclient/tests/unit/identity/v3/test_mappings.py +2 -2
- openstackclient/tests/unit/identity/v3/test_project.py +16 -0
- openstackclient/tests/unit/identity/v3/test_trust.py +5 -2
- openstackclient/tests/unit/identity/v3/test_user.py +102 -6
- openstackclient/tests/unit/image/v1/fakes.py +2 -2
- openstackclient/tests/unit/image/v1/test_image.py +8 -9
- openstackclient/tests/unit/image/v2/test_image.py +84 -46
- openstackclient/tests/unit/integ/cli/test_shell.py +1 -2
- openstackclient/tests/unit/network/test_common.py +2 -2
- openstackclient/tests/unit/network/v2/fakes.py +405 -485
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +8 -14
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +62 -54
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +1 -1
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +2 -2
- openstackclient/tests/unit/network/v2/test_ndp_proxy.py +1 -3
- openstackclient/tests/unit/network/v2/test_network.py +4 -4
- openstackclient/tests/unit/network/v2/test_network_agent.py +15 -29
- openstackclient/tests/unit/network/v2/test_network_compute.py +11 -11
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +16 -19
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +79 -152
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +4 -6
- openstackclient/tests/unit/network/v2/test_network_rbac.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_trunk.py +2 -2
- openstackclient/tests/unit/network/v2/test_port.py +21 -22
- openstackclient/tests/unit/network/v2/test_router.py +130 -51
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +11 -19
- openstackclient/tests/unit/network/v2/test_security_group_network.py +25 -27
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +15 -17
- openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +33 -39
- openstackclient/tests/unit/object/v1/test_object_all.py +4 -3
- openstackclient/tests/unit/test_shell.py +16 -13
- openstackclient/tests/unit/volume/v2/fakes.py +1 -2
- openstackclient/tests/unit/volume/v2/test_service.py +57 -91
- openstackclient/tests/unit/volume/v2/test_volume.py +109 -106
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +141 -148
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +293 -283
- openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +1 -1
- openstackclient/tests/unit/volume/v3/fakes.py +2 -8
- openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +61 -71
- openstackclient/tests/unit/volume/v3/test_service.py +221 -141
- openstackclient/tests/unit/volume/v3/test_volume.py +131 -120
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +4 -4
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +198 -203
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +683 -49
- openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +1 -1
- openstackclient/volume/client.py +1 -3
- openstackclient/volume/v2/consistency_group.py +4 -8
- openstackclient/volume/v2/consistency_group_snapshot.py +1 -2
- openstackclient/volume/v2/qos_specs.py +1 -2
- openstackclient/volume/v2/service.py +41 -38
- openstackclient/volume/v2/volume.py +71 -53
- openstackclient/volume/v2/volume_backup.py +15 -10
- openstackclient/volume/v2/volume_snapshot.py +129 -93
- openstackclient/volume/v2/volume_transfer_request.py +0 -3
- openstackclient/volume/v2/volume_type.py +10 -21
- openstackclient/volume/v3/block_storage_cluster.py +3 -3
- openstackclient/volume/v3/block_storage_log_level.py +22 -28
- openstackclient/volume/v3/block_storage_manage.py +1 -3
- openstackclient/volume/v3/service.py +105 -14
- openstackclient/volume/v3/volume.py +218 -58
- openstackclient/volume/v3/volume_attachment.py +3 -2
- openstackclient/volume/v3/volume_backup.py +31 -27
- openstackclient/volume/v3/volume_group.py +2 -1
- openstackclient/volume/v3/volume_group_snapshot.py +2 -1
- openstackclient/volume/v3/volume_snapshot.py +489 -13
- openstackclient/volume/v3/volume_type.py +10 -21
- {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/AUTHORS +11 -0
- python_openstackclient-8.1.0.dist-info/METADATA +264 -0
- {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/RECORD +238 -259
- {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/entry_points.txt +7 -47
- python_openstackclient-8.1.0.dist-info/pbr.json +1 -0
- openstackclient/tests/functional/volume/v1/__init__.py +0 -0
- openstackclient/tests/functional/volume/v1/common.py +0 -35
- openstackclient/tests/functional/volume/v1/test_qos.py +0 -100
- openstackclient/tests/functional/volume/v1/test_service.py +0 -76
- openstackclient/tests/functional/volume/v1/test_snapshot.py +0 -232
- openstackclient/tests/functional/volume/v1/test_transfer_request.py +0 -111
- openstackclient/tests/functional/volume/v1/test_volume.py +0 -228
- openstackclient/tests/functional/volume/v1/test_volume_type.py +0 -213
- openstackclient/tests/unit/volume/v1/__init__.py +0 -0
- openstackclient/tests/unit/volume/v1/fakes.py +0 -615
- openstackclient/tests/unit/volume/v1/test_qos_specs.py +0 -471
- openstackclient/tests/unit/volume/v1/test_service.py +0 -295
- openstackclient/tests/unit/volume/v1/test_transfer_request.py +0 -380
- openstackclient/tests/unit/volume/v1/test_type.py +0 -633
- openstackclient/tests/unit/volume/v1/test_volume.py +0 -1447
- openstackclient/tests/unit/volume/v1/test_volume_backup.py +0 -435
- openstackclient/volume/v1/__init__.py +0 -0
- openstackclient/volume/v1/qos_specs.py +0 -377
- openstackclient/volume/v1/service.py +0 -136
- openstackclient/volume/v1/volume.py +0 -734
- openstackclient/volume/v1/volume_backup.py +0 -302
- openstackclient/volume/v1/volume_snapshot.py +0 -433
- openstackclient/volume/v1/volume_transfer_request.py +0 -200
- openstackclient/volume/v1/volume_type.py +0 -520
- python_openstackclient-7.4.0.dist-info/METADATA +0 -172
- python_openstackclient-7.4.0.dist-info/pbr.json +0 -1
- {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/LICENSE +0 -0
- {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/top_level.txt +0 -0
|
@@ -14,45 +14,33 @@
|
|
|
14
14
|
from unittest import mock
|
|
15
15
|
from unittest.mock import call
|
|
16
16
|
|
|
17
|
-
from
|
|
17
|
+
from openstack import exceptions as sdk_exc
|
|
18
|
+
from openstack.identity.v3 import domain as _domain
|
|
19
|
+
from openstack.identity.v3 import group as _group
|
|
20
|
+
from openstack.identity.v3 import user as _user
|
|
21
|
+
from openstack.test import fakes as sdk_fakes
|
|
18
22
|
from osc_lib import exceptions
|
|
19
|
-
from osc_lib import utils
|
|
20
23
|
|
|
21
24
|
from openstackclient.identity.v3 import group
|
|
22
25
|
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
|
|
23
26
|
|
|
24
27
|
|
|
25
|
-
class
|
|
28
|
+
class TestGroupAddUser(identity_fakes.TestIdentityv3):
|
|
26
29
|
def setUp(self):
|
|
27
30
|
super().setUp()
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
self.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# Get a shortcut to the GroupManager Mock
|
|
34
|
-
self.groups_mock = self.identity_client.groups
|
|
35
|
-
self.groups_mock.reset_mock()
|
|
36
|
-
|
|
37
|
-
# Get a shortcut to the UserManager Mock
|
|
38
|
-
self.users_mock = self.identity_client.users
|
|
39
|
-
self.users_mock.reset_mock()
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
class TestGroupAddUser(TestGroup):
|
|
43
|
-
_group = identity_fakes.FakeGroup.create_one_group()
|
|
44
|
-
users = identity_fakes.FakeUser.create_users(count=2)
|
|
45
|
-
|
|
46
|
-
def setUp(self):
|
|
47
|
-
super().setUp()
|
|
32
|
+
self._group = sdk_fakes.generate_fake_resource(_group.Group)
|
|
33
|
+
self.users = tuple(
|
|
34
|
+
sdk_fakes.generate_fake_resources(_user.User, count=2)
|
|
35
|
+
)
|
|
48
36
|
|
|
49
|
-
self.
|
|
50
|
-
self.
|
|
51
|
-
self.users_mock.add_to_group.return_value = None
|
|
37
|
+
self.identity_sdk_client.find_group.return_value = self._group
|
|
38
|
+
self.identity_sdk_client.add_user_to_group.return_value = None
|
|
52
39
|
|
|
53
40
|
self.cmd = group.AddUserToGroup(self.app, None)
|
|
54
41
|
|
|
55
42
|
def test_group_add_user(self):
|
|
43
|
+
self.identity_sdk_client.find_user.return_value = self.users[0]
|
|
56
44
|
arglist = [
|
|
57
45
|
self._group.name,
|
|
58
46
|
self.users[0].name,
|
|
@@ -64,12 +52,16 @@ class TestGroupAddUser(TestGroup):
|
|
|
64
52
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
65
53
|
|
|
66
54
|
result = self.cmd.take_action(parsed_args)
|
|
67
|
-
self.
|
|
55
|
+
self.identity_sdk_client.add_user_to_group.assert_called_once_with(
|
|
68
56
|
self.users[0].id, self._group.id
|
|
69
57
|
)
|
|
70
58
|
self.assertIsNone(result)
|
|
71
59
|
|
|
72
60
|
def test_group_add_multi_users(self):
|
|
61
|
+
self.identity_sdk_client.find_user.side_effect = [
|
|
62
|
+
self.users[0],
|
|
63
|
+
self.users[1],
|
|
64
|
+
]
|
|
73
65
|
arglist = [
|
|
74
66
|
self._group.name,
|
|
75
67
|
self.users[0].name,
|
|
@@ -86,13 +78,13 @@ class TestGroupAddUser(TestGroup):
|
|
|
86
78
|
call(self.users[0].id, self._group.id),
|
|
87
79
|
call(self.users[1].id, self._group.id),
|
|
88
80
|
]
|
|
89
|
-
self.
|
|
81
|
+
self.identity_sdk_client.add_user_to_group.assert_has_calls(calls)
|
|
90
82
|
self.assertIsNone(result)
|
|
91
83
|
|
|
92
84
|
@mock.patch.object(group.LOG, 'error')
|
|
93
85
|
def test_group_add_user_with_error(self, mock_error):
|
|
94
|
-
self.
|
|
95
|
-
|
|
86
|
+
self.identity_sdk_client.add_user_to_group.side_effect = [
|
|
87
|
+
sdk_exc.ResourceNotFound,
|
|
96
88
|
None,
|
|
97
89
|
]
|
|
98
90
|
arglist = [
|
|
@@ -111,20 +103,20 @@ class TestGroupAddUser(TestGroup):
|
|
|
111
103
|
except exceptions.CommandError as e:
|
|
112
104
|
msg = f"1 of 2 users not added to group {self._group.name}."
|
|
113
105
|
self.assertEqual(msg, str(e))
|
|
114
|
-
msg = f"{self.users[0].name} not added to group {self._group.name}: "
|
|
106
|
+
msg = f"{self.users[0].name} not added to group {self._group.name}: {str(sdk_exc.ResourceNotFound())}"
|
|
115
107
|
mock_error.assert_called_once_with(msg)
|
|
116
108
|
|
|
117
109
|
|
|
118
|
-
class TestGroupCheckUser(
|
|
119
|
-
group = identity_fakes.FakeGroup.create_one_group()
|
|
120
|
-
user = identity_fakes.FakeUser.create_one_user()
|
|
121
|
-
|
|
110
|
+
class TestGroupCheckUser(identity_fakes.TestIdentityv3):
|
|
122
111
|
def setUp(self):
|
|
123
112
|
super().setUp()
|
|
124
113
|
|
|
125
|
-
self.
|
|
126
|
-
self.
|
|
127
|
-
|
|
114
|
+
self.group = sdk_fakes.generate_fake_resource(_group.Group)
|
|
115
|
+
self.user = sdk_fakes.generate_fake_resource(_user.User)
|
|
116
|
+
|
|
117
|
+
self.identity_sdk_client.find_group.return_value = self.group
|
|
118
|
+
self.identity_sdk_client.find_user.return_value = self.user
|
|
119
|
+
self.identity_sdk_client.check_user_in_group.return_value = True
|
|
128
120
|
|
|
129
121
|
self.cmd = group.CheckUserInGroup(self.app, None)
|
|
130
122
|
|
|
@@ -140,16 +132,15 @@ class TestGroupCheckUser(TestGroup):
|
|
|
140
132
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
141
133
|
|
|
142
134
|
result = self.cmd.take_action(parsed_args)
|
|
143
|
-
self.
|
|
135
|
+
self.identity_sdk_client.check_user_in_group.assert_called_once_with(
|
|
144
136
|
self.user.id, self.group.id
|
|
145
137
|
)
|
|
146
138
|
self.assertIsNone(result)
|
|
147
139
|
|
|
148
140
|
def test_group_check_user_server_error(self):
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
self.users_mock.check_in_group.side_effect = server_error
|
|
141
|
+
self.identity_sdk_client.check_user_in_group.side_effect = (
|
|
142
|
+
sdk_exc.SDKException
|
|
143
|
+
)
|
|
153
144
|
arglist = [
|
|
154
145
|
self.group.name,
|
|
155
146
|
self.user.name,
|
|
@@ -161,12 +152,12 @@ class TestGroupCheckUser(TestGroup):
|
|
|
161
152
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
162
153
|
|
|
163
154
|
self.assertRaises(
|
|
164
|
-
|
|
155
|
+
sdk_exc.SDKException, self.cmd.take_action, parsed_args
|
|
165
156
|
)
|
|
166
157
|
|
|
167
158
|
|
|
168
|
-
class TestGroupCreate(
|
|
169
|
-
domain =
|
|
159
|
+
class TestGroupCreate(identity_fakes.TestIdentityv3):
|
|
160
|
+
domain = sdk_fakes.generate_fake_resource(_domain.Domain)
|
|
170
161
|
|
|
171
162
|
columns = (
|
|
172
163
|
'description',
|
|
@@ -177,23 +168,20 @@ class TestGroupCreate(TestGroup):
|
|
|
177
168
|
|
|
178
169
|
def setUp(self):
|
|
179
170
|
super().setUp()
|
|
180
|
-
self.group =
|
|
181
|
-
|
|
171
|
+
self.group = sdk_fakes.generate_fake_resource(
|
|
172
|
+
_group.Group, description=None, domain_id=None
|
|
182
173
|
)
|
|
183
|
-
self.
|
|
184
|
-
self.
|
|
185
|
-
self.group.domain_id,
|
|
186
|
-
self.group.id,
|
|
187
|
-
self.group.name,
|
|
174
|
+
self.group_with_options = sdk_fakes.generate_fake_resource(
|
|
175
|
+
_group.Group, domain_id=self.domain.id
|
|
188
176
|
)
|
|
189
177
|
|
|
190
|
-
self.
|
|
191
|
-
self.
|
|
192
|
-
self.domains_mock.get.return_value = self.domain
|
|
178
|
+
self.identity_sdk_client.find_group.return_value = self.group
|
|
179
|
+
self.identity_sdk_client.find_domain.return_value = self.domain
|
|
193
180
|
|
|
194
181
|
self.cmd = group.CreateGroup(self.app, None)
|
|
195
182
|
|
|
196
183
|
def test_group_create(self):
|
|
184
|
+
self.identity_sdk_client.create_group.return_value = self.group
|
|
197
185
|
arglist = [
|
|
198
186
|
self.group.name,
|
|
199
187
|
]
|
|
@@ -203,40 +191,56 @@ class TestGroupCreate(TestGroup):
|
|
|
203
191
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
204
192
|
|
|
205
193
|
columns, data = self.cmd.take_action(parsed_args)
|
|
206
|
-
self.
|
|
194
|
+
self.identity_sdk_client.create_group.assert_called_once_with(
|
|
207
195
|
name=self.group.name,
|
|
208
|
-
domain=None,
|
|
209
|
-
description=None,
|
|
210
196
|
)
|
|
211
197
|
self.assertEqual(self.columns, columns)
|
|
212
|
-
|
|
198
|
+
datalist = (
|
|
199
|
+
self.group.description,
|
|
200
|
+
None,
|
|
201
|
+
self.group.id,
|
|
202
|
+
self.group.name,
|
|
203
|
+
)
|
|
204
|
+
self.assertEqual(datalist, data)
|
|
213
205
|
|
|
214
206
|
def test_group_create_with_options(self):
|
|
207
|
+
self.identity_sdk_client.create_group.return_value = (
|
|
208
|
+
self.group_with_options
|
|
209
|
+
)
|
|
215
210
|
arglist = [
|
|
216
211
|
'--domain',
|
|
217
212
|
self.domain.name,
|
|
218
213
|
'--description',
|
|
219
|
-
self.
|
|
220
|
-
self.
|
|
214
|
+
self.group_with_options.description,
|
|
215
|
+
self.group_with_options.name,
|
|
221
216
|
]
|
|
222
217
|
verifylist = [
|
|
223
218
|
('domain', self.domain.name),
|
|
224
|
-
('description', self.
|
|
225
|
-
('name', self.
|
|
219
|
+
('description', self.group_with_options.description),
|
|
220
|
+
('name', self.group_with_options.name),
|
|
226
221
|
]
|
|
227
222
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
228
223
|
|
|
229
224
|
columns, data = self.cmd.take_action(parsed_args)
|
|
230
|
-
self.
|
|
231
|
-
name=self.
|
|
232
|
-
|
|
233
|
-
description=self.
|
|
225
|
+
self.identity_sdk_client.create_group.assert_called_once_with(
|
|
226
|
+
name=self.group_with_options.name,
|
|
227
|
+
domain_id=self.domain.id,
|
|
228
|
+
description=self.group_with_options.description,
|
|
234
229
|
)
|
|
235
230
|
self.assertEqual(self.columns, columns)
|
|
236
|
-
|
|
231
|
+
datalist = (
|
|
232
|
+
self.group_with_options.description,
|
|
233
|
+
self.domain.id,
|
|
234
|
+
self.group_with_options.id,
|
|
235
|
+
self.group_with_options.name,
|
|
236
|
+
)
|
|
237
|
+
self.assertEqual(datalist, data)
|
|
237
238
|
|
|
238
239
|
def test_group_create_or_show(self):
|
|
239
|
-
self.
|
|
240
|
+
self.identity_sdk_client.find_group.return_value = self.group
|
|
241
|
+
self.identity_sdk_client.create_group.side_effect = (
|
|
242
|
+
sdk_exc.ConflictException
|
|
243
|
+
)
|
|
240
244
|
arglist = [
|
|
241
245
|
'--or-show',
|
|
242
246
|
self.group.name,
|
|
@@ -248,46 +252,97 @@ class TestGroupCreate(TestGroup):
|
|
|
248
252
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
249
253
|
|
|
250
254
|
columns, data = self.cmd.take_action(parsed_args)
|
|
251
|
-
self.
|
|
255
|
+
self.identity_sdk_client.find_group.assert_called_once_with(
|
|
256
|
+
self.group.name
|
|
257
|
+
)
|
|
258
|
+
self.assertEqual(self.columns, columns)
|
|
259
|
+
datalist = (
|
|
260
|
+
self.group.description,
|
|
261
|
+
None,
|
|
262
|
+
self.group.id,
|
|
263
|
+
self.group.name,
|
|
264
|
+
)
|
|
265
|
+
self.assertEqual(datalist, data)
|
|
266
|
+
|
|
267
|
+
def test_group_create_or_show_with_domain(self):
|
|
268
|
+
self.identity_sdk_client.find_group.return_value = (
|
|
269
|
+
self.group_with_options
|
|
270
|
+
)
|
|
271
|
+
self.identity_sdk_client.create_group.side_effect = (
|
|
272
|
+
sdk_exc.ConflictException
|
|
273
|
+
)
|
|
274
|
+
arglist = [
|
|
275
|
+
'--or-show',
|
|
276
|
+
self.group_with_options.name,
|
|
277
|
+
'--domain',
|
|
278
|
+
self.domain.id,
|
|
279
|
+
]
|
|
280
|
+
verifylist = [
|
|
281
|
+
('or_show', True),
|
|
282
|
+
('name', self.group_with_options.name),
|
|
283
|
+
('domain', self.domain.id),
|
|
284
|
+
]
|
|
285
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
286
|
+
|
|
287
|
+
columns, data = self.cmd.take_action(parsed_args)
|
|
288
|
+
self.identity_sdk_client.find_group.assert_called_once_with(
|
|
289
|
+
self.group_with_options.name, domain_id=self.domain.id
|
|
290
|
+
)
|
|
252
291
|
self.assertEqual(self.columns, columns)
|
|
253
|
-
|
|
292
|
+
datalist = (
|
|
293
|
+
self.group_with_options.description,
|
|
294
|
+
self.domain.id,
|
|
295
|
+
self.group_with_options.id,
|
|
296
|
+
self.group_with_options.name,
|
|
297
|
+
)
|
|
298
|
+
self.assertEqual(datalist, data)
|
|
254
299
|
|
|
255
300
|
|
|
256
|
-
class TestGroupDelete(
|
|
257
|
-
domain =
|
|
258
|
-
groups = identity_fakes.FakeGroup.create_groups(
|
|
259
|
-
attrs={'domain_id': domain.id}, count=2
|
|
260
|
-
)
|
|
301
|
+
class TestGroupDelete(identity_fakes.TestIdentityv3):
|
|
302
|
+
domain = sdk_fakes.generate_fake_resource(_domain.Domain)
|
|
261
303
|
|
|
262
304
|
def setUp(self):
|
|
263
305
|
super().setUp()
|
|
264
306
|
|
|
265
|
-
self.
|
|
266
|
-
|
|
267
|
-
|
|
307
|
+
self.group = sdk_fakes.generate_fake_resource(
|
|
308
|
+
_group.Group,
|
|
309
|
+
domain_id=None,
|
|
310
|
+
)
|
|
311
|
+
self.group_with_domain = sdk_fakes.generate_fake_resource(
|
|
312
|
+
_group.Group,
|
|
313
|
+
name=self.group.name,
|
|
314
|
+
domain_id=self.domain.id,
|
|
315
|
+
)
|
|
316
|
+
self.identity_sdk_client.delete_group.return_value = None
|
|
317
|
+
self.identity_sdk_client.find_domain.return_value = self.domain
|
|
268
318
|
|
|
269
319
|
self.cmd = group.DeleteGroup(self.app, None)
|
|
270
320
|
|
|
271
321
|
def test_group_delete(self):
|
|
322
|
+
self.identity_sdk_client.find_group.return_value = self.group
|
|
272
323
|
arglist = [
|
|
273
|
-
self.
|
|
324
|
+
self.group.id,
|
|
274
325
|
]
|
|
275
326
|
verifylist = [
|
|
276
|
-
('groups', [self.
|
|
327
|
+
('groups', [self.group.id]),
|
|
277
328
|
]
|
|
278
329
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
279
330
|
|
|
280
331
|
result = self.cmd.take_action(parsed_args)
|
|
281
|
-
self.
|
|
282
|
-
|
|
332
|
+
self.identity_sdk_client.find_group.assert_called_once_with(
|
|
333
|
+
name_or_id=self.group.id, ignore_missing=False
|
|
334
|
+
)
|
|
335
|
+
self.identity_sdk_client.delete_group.assert_called_once_with(
|
|
336
|
+
self.group.id
|
|
337
|
+
)
|
|
283
338
|
self.assertIsNone(result)
|
|
284
339
|
|
|
285
340
|
def test_group_multi_delete(self):
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
341
|
+
self.identity_sdk_client.find_group.side_effect = [
|
|
342
|
+
self.group,
|
|
343
|
+
self.group_with_domain,
|
|
344
|
+
]
|
|
345
|
+
arglist = [self.group.id, self.group_with_domain.id]
|
|
291
346
|
verifylist = [
|
|
292
347
|
('groups', arglist),
|
|
293
348
|
]
|
|
@@ -295,39 +350,50 @@ class TestGroupDelete(TestGroup):
|
|
|
295
350
|
|
|
296
351
|
result = self.cmd.take_action(parsed_args)
|
|
297
352
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
self.groups_mock.delete.assert_has_calls(calls)
|
|
353
|
+
self.identity_sdk_client.delete_group.assert_has_calls(
|
|
354
|
+
[mock.call(self.group.id), mock.call(self.group_with_domain.id)]
|
|
355
|
+
)
|
|
302
356
|
self.assertIsNone(result)
|
|
303
357
|
|
|
304
358
|
def test_group_delete_with_domain(self):
|
|
305
|
-
|
|
306
|
-
|
|
359
|
+
self.identity_sdk_client.find_domain.side_effect = [
|
|
360
|
+
sdk_exc.ForbiddenException
|
|
361
|
+
]
|
|
362
|
+
self.identity_sdk_client.find_group.return_value = (
|
|
363
|
+
self.group_with_domain
|
|
364
|
+
)
|
|
307
365
|
|
|
308
366
|
arglist = [
|
|
309
367
|
'--domain',
|
|
310
|
-
self.
|
|
311
|
-
self.
|
|
368
|
+
self.group_with_domain.domain_id,
|
|
369
|
+
self.group_with_domain.name,
|
|
312
370
|
]
|
|
313
371
|
verifylist = [
|
|
314
|
-
('domain', self.
|
|
315
|
-
('groups', [self.
|
|
372
|
+
('domain', self.domain.id),
|
|
373
|
+
('groups', [self.group_with_domain.name]),
|
|
316
374
|
]
|
|
317
375
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
318
376
|
|
|
319
377
|
result = self.cmd.take_action(parsed_args)
|
|
320
|
-
self.
|
|
321
|
-
self.
|
|
378
|
+
self.identity_sdk_client.find_group.assert_called_with(
|
|
379
|
+
name_or_id=self.group_with_domain.name,
|
|
380
|
+
ignore_missing=False,
|
|
381
|
+
domain_id=self.domain.id,
|
|
382
|
+
)
|
|
383
|
+
self.identity_sdk_client.delete_group.assert_called_once_with(
|
|
384
|
+
self.group_with_domain.id
|
|
322
385
|
)
|
|
323
|
-
self.groups_mock.delete.assert_called_once_with(self.groups[0].id)
|
|
324
386
|
self.assertIsNone(result)
|
|
325
387
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
388
|
+
def test_delete_multi_groups_with_exception(self):
|
|
389
|
+
self.identity_sdk_client.find_group.side_effect = [
|
|
390
|
+
self.group,
|
|
391
|
+
self.group_with_domain,
|
|
392
|
+
exceptions.CommandError,
|
|
393
|
+
]
|
|
329
394
|
arglist = [
|
|
330
|
-
self.
|
|
395
|
+
self.group.id,
|
|
396
|
+
self.group_with_domain.id,
|
|
331
397
|
'unexist_group',
|
|
332
398
|
]
|
|
333
399
|
verifylist = [
|
|
@@ -339,45 +405,57 @@ class TestGroupDelete(TestGroup):
|
|
|
339
405
|
self.cmd.take_action(parsed_args)
|
|
340
406
|
self.fail('CommandError should be raised.')
|
|
341
407
|
except exceptions.CommandError as e:
|
|
342
|
-
self.assertEqual('1 of
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
408
|
+
self.assertEqual('1 of 3 groups failed to delete.', str(e))
|
|
409
|
+
|
|
410
|
+
self.identity_sdk_client.find_group.assert_has_calls(
|
|
411
|
+
[
|
|
412
|
+
mock.call(name_or_id=self.group.id, ignore_missing=False),
|
|
413
|
+
mock.call(
|
|
414
|
+
name_or_id=self.group_with_domain.id, ignore_missing=False
|
|
415
|
+
),
|
|
416
|
+
mock.call(name_or_id='unexist_group', ignore_missing=False),
|
|
417
|
+
]
|
|
418
|
+
)
|
|
346
419
|
|
|
347
|
-
self.assertEqual(
|
|
348
|
-
self.
|
|
420
|
+
self.assertEqual(3, self.identity_sdk_client.find_group.call_count)
|
|
421
|
+
self.identity_sdk_client.delete_group.assert_has_calls(
|
|
422
|
+
[
|
|
423
|
+
mock.call(self.group.id),
|
|
424
|
+
mock.call(self.group_with_domain.id),
|
|
425
|
+
]
|
|
426
|
+
)
|
|
349
427
|
|
|
350
428
|
|
|
351
|
-
class TestGroupList(
|
|
352
|
-
domain =
|
|
353
|
-
group = identity_fakes.FakeGroup.create_one_group()
|
|
354
|
-
user = identity_fakes.FakeUser.create_one_user()
|
|
429
|
+
class TestGroupList(identity_fakes.TestIdentityv3):
|
|
430
|
+
domain = sdk_fakes.generate_fake_resource(_domain.Domain)
|
|
355
431
|
|
|
356
432
|
columns = (
|
|
357
433
|
'ID',
|
|
358
434
|
'Name',
|
|
359
435
|
)
|
|
360
|
-
datalist = (
|
|
361
|
-
(
|
|
362
|
-
group.id,
|
|
363
|
-
group.name,
|
|
364
|
-
),
|
|
365
|
-
)
|
|
366
436
|
|
|
367
437
|
def setUp(self):
|
|
368
438
|
super().setUp()
|
|
369
439
|
|
|
370
|
-
self.
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
self.
|
|
440
|
+
self.group = sdk_fakes.generate_fake_resource(
|
|
441
|
+
_group.Group, description=None, domain_id=None
|
|
442
|
+
)
|
|
443
|
+
self.group_with_domain = sdk_fakes.generate_fake_resource(
|
|
444
|
+
_group.Group, domain_id=self.domain.id
|
|
445
|
+
)
|
|
446
|
+
self.user = sdk_fakes.generate_fake_resource(_user.User)
|
|
374
447
|
|
|
375
|
-
self.
|
|
448
|
+
self.identity_sdk_client.find_user.return_value = self.user
|
|
449
|
+
self.identity_sdk_client.find_domain.return_value = self.domain
|
|
376
450
|
|
|
377
451
|
# Get the command object to test
|
|
378
452
|
self.cmd = group.ListGroup(self.app, None)
|
|
379
453
|
|
|
380
454
|
def test_group_list_no_options(self):
|
|
455
|
+
self.identity_sdk_client.groups.return_value = [
|
|
456
|
+
self.group,
|
|
457
|
+
self.group_with_domain,
|
|
458
|
+
]
|
|
381
459
|
arglist = []
|
|
382
460
|
verifylist = []
|
|
383
461
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
@@ -387,18 +465,23 @@ class TestGroupList(TestGroup):
|
|
|
387
465
|
# containing the data to be listed.
|
|
388
466
|
columns, data = self.cmd.take_action(parsed_args)
|
|
389
467
|
|
|
390
|
-
|
|
391
|
-
kwargs = {
|
|
392
|
-
'domain': None,
|
|
393
|
-
'user': None,
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
self.groups_mock.list.assert_called_with(**kwargs)
|
|
468
|
+
self.identity_sdk_client.groups.assert_called_with()
|
|
397
469
|
|
|
398
470
|
self.assertEqual(self.columns, columns)
|
|
399
|
-
|
|
471
|
+
datalist = (
|
|
472
|
+
(
|
|
473
|
+
self.group.id,
|
|
474
|
+
self.group.name,
|
|
475
|
+
),
|
|
476
|
+
(
|
|
477
|
+
self.group_with_domain.id,
|
|
478
|
+
self.group_with_domain.name,
|
|
479
|
+
),
|
|
480
|
+
)
|
|
481
|
+
self.assertEqual(datalist, tuple(data))
|
|
400
482
|
|
|
401
483
|
def test_group_list_domain(self):
|
|
484
|
+
self.identity_sdk_client.groups.return_value = [self.group_with_domain]
|
|
402
485
|
arglist = [
|
|
403
486
|
'--domain',
|
|
404
487
|
self.domain.id,
|
|
@@ -415,16 +498,17 @@ class TestGroupList(TestGroup):
|
|
|
415
498
|
|
|
416
499
|
# Set expected values
|
|
417
500
|
kwargs = {
|
|
418
|
-
'
|
|
419
|
-
'user': None,
|
|
501
|
+
'domain_id': self.domain.id,
|
|
420
502
|
}
|
|
421
503
|
|
|
422
|
-
self.
|
|
504
|
+
self.identity_sdk_client.groups.assert_called_with(**kwargs)
|
|
423
505
|
|
|
424
506
|
self.assertEqual(self.columns, columns)
|
|
425
|
-
|
|
507
|
+
datalist = ((self.group_with_domain.id, self.group_with_domain.name),)
|
|
508
|
+
self.assertEqual(datalist, tuple(data))
|
|
426
509
|
|
|
427
510
|
def test_group_list_user(self):
|
|
511
|
+
self.identity_sdk_client.user_groups.return_value = [self.group]
|
|
428
512
|
arglist = [
|
|
429
513
|
'--user',
|
|
430
514
|
self.user.name,
|
|
@@ -439,18 +523,53 @@ class TestGroupList(TestGroup):
|
|
|
439
523
|
# containing the data to be listed.
|
|
440
524
|
columns, data = self.cmd.take_action(parsed_args)
|
|
441
525
|
|
|
526
|
+
self.identity_sdk_client.user_groups.assert_called_with(self.user.id)
|
|
527
|
+
|
|
528
|
+
self.assertEqual(self.columns, columns)
|
|
529
|
+
|
|
530
|
+
datalist = ((self.group.id, self.group.name),)
|
|
531
|
+
self.assertEqual(datalist, tuple(data))
|
|
532
|
+
|
|
533
|
+
def test_group_list_user_domain(self):
|
|
534
|
+
self.identity_sdk_client.user_groups.return_value = [
|
|
535
|
+
self.group_with_domain
|
|
536
|
+
]
|
|
537
|
+
arglist = [
|
|
538
|
+
'--user',
|
|
539
|
+
self.user.name,
|
|
540
|
+
'--domain',
|
|
541
|
+
self.domain.name,
|
|
542
|
+
]
|
|
543
|
+
verifylist = [
|
|
544
|
+
('user', self.user.name),
|
|
545
|
+
('domain', self.domain.name),
|
|
546
|
+
]
|
|
547
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
548
|
+
|
|
549
|
+
# In base command class Lister in cliff, abstract method take_action()
|
|
550
|
+
# returns a tuple containing the column names and an iterable
|
|
551
|
+
# containing the data to be listed.
|
|
552
|
+
columns, data = self.cmd.take_action(parsed_args)
|
|
553
|
+
|
|
442
554
|
# Set expected values
|
|
443
555
|
kwargs = {
|
|
444
|
-
'
|
|
445
|
-
'user': self.user.id,
|
|
556
|
+
'domain_id': self.domain.id,
|
|
446
557
|
}
|
|
447
558
|
|
|
448
|
-
self.
|
|
559
|
+
self.identity_sdk_client.user_groups.assert_called_with(
|
|
560
|
+
self.user.id, **kwargs
|
|
561
|
+
)
|
|
449
562
|
|
|
450
563
|
self.assertEqual(self.columns, columns)
|
|
451
|
-
|
|
564
|
+
|
|
565
|
+
datalist = ((self.group_with_domain.id, self.group_with_domain.name),)
|
|
566
|
+
self.assertEqual(datalist, tuple(data))
|
|
452
567
|
|
|
453
568
|
def test_group_list_long(self):
|
|
569
|
+
self.identity_sdk_client.groups.return_value = [
|
|
570
|
+
self.group,
|
|
571
|
+
self.group_with_domain,
|
|
572
|
+
]
|
|
454
573
|
arglist = [
|
|
455
574
|
'--long',
|
|
456
575
|
]
|
|
@@ -464,15 +583,9 @@ class TestGroupList(TestGroup):
|
|
|
464
583
|
# containing the data to be listed.
|
|
465
584
|
columns, data = self.cmd.take_action(parsed_args)
|
|
466
585
|
|
|
467
|
-
|
|
468
|
-
kwargs = {
|
|
469
|
-
'domain': None,
|
|
470
|
-
'user': None,
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
self.groups_mock.list.assert_called_with(**kwargs)
|
|
586
|
+
self.identity_sdk_client.groups.assert_called_with()
|
|
474
587
|
|
|
475
|
-
|
|
588
|
+
long_columns = self.columns + (
|
|
476
589
|
'Domain ID',
|
|
477
590
|
'Description',
|
|
478
591
|
)
|
|
@@ -483,25 +596,33 @@ class TestGroupList(TestGroup):
|
|
|
483
596
|
self.group.domain_id,
|
|
484
597
|
self.group.description,
|
|
485
598
|
),
|
|
599
|
+
(
|
|
600
|
+
self.group_with_domain.id,
|
|
601
|
+
self.group_with_domain.name,
|
|
602
|
+
self.group_with_domain.domain_id,
|
|
603
|
+
self.group_with_domain.description,
|
|
604
|
+
),
|
|
486
605
|
)
|
|
487
|
-
self.assertEqual(
|
|
606
|
+
self.assertEqual(long_columns, columns)
|
|
488
607
|
self.assertEqual(datalist, tuple(data))
|
|
489
608
|
|
|
490
609
|
|
|
491
|
-
class TestGroupRemoveUser(
|
|
492
|
-
_group = identity_fakes.FakeGroup.create_one_group()
|
|
493
|
-
users = identity_fakes.FakeUser.create_users(count=2)
|
|
494
|
-
|
|
610
|
+
class TestGroupRemoveUser(identity_fakes.TestIdentityv3):
|
|
495
611
|
def setUp(self):
|
|
496
612
|
super().setUp()
|
|
497
613
|
|
|
498
|
-
self.
|
|
499
|
-
self.
|
|
500
|
-
|
|
614
|
+
self._group = sdk_fakes.generate_fake_resource(_group.Group)
|
|
615
|
+
self.users = tuple(
|
|
616
|
+
sdk_fakes.generate_fake_resources(_user.User, count=2)
|
|
617
|
+
)
|
|
618
|
+
|
|
619
|
+
self.identity_sdk_client.find_group.return_value = self._group
|
|
620
|
+
self.identity_sdk_client.remove_user_from_group.return_value = None
|
|
501
621
|
|
|
502
622
|
self.cmd = group.RemoveUserFromGroup(self.app, None)
|
|
503
623
|
|
|
504
624
|
def test_group_remove_user(self):
|
|
625
|
+
self.identity_sdk_client.find_user.return_value = self.users[0]
|
|
505
626
|
arglist = [
|
|
506
627
|
self._group.id,
|
|
507
628
|
self.users[0].id,
|
|
@@ -513,12 +634,16 @@ class TestGroupRemoveUser(TestGroup):
|
|
|
513
634
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
514
635
|
|
|
515
636
|
result = self.cmd.take_action(parsed_args)
|
|
516
|
-
self.
|
|
637
|
+
self.identity_sdk_client.remove_user_from_group.assert_called_once_with(
|
|
517
638
|
self.users[0].id, self._group.id
|
|
518
639
|
)
|
|
519
640
|
self.assertIsNone(result)
|
|
520
641
|
|
|
521
642
|
def test_group_remove_multi_users(self):
|
|
643
|
+
self.identity_sdk_client.find_user.side_effect = [
|
|
644
|
+
self.users[0],
|
|
645
|
+
self.users[1],
|
|
646
|
+
]
|
|
522
647
|
arglist = [
|
|
523
648
|
self._group.name,
|
|
524
649
|
self.users[0].name,
|
|
@@ -535,13 +660,13 @@ class TestGroupRemoveUser(TestGroup):
|
|
|
535
660
|
call(self.users[0].id, self._group.id),
|
|
536
661
|
call(self.users[1].id, self._group.id),
|
|
537
662
|
]
|
|
538
|
-
self.
|
|
663
|
+
self.identity_sdk_client.remove_user_from_group.assert_has_calls(calls)
|
|
539
664
|
self.assertIsNone(result)
|
|
540
665
|
|
|
541
666
|
@mock.patch.object(group.LOG, 'error')
|
|
542
667
|
def test_group_remove_user_with_error(self, mock_error):
|
|
543
|
-
self.
|
|
544
|
-
|
|
668
|
+
self.identity_sdk_client.remove_user_from_group.side_effect = [
|
|
669
|
+
sdk_exc.ResourceNotFound(),
|
|
545
670
|
None,
|
|
546
671
|
]
|
|
547
672
|
arglist = [
|
|
@@ -560,26 +685,29 @@ class TestGroupRemoveUser(TestGroup):
|
|
|
560
685
|
except exceptions.CommandError as e:
|
|
561
686
|
msg = f"1 of 2 users not removed from group {self._group.id}."
|
|
562
687
|
self.assertEqual(msg, str(e))
|
|
563
|
-
msg = f"{self.users[0].id} not removed from group {self._group.id}: "
|
|
688
|
+
msg = f"{self.users[0].id} not removed from group {self._group.id}: {str(sdk_exc.ResourceNotFound())}"
|
|
564
689
|
mock_error.assert_called_once_with(msg)
|
|
565
690
|
|
|
566
691
|
|
|
567
|
-
class TestGroupSet(
|
|
568
|
-
domain =
|
|
569
|
-
group = identity_fakes.FakeGroup.create_one_group(
|
|
570
|
-
attrs={'domain_id': domain.id}
|
|
571
|
-
)
|
|
692
|
+
class TestGroupSet(identity_fakes.TestIdentityv3):
|
|
693
|
+
domain = sdk_fakes.generate_fake_resource(_domain.Domain)
|
|
572
694
|
|
|
573
695
|
def setUp(self):
|
|
574
696
|
super().setUp()
|
|
697
|
+
self.group = sdk_fakes.generate_fake_resource(
|
|
698
|
+
_group.Group, domain_id=self.domain.id
|
|
699
|
+
)
|
|
700
|
+
self.group_with_domain = sdk_fakes.generate_fake_resource(
|
|
701
|
+
_group.Group, name=self.group.name, domain_id=self.domain.id
|
|
702
|
+
)
|
|
575
703
|
|
|
576
|
-
self.
|
|
577
|
-
self.
|
|
578
|
-
self.groups_mock.update.return_value = None
|
|
704
|
+
self.identity_sdk_client.find_group.return_value = self.group
|
|
705
|
+
self.identity_sdk_client.find_domain.return_value = self.domain
|
|
579
706
|
|
|
580
707
|
self.cmd = group.SetGroup(self.app, None)
|
|
581
708
|
|
|
582
709
|
def test_group_set_nothing(self):
|
|
710
|
+
self.identity_sdk_client.update_group.return_value = self.group
|
|
583
711
|
arglist = [
|
|
584
712
|
self.group.id,
|
|
585
713
|
]
|
|
@@ -589,10 +717,13 @@ class TestGroupSet(TestGroup):
|
|
|
589
717
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
590
718
|
|
|
591
719
|
result = self.cmd.take_action(parsed_args)
|
|
592
|
-
self.
|
|
720
|
+
self.identity_sdk_client.update_group.assert_called_once_with(
|
|
721
|
+
self.group.id
|
|
722
|
+
)
|
|
593
723
|
self.assertIsNone(result)
|
|
594
724
|
|
|
595
725
|
def test_group_set_name_and_description(self):
|
|
726
|
+
self.identity_sdk_client.update_group.return_value = self.group
|
|
596
727
|
arglist = [
|
|
597
728
|
'--name',
|
|
598
729
|
'new_name',
|
|
@@ -612,36 +743,43 @@ class TestGroupSet(TestGroup):
|
|
|
612
743
|
'name': 'new_name',
|
|
613
744
|
'description': 'new_description',
|
|
614
745
|
}
|
|
615
|
-
self.
|
|
746
|
+
self.identity_sdk_client.update_group.assert_called_once_with(
|
|
616
747
|
self.group.id, **kwargs
|
|
617
748
|
)
|
|
618
749
|
self.assertIsNone(result)
|
|
619
750
|
|
|
620
751
|
def test_group_set_with_domain(self):
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
752
|
+
self.identity_sdk_client.find_domain.side_effect = [
|
|
753
|
+
sdk_exc.ForbiddenException
|
|
754
|
+
]
|
|
755
|
+
self.identity_sdk_client.find_group.return_value = (
|
|
756
|
+
self.group_with_domain
|
|
757
|
+
)
|
|
624
758
|
arglist = [
|
|
625
759
|
'--domain',
|
|
626
760
|
self.domain.id,
|
|
627
|
-
self.
|
|
761
|
+
self.group_with_domain.name,
|
|
628
762
|
]
|
|
629
763
|
verifylist = [
|
|
630
764
|
('domain', self.domain.id),
|
|
631
|
-
('group', self.
|
|
765
|
+
('group', self.group_with_domain.name),
|
|
632
766
|
]
|
|
633
767
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
634
768
|
|
|
635
769
|
result = self.cmd.take_action(parsed_args)
|
|
636
|
-
self.
|
|
637
|
-
self.
|
|
770
|
+
self.identity_sdk_client.find_group.assert_called_once_with(
|
|
771
|
+
name_or_id=self.group_with_domain.name,
|
|
772
|
+
ignore_missing=False,
|
|
773
|
+
domain_id=self.domain.id,
|
|
774
|
+
)
|
|
775
|
+
self.identity_sdk_client.update_group.assert_called_once_with(
|
|
776
|
+
self.group_with_domain.id
|
|
638
777
|
)
|
|
639
|
-
self.groups_mock.update.assert_called_once_with(self.group.id)
|
|
640
778
|
self.assertIsNone(result)
|
|
641
779
|
|
|
642
780
|
|
|
643
|
-
class TestGroupShow(
|
|
644
|
-
domain =
|
|
781
|
+
class TestGroupShow(identity_fakes.TestIdentityv3):
|
|
782
|
+
domain = sdk_fakes.generate_fake_resource(_domain.Domain)
|
|
645
783
|
|
|
646
784
|
columns = (
|
|
647
785
|
'description',
|
|
@@ -652,22 +790,19 @@ class TestGroupShow(TestGroup):
|
|
|
652
790
|
|
|
653
791
|
def setUp(self):
|
|
654
792
|
super().setUp()
|
|
655
|
-
self.group =
|
|
656
|
-
|
|
793
|
+
self.group = sdk_fakes.generate_fake_resource(
|
|
794
|
+
_group.Group, description=None, domain_id=None
|
|
657
795
|
)
|
|
658
|
-
self.
|
|
659
|
-
self.group.
|
|
660
|
-
self.group.domain_id,
|
|
661
|
-
self.group.id,
|
|
662
|
-
self.group.name,
|
|
796
|
+
self.group_with_domain = sdk_fakes.generate_fake_resource(
|
|
797
|
+
_group.Group, name=self.group.name, domain_id=self.domain.id
|
|
663
798
|
)
|
|
664
799
|
|
|
665
|
-
self.
|
|
666
|
-
self.domains_mock.get.return_value = self.domain
|
|
800
|
+
self.identity_sdk_client.find_domain.return_value = self.domain
|
|
667
801
|
|
|
668
802
|
self.cmd = group.ShowGroup(self.app, None)
|
|
669
803
|
|
|
670
804
|
def test_group_show(self):
|
|
805
|
+
self.identity_sdk_client.find_group.return_value = self.group
|
|
671
806
|
arglist = [
|
|
672
807
|
self.group.id,
|
|
673
808
|
]
|
|
@@ -677,28 +812,44 @@ class TestGroupShow(TestGroup):
|
|
|
677
812
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
678
813
|
|
|
679
814
|
columns, data = self.cmd.take_action(parsed_args)
|
|
680
|
-
self.
|
|
815
|
+
self.identity_sdk_client.find_group.assert_called_once_with(
|
|
816
|
+
self.group.id, ignore_missing=False
|
|
817
|
+
)
|
|
681
818
|
self.assertEqual(self.columns, columns)
|
|
682
|
-
|
|
819
|
+
datalist = (
|
|
820
|
+
None,
|
|
821
|
+
None,
|
|
822
|
+
self.group.id,
|
|
823
|
+
self.group.name,
|
|
824
|
+
)
|
|
825
|
+
self.assertEqual(datalist, data)
|
|
683
826
|
|
|
684
827
|
def test_group_show_with_domain(self):
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
828
|
+
self.identity_sdk_client.find_group.return_value = (
|
|
829
|
+
self.group_with_domain
|
|
830
|
+
)
|
|
688
831
|
arglist = [
|
|
689
832
|
'--domain',
|
|
690
833
|
self.domain.id,
|
|
691
|
-
self.
|
|
834
|
+
self.group_with_domain.name,
|
|
692
835
|
]
|
|
693
836
|
verifylist = [
|
|
694
837
|
('domain', self.domain.id),
|
|
695
|
-
('group', self.
|
|
838
|
+
('group', self.group_with_domain.name),
|
|
696
839
|
]
|
|
697
840
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
698
841
|
|
|
699
842
|
columns, data = self.cmd.take_action(parsed_args)
|
|
700
|
-
self.
|
|
701
|
-
self.
|
|
843
|
+
self.identity_sdk_client.find_group.assert_called_once_with(
|
|
844
|
+
self.group_with_domain.name,
|
|
845
|
+
domain_id=self.domain.id,
|
|
846
|
+
ignore_missing=False,
|
|
702
847
|
)
|
|
703
848
|
self.assertEqual(self.columns, columns)
|
|
704
|
-
|
|
849
|
+
datalist = (
|
|
850
|
+
self.group_with_domain.description,
|
|
851
|
+
self.domain.id,
|
|
852
|
+
self.group_with_domain.id,
|
|
853
|
+
self.group_with_domain.name,
|
|
854
|
+
)
|
|
855
|
+
self.assertEqual(datalist, data)
|