python-openstackclient 7.3.1__py3-none-any.whl → 8.0.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 +2 -5
- openstackclient/compute/v2/agent.py +5 -5
- openstackclient/compute/v2/aggregate.py +17 -15
- openstackclient/compute/v2/console.py +3 -4
- 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 +8 -10
- openstackclient/compute/v2/server.py +70 -112
- openstackclient/compute/v2/server_backup.py +1 -1
- openstackclient/compute/v2/server_event.py +7 -16
- 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 +16 -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/consumer.py +4 -3
- openstackclient/identity/v3/credential.py +8 -9
- openstackclient/identity/v3/domain.py +1 -1
- 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 +3 -4
- 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 +6 -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 +9 -6
- openstackclient/image/client.py +2 -5
- openstackclient/image/v1/image.py +11 -15
- openstackclient/image/v2/cache.py +2 -4
- openstackclient/image/v2/image.py +30 -37
- 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 -10
- 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 +14 -21
- 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 +4 -5
- 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 +42 -31
- openstackclient/network/v2/router.py +55 -41
- openstackclient/network/v2/security_group.py +8 -15
- openstackclient/network/v2/security_group_rule.py +9 -10
- 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 +2 -2
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +12 -6
- 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 +4 -10
- 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 +16 -16
- openstackclient/tests/unit/compute/v2/test_flavor.py +71 -71
- 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 +24 -24
- openstackclient/tests/unit/compute/v2/test_server.py +524 -560
- openstackclient/tests/unit/compute/v2/test_server_backup.py +5 -7
- openstackclient/tests/unit/compute/v2/test_server_event.py +16 -18
- openstackclient/tests/unit/compute/v2/test_server_group.py +25 -31
- openstackclient/tests/unit/compute/v2/test_server_image.py +6 -8
- openstackclient/tests/unit/compute/v2/test_server_migration.py +37 -37
- 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 +1 -1
- openstackclient/tests/unit/identity/v3/test_credential.py +4 -4
- openstackclient/tests/unit/identity/v3/test_endpoint.py +167 -172
- openstackclient/tests/unit/identity/v3/test_mappings.py +2 -2
- openstackclient/tests/unit/identity/v3/test_trust.py +5 -2
- openstackclient/tests/unit/identity/v3/test_user.py +16 -0
- openstackclient/tests/unit/image/v1/fakes.py +2 -2
- openstackclient/tests/unit/image/v2/test_image.py +39 -1
- openstackclient/tests/unit/integ/cli/test_shell.py +1 -2
- openstackclient/tests/unit/network/test_common.py +2 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +8 -14
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +49 -35
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_compute.py +11 -11
- openstackclient/tests/unit/network/v2/test_network_trunk.py +2 -2
- openstackclient/tests/unit/network/v2/test_port.py +33 -5
- openstackclient/tests/unit/network/v2/test_router.py +120 -7
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +11 -19
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +14 -14
- openstackclient/tests/unit/object/v1/test_object_all.py +4 -3
- openstackclient/tests/unit/test_shell.py +16 -13
- openstackclient/tests/unit/volume/v2/test_volume.py +1 -1
- 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_volume.py +1 -1
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +3 -3
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +1 -2
- 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/volume.py +8 -16
- openstackclient/volume/v2/volume_backup.py +6 -7
- openstackclient/volume/v2/volume_snapshot.py +8 -9
- 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_manage.py +1 -3
- openstackclient/volume/v3/volume.py +18 -19
- openstackclient/volume/v3/volume_attachment.py +3 -2
- openstackclient/volume/v3/volume_backup.py +7 -8
- openstackclient/volume/v3/volume_group.py +2 -1
- openstackclient/volume/v3/volume_group_snapshot.py +2 -1
- openstackclient/volume/v3/volume_snapshot.py +4 -3
- openstackclient/volume/v3/volume_type.py +10 -21
- {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/AUTHORS +4 -0
- {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/METADATA +7 -13
- {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/RECORD +210 -233
- {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/entry_points.txt +0 -41
- python_openstackclient-8.0.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.3.1.dist-info/pbr.json +0 -1
- {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/LICENSE +0 -0
- {python_openstackclient-7.3.1.dist-info → python_openstackclient-8.0.0.dist-info}/top_level.txt +0 -0
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
3
|
-
# not use this file except in compliance with the License. You may obtain
|
|
4
|
-
# a copy of the License at
|
|
5
|
-
#
|
|
6
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
-
#
|
|
8
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
10
|
-
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
11
|
-
# License for the specific language governing permissions and limitations
|
|
12
|
-
# under the License.
|
|
13
|
-
#
|
|
14
|
-
|
|
15
|
-
from osc_lib import exceptions
|
|
16
|
-
|
|
17
|
-
from openstackclient.tests.unit.volume.v1 import fakes as volume_fakes
|
|
18
|
-
from openstackclient.volume.v1 import service
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class TestService(volume_fakes.TestVolumev1):
|
|
22
|
-
def setUp(self):
|
|
23
|
-
super().setUp()
|
|
24
|
-
|
|
25
|
-
# Get a shortcut to the ServiceManager Mock
|
|
26
|
-
self.service_mock = self.volume_client.services
|
|
27
|
-
self.service_mock.reset_mock()
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class TestServiceList(TestService):
|
|
31
|
-
# The service to be listed
|
|
32
|
-
services = volume_fakes.create_one_service()
|
|
33
|
-
|
|
34
|
-
def setUp(self):
|
|
35
|
-
super().setUp()
|
|
36
|
-
|
|
37
|
-
self.service_mock.list.return_value = [self.services]
|
|
38
|
-
|
|
39
|
-
# Get the command object to test
|
|
40
|
-
self.cmd = service.ListService(self.app, None)
|
|
41
|
-
|
|
42
|
-
def test_service_list(self):
|
|
43
|
-
arglist = [
|
|
44
|
-
'--host',
|
|
45
|
-
self.services.host,
|
|
46
|
-
'--service',
|
|
47
|
-
self.services.binary,
|
|
48
|
-
]
|
|
49
|
-
verifylist = [
|
|
50
|
-
('host', self.services.host),
|
|
51
|
-
('service', self.services.binary),
|
|
52
|
-
]
|
|
53
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
54
|
-
|
|
55
|
-
# In base command class Lister in cliff, abstract method take_action()
|
|
56
|
-
# returns a tuple containing the column names and an iterable
|
|
57
|
-
# containing the data to be listed.
|
|
58
|
-
columns, data = self.cmd.take_action(parsed_args)
|
|
59
|
-
|
|
60
|
-
expected_columns = [
|
|
61
|
-
'Binary',
|
|
62
|
-
'Host',
|
|
63
|
-
'Zone',
|
|
64
|
-
'Status',
|
|
65
|
-
'State',
|
|
66
|
-
'Updated At',
|
|
67
|
-
]
|
|
68
|
-
|
|
69
|
-
# confirming if all expected columns are present in the result.
|
|
70
|
-
self.assertEqual(expected_columns, columns)
|
|
71
|
-
|
|
72
|
-
datalist = (
|
|
73
|
-
(
|
|
74
|
-
self.services.binary,
|
|
75
|
-
self.services.host,
|
|
76
|
-
self.services.zone,
|
|
77
|
-
self.services.status,
|
|
78
|
-
self.services.state,
|
|
79
|
-
self.services.updated_at,
|
|
80
|
-
),
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
# confirming if all expected values are present in the result.
|
|
84
|
-
self.assertEqual(datalist, tuple(data))
|
|
85
|
-
|
|
86
|
-
# checking if proper call was made to list services
|
|
87
|
-
self.service_mock.list.assert_called_with(
|
|
88
|
-
self.services.host,
|
|
89
|
-
self.services.binary,
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
# checking if prohibited columns are present in output
|
|
93
|
-
self.assertNotIn("Disabled Reason", columns)
|
|
94
|
-
self.assertNotIn(self.services.disabled_reason, tuple(data))
|
|
95
|
-
|
|
96
|
-
def test_service_list_with_long_option(self):
|
|
97
|
-
arglist = [
|
|
98
|
-
'--host',
|
|
99
|
-
self.services.host,
|
|
100
|
-
'--service',
|
|
101
|
-
self.services.binary,
|
|
102
|
-
'--long',
|
|
103
|
-
]
|
|
104
|
-
verifylist = [
|
|
105
|
-
('host', self.services.host),
|
|
106
|
-
('service', self.services.binary),
|
|
107
|
-
('long', True),
|
|
108
|
-
]
|
|
109
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
110
|
-
|
|
111
|
-
# In base command class Lister in cliff, abstract method take_action()
|
|
112
|
-
# returns a tuple containing the column names and an iterable
|
|
113
|
-
# containing the data to be listed.
|
|
114
|
-
columns, data = self.cmd.take_action(parsed_args)
|
|
115
|
-
|
|
116
|
-
expected_columns = [
|
|
117
|
-
'Binary',
|
|
118
|
-
'Host',
|
|
119
|
-
'Zone',
|
|
120
|
-
'Status',
|
|
121
|
-
'State',
|
|
122
|
-
'Updated At',
|
|
123
|
-
'Disabled Reason',
|
|
124
|
-
]
|
|
125
|
-
|
|
126
|
-
# confirming if all expected columns are present in the result.
|
|
127
|
-
self.assertEqual(expected_columns, columns)
|
|
128
|
-
|
|
129
|
-
datalist = (
|
|
130
|
-
(
|
|
131
|
-
self.services.binary,
|
|
132
|
-
self.services.host,
|
|
133
|
-
self.services.zone,
|
|
134
|
-
self.services.status,
|
|
135
|
-
self.services.state,
|
|
136
|
-
self.services.updated_at,
|
|
137
|
-
self.services.disabled_reason,
|
|
138
|
-
),
|
|
139
|
-
)
|
|
140
|
-
|
|
141
|
-
# confirming if all expected values are present in the result.
|
|
142
|
-
self.assertEqual(datalist, tuple(data))
|
|
143
|
-
|
|
144
|
-
self.service_mock.list.assert_called_with(
|
|
145
|
-
self.services.host,
|
|
146
|
-
self.services.binary,
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
class TestServiceSet(TestService):
|
|
151
|
-
service = volume_fakes.create_one_service()
|
|
152
|
-
|
|
153
|
-
def setUp(self):
|
|
154
|
-
super().setUp()
|
|
155
|
-
|
|
156
|
-
self.service_mock.enable.return_value = self.service
|
|
157
|
-
self.service_mock.disable.return_value = self.service
|
|
158
|
-
self.service_mock.disable_log_reason.return_value = self.service
|
|
159
|
-
|
|
160
|
-
self.cmd = service.SetService(self.app, None)
|
|
161
|
-
|
|
162
|
-
def test_service_set_nothing(self):
|
|
163
|
-
arglist = [
|
|
164
|
-
self.service.host,
|
|
165
|
-
self.service.binary,
|
|
166
|
-
]
|
|
167
|
-
verifylist = [
|
|
168
|
-
('host', self.service.host),
|
|
169
|
-
('service', self.service.binary),
|
|
170
|
-
]
|
|
171
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
172
|
-
result = self.cmd.take_action(parsed_args)
|
|
173
|
-
|
|
174
|
-
self.service_mock.enable.assert_not_called()
|
|
175
|
-
self.service_mock.disable.assert_not_called()
|
|
176
|
-
self.service_mock.disable_log_reason.assert_not_called()
|
|
177
|
-
self.assertIsNone(result)
|
|
178
|
-
|
|
179
|
-
def test_service_set_enable(self):
|
|
180
|
-
arglist = [
|
|
181
|
-
'--enable',
|
|
182
|
-
self.service.host,
|
|
183
|
-
self.service.binary,
|
|
184
|
-
]
|
|
185
|
-
verifylist = [
|
|
186
|
-
('enable', True),
|
|
187
|
-
('host', self.service.host),
|
|
188
|
-
('service', self.service.binary),
|
|
189
|
-
]
|
|
190
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
191
|
-
|
|
192
|
-
result = self.cmd.take_action(parsed_args)
|
|
193
|
-
|
|
194
|
-
self.service_mock.enable.assert_called_with(
|
|
195
|
-
self.service.host, self.service.binary
|
|
196
|
-
)
|
|
197
|
-
self.service_mock.disable.assert_not_called()
|
|
198
|
-
self.service_mock.disable_log_reason.assert_not_called()
|
|
199
|
-
self.assertIsNone(result)
|
|
200
|
-
|
|
201
|
-
def test_service_set_disable(self):
|
|
202
|
-
arglist = [
|
|
203
|
-
'--disable',
|
|
204
|
-
self.service.host,
|
|
205
|
-
self.service.binary,
|
|
206
|
-
]
|
|
207
|
-
verifylist = [
|
|
208
|
-
('disable', True),
|
|
209
|
-
('host', self.service.host),
|
|
210
|
-
('service', self.service.binary),
|
|
211
|
-
]
|
|
212
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
213
|
-
|
|
214
|
-
result = self.cmd.take_action(parsed_args)
|
|
215
|
-
|
|
216
|
-
self.service_mock.disable.assert_called_with(
|
|
217
|
-
self.service.host, self.service.binary
|
|
218
|
-
)
|
|
219
|
-
self.service_mock.enable.assert_not_called()
|
|
220
|
-
self.service_mock.disable_log_reason.assert_not_called()
|
|
221
|
-
self.assertIsNone(result)
|
|
222
|
-
|
|
223
|
-
def test_service_set_disable_with_reason(self):
|
|
224
|
-
reason = 'earthquake'
|
|
225
|
-
arglist = [
|
|
226
|
-
'--disable',
|
|
227
|
-
'--disable-reason',
|
|
228
|
-
reason,
|
|
229
|
-
self.service.host,
|
|
230
|
-
self.service.binary,
|
|
231
|
-
]
|
|
232
|
-
verifylist = [
|
|
233
|
-
('disable', True),
|
|
234
|
-
('disable_reason', reason),
|
|
235
|
-
('host', self.service.host),
|
|
236
|
-
('service', self.service.binary),
|
|
237
|
-
]
|
|
238
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
239
|
-
|
|
240
|
-
result = self.cmd.take_action(parsed_args)
|
|
241
|
-
|
|
242
|
-
self.service_mock.disable_log_reason.assert_called_with(
|
|
243
|
-
self.service.host, self.service.binary, reason
|
|
244
|
-
)
|
|
245
|
-
self.assertIsNone(result)
|
|
246
|
-
|
|
247
|
-
def test_service_set_only_with_disable_reason(self):
|
|
248
|
-
reason = 'earthquake'
|
|
249
|
-
arglist = [
|
|
250
|
-
'--disable-reason',
|
|
251
|
-
reason,
|
|
252
|
-
self.service.host,
|
|
253
|
-
self.service.binary,
|
|
254
|
-
]
|
|
255
|
-
verifylist = [
|
|
256
|
-
('disable_reason', reason),
|
|
257
|
-
('host', self.service.host),
|
|
258
|
-
('service', self.service.binary),
|
|
259
|
-
]
|
|
260
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
261
|
-
try:
|
|
262
|
-
self.cmd.take_action(parsed_args)
|
|
263
|
-
self.fail("CommandError should be raised.")
|
|
264
|
-
except exceptions.CommandError as e:
|
|
265
|
-
self.assertEqual(
|
|
266
|
-
"Cannot specify option --disable-reason without "
|
|
267
|
-
"--disable specified.",
|
|
268
|
-
str(e),
|
|
269
|
-
)
|
|
270
|
-
|
|
271
|
-
def test_service_set_enable_with_disable_reason(self):
|
|
272
|
-
reason = 'earthquake'
|
|
273
|
-
arglist = [
|
|
274
|
-
'--enable',
|
|
275
|
-
'--disable-reason',
|
|
276
|
-
reason,
|
|
277
|
-
self.service.host,
|
|
278
|
-
self.service.binary,
|
|
279
|
-
]
|
|
280
|
-
verifylist = [
|
|
281
|
-
('enable', True),
|
|
282
|
-
('disable_reason', reason),
|
|
283
|
-
('host', self.service.host),
|
|
284
|
-
('service', self.service.binary),
|
|
285
|
-
]
|
|
286
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
287
|
-
try:
|
|
288
|
-
self.cmd.take_action(parsed_args)
|
|
289
|
-
self.fail("CommandError should be raised.")
|
|
290
|
-
except exceptions.CommandError as e:
|
|
291
|
-
self.assertEqual(
|
|
292
|
-
"Cannot specify option --disable-reason without "
|
|
293
|
-
"--disable specified.",
|
|
294
|
-
str(e),
|
|
295
|
-
)
|
|
@@ -1,380 +0,0 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
3
|
-
# not use this file except in compliance with the License. You may obtain
|
|
4
|
-
# a copy of the License at
|
|
5
|
-
#
|
|
6
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
-
#
|
|
8
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
-
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
10
|
-
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
11
|
-
# License for the specific language governing permissions and limitations
|
|
12
|
-
# under the License.
|
|
13
|
-
#
|
|
14
|
-
|
|
15
|
-
from unittest import mock
|
|
16
|
-
from unittest.mock import call
|
|
17
|
-
|
|
18
|
-
from osc_lib import exceptions
|
|
19
|
-
from osc_lib import utils
|
|
20
|
-
|
|
21
|
-
from openstackclient.tests.unit.volume.v1 import fakes as volume_fakes
|
|
22
|
-
from openstackclient.volume.v1 import volume_transfer_request
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class TestTransfer(volume_fakes.TestVolumev1):
|
|
26
|
-
def setUp(self):
|
|
27
|
-
super().setUp()
|
|
28
|
-
|
|
29
|
-
# Get a shortcut to the TransferManager Mock
|
|
30
|
-
self.transfer_mock = self.volume_client.transfers
|
|
31
|
-
self.transfer_mock.reset_mock()
|
|
32
|
-
|
|
33
|
-
# Get a shortcut to the VolumeManager Mock
|
|
34
|
-
self.volumes_mock = self.volume_client.volumes
|
|
35
|
-
self.volumes_mock.reset_mock()
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class TestTransferAccept(TestTransfer):
|
|
39
|
-
columns = (
|
|
40
|
-
'id',
|
|
41
|
-
'name',
|
|
42
|
-
'volume_id',
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
def setUp(self):
|
|
46
|
-
super().setUp()
|
|
47
|
-
|
|
48
|
-
self.volume_transfer = volume_fakes.create_one_transfer()
|
|
49
|
-
self.data = (
|
|
50
|
-
self.volume_transfer.id,
|
|
51
|
-
self.volume_transfer.name,
|
|
52
|
-
self.volume_transfer.volume_id,
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
self.transfer_mock.get.return_value = self.volume_transfer
|
|
56
|
-
self.transfer_mock.accept.return_value = self.volume_transfer
|
|
57
|
-
|
|
58
|
-
# Get the command object to test
|
|
59
|
-
self.cmd = volume_transfer_request.AcceptTransferRequest(
|
|
60
|
-
self.app, None
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
def test_transfer_accept(self):
|
|
64
|
-
arglist = [
|
|
65
|
-
'--auth-key',
|
|
66
|
-
'key_value',
|
|
67
|
-
self.volume_transfer.id,
|
|
68
|
-
]
|
|
69
|
-
verifylist = [
|
|
70
|
-
('transfer_request', self.volume_transfer.id),
|
|
71
|
-
('auth_key', 'key_value'),
|
|
72
|
-
]
|
|
73
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
74
|
-
|
|
75
|
-
columns, data = self.cmd.take_action(parsed_args)
|
|
76
|
-
|
|
77
|
-
self.transfer_mock.get.assert_called_once_with(
|
|
78
|
-
self.volume_transfer.id,
|
|
79
|
-
)
|
|
80
|
-
self.transfer_mock.accept.assert_called_once_with(
|
|
81
|
-
self.volume_transfer.id,
|
|
82
|
-
'key_value',
|
|
83
|
-
)
|
|
84
|
-
self.assertEqual(self.columns, columns)
|
|
85
|
-
self.assertEqual(self.data, data)
|
|
86
|
-
|
|
87
|
-
def test_transfer_accept_no_option(self):
|
|
88
|
-
arglist = [
|
|
89
|
-
self.volume_transfer.id,
|
|
90
|
-
]
|
|
91
|
-
verifylist = [
|
|
92
|
-
('transfer_request', self.volume_transfer.id),
|
|
93
|
-
]
|
|
94
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
95
|
-
|
|
96
|
-
self.assertRaises(
|
|
97
|
-
exceptions.CommandError,
|
|
98
|
-
self.cmd.take_action,
|
|
99
|
-
parsed_args,
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
class TestTransferCreate(TestTransfer):
|
|
104
|
-
volume = volume_fakes.create_one_volume()
|
|
105
|
-
|
|
106
|
-
columns = (
|
|
107
|
-
'auth_key',
|
|
108
|
-
'created_at',
|
|
109
|
-
'id',
|
|
110
|
-
'name',
|
|
111
|
-
'volume_id',
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
def setUp(self):
|
|
115
|
-
super().setUp()
|
|
116
|
-
|
|
117
|
-
self.volume_transfer = volume_fakes.create_one_transfer(
|
|
118
|
-
attrs={
|
|
119
|
-
'volume_id': self.volume.id,
|
|
120
|
-
'auth_key': 'key',
|
|
121
|
-
'created_at': 'time',
|
|
122
|
-
},
|
|
123
|
-
)
|
|
124
|
-
self.data = (
|
|
125
|
-
self.volume_transfer.auth_key,
|
|
126
|
-
self.volume_transfer.created_at,
|
|
127
|
-
self.volume_transfer.id,
|
|
128
|
-
self.volume_transfer.name,
|
|
129
|
-
self.volume_transfer.volume_id,
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
self.transfer_mock.create.return_value = self.volume_transfer
|
|
133
|
-
self.volumes_mock.get.return_value = self.volume
|
|
134
|
-
|
|
135
|
-
# Get the command object to test
|
|
136
|
-
self.cmd = volume_transfer_request.CreateTransferRequest(
|
|
137
|
-
self.app, None
|
|
138
|
-
)
|
|
139
|
-
|
|
140
|
-
def test_transfer_create_without_name(self):
|
|
141
|
-
arglist = [
|
|
142
|
-
self.volume.id,
|
|
143
|
-
]
|
|
144
|
-
verifylist = [
|
|
145
|
-
('volume', self.volume.id),
|
|
146
|
-
]
|
|
147
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
148
|
-
|
|
149
|
-
columns, data = self.cmd.take_action(parsed_args)
|
|
150
|
-
|
|
151
|
-
self.transfer_mock.create.assert_called_once_with(self.volume.id, None)
|
|
152
|
-
self.assertEqual(self.columns, columns)
|
|
153
|
-
self.assertEqual(self.data, data)
|
|
154
|
-
|
|
155
|
-
def test_transfer_create_with_name(self):
|
|
156
|
-
arglist = [
|
|
157
|
-
'--name',
|
|
158
|
-
self.volume_transfer.name,
|
|
159
|
-
self.volume.id,
|
|
160
|
-
]
|
|
161
|
-
verifylist = [
|
|
162
|
-
('name', self.volume_transfer.name),
|
|
163
|
-
('volume', self.volume.id),
|
|
164
|
-
]
|
|
165
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
166
|
-
|
|
167
|
-
columns, data = self.cmd.take_action(parsed_args)
|
|
168
|
-
|
|
169
|
-
self.transfer_mock.create.assert_called_once_with(
|
|
170
|
-
self.volume.id,
|
|
171
|
-
self.volume_transfer.name,
|
|
172
|
-
)
|
|
173
|
-
self.assertEqual(self.columns, columns)
|
|
174
|
-
self.assertEqual(self.data, data)
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
class TestTransferDelete(TestTransfer):
|
|
178
|
-
volume_transfers = volume_fakes.create_transfers(count=2)
|
|
179
|
-
|
|
180
|
-
def setUp(self):
|
|
181
|
-
super().setUp()
|
|
182
|
-
|
|
183
|
-
self.transfer_mock.get = volume_fakes.get_transfers(
|
|
184
|
-
self.volume_transfers,
|
|
185
|
-
)
|
|
186
|
-
self.transfer_mock.delete.return_value = None
|
|
187
|
-
|
|
188
|
-
# Get the command object to mock
|
|
189
|
-
self.cmd = volume_transfer_request.DeleteTransferRequest(
|
|
190
|
-
self.app, None
|
|
191
|
-
)
|
|
192
|
-
|
|
193
|
-
def test_transfer_delete(self):
|
|
194
|
-
arglist = [self.volume_transfers[0].id]
|
|
195
|
-
verifylist = [("transfer_request", [self.volume_transfers[0].id])]
|
|
196
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
197
|
-
|
|
198
|
-
result = self.cmd.take_action(parsed_args)
|
|
199
|
-
|
|
200
|
-
self.transfer_mock.delete.assert_called_with(
|
|
201
|
-
self.volume_transfers[0].id
|
|
202
|
-
)
|
|
203
|
-
self.assertIsNone(result)
|
|
204
|
-
|
|
205
|
-
def test_delete_multiple_transfers(self):
|
|
206
|
-
arglist = []
|
|
207
|
-
for v in self.volume_transfers:
|
|
208
|
-
arglist.append(v.id)
|
|
209
|
-
verifylist = [
|
|
210
|
-
('transfer_request', arglist),
|
|
211
|
-
]
|
|
212
|
-
|
|
213
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
214
|
-
result = self.cmd.take_action(parsed_args)
|
|
215
|
-
|
|
216
|
-
calls = []
|
|
217
|
-
for v in self.volume_transfers:
|
|
218
|
-
calls.append(call(v.id))
|
|
219
|
-
self.transfer_mock.delete.assert_has_calls(calls)
|
|
220
|
-
self.assertIsNone(result)
|
|
221
|
-
|
|
222
|
-
def test_delete_multiple_transfers_with_exception(self):
|
|
223
|
-
arglist = [
|
|
224
|
-
self.volume_transfers[0].id,
|
|
225
|
-
'unexist_transfer',
|
|
226
|
-
]
|
|
227
|
-
verifylist = [
|
|
228
|
-
('transfer_request', arglist),
|
|
229
|
-
]
|
|
230
|
-
|
|
231
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
232
|
-
|
|
233
|
-
find_mock_result = [self.volume_transfers[0], exceptions.CommandError]
|
|
234
|
-
with mock.patch.object(
|
|
235
|
-
utils, 'find_resource', side_effect=find_mock_result
|
|
236
|
-
) as find_mock:
|
|
237
|
-
try:
|
|
238
|
-
self.cmd.take_action(parsed_args)
|
|
239
|
-
self.fail('CommandError should be raised.')
|
|
240
|
-
except exceptions.CommandError as e:
|
|
241
|
-
self.assertEqual(
|
|
242
|
-
'1 of 2 volume transfer requests failed ' 'to delete',
|
|
243
|
-
str(e),
|
|
244
|
-
)
|
|
245
|
-
|
|
246
|
-
find_mock.assert_any_call(
|
|
247
|
-
self.transfer_mock, self.volume_transfers[0].id
|
|
248
|
-
)
|
|
249
|
-
find_mock.assert_any_call(self.transfer_mock, 'unexist_transfer')
|
|
250
|
-
|
|
251
|
-
self.assertEqual(2, find_mock.call_count)
|
|
252
|
-
self.transfer_mock.delete.assert_called_once_with(
|
|
253
|
-
self.volume_transfers[0].id,
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
class TestTransferList(TestTransfer):
|
|
258
|
-
# The Transfers to be listed
|
|
259
|
-
volume_transfers = volume_fakes.create_one_transfer()
|
|
260
|
-
|
|
261
|
-
def setUp(self):
|
|
262
|
-
super().setUp()
|
|
263
|
-
|
|
264
|
-
self.transfer_mock.list.return_value = [self.volume_transfers]
|
|
265
|
-
|
|
266
|
-
# Get the command object to test
|
|
267
|
-
self.cmd = volume_transfer_request.ListTransferRequest(self.app, None)
|
|
268
|
-
|
|
269
|
-
def test_transfer_list_without_argument(self):
|
|
270
|
-
arglist = []
|
|
271
|
-
verifylist = []
|
|
272
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
273
|
-
|
|
274
|
-
# In base command class Lister in cliff, abstract method take_action()
|
|
275
|
-
# returns a tuple containing the column names and an iterable
|
|
276
|
-
# containing the data to be listed.
|
|
277
|
-
columns, data = self.cmd.take_action(parsed_args)
|
|
278
|
-
|
|
279
|
-
expected_columns = [
|
|
280
|
-
'ID',
|
|
281
|
-
'Name',
|
|
282
|
-
'Volume',
|
|
283
|
-
]
|
|
284
|
-
|
|
285
|
-
# confirming if all expected columns are present in the result.
|
|
286
|
-
self.assertEqual(expected_columns, columns)
|
|
287
|
-
|
|
288
|
-
datalist = (
|
|
289
|
-
(
|
|
290
|
-
self.volume_transfers.id,
|
|
291
|
-
self.volume_transfers.name,
|
|
292
|
-
self.volume_transfers.volume_id,
|
|
293
|
-
),
|
|
294
|
-
)
|
|
295
|
-
|
|
296
|
-
# confirming if all expected values are present in the result.
|
|
297
|
-
self.assertEqual(datalist, tuple(data))
|
|
298
|
-
|
|
299
|
-
# checking if proper call was made to list volume_transfers
|
|
300
|
-
self.transfer_mock.list.assert_called_with(
|
|
301
|
-
detailed=True, search_opts={'all_tenants': 0}
|
|
302
|
-
)
|
|
303
|
-
|
|
304
|
-
def test_transfer_list_with_argument(self):
|
|
305
|
-
arglist = ["--all-projects"]
|
|
306
|
-
verifylist = [("all_projects", True)]
|
|
307
|
-
|
|
308
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
309
|
-
|
|
310
|
-
# In base command class Lister in cliff, abstract method take_action()
|
|
311
|
-
# returns a tuple containing the column names and an iterable
|
|
312
|
-
# containing the data to be listed.
|
|
313
|
-
columns, data = self.cmd.take_action(parsed_args)
|
|
314
|
-
|
|
315
|
-
expected_columns = [
|
|
316
|
-
'ID',
|
|
317
|
-
'Name',
|
|
318
|
-
'Volume',
|
|
319
|
-
]
|
|
320
|
-
|
|
321
|
-
# confirming if all expected columns are present in the result.
|
|
322
|
-
self.assertEqual(expected_columns, columns)
|
|
323
|
-
|
|
324
|
-
datalist = (
|
|
325
|
-
(
|
|
326
|
-
self.volume_transfers.id,
|
|
327
|
-
self.volume_transfers.name,
|
|
328
|
-
self.volume_transfers.volume_id,
|
|
329
|
-
),
|
|
330
|
-
)
|
|
331
|
-
|
|
332
|
-
# confirming if all expected values are present in the result.
|
|
333
|
-
self.assertEqual(datalist, tuple(data))
|
|
334
|
-
|
|
335
|
-
# checking if proper call was made to list volume_transfers
|
|
336
|
-
self.transfer_mock.list.assert_called_with(
|
|
337
|
-
detailed=True, search_opts={'all_tenants': 1}
|
|
338
|
-
)
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
class TestTransferShow(TestTransfer):
|
|
342
|
-
columns = (
|
|
343
|
-
'created_at',
|
|
344
|
-
'id',
|
|
345
|
-
'name',
|
|
346
|
-
'volume_id',
|
|
347
|
-
)
|
|
348
|
-
|
|
349
|
-
def setUp(self):
|
|
350
|
-
super().setUp()
|
|
351
|
-
|
|
352
|
-
self.volume_transfer = volume_fakes.create_one_transfer(
|
|
353
|
-
attrs={'created_at': 'time'}
|
|
354
|
-
)
|
|
355
|
-
self.data = (
|
|
356
|
-
self.volume_transfer.created_at,
|
|
357
|
-
self.volume_transfer.id,
|
|
358
|
-
self.volume_transfer.name,
|
|
359
|
-
self.volume_transfer.volume_id,
|
|
360
|
-
)
|
|
361
|
-
|
|
362
|
-
self.transfer_mock.get.return_value = self.volume_transfer
|
|
363
|
-
|
|
364
|
-
# Get the command object to test
|
|
365
|
-
self.cmd = volume_transfer_request.ShowTransferRequest(self.app, None)
|
|
366
|
-
|
|
367
|
-
def test_transfer_show(self):
|
|
368
|
-
arglist = [
|
|
369
|
-
self.volume_transfer.id,
|
|
370
|
-
]
|
|
371
|
-
verifylist = [
|
|
372
|
-
('transfer_request', self.volume_transfer.id),
|
|
373
|
-
]
|
|
374
|
-
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
375
|
-
|
|
376
|
-
columns, data = self.cmd.take_action(parsed_args)
|
|
377
|
-
|
|
378
|
-
self.transfer_mock.get.assert_called_once_with(self.volume_transfer.id)
|
|
379
|
-
self.assertEqual(self.columns, columns)
|
|
380
|
-
self.assertEqual(self.data, data)
|