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
|
@@ -12,108 +12,83 @@
|
|
|
12
12
|
# under the License.
|
|
13
13
|
#
|
|
14
14
|
|
|
15
|
-
from
|
|
15
|
+
from unittest import mock
|
|
16
|
+
|
|
17
|
+
from openstack.block_storage.v3 import service as _service
|
|
18
|
+
from openstack.test import fakes as sdk_fakes
|
|
19
|
+
from osc_lib import exceptions
|
|
16
20
|
|
|
17
21
|
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
|
|
18
22
|
from openstackclient.volume.v3 import service
|
|
19
23
|
|
|
20
24
|
|
|
21
|
-
class
|
|
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
|
-
|
|
25
|
+
class TestServiceList(volume_fakes.TestVolume):
|
|
34
26
|
def setUp(self):
|
|
35
27
|
super().setUp()
|
|
36
28
|
|
|
37
|
-
self.
|
|
29
|
+
self.service = sdk_fakes.generate_fake_resource(_service.Service)
|
|
30
|
+
self.volume_sdk_client.services.return_value = [self.service]
|
|
38
31
|
|
|
39
|
-
# Get the command object to test
|
|
40
32
|
self.cmd = service.ListService(self.app, None)
|
|
41
33
|
|
|
42
34
|
def test_service_list(self):
|
|
43
35
|
arglist = [
|
|
44
36
|
'--host',
|
|
45
|
-
self.
|
|
37
|
+
self.service.host,
|
|
46
38
|
'--service',
|
|
47
|
-
self.
|
|
39
|
+
self.service.binary,
|
|
48
40
|
]
|
|
49
41
|
verifylist = [
|
|
50
|
-
('host', self.
|
|
51
|
-
('service', self.
|
|
42
|
+
('host', self.service.host),
|
|
43
|
+
('service', self.service.binary),
|
|
52
44
|
]
|
|
53
45
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
54
46
|
|
|
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
47
|
columns, data = self.cmd.take_action(parsed_args)
|
|
59
48
|
|
|
60
|
-
expected_columns =
|
|
49
|
+
expected_columns = (
|
|
61
50
|
'Binary',
|
|
62
51
|
'Host',
|
|
63
52
|
'Zone',
|
|
64
53
|
'Status',
|
|
65
54
|
'State',
|
|
66
55
|
'Updated At',
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
# confirming if all expected columns are present in the result.
|
|
70
|
-
self.assertEqual(expected_columns, columns)
|
|
71
|
-
|
|
56
|
+
)
|
|
72
57
|
datalist = (
|
|
73
58
|
(
|
|
74
|
-
self.
|
|
75
|
-
self.
|
|
76
|
-
self.
|
|
77
|
-
self.
|
|
78
|
-
self.
|
|
79
|
-
self.
|
|
59
|
+
self.service.binary,
|
|
60
|
+
self.service.host,
|
|
61
|
+
self.service.availability_zone,
|
|
62
|
+
self.service.status,
|
|
63
|
+
self.service.state,
|
|
64
|
+
self.service.updated_at,
|
|
80
65
|
),
|
|
81
66
|
)
|
|
82
|
-
|
|
83
|
-
# confirming if all expected values are present in the result.
|
|
67
|
+
self.assertEqual(expected_columns, columns)
|
|
84
68
|
self.assertEqual(datalist, tuple(data))
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
self.services.host,
|
|
89
|
-
self.services.binary,
|
|
69
|
+
self.volume_sdk_client.services.assert_called_with(
|
|
70
|
+
host=self.service.host,
|
|
71
|
+
binary=self.service.binary,
|
|
90
72
|
)
|
|
91
73
|
|
|
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
74
|
def test_service_list_with_long_option(self):
|
|
97
75
|
arglist = [
|
|
98
76
|
'--host',
|
|
99
|
-
self.
|
|
77
|
+
self.service.host,
|
|
100
78
|
'--service',
|
|
101
|
-
self.
|
|
79
|
+
self.service.binary,
|
|
102
80
|
'--long',
|
|
103
81
|
]
|
|
104
82
|
verifylist = [
|
|
105
|
-
('host', self.
|
|
106
|
-
('service', self.
|
|
83
|
+
('host', self.service.host),
|
|
84
|
+
('service', self.service.binary),
|
|
107
85
|
('long', True),
|
|
108
86
|
]
|
|
109
87
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
110
88
|
|
|
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
89
|
columns, data = self.cmd.take_action(parsed_args)
|
|
115
90
|
|
|
116
|
-
expected_columns =
|
|
91
|
+
expected_columns = (
|
|
117
92
|
'Binary',
|
|
118
93
|
'Host',
|
|
119
94
|
'Zone',
|
|
@@ -121,55 +96,43 @@ class TestServiceList(TestService):
|
|
|
121
96
|
'State',
|
|
122
97
|
'Updated At',
|
|
123
98
|
'Disabled Reason',
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
# confirming if all expected columns are present in the result.
|
|
127
|
-
self.assertEqual(expected_columns, columns)
|
|
128
|
-
|
|
99
|
+
)
|
|
129
100
|
datalist = (
|
|
130
101
|
(
|
|
131
|
-
self.
|
|
132
|
-
self.
|
|
133
|
-
self.
|
|
134
|
-
self.
|
|
135
|
-
self.
|
|
136
|
-
self.
|
|
137
|
-
self.
|
|
102
|
+
self.service.binary,
|
|
103
|
+
self.service.host,
|
|
104
|
+
self.service.availability_zone,
|
|
105
|
+
self.service.status,
|
|
106
|
+
self.service.state,
|
|
107
|
+
self.service.updated_at,
|
|
108
|
+
self.service.disabled_reason,
|
|
138
109
|
),
|
|
139
110
|
)
|
|
140
|
-
|
|
141
|
-
# confirming if all expected values are present in the result.
|
|
111
|
+
self.assertEqual(expected_columns, columns)
|
|
142
112
|
self.assertEqual(datalist, tuple(data))
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
self.
|
|
146
|
-
self.services.binary,
|
|
113
|
+
self.volume_sdk_client.services.assert_called_with(
|
|
114
|
+
host=self.service.host,
|
|
115
|
+
binary=self.service.binary,
|
|
147
116
|
)
|
|
148
117
|
|
|
149
118
|
def test_service_list_with_cluster(self):
|
|
150
|
-
self.
|
|
151
|
-
cluster = {'cluster': 'fake-cluster'}
|
|
152
|
-
cluster_service = volume_fakes.create_one_service(attrs=cluster)
|
|
153
|
-
self.service_mock.list.return_value = [cluster_service]
|
|
119
|
+
self.set_volume_api_version('3.7')
|
|
154
120
|
|
|
155
121
|
arglist = [
|
|
156
122
|
'--host',
|
|
157
|
-
|
|
123
|
+
self.service.host,
|
|
158
124
|
'--service',
|
|
159
|
-
|
|
125
|
+
self.service.binary,
|
|
160
126
|
]
|
|
161
127
|
verifylist = [
|
|
162
|
-
('host',
|
|
163
|
-
('service',
|
|
128
|
+
('host', self.service.host),
|
|
129
|
+
('service', self.service.binary),
|
|
164
130
|
]
|
|
165
131
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
166
132
|
|
|
167
|
-
# In base command class Lister in cliff, abstract method take_action()
|
|
168
|
-
# returns a tuple containing the column names and an iterable
|
|
169
|
-
# containing the data to be listed.
|
|
170
133
|
columns, data = self.cmd.take_action(parsed_args)
|
|
171
134
|
|
|
172
|
-
expected_columns =
|
|
135
|
+
expected_columns = (
|
|
173
136
|
'Binary',
|
|
174
137
|
'Host',
|
|
175
138
|
'Zone',
|
|
@@ -177,60 +140,43 @@ class TestServiceList(TestService):
|
|
|
177
140
|
'State',
|
|
178
141
|
'Updated At',
|
|
179
142
|
'Cluster',
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
# confirming if all expected columns are present in the result.
|
|
183
|
-
self.assertEqual(expected_columns, columns)
|
|
184
|
-
|
|
143
|
+
)
|
|
185
144
|
datalist = (
|
|
186
145
|
(
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
146
|
+
self.service.binary,
|
|
147
|
+
self.service.host,
|
|
148
|
+
self.service.availability_zone,
|
|
149
|
+
self.service.status,
|
|
150
|
+
self.service.state,
|
|
151
|
+
self.service.updated_at,
|
|
152
|
+
self.service.cluster,
|
|
194
153
|
),
|
|
195
154
|
)
|
|
196
|
-
|
|
197
|
-
# confirming if all expected values are present in the result.
|
|
155
|
+
self.assertEqual(expected_columns, columns)
|
|
198
156
|
self.assertEqual(datalist, tuple(data))
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
cluster_service.host,
|
|
203
|
-
cluster_service.binary,
|
|
157
|
+
self.volume_sdk_client.services.assert_called_with(
|
|
158
|
+
host=self.service.host,
|
|
159
|
+
binary=self.service.binary,
|
|
204
160
|
)
|
|
205
161
|
|
|
206
|
-
# checking if prohibited columns are present in output
|
|
207
|
-
self.assertNotIn("Disabled Reason", columns)
|
|
208
|
-
self.assertNotIn(cluster_service.disabled_reason, tuple(data))
|
|
209
|
-
|
|
210
162
|
def test_service_list_with_backend_state(self):
|
|
211
|
-
self.
|
|
212
|
-
backend_state = {'cluster': 'fake-cluster', 'backend_state': 'up'}
|
|
213
|
-
backend_service = volume_fakes.create_one_service(attrs=backend_state)
|
|
214
|
-
self.service_mock.list.return_value = [backend_service]
|
|
163
|
+
self.set_volume_api_version('3.49')
|
|
215
164
|
|
|
216
165
|
arglist = [
|
|
217
166
|
'--host',
|
|
218
|
-
|
|
167
|
+
self.service.host,
|
|
219
168
|
'--service',
|
|
220
|
-
|
|
169
|
+
self.service.binary,
|
|
221
170
|
]
|
|
222
171
|
verifylist = [
|
|
223
|
-
('host',
|
|
224
|
-
('service',
|
|
172
|
+
('host', self.service.host),
|
|
173
|
+
('service', self.service.binary),
|
|
225
174
|
]
|
|
226
175
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
227
176
|
|
|
228
|
-
# In base command class Lister in cliff, abstract method take_action()
|
|
229
|
-
# returns a tuple containing the column names and an iterable
|
|
230
|
-
# containing the data to be listed.
|
|
231
177
|
columns, data = self.cmd.take_action(parsed_args)
|
|
232
178
|
|
|
233
|
-
expected_columns =
|
|
179
|
+
expected_columns = (
|
|
234
180
|
'Binary',
|
|
235
181
|
'Host',
|
|
236
182
|
'Zone',
|
|
@@ -239,33 +185,167 @@ class TestServiceList(TestService):
|
|
|
239
185
|
'Updated At',
|
|
240
186
|
'Cluster',
|
|
241
187
|
'Backend State',
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
# confirming if all expected columns are present in the result.
|
|
245
|
-
self.assertEqual(expected_columns, columns)
|
|
246
|
-
|
|
188
|
+
)
|
|
247
189
|
datalist = (
|
|
248
190
|
(
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
191
|
+
self.service.binary,
|
|
192
|
+
self.service.host,
|
|
193
|
+
self.service.availability_zone,
|
|
194
|
+
self.service.status,
|
|
195
|
+
self.service.state,
|
|
196
|
+
self.service.updated_at,
|
|
197
|
+
self.service.cluster,
|
|
198
|
+
self.service.backend_state,
|
|
257
199
|
),
|
|
258
200
|
)
|
|
259
|
-
|
|
260
|
-
# confirming if all expected values are present in the result.
|
|
201
|
+
self.assertEqual(expected_columns, columns)
|
|
261
202
|
self.assertEqual(datalist, tuple(data))
|
|
203
|
+
self.volume_sdk_client.services.assert_called_with(
|
|
204
|
+
host=self.service.host,
|
|
205
|
+
binary=self.service.binary,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class TestServiceSet(volume_fakes.TestVolume):
|
|
210
|
+
def setUp(self):
|
|
211
|
+
super().setUp()
|
|
262
212
|
|
|
263
|
-
|
|
264
|
-
self.
|
|
265
|
-
|
|
266
|
-
|
|
213
|
+
self.service = sdk_fakes.generate_fake_resource(_service.Service)
|
|
214
|
+
self.service.enable = mock.Mock(autospec=True)
|
|
215
|
+
self.service.disable = mock.Mock(autospec=True)
|
|
216
|
+
self.volume_sdk_client.find_service.return_value = self.service
|
|
217
|
+
|
|
218
|
+
self.cmd = service.SetService(self.app, None)
|
|
219
|
+
|
|
220
|
+
def test_service_set_nothing(self):
|
|
221
|
+
arglist = [
|
|
222
|
+
self.service.host,
|
|
223
|
+
self.service.binary,
|
|
224
|
+
]
|
|
225
|
+
verifylist = [
|
|
226
|
+
('host', self.service.host),
|
|
227
|
+
('service', self.service.binary),
|
|
228
|
+
]
|
|
229
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
230
|
+
result = self.cmd.take_action(parsed_args)
|
|
231
|
+
|
|
232
|
+
self.service.enable.assert_not_called()
|
|
233
|
+
self.service.disable.assert_not_called()
|
|
234
|
+
self.assertIsNone(result)
|
|
235
|
+
|
|
236
|
+
def test_service_set_enable(self):
|
|
237
|
+
arglist = [
|
|
238
|
+
'--enable',
|
|
239
|
+
self.service.host,
|
|
240
|
+
self.service.binary,
|
|
241
|
+
]
|
|
242
|
+
verifylist = [
|
|
243
|
+
('enable', True),
|
|
244
|
+
('host', self.service.host),
|
|
245
|
+
('service', self.service.binary),
|
|
246
|
+
]
|
|
247
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
248
|
+
|
|
249
|
+
result = self.cmd.take_action(parsed_args)
|
|
250
|
+
|
|
251
|
+
self.service.enable.assert_called_with(self.volume_sdk_client)
|
|
252
|
+
self.service.disable.assert_not_called()
|
|
253
|
+
self.assertIsNone(result)
|
|
254
|
+
|
|
255
|
+
def test_service_set_disable(self):
|
|
256
|
+
arglist = [
|
|
257
|
+
'--disable',
|
|
258
|
+
self.service.host,
|
|
259
|
+
self.service.binary,
|
|
260
|
+
]
|
|
261
|
+
verifylist = [
|
|
262
|
+
('disable', True),
|
|
263
|
+
('host', self.service.host),
|
|
264
|
+
('service', self.service.binary),
|
|
265
|
+
]
|
|
266
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
267
|
+
|
|
268
|
+
result = self.cmd.take_action(parsed_args)
|
|
269
|
+
|
|
270
|
+
self.service.enable.assert_not_called()
|
|
271
|
+
self.service.disable.assert_called_with(
|
|
272
|
+
self.volume_sdk_client, reason=None
|
|
267
273
|
)
|
|
274
|
+
self.assertIsNone(result)
|
|
275
|
+
|
|
276
|
+
def test_service_set_disable_with_reason(self):
|
|
277
|
+
reason = 'earthquake'
|
|
278
|
+
arglist = [
|
|
279
|
+
'--disable',
|
|
280
|
+
'--disable-reason',
|
|
281
|
+
reason,
|
|
282
|
+
self.service.host,
|
|
283
|
+
self.service.binary,
|
|
284
|
+
]
|
|
285
|
+
verifylist = [
|
|
286
|
+
('disable', True),
|
|
287
|
+
('disable_reason', reason),
|
|
288
|
+
('host', self.service.host),
|
|
289
|
+
('service', self.service.binary),
|
|
290
|
+
]
|
|
291
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
292
|
+
|
|
293
|
+
result = self.cmd.take_action(parsed_args)
|
|
294
|
+
|
|
295
|
+
self.service.enable.assert_not_called()
|
|
296
|
+
self.service.disable.assert_called_with(
|
|
297
|
+
self.volume_sdk_client, reason=reason
|
|
298
|
+
)
|
|
299
|
+
self.assertIsNone(result)
|
|
300
|
+
|
|
301
|
+
def test_service_set_only_with_disable_reason(self):
|
|
302
|
+
reason = 'earthquake'
|
|
303
|
+
arglist = [
|
|
304
|
+
'--disable-reason',
|
|
305
|
+
reason,
|
|
306
|
+
self.service.host,
|
|
307
|
+
self.service.binary,
|
|
308
|
+
]
|
|
309
|
+
verifylist = [
|
|
310
|
+
('disable_reason', reason),
|
|
311
|
+
('host', self.service.host),
|
|
312
|
+
('service', self.service.binary),
|
|
313
|
+
]
|
|
314
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
315
|
+
|
|
316
|
+
try:
|
|
317
|
+
self.cmd.take_action(parsed_args)
|
|
318
|
+
self.fail("CommandError should be raised.")
|
|
319
|
+
except exceptions.CommandError as e:
|
|
320
|
+
self.assertEqual(
|
|
321
|
+
"Cannot specify option --disable-reason without "
|
|
322
|
+
"--disable specified.",
|
|
323
|
+
str(e),
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
def test_service_set_enable_with_disable_reason(self):
|
|
327
|
+
reason = 'earthquake'
|
|
328
|
+
arglist = [
|
|
329
|
+
'--enable',
|
|
330
|
+
'--disable-reason',
|
|
331
|
+
reason,
|
|
332
|
+
self.service.host,
|
|
333
|
+
self.service.binary,
|
|
334
|
+
]
|
|
335
|
+
verifylist = [
|
|
336
|
+
('enable', True),
|
|
337
|
+
('disable_reason', reason),
|
|
338
|
+
('host', self.service.host),
|
|
339
|
+
('service', self.service.binary),
|
|
340
|
+
]
|
|
341
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
268
342
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
343
|
+
try:
|
|
344
|
+
self.cmd.take_action(parsed_args)
|
|
345
|
+
self.fail("CommandError should be raised.")
|
|
346
|
+
except exceptions.CommandError as e:
|
|
347
|
+
self.assertEqual(
|
|
348
|
+
"Cannot specify option --disable-reason without "
|
|
349
|
+
"--disable specified.",
|
|
350
|
+
str(e),
|
|
351
|
+
)
|