python-openstackclient 6.6.0__py3-none-any.whl → 7.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/api/api.py +7 -8
- openstackclient/api/compute_v2.py +352 -638
- openstackclient/api/image_v1.py +1 -1
- openstackclient/api/object_store_v1.py +3 -4
- openstackclient/common/availability_zone.py +1 -1
- openstackclient/common/clientmanager.py +16 -4
- openstackclient/common/configuration.py +1 -1
- openstackclient/common/extension.py +1 -1
- openstackclient/common/limits.py +66 -32
- openstackclient/common/module.py +3 -3
- openstackclient/common/progressbar.py +2 -2
- openstackclient/common/project_cleanup.py +5 -2
- openstackclient/common/quota.py +281 -410
- openstackclient/common/versions.py +1 -1
- openstackclient/compute/client.py +7 -116
- openstackclient/compute/v2/agent.py +75 -49
- openstackclient/compute/v2/aggregate.py +9 -9
- openstackclient/compute/v2/console.py +2 -2
- openstackclient/compute/v2/flavor.py +6 -6
- openstackclient/compute/v2/host.py +38 -33
- openstackclient/compute/v2/hypervisor.py +4 -3
- openstackclient/compute/v2/keypair.py +7 -8
- openstackclient/compute/v2/server.py +478 -396
- openstackclient/compute/v2/server_backup.py +1 -1
- openstackclient/compute/v2/server_group.py +4 -4
- openstackclient/compute/v2/server_image.py +1 -1
- openstackclient/compute/v2/server_migration.py +3 -4
- openstackclient/compute/v2/service.py +4 -4
- openstackclient/compute/v2/usage.py +3 -3
- openstackclient/identity/common.py +34 -0
- openstackclient/identity/v2_0/catalog.py +2 -2
- openstackclient/identity/v2_0/ec2creds.py +4 -4
- openstackclient/identity/v2_0/endpoint.py +4 -4
- openstackclient/identity/v2_0/project.py +6 -6
- openstackclient/identity/v2_0/role.py +5 -5
- openstackclient/identity/v2_0/role_assignment.py +1 -1
- openstackclient/identity/v2_0/service.py +4 -4
- openstackclient/identity/v2_0/token.py +2 -2
- openstackclient/identity/v2_0/user.py +7 -7
- openstackclient/identity/v3/access_rule.py +3 -3
- openstackclient/identity/v3/application_credential.py +127 -45
- openstackclient/identity/v3/catalog.py +2 -2
- openstackclient/identity/v3/consumer.py +4 -4
- openstackclient/identity/v3/credential.py +5 -5
- openstackclient/identity/v3/domain.py +5 -5
- openstackclient/identity/v3/ec2creds.py +4 -4
- openstackclient/identity/v3/endpoint.py +7 -7
- openstackclient/identity/v3/endpoint_group.py +8 -10
- openstackclient/identity/v3/federation_protocol.py +5 -5
- openstackclient/identity/v3/group.py +8 -8
- openstackclient/identity/v3/identity_provider.py +5 -5
- openstackclient/identity/v3/implied_role.py +3 -3
- openstackclient/identity/v3/limit.py +5 -5
- openstackclient/identity/v3/mapping.py +5 -5
- openstackclient/identity/v3/policy.py +5 -5
- openstackclient/identity/v3/project.py +5 -5
- openstackclient/identity/v3/region.py +5 -5
- openstackclient/identity/v3/registered_limit.py +5 -5
- openstackclient/identity/v3/role.py +7 -7
- openstackclient/identity/v3/role_assignment.py +92 -140
- openstackclient/identity/v3/service.py +64 -34
- openstackclient/identity/v3/service_provider.py +4 -4
- openstackclient/identity/v3/tag.py +2 -2
- openstackclient/identity/v3/token.py +5 -5
- openstackclient/identity/v3/trust.py +3 -3
- openstackclient/identity/v3/user.py +144 -80
- openstackclient/image/client.py +4 -4
- openstackclient/image/v1/image.py +8 -9
- openstackclient/image/v2/cache.py +12 -10
- openstackclient/image/v2/metadef_objects.py +44 -0
- openstackclient/image/v2/metadef_resource_type_association.py +189 -0
- openstackclient/image/v2/task.py +1 -1
- openstackclient/network/common.py +6 -5
- openstackclient/network/utils.py +2 -2
- openstackclient/network/v2/address_group.py +6 -6
- openstackclient/network/v2/address_scope.py +5 -5
- openstackclient/network/v2/default_security_group_rule.py +1 -1
- openstackclient/network/v2/floating_ip.py +8 -10
- openstackclient/network/v2/floating_ip_pool.py +6 -15
- openstackclient/network/v2/floating_ip_port_forwarding.py +5 -13
- openstackclient/network/v2/ip_availability.py +2 -2
- openstackclient/network/v2/l3_conntrack_helper.py +5 -5
- openstackclient/network/v2/network.py +8 -8
- openstackclient/network/v2/network_agent.py +8 -8
- openstackclient/network/v2/network_auto_allocated_topology.py +2 -2
- openstackclient/network/v2/network_flavor.py +6 -8
- openstackclient/network/v2/network_flavor_profile.py +4 -4
- openstackclient/network/v2/network_meter.py +3 -3
- openstackclient/network/v2/network_meter_rule.py +3 -3
- openstackclient/network/v2/network_qos_policy.py +5 -5
- openstackclient/network/v2/network_qos_rule.py +9 -9
- openstackclient/network/v2/network_qos_rule_type.py +1 -1
- openstackclient/network/v2/network_rbac.py +5 -5
- openstackclient/network/v2/network_segment.py +5 -5
- openstackclient/network/v2/network_segment_range.py +7 -7
- openstackclient/network/v2/network_trunk.py +7 -7
- openstackclient/network/v2/port.py +26 -12
- openstackclient/network/v2/router.py +403 -54
- openstackclient/network/v2/security_group.py +18 -14
- openstackclient/network/v2/security_group_rule.py +18 -15
- openstackclient/network/v2/subnet.py +15 -8
- openstackclient/network/v2/subnet_pool.py +6 -6
- openstackclient/object/v1/account.py +2 -2
- openstackclient/object/v1/container.py +7 -7
- openstackclient/object/v1/object.py +7 -7
- openstackclient/shell.py +4 -6
- openstackclient/tests/functional/base.py +1 -1
- openstackclient/tests/functional/common/test_extension.py +1 -1
- openstackclient/tests/functional/common/test_help.py +2 -2
- openstackclient/tests/functional/common/test_module.py +1 -1
- openstackclient/tests/functional/common/test_quota.py +43 -61
- openstackclient/tests/functional/compute/v2/common.py +2 -2
- openstackclient/tests/functional/compute/v2/test_flavor.py +2 -2
- openstackclient/tests/functional/compute/v2/test_keypair.py +1 -1
- openstackclient/tests/functional/compute/v2/test_server.py +5 -5
- openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
- openstackclient/tests/functional/identity/v2/common.py +3 -3
- openstackclient/tests/functional/identity/v3/common.py +14 -6
- openstackclient/tests/functional/identity/v3/test_application_credential.py +13 -19
- openstackclient/tests/functional/identity/v3/test_domain.py +1 -3
- openstackclient/tests/functional/identity/v3/test_endpoint.py +1 -1
- openstackclient/tests/functional/identity/v3/test_idp.py +1 -1
- openstackclient/tests/functional/identity/v3/test_limit.py +2 -2
- openstackclient/tests/functional/identity/v3/test_region.py +1 -3
- openstackclient/tests/functional/identity/v3/test_registered_limit.py +1 -1
- openstackclient/tests/functional/identity/v3/test_role.py +2 -2
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +210 -0
- openstackclient/tests/functional/identity/v3/test_service.py +4 -6
- openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -3
- openstackclient/tests/functional/image/base.py +1 -1
- openstackclient/tests/functional/image/v2/test_image.py +1 -1
- openstackclient/tests/functional/image/v2/test_info.py +1 -1
- openstackclient/tests/functional/network/v2/common.py +4 -6
- openstackclient/tests/functional/network/v2/test_network.py +5 -3
- openstackclient/tests/functional/network/v2/test_network_agent.py +7 -5
- openstackclient/tests/functional/network/v2/test_network_qos_rule.py +4 -4
- openstackclient/tests/functional/network/v2/test_port.py +11 -7
- openstackclient/tests/functional/network/v2/test_router.py +2 -2
- openstackclient/tests/functional/object/v1/common.py +1 -1
- openstackclient/tests/functional/object/v1/test_container.py +3 -3
- openstackclient/tests/functional/object/v1/test_object.py +9 -13
- openstackclient/tests/functional/volume/base.py +1 -1
- openstackclient/tests/functional/volume/v1/test_service.py +1 -1
- openstackclient/tests/functional/volume/v1/test_snapshot.py +2 -2
- openstackclient/tests/functional/volume/v1/test_transfer_request.py +2 -2
- openstackclient/tests/functional/volume/v1/test_volume_type.py +1 -1
- openstackclient/tests/functional/volume/v2/test_service.py +2 -2
- openstackclient/tests/functional/volume/v2/test_volume_backup.py +2 -2
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +2 -2
- openstackclient/tests/functional/volume/v2/test_volume_type.py +1 -1
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +2 -2
- openstackclient/tests/functional/volume/v3/test_volume_type.py +1 -1
- openstackclient/tests/unit/api/fakes.py +1 -1
- openstackclient/tests/unit/api/test_api.py +2 -2
- openstackclient/tests/unit/api/test_compute_v2.py +522 -707
- openstackclient/tests/unit/api/test_image_v1.py +1 -1
- openstackclient/tests/unit/api/test_image_v2.py +1 -1
- openstackclient/tests/unit/api/test_object_store_v1.py +4 -4
- openstackclient/tests/unit/common/test_limits.py +73 -35
- openstackclient/tests/unit/common/test_logs.py +2 -2
- openstackclient/tests/unit/common/test_module.py +4 -2
- openstackclient/tests/unit/common/test_project_cleanup.py +31 -6
- openstackclient/tests/unit/common/test_quota.py +490 -630
- openstackclient/tests/unit/compute/v2/fakes.py +37 -286
- openstackclient/tests/unit/compute/v2/test_agent.py +189 -147
- openstackclient/tests/unit/compute/v2/test_aggregate.py +18 -16
- openstackclient/tests/unit/compute/v2/test_console.py +4 -5
- openstackclient/tests/unit/compute/v2/test_flavor.py +59 -68
- openstackclient/tests/unit/compute/v2/test_host.py +83 -54
- openstackclient/tests/unit/compute/v2/test_hypervisor.py +28 -31
- openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
- openstackclient/tests/unit/compute/v2/test_keypair.py +65 -50
- openstackclient/tests/unit/compute/v2/test_server.py +2895 -2459
- openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
- openstackclient/tests/unit/compute/v2/test_server_event.py +14 -39
- openstackclient/tests/unit/compute/v2/test_server_group.py +28 -29
- openstackclient/tests/unit/compute/v2/test_server_migration.py +43 -68
- openstackclient/tests/unit/compute/v2/test_server_volume.py +17 -34
- openstackclient/tests/unit/compute/v2/test_service.py +34 -52
- openstackclient/tests/unit/compute/v2/test_usage.py +4 -4
- openstackclient/tests/unit/fakes.py +11 -11
- openstackclient/tests/unit/identity/v2_0/fakes.py +27 -10
- openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -3
- openstackclient/tests/unit/identity/v2_0/test_endpoint.py +7 -7
- openstackclient/tests/unit/identity/v2_0/test_project.py +8 -8
- openstackclient/tests/unit/identity/v2_0/test_role.py +10 -10
- openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +4 -4
- openstackclient/tests/unit/identity/v2_0/test_service.py +6 -6
- openstackclient/tests/unit/identity/v2_0/test_token.py +4 -4
- openstackclient/tests/unit/identity/v2_0/test_user.py +8 -8
- openstackclient/tests/unit/identity/v3/fakes.py +59 -20
- openstackclient/tests/unit/identity/v3/test_access_rule.py +5 -5
- openstackclient/tests/unit/identity/v3/test_application_credential.py +212 -235
- openstackclient/tests/unit/identity/v3/test_catalog.py +3 -3
- openstackclient/tests/unit/identity/v3/test_consumer.py +7 -8
- openstackclient/tests/unit/identity/v3/test_credential.py +9 -9
- openstackclient/tests/unit/identity/v3/test_domain.py +8 -8
- openstackclient/tests/unit/identity/v3/test_endpoint.py +13 -13
- openstackclient/tests/unit/identity/v3/test_endpoint_group.py +12 -14
- openstackclient/tests/unit/identity/v3/test_group.py +12 -12
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +8 -8
- openstackclient/tests/unit/identity/v3/test_implied_role.py +5 -5
- openstackclient/tests/unit/identity/v3/test_limit.py +7 -7
- openstackclient/tests/unit/identity/v3/test_mappings.py +7 -7
- openstackclient/tests/unit/identity/v3/test_oauth.py +5 -5
- openstackclient/tests/unit/identity/v3/test_project.py +16 -16
- openstackclient/tests/unit/identity/v3/test_protocol.py +7 -7
- openstackclient/tests/unit/identity/v3/test_region.py +7 -7
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +12 -13
- openstackclient/tests/unit/identity/v3/test_role.py +13 -13
- openstackclient/tests/unit/identity/v3/test_role_assignment.py +410 -331
- openstackclient/tests/unit/identity/v3/test_service.py +93 -97
- openstackclient/tests/unit/identity/v3/test_service_provider.py +7 -7
- openstackclient/tests/unit/identity/v3/test_token.py +4 -4
- openstackclient/tests/unit/identity/v3/test_trust.py +9 -9
- openstackclient/tests/unit/identity/v3/test_unscoped_saml.py +4 -4
- openstackclient/tests/unit/identity/v3/test_user.py +299 -327
- openstackclient/tests/unit/image/v1/test_image.py +6 -6
- openstackclient/tests/unit/image/v2/fakes.py +46 -9
- openstackclient/tests/unit/image/v2/test_cache.py +2 -2
- openstackclient/tests/unit/image/v2/test_image.py +3 -3
- openstackclient/tests/unit/image/v2/test_metadef_objects.py +62 -0
- openstackclient/tests/unit/image/v2/test_metadef_resource_type_association.py +131 -0
- openstackclient/tests/unit/integ/base.py +1 -1
- openstackclient/tests/unit/integ/cli/test_project.py +4 -4
- openstackclient/tests/unit/integ/cli/test_shell.py +7 -7
- openstackclient/tests/unit/network/test_common.py +12 -21
- openstackclient/tests/unit/network/v2/fakes.py +64 -130
- openstackclient/tests/unit/network/v2/test_address_group.py +15 -15
- openstackclient/tests/unit/network/v2/test_address_scope.py +13 -13
- openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +49 -27
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +40 -38
- openstackclient/tests/unit/network/v2/test_floating_ip_network.py +15 -15
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +4 -7
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +3 -5
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +11 -11
- openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -6
- openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +11 -21
- openstackclient/tests/unit/network/v2/test_local_ip.py +7 -7
- openstackclient/tests/unit/network/v2/test_local_ip_association.py +3 -5
- openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -13
- openstackclient/tests/unit/network/v2/test_network.py +23 -28
- openstackclient/tests/unit/network/v2/test_network_agent.py +17 -21
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +8 -8
- openstackclient/tests/unit/network/v2/test_network_compute.py +66 -65
- openstackclient/tests/unit/network/v2/test_network_flavor.py +17 -19
- openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +13 -13
- openstackclient/tests/unit/network/v2/test_network_meter.py +11 -11
- openstackclient/tests/unit/network/v2/test_network_meter_rule.py +11 -11
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +11 -21
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +51 -77
- openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +5 -9
- openstackclient/tests/unit/network/v2/test_network_rbac.py +12 -12
- openstackclient/tests/unit/network/v2/test_network_segment.py +11 -15
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +11 -13
- openstackclient/tests/unit/network/v2/test_network_service_provider.py +3 -5
- openstackclient/tests/unit/network/v2/test_network_trunk.py +11 -11
- openstackclient/tests/unit/network/v2/test_port.py +22 -25
- openstackclient/tests/unit/network/v2/test_router.py +721 -51
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +65 -49
- openstackclient/tests/unit/network/v2/test_security_group_network.py +15 -15
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +57 -45
- openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +11 -19
- openstackclient/tests/unit/network/v2/test_subnet.py +29 -25
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +15 -15
- openstackclient/tests/unit/object/v1/fakes.py +1 -1
- openstackclient/tests/unit/object/v1/test_container.py +5 -5
- openstackclient/tests/unit/object/v1/test_container_all.py +6 -6
- openstackclient/tests/unit/object/v1/test_object.py +3 -3
- openstackclient/tests/unit/object/v1/test_object_all.py +5 -5
- openstackclient/tests/unit/test_shell.py +5 -5
- openstackclient/tests/unit/utils.py +4 -1
- openstackclient/tests/unit/volume/test_find_resource.py +2 -2
- openstackclient/tests/unit/volume/v1/fakes.py +5 -6
- openstackclient/tests/unit/volume/v1/test_volume.py +5 -4
- openstackclient/tests/unit/volume/v2/fakes.py +39 -259
- openstackclient/tests/unit/volume/v2/test_consistency_group_snapshot.py +5 -5
- openstackclient/tests/unit/volume/v2/test_qos_specs.py +9 -9
- openstackclient/tests/unit/volume/v2/test_volume.py +21 -87
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +7 -368
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +1 -1
- openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +0 -44
- openstackclient/tests/unit/volume/v2/test_volume_type.py +6 -87
- openstackclient/tests/unit/volume/v3/fakes.py +505 -22
- openstackclient/tests/unit/volume/v3/test_block_storage_cleanup.py +2 -3
- openstackclient/tests/unit/volume/v3/test_block_storage_cluster.py +10 -11
- openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +10 -6
- openstackclient/tests/unit/volume/v3/test_block_storage_manage.py +25 -17
- openstackclient/tests/unit/volume/v3/test_block_storage_resource_filter.py +6 -32
- openstackclient/tests/unit/volume/v3/test_service.py +271 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +2177 -33
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +48 -52
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +892 -0
- openstackclient/tests/unit/volume/v3/test_volume_group.py +19 -20
- openstackclient/tests/unit/volume/v3/test_volume_group_snapshot.py +14 -34
- openstackclient/tests/unit/volume/v3/test_volume_group_type.py +13 -16
- openstackclient/tests/unit/volume/v3/test_volume_message.py +10 -11
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +161 -0
- openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +425 -0
- openstackclient/tests/unit/volume/v3/test_volume_type.py +1109 -0
- openstackclient/volume/v1/qos_specs.py +7 -7
- openstackclient/volume/v1/service.py +2 -2
- openstackclient/volume/v1/volume.py +12 -12
- openstackclient/volume/v1/volume_backup.py +7 -7
- openstackclient/volume/v1/volume_snapshot.py +8 -8
- openstackclient/volume/v1/volume_transfer_request.py +5 -5
- openstackclient/volume/v1/volume_type.py +7 -7
- openstackclient/volume/v2/backup_record.py +2 -2
- openstackclient/volume/v2/consistency_group.py +7 -9
- openstackclient/volume/v2/consistency_group_snapshot.py +4 -12
- openstackclient/volume/v2/qos_specs.py +7 -7
- openstackclient/volume/v2/service.py +2 -2
- openstackclient/volume/v2/volume.py +80 -80
- openstackclient/volume/v2/volume_backend.py +2 -2
- openstackclient/volume/v2/volume_backup.py +7 -217
- openstackclient/volume/v2/volume_host.py +2 -2
- openstackclient/volume/v2/volume_snapshot.py +8 -8
- openstackclient/volume/v2/volume_transfer_request.py +5 -37
- openstackclient/volume/v2/volume_type.py +7 -89
- openstackclient/volume/v3/service.py +56 -0
- openstackclient/volume/v3/volume.py +971 -0
- openstackclient/volume/v3/volume_attachment.py +31 -29
- openstackclient/volume/v3/volume_backup.py +670 -0
- openstackclient/volume/v3/volume_message.py +1 -1
- openstackclient/volume/v3/volume_snapshot.py +97 -0
- openstackclient/volume/v3/volume_transfer_request.py +233 -0
- openstackclient/volume/v3/volume_type.py +967 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/AUTHORS +4 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/METADATA +3 -3
- python_openstackclient-7.0.0.dist-info/RECORD +502 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/entry_points.txt +33 -27
- python_openstackclient-7.0.0.dist-info/pbr.json +1 -0
- python_openstackclient-6.6.0.dist-info/RECORD +0 -489
- python_openstackclient-6.6.0.dist-info/pbr.json +0 -1
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/LICENSE +0 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/WHEEL +0 -0
- {python_openstackclient-6.6.0.dist-info → python_openstackclient-7.0.0.dist-info}/top_level.txt +0 -0
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
# License for the specific language governing permissions and limitations
|
|
11
11
|
# under the License.
|
|
12
12
|
|
|
13
|
-
from cinderclient import api_versions
|
|
14
13
|
from osc_lib import exceptions
|
|
15
14
|
|
|
16
15
|
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
|
|
@@ -41,7 +40,7 @@ class TestBlockStorageClusterList(TestBlockStorageCluster):
|
|
|
41
40
|
)
|
|
42
41
|
|
|
43
42
|
def test_cluster_list(self):
|
|
44
|
-
self.
|
|
43
|
+
self.set_volume_api_version('3.7')
|
|
45
44
|
|
|
46
45
|
arglist = []
|
|
47
46
|
verifylist = [
|
|
@@ -82,7 +81,7 @@ class TestBlockStorageClusterList(TestBlockStorageCluster):
|
|
|
82
81
|
)
|
|
83
82
|
|
|
84
83
|
def test_cluster_list_with_full_options(self):
|
|
85
|
-
self.
|
|
84
|
+
self.set_volume_api_version('3.7')
|
|
86
85
|
|
|
87
86
|
arglist = [
|
|
88
87
|
'--cluster',
|
|
@@ -152,7 +151,7 @@ class TestBlockStorageClusterList(TestBlockStorageCluster):
|
|
|
152
151
|
)
|
|
153
152
|
|
|
154
153
|
def test_cluster_list_pre_v37(self):
|
|
155
|
-
self.
|
|
154
|
+
self.set_volume_api_version('3.6')
|
|
156
155
|
|
|
157
156
|
arglist = []
|
|
158
157
|
verifylist = [
|
|
@@ -215,7 +214,7 @@ class TestBlockStorageClusterSet(TestBlockStorageCluster):
|
|
|
215
214
|
self.cmd = block_storage_cluster.SetBlockStorageCluster(self.app, None)
|
|
216
215
|
|
|
217
216
|
def test_cluster_set(self):
|
|
218
|
-
self.
|
|
217
|
+
self.set_volume_api_version('3.7')
|
|
219
218
|
|
|
220
219
|
arglist = [
|
|
221
220
|
'--enable',
|
|
@@ -242,7 +241,7 @@ class TestBlockStorageClusterSet(TestBlockStorageCluster):
|
|
|
242
241
|
)
|
|
243
242
|
|
|
244
243
|
def test_cluster_set_disable_with_reason(self):
|
|
245
|
-
self.
|
|
244
|
+
self.set_volume_api_version('3.7')
|
|
246
245
|
|
|
247
246
|
arglist = [
|
|
248
247
|
'--binary',
|
|
@@ -272,7 +271,7 @@ class TestBlockStorageClusterSet(TestBlockStorageCluster):
|
|
|
272
271
|
)
|
|
273
272
|
|
|
274
273
|
def test_cluster_set_only_with_disable_reason(self):
|
|
275
|
-
self.
|
|
274
|
+
self.set_volume_api_version('3.7')
|
|
276
275
|
|
|
277
276
|
arglist = [
|
|
278
277
|
'--disable-reason',
|
|
@@ -295,7 +294,7 @@ class TestBlockStorageClusterSet(TestBlockStorageCluster):
|
|
|
295
294
|
)
|
|
296
295
|
|
|
297
296
|
def test_cluster_set_enable_with_disable_reason(self):
|
|
298
|
-
self.
|
|
297
|
+
self.set_volume_api_version('3.7')
|
|
299
298
|
|
|
300
299
|
arglist = [
|
|
301
300
|
'--enable',
|
|
@@ -319,7 +318,7 @@ class TestBlockStorageClusterSet(TestBlockStorageCluster):
|
|
|
319
318
|
)
|
|
320
319
|
|
|
321
320
|
def test_cluster_set_pre_v37(self):
|
|
322
|
-
self.
|
|
321
|
+
self.set_volume_api_version('3.6')
|
|
323
322
|
|
|
324
323
|
arglist = [
|
|
325
324
|
'--enable',
|
|
@@ -385,7 +384,7 @@ class TestBlockStorageClusterShow(TestBlockStorageCluster):
|
|
|
385
384
|
)
|
|
386
385
|
|
|
387
386
|
def test_cluster_show(self):
|
|
388
|
-
self.
|
|
387
|
+
self.set_volume_api_version('3.7')
|
|
389
388
|
|
|
390
389
|
arglist = [
|
|
391
390
|
'--binary',
|
|
@@ -409,7 +408,7 @@ class TestBlockStorageClusterShow(TestBlockStorageCluster):
|
|
|
409
408
|
)
|
|
410
409
|
|
|
411
410
|
def test_cluster_show_pre_v37(self):
|
|
412
|
-
self.
|
|
411
|
+
self.set_volume_api_version('3.6')
|
|
413
412
|
|
|
414
413
|
arglist = [
|
|
415
414
|
'--binary',
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
# under the License.
|
|
13
13
|
#
|
|
14
14
|
|
|
15
|
-
from cinderclient import api_versions
|
|
16
15
|
import ddt
|
|
17
16
|
from osc_lib import exceptions
|
|
18
17
|
|
|
@@ -42,7 +41,8 @@ class TestBlockStorageLogLevelList(TestService):
|
|
|
42
41
|
self.cmd = service.BlockStorageLogLevelList(self.app, None)
|
|
43
42
|
|
|
44
43
|
def test_block_storage_log_level_list(self):
|
|
45
|
-
self.
|
|
44
|
+
self.set_volume_api_version('3.32')
|
|
45
|
+
|
|
46
46
|
arglist = [
|
|
47
47
|
'--host',
|
|
48
48
|
self.service_log.host,
|
|
@@ -113,7 +113,8 @@ class TestBlockStorageLogLevelList(TestService):
|
|
|
113
113
|
)
|
|
114
114
|
|
|
115
115
|
def test_block_storage_log_level_list_invalid_service_name(self):
|
|
116
|
-
self.
|
|
116
|
+
self.set_volume_api_version('3.32')
|
|
117
|
+
|
|
117
118
|
arglist = [
|
|
118
119
|
'--host',
|
|
119
120
|
self.service_log.host,
|
|
@@ -148,7 +149,8 @@ class TestBlockStorageLogLevelSet(TestService):
|
|
|
148
149
|
self.cmd = service.BlockStorageLogLevelSet(self.app, None)
|
|
149
150
|
|
|
150
151
|
def test_block_storage_log_level_set(self):
|
|
151
|
-
self.
|
|
152
|
+
self.set_volume_api_version('3.32')
|
|
153
|
+
|
|
152
154
|
arglist = [
|
|
153
155
|
'ERROR',
|
|
154
156
|
'--host',
|
|
@@ -202,7 +204,8 @@ class TestBlockStorageLogLevelSet(TestService):
|
|
|
202
204
|
)
|
|
203
205
|
|
|
204
206
|
def test_block_storage_log_level_set_invalid_service_name(self):
|
|
205
|
-
self.
|
|
207
|
+
self.set_volume_api_version('3.32')
|
|
208
|
+
|
|
206
209
|
arglist = [
|
|
207
210
|
'ERROR',
|
|
208
211
|
'--host',
|
|
@@ -229,7 +232,8 @@ class TestBlockStorageLogLevelSet(TestService):
|
|
|
229
232
|
|
|
230
233
|
@ddt.data('WARNING', 'info', 'Error', 'debuG', 'fake-log-level')
|
|
231
234
|
def test_block_storage_log_level_set_log_level(self, log_level):
|
|
232
|
-
self.
|
|
235
|
+
self.set_volume_api_version('3.32')
|
|
236
|
+
|
|
233
237
|
arglist = [
|
|
234
238
|
log_level,
|
|
235
239
|
'--host',
|
|
@@ -12,16 +12,14 @@
|
|
|
12
12
|
|
|
13
13
|
from unittest import mock
|
|
14
14
|
|
|
15
|
-
from cinderclient import api_versions
|
|
16
15
|
from osc_lib import exceptions
|
|
17
16
|
|
|
18
17
|
from openstackclient.tests.unit import utils as tests_utils
|
|
19
|
-
from openstackclient.tests.unit.volume.v2 import fakes as v2_volume_fakes
|
|
20
18
|
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
|
|
21
19
|
from openstackclient.volume.v3 import block_storage_manage
|
|
22
20
|
|
|
23
21
|
|
|
24
|
-
class TestBlockStorageManage(
|
|
22
|
+
class TestBlockStorageManage(volume_fakes.TestVolume):
|
|
25
23
|
def setUp(self):
|
|
26
24
|
super().setUp()
|
|
27
25
|
|
|
@@ -47,7 +45,8 @@ class TestBlockStorageVolumeManage(TestBlockStorageManage):
|
|
|
47
45
|
)
|
|
48
46
|
|
|
49
47
|
def test_block_storage_volume_manage_list(self):
|
|
50
|
-
self.
|
|
48
|
+
self.set_volume_api_version('3.8')
|
|
49
|
+
|
|
51
50
|
arglist = [
|
|
52
51
|
'fake_host',
|
|
53
52
|
]
|
|
@@ -88,6 +87,8 @@ class TestBlockStorageVolumeManage(TestBlockStorageManage):
|
|
|
88
87
|
)
|
|
89
88
|
|
|
90
89
|
def test_block_storage_volume_manage_list__pre_v38(self):
|
|
90
|
+
self.set_volume_api_version('3.7')
|
|
91
|
+
|
|
91
92
|
arglist = [
|
|
92
93
|
'fake_host',
|
|
93
94
|
]
|
|
@@ -104,7 +105,8 @@ class TestBlockStorageVolumeManage(TestBlockStorageManage):
|
|
|
104
105
|
)
|
|
105
106
|
|
|
106
107
|
def test_block_storage_volume_manage_list__pre_v317(self):
|
|
107
|
-
self.
|
|
108
|
+
self.set_volume_api_version('3.16')
|
|
109
|
+
|
|
108
110
|
arglist = [
|
|
109
111
|
'--cluster',
|
|
110
112
|
'fake_cluster',
|
|
@@ -123,7 +125,8 @@ class TestBlockStorageVolumeManage(TestBlockStorageManage):
|
|
|
123
125
|
self.assertIn('--cluster', str(exc))
|
|
124
126
|
|
|
125
127
|
def test_block_storage_volume_manage_list__host_and_cluster(self):
|
|
126
|
-
self.
|
|
128
|
+
self.set_volume_api_version('3.17')
|
|
129
|
+
|
|
127
130
|
arglist = [
|
|
128
131
|
'fake_host',
|
|
129
132
|
'--cluster',
|
|
@@ -146,7 +149,8 @@ class TestBlockStorageVolumeManage(TestBlockStorageManage):
|
|
|
146
149
|
|
|
147
150
|
def test_block_storage_volume_manage_list__detailed(self):
|
|
148
151
|
"""This option is deprecated."""
|
|
149
|
-
self.
|
|
152
|
+
self.set_volume_api_version('3.8')
|
|
153
|
+
|
|
150
154
|
arglist = [
|
|
151
155
|
'--detailed',
|
|
152
156
|
'True',
|
|
@@ -206,9 +210,8 @@ class TestBlockStorageVolumeManage(TestBlockStorageManage):
|
|
|
206
210
|
)
|
|
207
211
|
|
|
208
212
|
def test_block_storage_volume_manage_list__all_args(self):
|
|
209
|
-
self.
|
|
210
|
-
|
|
211
|
-
)
|
|
213
|
+
self.set_volume_api_version('3.8')
|
|
214
|
+
|
|
212
215
|
arglist = [
|
|
213
216
|
'fake_host',
|
|
214
217
|
'--long',
|
|
@@ -286,7 +289,8 @@ class TestBlockStorageSnapshotManage(TestBlockStorageManage):
|
|
|
286
289
|
)
|
|
287
290
|
|
|
288
291
|
def test_block_storage_snapshot_manage_list(self):
|
|
289
|
-
self.
|
|
292
|
+
self.set_volume_api_version('3.8')
|
|
293
|
+
|
|
290
294
|
arglist = [
|
|
291
295
|
'fake_host',
|
|
292
296
|
]
|
|
@@ -329,6 +333,8 @@ class TestBlockStorageSnapshotManage(TestBlockStorageManage):
|
|
|
329
333
|
)
|
|
330
334
|
|
|
331
335
|
def test_block_storage_snapshot_manage_list__pre_v38(self):
|
|
336
|
+
self.set_volume_api_version('3.7')
|
|
337
|
+
|
|
332
338
|
arglist = [
|
|
333
339
|
'fake_host',
|
|
334
340
|
]
|
|
@@ -345,7 +351,8 @@ class TestBlockStorageSnapshotManage(TestBlockStorageManage):
|
|
|
345
351
|
)
|
|
346
352
|
|
|
347
353
|
def test_block_storage_snapshot_manage_list__pre_v317(self):
|
|
348
|
-
self.
|
|
354
|
+
self.set_volume_api_version('3.16')
|
|
355
|
+
|
|
349
356
|
arglist = [
|
|
350
357
|
'--cluster',
|
|
351
358
|
'fake_cluster',
|
|
@@ -364,7 +371,8 @@ class TestBlockStorageSnapshotManage(TestBlockStorageManage):
|
|
|
364
371
|
self.assertIn('--cluster', str(exc))
|
|
365
372
|
|
|
366
373
|
def test_block_storage_snapshot_manage_list__host_and_cluster(self):
|
|
367
|
-
self.
|
|
374
|
+
self.set_volume_api_version('3.17')
|
|
375
|
+
|
|
368
376
|
arglist = [
|
|
369
377
|
'fake_host',
|
|
370
378
|
'--cluster',
|
|
@@ -386,7 +394,8 @@ class TestBlockStorageSnapshotManage(TestBlockStorageManage):
|
|
|
386
394
|
)
|
|
387
395
|
|
|
388
396
|
def test_block_storage_snapshot_manage_list__detailed(self):
|
|
389
|
-
self.
|
|
397
|
+
self.set_volume_api_version('3.8')
|
|
398
|
+
|
|
390
399
|
arglist = [
|
|
391
400
|
'--detailed',
|
|
392
401
|
'True',
|
|
@@ -448,9 +457,8 @@ class TestBlockStorageSnapshotManage(TestBlockStorageManage):
|
|
|
448
457
|
)
|
|
449
458
|
|
|
450
459
|
def test_block_storage_snapshot_manage_list__all_args(self):
|
|
451
|
-
self.
|
|
452
|
-
|
|
453
|
-
)
|
|
460
|
+
self.set_volume_api_version('3.8')
|
|
461
|
+
|
|
454
462
|
arglist = [
|
|
455
463
|
'--long',
|
|
456
464
|
'--marker',
|
|
@@ -10,10 +10,6 @@
|
|
|
10
10
|
# License for the specific language governing permissions and limitations
|
|
11
11
|
# under the License.
|
|
12
12
|
|
|
13
|
-
from unittest import mock
|
|
14
|
-
|
|
15
|
-
from cinderclient import api_versions
|
|
16
|
-
from openstack import utils as sdk_utils
|
|
17
13
|
from osc_lib.cli import format_columns
|
|
18
14
|
from osc_lib import exceptions
|
|
19
15
|
|
|
@@ -21,29 +17,7 @@ from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
|
|
|
21
17
|
from openstackclient.volume.v3 import block_storage_resource_filter
|
|
22
18
|
|
|
23
19
|
|
|
24
|
-
class
|
|
25
|
-
def setUp(self):
|
|
26
|
-
super().setUp()
|
|
27
|
-
|
|
28
|
-
patcher = mock.patch.object(
|
|
29
|
-
sdk_utils, 'supports_microversion', return_value=True
|
|
30
|
-
)
|
|
31
|
-
self.addCleanup(patcher.stop)
|
|
32
|
-
self.supports_microversion_mock = patcher.start()
|
|
33
|
-
self._set_mock_microversion(
|
|
34
|
-
self.app.client_manager.volume.api_version.get_string()
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
def _set_mock_microversion(self, mock_v):
|
|
38
|
-
"""Set a specific microversion for the mock supports_microversion()."""
|
|
39
|
-
self.supports_microversion_mock.reset_mock(return_value=True)
|
|
40
|
-
self.supports_microversion_mock.side_effect = (
|
|
41
|
-
lambda _, v: api_versions.APIVersion(v)
|
|
42
|
-
<= api_versions.APIVersion(mock_v)
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
|
|
20
|
+
class TestBlockStorageResourceFilterList(volume_fakes.TestVolume):
|
|
47
21
|
# The resource filters to be listed
|
|
48
22
|
fake_resource_filters = volume_fakes.create_resource_filters()
|
|
49
23
|
|
|
@@ -62,7 +36,7 @@ class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
|
|
|
62
36
|
)
|
|
63
37
|
|
|
64
38
|
def test_resource_filter_list(self):
|
|
65
|
-
self.
|
|
39
|
+
self.set_volume_api_version('3.33')
|
|
66
40
|
|
|
67
41
|
arglist = []
|
|
68
42
|
verifylist = []
|
|
@@ -85,7 +59,7 @@ class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
|
|
|
85
59
|
self.volume_sdk_client.resource_filters.assert_called_with()
|
|
86
60
|
|
|
87
61
|
def test_resource_filter_list_pre_v333(self):
|
|
88
|
-
self.
|
|
62
|
+
self.set_volume_api_version('3.32')
|
|
89
63
|
|
|
90
64
|
arglist = []
|
|
91
65
|
verifylist = []
|
|
@@ -99,7 +73,7 @@ class TestBlockStorageResourceFilterList(TestBlockStorageResourceFilter):
|
|
|
99
73
|
)
|
|
100
74
|
|
|
101
75
|
|
|
102
|
-
class TestBlockStorageResourceFilterShow(
|
|
76
|
+
class TestBlockStorageResourceFilterShow(volume_fakes.TestVolume):
|
|
103
77
|
# The resource filters to be listed
|
|
104
78
|
fake_resource_filter = volume_fakes.create_one_resource_filter()
|
|
105
79
|
|
|
@@ -118,7 +92,7 @@ class TestBlockStorageResourceFilterShow(TestBlockStorageResourceFilter):
|
|
|
118
92
|
)
|
|
119
93
|
|
|
120
94
|
def test_resource_filter_show(self):
|
|
121
|
-
self.
|
|
95
|
+
self.set_volume_api_version('3.33')
|
|
122
96
|
|
|
123
97
|
arglist = [
|
|
124
98
|
self.fake_resource_filter.resource,
|
|
@@ -144,7 +118,7 @@ class TestBlockStorageResourceFilterShow(TestBlockStorageResourceFilter):
|
|
|
144
118
|
)
|
|
145
119
|
|
|
146
120
|
def test_resource_filter_show_pre_v333(self):
|
|
147
|
-
self.
|
|
121
|
+
self.set_volume_api_version('3.32')
|
|
148
122
|
|
|
149
123
|
arglist = [
|
|
150
124
|
self.fake_resource_filter.resource,
|
|
@@ -0,0 +1,271 @@
|
|
|
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 cinderclient import api_versions
|
|
16
|
+
|
|
17
|
+
from openstackclient.tests.unit.volume.v3 import fakes as volume_fakes
|
|
18
|
+
from openstackclient.volume.v3 import service
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TestService(volume_fakes.TestVolume):
|
|
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
|
+
def test_service_list_with_cluster(self):
|
|
150
|
+
self.volume_client.api_version = api_versions.APIVersion('3.7')
|
|
151
|
+
cluster = {'cluster': 'fake-cluster'}
|
|
152
|
+
cluster_service = volume_fakes.create_one_service(attrs=cluster)
|
|
153
|
+
self.service_mock.list.return_value = [cluster_service]
|
|
154
|
+
|
|
155
|
+
arglist = [
|
|
156
|
+
'--host',
|
|
157
|
+
cluster_service.host,
|
|
158
|
+
'--service',
|
|
159
|
+
cluster_service.binary,
|
|
160
|
+
]
|
|
161
|
+
verifylist = [
|
|
162
|
+
('host', cluster_service.host),
|
|
163
|
+
('service', cluster_service.binary),
|
|
164
|
+
]
|
|
165
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
166
|
+
|
|
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
|
+
columns, data = self.cmd.take_action(parsed_args)
|
|
171
|
+
|
|
172
|
+
expected_columns = [
|
|
173
|
+
'Binary',
|
|
174
|
+
'Host',
|
|
175
|
+
'Zone',
|
|
176
|
+
'Status',
|
|
177
|
+
'State',
|
|
178
|
+
'Updated At',
|
|
179
|
+
'Cluster',
|
|
180
|
+
]
|
|
181
|
+
|
|
182
|
+
# confirming if all expected columns are present in the result.
|
|
183
|
+
self.assertEqual(expected_columns, columns)
|
|
184
|
+
|
|
185
|
+
datalist = (
|
|
186
|
+
(
|
|
187
|
+
cluster_service.binary,
|
|
188
|
+
cluster_service.host,
|
|
189
|
+
cluster_service.zone,
|
|
190
|
+
cluster_service.status,
|
|
191
|
+
cluster_service.state,
|
|
192
|
+
cluster_service.updated_at,
|
|
193
|
+
cluster_service.cluster,
|
|
194
|
+
),
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
# confirming if all expected values are present in the result.
|
|
198
|
+
self.assertEqual(datalist, tuple(data))
|
|
199
|
+
|
|
200
|
+
# checking if proper call was made to list services
|
|
201
|
+
self.service_mock.list.assert_called_with(
|
|
202
|
+
cluster_service.host,
|
|
203
|
+
cluster_service.binary,
|
|
204
|
+
)
|
|
205
|
+
|
|
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
|
+
def test_service_list_with_backend_state(self):
|
|
211
|
+
self.volume_client.api_version = api_versions.APIVersion('3.49')
|
|
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]
|
|
215
|
+
|
|
216
|
+
arglist = [
|
|
217
|
+
'--host',
|
|
218
|
+
backend_service.host,
|
|
219
|
+
'--service',
|
|
220
|
+
backend_service.binary,
|
|
221
|
+
]
|
|
222
|
+
verifylist = [
|
|
223
|
+
('host', backend_service.host),
|
|
224
|
+
('service', backend_service.binary),
|
|
225
|
+
]
|
|
226
|
+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
|
227
|
+
|
|
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
|
+
columns, data = self.cmd.take_action(parsed_args)
|
|
232
|
+
|
|
233
|
+
expected_columns = [
|
|
234
|
+
'Binary',
|
|
235
|
+
'Host',
|
|
236
|
+
'Zone',
|
|
237
|
+
'Status',
|
|
238
|
+
'State',
|
|
239
|
+
'Updated At',
|
|
240
|
+
'Cluster',
|
|
241
|
+
'Backend State',
|
|
242
|
+
]
|
|
243
|
+
|
|
244
|
+
# confirming if all expected columns are present in the result.
|
|
245
|
+
self.assertEqual(expected_columns, columns)
|
|
246
|
+
|
|
247
|
+
datalist = (
|
|
248
|
+
(
|
|
249
|
+
backend_service.binary,
|
|
250
|
+
backend_service.host,
|
|
251
|
+
backend_service.zone,
|
|
252
|
+
backend_service.status,
|
|
253
|
+
backend_service.state,
|
|
254
|
+
backend_service.updated_at,
|
|
255
|
+
backend_service.cluster,
|
|
256
|
+
backend_service.backend_state,
|
|
257
|
+
),
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
# confirming if all expected values are present in the result.
|
|
261
|
+
self.assertEqual(datalist, tuple(data))
|
|
262
|
+
|
|
263
|
+
# checking if proper call was made to list services
|
|
264
|
+
self.service_mock.list.assert_called_with(
|
|
265
|
+
backend_service.host,
|
|
266
|
+
backend_service.binary,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
# checking if prohibited columns are present in output
|
|
270
|
+
self.assertNotIn("Disabled Reason", columns)
|
|
271
|
+
self.assertNotIn(backend_service.disabled_reason, tuple(data))
|