Enable http response extraction
This patch is a preparation for adding RBAC tests. Currently, we only return the body without the response in manila REST client. The response is necessary for the testing, because we need to check the returned code status and to compare it with the expected status. This way we will check if the user has the right permissions for the action. Change-Id: If0e39afb635c469a25919770a869087bf5def561
This commit is contained in:
parent
149acc51ad
commit
86f2432476
manila_tempest_tests
common
services/share
tests
api
admin
test_admin_actions.pytest_admin_actions_negative.pytest_export_locations.pytest_export_locations_negative.pytest_migration.pytest_migration_negative.pytest_multi_backend.pytest_quotas.pytest_quotas_negative.pytest_replication.pytest_replication_actions.pytest_security_services.pytest_services.pytest_services_negative.pytest_share_group_types.pytest_share_groups.pytest_share_instances.pytest_share_instances_negative.pytest_share_manage.pytest_share_manage_negative.pytest_share_networks.pytest_share_servers.pytest_share_servers_manage.pytest_share_servers_manage_negative.pytest_share_servers_migration.pytest_share_servers_migration_negative.pytest_share_servers_negative.pytest_share_snapshot_instances.pytest_share_snapshot_instances_negative.pytest_share_types.pytest_share_types_extra_specs.pytest_share_types_negative.pytest_shares_actions.pytest_snapshot_export_locations.pytest_snapshot_export_locations_negative.pytest_snapshot_manage.pytest_snapshot_manage_negative.pytest_user_messages.py
base.pytest_access_rules_metadata.pytest_access_rules_metadata_negative.pytest_availability_zones.pytest_extensions.pytest_limits.pytest_metadata.pytest_public_shares.pytest_quotas.pytest_replication.pytest_replication_export_locations.pytest_replication_export_locations_negative.pytest_replication_negative.pytest_replication_snapshots.pytest_revert_to_snapshot.pytest_rules.pytest_rules_negative.pytest_security_services.pytest_security_services_mapping.pytest_security_services_mapping_negative.pytest_security_services_negative.pytest_share_group_actions.pytest_share_groups.pytest_share_groups_negative.pytest_share_network_subnets.pytest_share_network_subnets_negative.pytest_share_networks.pytest_share_networks_negative.pytest_share_type_availability_zones.pytest_shares.pytest_shares_actions.pytest_shares_actions_negative.pytest_shares_from_snapshot_across_pools.pytest_shares_negative.pytest_snapshot_rules.pytest_snapshot_rules_negative.pyscenario
@ -33,7 +33,7 @@ def _get_access_rule(body, rule_id):
|
||||
|
||||
|
||||
def _get_name_of_raise_method(resource_name):
|
||||
if resource_name == 'snapshot_access_rule':
|
||||
if resource_name == 'snapshot_access':
|
||||
return 'AccessRuleBuildErrorException'
|
||||
if resource_name == 'share_replica':
|
||||
return 'ShareInstanceBuildErrorException'
|
||||
@ -56,24 +56,30 @@ def wait_for_resource_status(client, resource_id, status,
|
||||
'share_instance': 'get_share_instance',
|
||||
'snapshot_instance': 'get_snapshot_instance',
|
||||
'access_rule': 'list_access_rules',
|
||||
'snapshot_access_rule': 'get_snapshot_access_rule',
|
||||
'snapshot_access': 'list_snapshot_access_rules',
|
||||
'share_group': 'get_share_group',
|
||||
'share_group_snapshot': 'get_share_group_snapshot',
|
||||
'share_replica': 'get_share_replica',
|
||||
}
|
||||
|
||||
action_name = get_resource_action[resource_name]
|
||||
# This code snippet is intended to set the dictionary key of the returned
|
||||
# response for share access rule and for snapshot access rule.
|
||||
if 'access' in resource_name:
|
||||
rn = '_'.join(action_name.split('_')[1:-1]) + '_list'
|
||||
else:
|
||||
rn = resource_name
|
||||
|
||||
# Since API v2 requests require an additional parameter for micro-versions,
|
||||
# it's necessary to pass the required parameters according to the version.
|
||||
resource_action = getattr(client, get_resource_action[resource_name])
|
||||
resource_action = getattr(client, action_name)
|
||||
method_args = [resource_id]
|
||||
method_kwargs = {}
|
||||
if isinstance(client, shares_client.SharesV2Client):
|
||||
method_kwargs.update({'version': version})
|
||||
if resource_name == 'snapshot_access_rule':
|
||||
method_args.insert(1, rule_id)
|
||||
body = resource_action(*method_args, **method_kwargs)
|
||||
body = resource_action(*method_args, **method_kwargs)[rn]
|
||||
|
||||
if resource_name == 'access_rule':
|
||||
if 'access' in resource_name:
|
||||
status_attr = 'state'
|
||||
body = _get_access_rule(body, rule_id)
|
||||
|
||||
@ -83,9 +89,9 @@ def wait_for_resource_status(client, resource_id, status,
|
||||
exp_status = status if isinstance(status, list) else [status]
|
||||
while resource_status not in exp_status:
|
||||
time.sleep(client.build_interval)
|
||||
body = resource_action(*method_args, **method_kwargs)
|
||||
body = resource_action(*method_args, **method_kwargs)[rn]
|
||||
|
||||
if resource_name == 'access_rule':
|
||||
if 'access' in resource_name:
|
||||
status_attr = 'state'
|
||||
body = _get_access_rule(body, rule_id)
|
||||
|
||||
@ -111,12 +117,12 @@ def wait_for_migration_status(client, share_id, dest_host, status_to_wait,
|
||||
statuses = ((status_to_wait,)
|
||||
if not isinstance(status_to_wait, (tuple, list, set))
|
||||
else status_to_wait)
|
||||
share = client.get_share(share_id, version=version)
|
||||
share = client.get_share(share_id, version=version)['share']
|
||||
migration_timeout = CONF.share.migration_timeout
|
||||
start = int(time.time())
|
||||
while share['task_state'] not in statuses:
|
||||
time.sleep(client.build_interval)
|
||||
share = client.get_share(share_id, version=version)
|
||||
share = client.get_share(share_id, version=version)['share']
|
||||
if share['task_state'] in statuses:
|
||||
break
|
||||
elif share['task_state'] == 'migration_error':
|
||||
@ -165,7 +171,7 @@ def wait_for_message(client, resource_id):
|
||||
|
||||
while not message:
|
||||
time.sleep(client.build_interval)
|
||||
for msg in client.list_messages():
|
||||
for msg in client.list_messages()['messages']:
|
||||
if msg['resource_id'] == resource_id:
|
||||
return msg
|
||||
|
||||
|
@ -76,12 +76,13 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(post_body)
|
||||
resp, body = self.post("shares", body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def delete_share(self, share_id):
|
||||
resp, body = self.delete("shares/%s" % share_id)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def manage_share(self, service_host, protocol, export_path,
|
||||
share_type_id, name=None, description=None):
|
||||
@ -98,13 +99,14 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(post_body)
|
||||
resp, body = self.post("os-share-manage", body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def unmanage_share(self, share_id):
|
||||
resp, body = self.post(
|
||||
"os-share-unmanage/%s/unmanage" % share_id, None)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_shares(self, detailed=False, params=None):
|
||||
"""Get list of shares w/o filters."""
|
||||
@ -112,7 +114,8 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += '?%s' % urlparse.urlencode(params) if params else ''
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_shares_with_detail(self, params=None):
|
||||
"""Get detailed list of shares w/o filters."""
|
||||
@ -121,7 +124,8 @@ class SharesClient(rest_client.RestClient):
|
||||
def get_share(self, share_id):
|
||||
resp, body = self.get("shares/%s" % share_id)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def create_access_rule(self, share_id, access_type="ip",
|
||||
access_to="0.0.0.0", access_level=None):
|
||||
@ -135,13 +139,15 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(post_body)
|
||||
resp, body = self.post("shares/%s/action" % share_id, body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_access_rules(self, share_id):
|
||||
body = {"os-access_list": None}
|
||||
resp, body = self.post("shares/%s/action" % share_id, json.dumps(body))
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def delete_access_rule(self, share_id, rule_id):
|
||||
post_body = {
|
||||
@ -152,7 +158,7 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(post_body)
|
||||
resp, body = self.post("shares/%s/action" % share_id, body)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def extend_share(self, share_id, new_size):
|
||||
post_body = {
|
||||
@ -163,7 +169,7 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(post_body)
|
||||
resp, body = self.post("shares/%s/action" % share_id, body)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def shrink_share(self, share_id, new_size):
|
||||
post_body = {
|
||||
@ -174,7 +180,7 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(post_body)
|
||||
resp, body = self.post("shares/%s/action" % share_id, body)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def create_snapshot(self, share_id, name=None, description=None,
|
||||
force=False):
|
||||
@ -194,12 +200,14 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(post_body)
|
||||
resp, body = self.post("snapshots", body)
|
||||
self.expected_success(202, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_snapshot(self, snapshot_id):
|
||||
resp, body = self.get("snapshots/%s" % snapshot_id)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_snapshots(self, detailed=False, params=None):
|
||||
"""Get list of share snapshots w/o filters."""
|
||||
@ -207,7 +215,8 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += '?%s' % urlparse.urlencode(params) if params else ''
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_snapshots_with_detail(self, params=None):
|
||||
"""Get detailed list of share snapshots w/o filters."""
|
||||
@ -216,12 +225,13 @@ class SharesClient(rest_client.RestClient):
|
||||
def delete_snapshot(self, snap_id):
|
||||
resp, body = self.delete("snapshots/%s" % snap_id)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def default_quotas(self, tenant_id):
|
||||
resp, body = self.get("os-quota-sets/%s/defaults" % tenant_id)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def show_quotas(self, tenant_id, user_id=None):
|
||||
uri = "os-quota-sets/%s" % tenant_id
|
||||
@ -229,7 +239,8 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += "?user_id=%s" % user_id
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def reset_quotas(self, tenant_id, user_id=None):
|
||||
uri = "os-quota-sets/%s" % tenant_id
|
||||
@ -237,7 +248,7 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += "?user_id=%s" % user_id
|
||||
resp, body = self.delete(uri)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def update_quotas(self, tenant_id, user_id=None, shares=None,
|
||||
snapshots=None, gigabytes=None, snapshot_gigabytes=None,
|
||||
@ -263,12 +274,14 @@ class SharesClient(rest_client.RestClient):
|
||||
|
||||
resp, body = self.put(uri, put_body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_limits(self):
|
||||
resp, body = self.get("limits")
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def is_resource_deleted(self, *args, **kwargs):
|
||||
"""Verifies whether provided resource deleted or not.
|
||||
@ -281,7 +294,7 @@ class SharesClient(rest_client.RestClient):
|
||||
if "rule_id" in kwargs:
|
||||
rule_id = kwargs.get("rule_id")
|
||||
share_id = kwargs.get("share_id")
|
||||
rules = self.list_access_rules(share_id)
|
||||
rules = self.list_access_rules(share_id)['access_list']
|
||||
for rule in rules:
|
||||
if rule["id"] == rule_id:
|
||||
return False
|
||||
@ -334,9 +347,10 @@ class SharesClient(rest_client.RestClient):
|
||||
time.sleep(self.build_interval)
|
||||
|
||||
def list_extensions(self):
|
||||
resp, extensions = self.get("extensions")
|
||||
resp, body = self.get("extensions")
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(extensions)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def update_share(self, share_id, name=None, desc=None, is_public=None):
|
||||
body = {"share": {}}
|
||||
@ -349,7 +363,8 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(body)
|
||||
resp, body = self.put("shares/%s" % share_id, body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def rename_snapshot(self, snapshot_id, name, desc=None):
|
||||
body = {"snapshot": {"display_name": name}}
|
||||
@ -358,7 +373,8 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(body)
|
||||
resp, body = self.put("snapshots/%s" % snapshot_id, body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def reset_state(self, s_id, status="error", s_type="shares"):
|
||||
"""Resets the state of a share or a snapshot.
|
||||
@ -370,7 +386,7 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(body)
|
||||
resp, body = self.post("%s/%s/action" % (s_type, s_id), body)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def force_delete(self, s_id, s_type="shares"):
|
||||
"""Force delete share or snapshot.
|
||||
@ -381,7 +397,7 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(body)
|
||||
resp, body = self.post("%s/%s/action" % (s_type, s_id), body)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -392,7 +408,8 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += '?%s' % urlparse.urlencode(params)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -403,11 +420,12 @@ class SharesClient(rest_client.RestClient):
|
||||
post_body = {"metadata": metadata}
|
||||
body = json.dumps(post_body)
|
||||
if method == "post":
|
||||
resp, metadata = self.post(uri, body)
|
||||
resp, body = self.post(uri, body)
|
||||
if method == "put":
|
||||
resp, metadata = self.put(uri, body)
|
||||
resp, body = self.put(uri, body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(metadata)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def set_metadata(self, share_id, metadata=None):
|
||||
return self._update_metadata(share_id, metadata)
|
||||
@ -418,12 +436,13 @@ class SharesClient(rest_client.RestClient):
|
||||
def delete_metadata(self, share_id, key):
|
||||
resp, body = self.delete("shares/%s/metadata/%s" % (share_id, key))
|
||||
self.expected_success(200, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_metadata(self, share_id):
|
||||
resp, body = self.get("shares/%s/metadata" % share_id)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_metadata_item(self, share_id, key):
|
||||
resp, body = self.get("shares/%s/metadata/%s" % (share_id, key))
|
||||
@ -440,7 +459,8 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps({"security_service": post_body})
|
||||
resp, body = self.post("security-services", body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def update_security_service(self, ss_id, **kwargs):
|
||||
# ss_id - id of security-service entity
|
||||
@ -450,12 +470,14 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps({"security_service": kwargs})
|
||||
resp, body = self.put("security-services/%s" % ss_id, body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_security_service(self, ss_id):
|
||||
resp, body = self.get("security-services/%s" % ss_id)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_security_services(self, detailed=False, params=None):
|
||||
uri = "security-services"
|
||||
@ -465,12 +487,13 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += "?%s" % urlparse.urlencode(params)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def delete_security_service(self, ss_id):
|
||||
resp, body = self.delete("security-services/%s" % ss_id)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -480,7 +503,8 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps({"share_network": kwargs})
|
||||
resp, body = self.post("share-networks", body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def update_share_network(self, sn_id, **kwargs):
|
||||
# kwargs: name, description
|
||||
@ -488,17 +512,20 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps({"share_network": kwargs})
|
||||
resp, body = self.put("share-networks/%s" % sn_id, body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_share_network(self, sn_id):
|
||||
resp, body = self.get("share-networks/%s" % sn_id)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_share_networks(self):
|
||||
resp, body = self.get("share-networks")
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_share_networks_with_detail(self, params=None):
|
||||
"""List the details of all shares."""
|
||||
@ -507,12 +534,13 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += "?%s" % urlparse.urlencode(params)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def delete_share_network(self, sn_id):
|
||||
resp, body = self.delete("share-networks/%s" % sn_id)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -529,21 +557,21 @@ class SharesClient(rest_client.RestClient):
|
||||
body = json.dumps(data)
|
||||
resp, body = self.post("share-networks/%s/action" % sn_id, body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def add_sec_service_to_share_network(self, sn_id, ss_id):
|
||||
body = self._map_security_service_and_share_network(sn_id, ss_id)
|
||||
return body
|
||||
return self._map_security_service_and_share_network(sn_id, ss_id)
|
||||
|
||||
def remove_sec_service_from_share_network(self, sn_id, ss_id):
|
||||
body = self._map_security_service_and_share_network(
|
||||
return self._map_security_service_and_share_network(
|
||||
sn_id, ss_id, "remove")
|
||||
return body
|
||||
|
||||
def list_sec_services_for_share_network(self, sn_id):
|
||||
resp, body = self.get("security-services?share_network_id=%s" % sn_id)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -553,7 +581,8 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += '?%s' % urlparse.urlencode(params)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def create_share_type(self, name, is_public=True, **kwargs):
|
||||
post_body = {
|
||||
@ -564,22 +593,25 @@ class SharesClient(rest_client.RestClient):
|
||||
post_body = json.dumps({'share_type': post_body})
|
||||
resp, body = self.post('types', post_body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def delete_share_type(self, share_type_id):
|
||||
resp, body = self.delete("types/%s" % share_type_id)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_share_type(self, share_type_id):
|
||||
resp, body = self.get("types/%s" % share_type_id)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_default_share_type(self):
|
||||
resp, body = self.get("types/default")
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def add_access_to_share_type(self, share_type_id, project_id):
|
||||
uri = 'types/%s/action' % share_type_id
|
||||
@ -587,7 +619,7 @@ class SharesClient(rest_client.RestClient):
|
||||
post_body = json.dumps({'addProjectAccess': post_body})
|
||||
resp, body = self.post(uri, post_body)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def remove_access_from_share_type(self, share_type_id, project_id):
|
||||
uri = 'types/%s/action' % share_type_id
|
||||
@ -595,14 +627,15 @@ class SharesClient(rest_client.RestClient):
|
||||
post_body = json.dumps({'removeProjectAccess': post_body})
|
||||
resp, body = self.post(uri, post_body)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def list_access_to_share_type(self, share_type_id):
|
||||
uri = 'types/%s/os-share-type-access' % share_type_id
|
||||
resp, body = self.get(uri)
|
||||
# [{"share_type_id": "%st_id%", "project_id": "%project_id%"}, ]
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -611,13 +644,15 @@ class SharesClient(rest_client.RestClient):
|
||||
post_body = json.dumps({'extra_specs': extra_specs})
|
||||
resp, body = self.post(url, post_body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_share_type_extra_spec(self, share_type_id, extra_spec_name):
|
||||
uri = "types/%s/extra_specs/%s" % (share_type_id, extra_spec_name)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def get_share_type_extra_specs(self, share_type_id, params=None):
|
||||
uri = "types/%s/extra_specs" % share_type_id
|
||||
@ -625,7 +660,8 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += '?%s' % urlparse.urlencode(params)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def update_share_type_extra_spec(self, share_type_id, spec_name,
|
||||
spec_value):
|
||||
@ -634,7 +670,8 @@ class SharesClient(rest_client.RestClient):
|
||||
post_body = json.dumps(extra_spec)
|
||||
resp, body = self.put(uri, post_body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def update_share_type_extra_specs(self, share_type_id, extra_specs):
|
||||
uri = "types/%s/extra_specs" % share_type_id
|
||||
@ -642,13 +679,14 @@ class SharesClient(rest_client.RestClient):
|
||||
post_body = json.dumps(extra_specs)
|
||||
resp, body = self.post(uri, post_body)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def delete_share_type_extra_spec(self, share_type_id, extra_spec_name):
|
||||
uri = "types/%s/extra_specs/%s" % (share_type_id, extra_spec_name)
|
||||
resp, body = self.delete(uri)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -659,28 +697,31 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += "?%s" % urlparse.urlencode(search_opts)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def delete_share_server(self, share_server_id):
|
||||
"""Delete share server by its ID."""
|
||||
uri = "share-servers/%s" % share_server_id
|
||||
resp, body = self.delete(uri)
|
||||
self.expected_success(202, resp.status)
|
||||
return body
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def show_share_server(self, share_server_id):
|
||||
"""Get share server info."""
|
||||
uri = "share-servers/%s" % share_server_id
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
def show_share_server_details(self, share_server_id):
|
||||
"""Get share server details only."""
|
||||
uri = "share-servers/%s/details" % share_server_id
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -693,7 +734,8 @@ class SharesClient(rest_client.RestClient):
|
||||
uri += "?%s" % urlparse.urlencode(search_opts)
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return json.loads(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
||||
###############
|
||||
|
||||
@ -702,4 +744,5 @@ class SharesClient(rest_client.RestClient):
|
||||
uri = 'os-availability-zone'
|
||||
resp, body = self.get(uri)
|
||||
self.expected_success(200, resp.status)
|
||||
return self._parse_resp(body)
|
||||
body = json.loads(body)
|
||||
return rest_client.ResponseBody(resp, body)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -66,7 +66,7 @@ class AdminActionsTest(base.BaseSharesAdminTest):
|
||||
@ddt.data("error", "available", "error_deleting", "deleting", "creating")
|
||||
def test_reset_share_instance_state(self, status):
|
||||
sh_instance = self.shares_v2_client.get_instances_of_share(
|
||||
self.share["id"])[0]
|
||||
self.share["id"])['share_instances'][0]
|
||||
share_instance_id = sh_instance["id"]
|
||||
self.shares_v2_client.reset_state(
|
||||
share_instance_id, s_type="share_instances", status=status)
|
||||
@ -100,7 +100,7 @@ class AdminActionsTest(base.BaseSharesAdminTest):
|
||||
self.shares_v2_client.reset_state(share["id"], status=self.bad_status)
|
||||
|
||||
# Check that status was changed
|
||||
check_status = self.shares_v2_client.get_share(share["id"])
|
||||
check_status = self.shares_v2_client.get_share(share["id"])['share']
|
||||
self.assertEqual(self.bad_status, check_status["status"])
|
||||
|
||||
# Share with status 'error_deleting' should be deleted
|
||||
@ -112,7 +112,8 @@ class AdminActionsTest(base.BaseSharesAdminTest):
|
||||
def test_force_delete_share_instance(self):
|
||||
share = self.create_share(share_type_id=self.share_type_id,
|
||||
cleanup_in_class=False)
|
||||
instances = self.shares_v2_client.get_instances_of_share(share["id"])
|
||||
instances = self.shares_v2_client.get_instances_of_share(
|
||||
share["id"])['share_instances']
|
||||
# Check that instance was created
|
||||
self.assertEqual(1, len(instances))
|
||||
|
||||
@ -123,7 +124,8 @@ class AdminActionsTest(base.BaseSharesAdminTest):
|
||||
instance["id"], s_type="share_instances", status=self.bad_status)
|
||||
|
||||
# Check that status was changed
|
||||
check_status = self.shares_v2_client.get_share_instance(instance["id"])
|
||||
check_status = self.shares_v2_client.get_share_instance(
|
||||
instance["id"])['share_instance']
|
||||
self.assertEqual(self.bad_status, check_status["status"])
|
||||
|
||||
# Share with status 'error_deleting' should be deleted
|
||||
@ -148,7 +150,7 @@ class AdminActionsTest(base.BaseSharesAdminTest):
|
||||
sn["id"], s_type="snapshots", status=self.bad_status)
|
||||
|
||||
# Check that status was changed
|
||||
check_status = self.shares_v2_client.get_snapshot(sn["id"])
|
||||
check_status = self.shares_v2_client.get_snapshot(sn["id"])['snapshot']
|
||||
self.assertEqual(self.bad_status, check_status["status"])
|
||||
|
||||
# Snapshot with status 'error_deleting' should be deleted
|
||||
@ -172,7 +174,8 @@ class AdminActionsTest(base.BaseSharesAdminTest):
|
||||
# This check will ensure that when a share creation request is handled,
|
||||
# if the driver has the "driver handles share servers" option enabled,
|
||||
# that a share server will be created, otherwise, not.
|
||||
share_get = self.admin_shares_v2_client.get_share(self.share['id'])
|
||||
share_get = self.admin_shares_v2_client.get_share(
|
||||
self.share['id'])['share']
|
||||
share_server = share_get['share_server_id']
|
||||
if CONF.share.multitenancy_enabled:
|
||||
self.assertNotEmpty(share_server)
|
||||
|
@ -43,7 +43,8 @@ class AdminActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
cls.share = cls.create_share(share_type_id=cls.share_type_id,
|
||||
client=cls.admin_client)
|
||||
cls.sh_instance = (
|
||||
cls.admin_client.get_instances_of_share(cls.share["id"])[0]
|
||||
cls.admin_client.get_instances_of_share(
|
||||
cls.share["id"])['share_instances'][0]
|
||||
)
|
||||
if CONF.share.run_snapshot_tests:
|
||||
cls.snapshot = cls.create_snapshot_wait_for_active(
|
||||
|
@ -47,9 +47,9 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
|
||||
# create share
|
||||
cls.share = cls.create_share(share_type_id=cls.share_type_id,
|
||||
client=cls.admin_client)
|
||||
cls.share = cls.admin_client.get_share(cls.share['id'])
|
||||
cls.share = cls.admin_client.get_share(cls.share['id'])['share']
|
||||
cls.share_instances = cls.admin_client.get_instances_of_share(
|
||||
cls.share['id'])
|
||||
cls.share['id'])['share_instances']
|
||||
|
||||
def _verify_export_location_structure(
|
||||
self, export_locations, role='admin', version=LATEST_MICROVERSION,
|
||||
@ -115,7 +115,7 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
|
||||
@utils.skip_if_microversion_not_supported('2.13')
|
||||
def test_list_share_export_locations(self):
|
||||
export_locations = self.admin_client.list_share_export_locations(
|
||||
self.share['id'], version='2.13')
|
||||
self.share['id'], version='2.13')['export_locations']
|
||||
|
||||
self._verify_export_location_structure(export_locations,
|
||||
version='2.13')
|
||||
@ -125,7 +125,7 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
|
||||
@utils.skip_if_microversion_not_supported('2.14')
|
||||
def test_list_share_export_locations_with_preferred_flag(self):
|
||||
export_locations = self.admin_client.list_share_export_locations(
|
||||
self.share['id'], version='2.14')
|
||||
self.share['id'], version='2.14')['export_locations']
|
||||
|
||||
self._verify_export_location_structure(export_locations,
|
||||
version='2.14')
|
||||
@ -134,18 +134,18 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_get_share_export_location(self):
|
||||
export_locations = self.admin_client.list_share_export_locations(
|
||||
self.share['id'])
|
||||
self.share['id'])['export_locations']
|
||||
|
||||
for export_location in export_locations:
|
||||
el = self.admin_client.get_share_export_location(
|
||||
self.share['id'], export_location['id'])
|
||||
self.share['id'], export_location['id'])['export_location']
|
||||
self._verify_export_location_structure(el, format='detail')
|
||||
|
||||
@decorators.idempotent_id('397969c6-7fc8-4bf8-86c7-300b96857c54')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_share_export_locations_by_member(self):
|
||||
export_locations = self.member_client.list_share_export_locations(
|
||||
self.share['id'])
|
||||
self.share['id'])['export_locations']
|
||||
|
||||
self._verify_export_location_structure(export_locations, role='member')
|
||||
|
||||
@ -153,13 +153,13 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_get_share_export_location_by_member(self):
|
||||
export_locations = self.admin_client.list_share_export_locations(
|
||||
self.share['id'])
|
||||
self.share['id'])['export_locations']
|
||||
|
||||
for export_location in export_locations:
|
||||
if export_location['is_admin_only']:
|
||||
continue
|
||||
el = self.member_client.get_share_export_location(
|
||||
self.share['id'], export_location['id'])
|
||||
self.share['id'], export_location['id'])['export_location']
|
||||
self._verify_export_location_structure(el, role='member',
|
||||
format='detail')
|
||||
|
||||
@ -170,7 +170,7 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
|
||||
for share_instance in self.share_instances:
|
||||
export_locations = (
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
share_instance['id'], version='2.13'))
|
||||
share_instance['id'], version='2.13'))['export_locations']
|
||||
self._verify_export_location_structure(export_locations,
|
||||
version='2.13')
|
||||
|
||||
@ -181,7 +181,7 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
|
||||
for share_instance in self.share_instances:
|
||||
export_locations = (
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
share_instance['id'], version='2.14'))
|
||||
share_instance['id'], version='2.14'))['export_locations']
|
||||
self._verify_export_location_structure(export_locations,
|
||||
version='2.14')
|
||||
|
||||
@ -191,22 +191,22 @@ class ExportLocationsTest(base.BaseSharesMixedTest):
|
||||
for share_instance in self.share_instances:
|
||||
export_locations = (
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
share_instance['id']))
|
||||
share_instance['id'])['export_locations'])
|
||||
for el in export_locations:
|
||||
el = self.admin_client.get_share_instance_export_location(
|
||||
share_instance['id'], el['id'])
|
||||
share_instance['id'], el['id'])['export_location']
|
||||
self._verify_export_location_structure(el, format='detail')
|
||||
|
||||
@decorators.idempotent_id('581acd8d-b89d-4684-8310-b910b46acc7a')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_share_contains_all_export_locations_of_all_share_instances(self):
|
||||
share_export_locations = self.admin_client.list_share_export_locations(
|
||||
self.share['id'])
|
||||
self.share['id'])['export_locations']
|
||||
share_instances_export_locations = []
|
||||
for share_instance in self.share_instances:
|
||||
share_instance_export_locations = (
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
share_instance['id']))
|
||||
share_instance['id'])['export_locations'])
|
||||
share_instances_export_locations.extend(
|
||||
share_instance_export_locations)
|
||||
|
||||
|
@ -46,9 +46,9 @@ class ExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
# create share
|
||||
cls.share = cls.create_share(client=cls.admin_client,
|
||||
share_type_id=cls.share_type_id)
|
||||
cls.share = cls.admin_client.get_share(cls.share['id'])
|
||||
cls.share = cls.admin_client.get_share(cls.share['id'])['share']
|
||||
cls.share_instances = cls.admin_client.get_instances_of_share(
|
||||
cls.share['id'])
|
||||
cls.share['id'])['share_instances']
|
||||
|
||||
@decorators.idempotent_id('8eac1355-f272-4913-8a49-1a8a9cb086bd')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
@ -86,7 +86,7 @@ class ExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
for share_instance in self.share_instances:
|
||||
export_locations = (
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
share_instance['id']))
|
||||
share_instance['id'])['export_locations'])
|
||||
for el in export_locations:
|
||||
self.assertRaises(lib_exc.Forbidden,
|
||||
(self.admin_member_client.
|
||||
@ -105,7 +105,7 @@ class ExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_get_share_export_location_by_different_project_user(self):
|
||||
export_locations = self.admin_client.list_share_export_locations(
|
||||
self.share['id'])
|
||||
self.share['id'])['export_locations']
|
||||
|
||||
for export_location in export_locations:
|
||||
self.assertRaises(
|
||||
|
@ -108,7 +108,7 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
self.assertIsNotNone(dest_pool.get('name'))
|
||||
|
||||
old_exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'])
|
||||
share['id'])['export_locations']
|
||||
self.assertNotEmpty(old_exports)
|
||||
old_exports = [x['path'] for x in old_exports
|
||||
if x['is_admin_only'] is False]
|
||||
@ -130,7 +130,7 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
status_attr='access_rules_status')
|
||||
|
||||
dest_pool = dest_pool['name']
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
return share, dest_pool
|
||||
|
||||
@ -144,7 +144,7 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
else status_to_wait)
|
||||
|
||||
new_exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'], version=version)
|
||||
share['id'], version=version)['export_locations']
|
||||
self.assertNotEmpty(new_exports)
|
||||
new_exports = [x['path'] for x in new_exports if
|
||||
x['is_admin_only'] is False]
|
||||
@ -160,7 +160,8 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
if complete:
|
||||
self.assertEqual(dest_pool, share['host'])
|
||||
|
||||
rules = self.shares_v2_client.list_access_rules(share['id'])
|
||||
rules = self.shares_v2_client.list_access_rules(
|
||||
share['id'])['access_list']
|
||||
expected_rules = [{
|
||||
'state': constants.RULE_STATE_ACTIVE,
|
||||
'access_to': '50.50.50.50',
|
||||
@ -205,7 +206,7 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
def _create_secondary_share_network(self, old_share_network_id):
|
||||
|
||||
old_share_network = self.shares_v2_client.get_share_network(
|
||||
old_share_network_id)
|
||||
old_share_network_id)['share_network']
|
||||
share_net_info = (
|
||||
utils.share_network_get_default_subnet(old_share_network)
|
||||
if utils.share_network_subnets_are_supported()
|
||||
@ -223,7 +224,7 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
share = self.create_share(self.protocol,
|
||||
size=new_size,
|
||||
share_type_id=self.share_type_id)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
share, dest_pool = self._setup_migration(share)
|
||||
|
||||
@ -242,14 +243,14 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
self.shares_v2_client.extend_share(share['id'], new_size)
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, share['id'], constants.STATUS_AVAILABLE)
|
||||
share = self.shares_v2_client.get_share(share["id"])
|
||||
share = self.shares_v2_client.get_share(share["id"])['share']
|
||||
self.assertEqual(new_size, int(share["size"]))
|
||||
else:
|
||||
new_size = CONF.share.share_size
|
||||
self.shares_v2_client.shrink_share(share['id'], new_size)
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, share['id'], constants.STATUS_AVAILABLE)
|
||||
share = self.shares_v2_client.get_share(share["id"])
|
||||
share = self.shares_v2_client.get_share(share["id"])['share']
|
||||
self.assertEqual(new_size, int(share["size"]))
|
||||
|
||||
self._cleanup_share(share)
|
||||
@ -273,7 +274,7 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
|
||||
def _validate_snapshot(self, share, snapshot1, snapshot2):
|
||||
snapshot_list = self.shares_v2_client.list_snapshots_for_share(
|
||||
share['id'])
|
||||
share['id'])['snapshots']
|
||||
msg = "Share %s has no snapshot." % share['id']
|
||||
# Verify that snapshot list is not empty
|
||||
self.assertNotEmpty(snapshot_list, msg)
|
||||
@ -308,7 +309,7 @@ class MigrationBase(base.BaseSharesAdminTest):
|
||||
|
||||
share = self.create_share(
|
||||
self.protocol, share_type_id=share_type_id)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
if snapshot_capable:
|
||||
self.assertEqual(False, share['snapshot_support'])
|
||||
@ -379,7 +380,7 @@ class MigrationCancelNFSTest(MigrationBase):
|
||||
|
||||
share = self.create_share(self.protocol,
|
||||
share_type_id=self.share_type_id)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
share, dest_pool = self._setup_migration(share)
|
||||
task_state = (constants.TASK_STATE_DATA_COPYING_COMPLETED
|
||||
if force_host_assisted
|
||||
@ -422,7 +423,7 @@ class MigrationCancelNFSTest(MigrationBase):
|
||||
def test_migration_cancel_share_with_snapshot(self):
|
||||
share = self.create_share(self.protocol,
|
||||
share_type_id=self.share_type_id)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
share, dest_pool = self._setup_migration(share)
|
||||
snapshot1 = self.create_snapshot_wait_for_active(share['id'])
|
||||
@ -467,7 +468,7 @@ class MigrationOppositeDriverModesNFSTest(MigrationBase):
|
||||
share = self.create_share(self.protocol,
|
||||
share_type_id=self.share_type_id,
|
||||
cleanup_in_class=False)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
share, dest_pool = self._setup_migration(share, opposite=True)
|
||||
|
||||
old_share_network_id = share['share_network_id']
|
||||
@ -521,7 +522,7 @@ class MigrationTwoPhaseNFSTest(MigrationBase):
|
||||
|
||||
share = self.create_share(self.protocol,
|
||||
share_type_id=self.share_type_id)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
share, dest_pool = self._setup_migration(share)
|
||||
|
||||
old_share_network_id = share['share_network_id']
|
||||
@ -609,7 +610,7 @@ class MigrationOfShareWithSnapshotNFSTest(MigrationBase):
|
||||
share = self.create_share(self.protocol,
|
||||
share_type_id=ss_type['id'],
|
||||
cleanup_in_class=False)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
share, dest_pool = self._setup_migration(share)
|
||||
snapshot1 = self.create_snapshot_wait_for_active(
|
||||
|
@ -68,7 +68,7 @@ class MigrationNegativeTest(base.BaseSharesAdminTest):
|
||||
cls.share = cls.create_share(cls.protocol,
|
||||
size=CONF.share.share_size + 1,
|
||||
share_type_id=cls.share_type_id)
|
||||
cls.share = cls.shares_client.get_share(cls.share['id'])
|
||||
cls.share = cls.shares_client.get_share(cls.share['id'])['share']
|
||||
|
||||
dest_pool = utils.choose_matching_backend(
|
||||
cls.share, pools, cls.share_type)
|
||||
|
@ -86,7 +86,7 @@ class ShareMultiBackendTest(base.BaseSharesAdminTest):
|
||||
def test_share_backend_name_reporting(self):
|
||||
# Share's 'host' should be like "hostname@backend_name"
|
||||
for share in self.shares:
|
||||
get = self.shares_client.get_share(share['id'])
|
||||
get = self.shares_client.get_share(share['id'])['share']
|
||||
self.assertEqual(2, len(get["host"].split("@")))
|
||||
|
||||
@decorators.idempotent_id('691fbcef-6d8d-4ad9-b493-501bbb3dcf3c')
|
||||
@ -95,7 +95,7 @@ class ShareMultiBackendTest(base.BaseSharesAdminTest):
|
||||
# Share type should be the same as provided with share creation
|
||||
for share, share_type in zip(self.shares, self.sts):
|
||||
share_details = self.shares_v2_client.get_share(
|
||||
share['id'], version="2.5")
|
||||
share['id'], version="2.5")['share']
|
||||
self.assertEqual(share_type["name"], share_details["share_type"])
|
||||
|
||||
@decorators.idempotent_id('f25e0cb0-d656-4f16-a761-ec23992cd9e7')
|
||||
@ -104,7 +104,7 @@ class ShareMultiBackendTest(base.BaseSharesAdminTest):
|
||||
# Share type should be the same as provided with share creation
|
||||
for share, share_type in zip(self.shares, self.sts):
|
||||
share_details = self.shares_v2_client.get_share(
|
||||
share['id'], version="2.6")
|
||||
share['id'], version="2.6")['share']
|
||||
self.assertEqual(share_type["id"], share_details["share_type"])
|
||||
self.assertEqual(
|
||||
share_type["name"], share_details["share_type_name"])
|
||||
@ -116,6 +116,6 @@ class ShareMultiBackendTest(base.BaseSharesAdminTest):
|
||||
if CONF.share.backend_names[0] == CONF.share.backend_names[1]:
|
||||
raise self.skipException("Share backends "
|
||||
"configured with same name. Skipping.")
|
||||
get1 = self.shares_client.get_share(self.shares[0]['id'])
|
||||
get2 = self.shares_client.get_share(self.shares[1]['id'])
|
||||
get1 = self.shares_client.get_share(self.shares[0]['id'])['share']
|
||||
get2 = self.shares_client.get_share(self.shares[1]['id'])['share']
|
||||
self.assertNotEqual(get1["host"], get2["host"])
|
||||
|
@ -50,7 +50,7 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
|
||||
@decorators.idempotent_id('f62c48e3-9736-4f0c-9f9b-f139f393ac0a')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_default_quotas(self):
|
||||
quotas = self.client.default_quotas(self.tenant_id)
|
||||
quotas = self.client.default_quotas(self.tenant_id)['quota_set']
|
||||
self.assertGreater(int(quotas["gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["shares"]), -2)
|
||||
@ -66,7 +66,7 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
|
||||
@decorators.idempotent_id('1ff57cfa-cd8d-495f-86eb-9fead307428e')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_show_quotas(self):
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
self.assertGreater(int(quotas["gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["shares"]), -2)
|
||||
@ -83,7 +83,7 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_show_quotas_for_user(self):
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
self.assertGreater(int(quotas["gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["shares"]), -2)
|
||||
@ -101,7 +101,7 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
|
||||
@utils.skip_if_microversion_not_supported(PRE_SHARE_GROUPS_MICROVERSION)
|
||||
def test_show_sg_quotas_using_too_old_microversion(self):
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, version=PRE_SHARE_GROUPS_MICROVERSION)
|
||||
self.tenant_id, version=PRE_SHARE_GROUPS_MICROVERSION)['quota_set']
|
||||
|
||||
for key in ('share_groups', 'share_group_snapshots'):
|
||||
self.assertNotIn(key, quotas)
|
||||
@ -112,7 +112,7 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
|
||||
def test_show_sg_quotas_for_user_using_too_old_microversion(self):
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id,
|
||||
version=PRE_SHARE_GROUPS_MICROVERSION)
|
||||
version=PRE_SHARE_GROUPS_MICROVERSION)['quota_set']
|
||||
|
||||
for key in ('share_groups', 'share_group_snapshots'):
|
||||
self.assertNotIn(key, quotas)
|
||||
@ -124,7 +124,7 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
|
||||
def test_show_replica_quotas_for_user_using_too_old_microversion(self):
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id,
|
||||
version=PRE_SHARE_REPLICA_QUOTAS_MICROVERSION)
|
||||
version=PRE_SHARE_REPLICA_QUOTAS_MICROVERSION)['quota_set']
|
||||
|
||||
for key in ('share_replicas', 'replica_gigabytes'):
|
||||
self.assertNotIn(key, quotas)
|
||||
@ -159,11 +159,11 @@ class SharesAdminQuotasTest(base.BaseSharesAdminTest):
|
||||
keys.append('replica_gigabytes')
|
||||
|
||||
# Get current project quotas
|
||||
p_quotas = self.client.show_quotas(self.tenant_id)
|
||||
p_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# Get current share type quotas
|
||||
st_quotas = self.client.show_quotas(
|
||||
self.tenant_id, share_type=share_type[share_type_key])
|
||||
self.tenant_id, share_type=share_type[share_type_key])['quota_set']
|
||||
|
||||
# Share type quotas have values equal to project's
|
||||
for key in keys:
|
||||
@ -214,7 +214,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_tenant_quota_shares(self):
|
||||
# get current quotas
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
new_quota = int(quotas["shares"]) + 2
|
||||
|
||||
# set new quota for shares
|
||||
@ -233,7 +233,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@utils.skip_if_microversion_not_supported(SHARE_GROUPS_MICROVERSION)
|
||||
def test_update_tenant_quota_share_groups(self, quota_key):
|
||||
# Get current quotas
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
new_quota = int(quotas[quota_key]) + 2
|
||||
|
||||
# Set new quota
|
||||
@ -245,7 +245,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_user_quota_shares(self):
|
||||
# get current quotas
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
new_quota = int(quotas["shares"]) - 1
|
||||
|
||||
# set new quota for shares
|
||||
@ -266,7 +267,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@utils.skip_if_microversion_not_supported(SHARE_GROUPS_MICROVERSION)
|
||||
def test_update_user_quota_share_groups(self, quota_key):
|
||||
# Get current quotas
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
new_quota = int(quotas[quota_key]) - 1
|
||||
|
||||
# Set new quota
|
||||
@ -292,7 +294,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
# Update the kwargs with user_id in case the user_id need to be
|
||||
# specified in the request
|
||||
kwargs.update({'user_id': self.user_id}) if use_user_id else None
|
||||
quotas = self.client.show_quotas(self.tenant_id, **kwargs)
|
||||
quotas = self.client.show_quotas(self.tenant_id, **kwargs)['quota_set']
|
||||
new_quota = int(quotas[quota_key]) - 1
|
||||
|
||||
# Add the updated quota into the kwargs
|
||||
@ -319,7 +321,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Get current quotas
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, share_type=share_type[share_type_key])
|
||||
self.tenant_id, share_type=share_type[share_type_key])['quota_set']
|
||||
quota_keys = ['shares', 'gigabytes', 'snapshots', 'snapshot_gigabytes']
|
||||
|
||||
if replica_quotas_supported:
|
||||
@ -341,7 +343,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
self.assertEqual(new_quota, int(updated[q]))
|
||||
|
||||
current_quotas = self.client.show_quotas(
|
||||
self.tenant_id, share_type=share_type[share_type_key])
|
||||
self.tenant_id, share_type=share_type[share_type_key])['quota_set']
|
||||
|
||||
for q in quota_keys:
|
||||
self.assertEqual(int(quotas[q]) - 1, current_quotas[q])
|
||||
@ -350,7 +352,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_tenant_quota_snapshots(self):
|
||||
# get current quotas
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
new_quota = int(quotas["snapshots"]) + 2
|
||||
|
||||
# set new quota for snapshots
|
||||
@ -362,7 +364,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_user_quota_snapshots(self):
|
||||
# get current quotas
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
new_quota = int(quotas["snapshots"]) - 1
|
||||
|
||||
# set new quota for snapshots
|
||||
@ -376,7 +379,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_tenant_quota_gigabytes(self):
|
||||
# get current quotas
|
||||
custom = self.client.show_quotas(self.tenant_id)
|
||||
custom = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# make quotas for update
|
||||
gigabytes = int(custom["gigabytes"]) + 2
|
||||
@ -390,7 +393,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_tenant_quota_snapshot_gigabytes(self):
|
||||
# get current quotas
|
||||
custom = self.client.show_quotas(self.tenant_id)
|
||||
custom = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# make quotas for update
|
||||
snapshot_gigabytes = int(custom["snapshot_gigabytes"]) + 2
|
||||
@ -406,7 +409,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_user_quota_gigabytes(self):
|
||||
# get current quotas
|
||||
custom = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
custom = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
# make quotas for update
|
||||
gigabytes = int(custom["gigabytes"]) - 1
|
||||
@ -422,7 +426,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_user_quota_snapshot_gigabytes(self):
|
||||
# get current quotas
|
||||
custom = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
custom = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
# make quotas for update
|
||||
snapshot_gigabytes = int(custom["snapshot_gigabytes"]) - 1
|
||||
@ -439,7 +444,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_update_tenant_quota_share_networks(self):
|
||||
# get current quotas
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
new_quota = int(quotas["share_networks"]) + 2
|
||||
|
||||
# set new quota for share-networks
|
||||
@ -452,7 +457,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_update_user_quota_share_networks(self):
|
||||
# get current quotas
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
new_quota = int(quotas["share_networks"]) - 1
|
||||
|
||||
# set new quota for share-networks
|
||||
@ -466,10 +471,10 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_reset_tenant_quotas(self):
|
||||
# Get default_quotas
|
||||
default = self.client.default_quotas(self.tenant_id)
|
||||
default = self.client.default_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# Get current quotas
|
||||
custom = self.client.show_quotas(self.tenant_id)
|
||||
custom = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# Make quotas for update
|
||||
data = {
|
||||
@ -514,7 +519,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
self.client.reset_quotas(self.tenant_id)
|
||||
|
||||
# Verify quotas
|
||||
reseted = self.client.show_quotas(self.tenant_id)
|
||||
reseted = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
self.assertEqual(int(default["shares"]), int(reseted["shares"]))
|
||||
self.assertEqual(int(default["snapshots"]), int(reseted["snapshots"]))
|
||||
self.assertEqual(int(default["gigabytes"]), int(reseted["gigabytes"]))
|
||||
@ -559,7 +564,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
quota_keys = ['shares', 'snapshots', 'gigabytes', 'snapshot_gigabytes']
|
||||
|
||||
# get default_quotas
|
||||
default_quotas = self.client.default_quotas(self.tenant_id)
|
||||
default_quotas = self.client.default_quotas(
|
||||
self.tenant_id)['quota_set']
|
||||
|
||||
kwargs = {}
|
||||
|
||||
@ -602,9 +608,9 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
self.tenant_id, share_type=share_type[share_type_key])
|
||||
|
||||
# verify quotas
|
||||
current_p_quota = self.client.show_quotas(self.tenant_id)
|
||||
current_p_quota = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
current_st_quota = self.client.show_quotas(
|
||||
self.tenant_id, share_type=share_type[share_type_key])
|
||||
self.tenant_id, share_type=share_type[share_type_key])['quota_set']
|
||||
for key in quota_keys:
|
||||
self.assertEqual(updated_p_quota[key], current_p_quota[key])
|
||||
|
||||
@ -617,7 +623,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_quota_for_shares(self):
|
||||
self.update_quotas(self.tenant_id, shares=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('shares'))
|
||||
|
||||
@ -626,7 +632,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_user_quota_for_shares(self):
|
||||
self.update_quotas(self.tenant_id, user_id=self.user_id, shares=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('shares'))
|
||||
|
||||
@ -635,7 +642,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_quota_for_snapshots(self):
|
||||
self.update_quotas(self.tenant_id, snapshots=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('snapshots'))
|
||||
|
||||
@ -644,7 +651,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_user_quota_for_snapshots(self):
|
||||
self.update_quotas(self.tenant_id, user_id=self.user_id, snapshots=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('snapshots'))
|
||||
|
||||
@ -653,7 +661,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_quota_for_gigabytes(self):
|
||||
self.update_quotas(self.tenant_id, gigabytes=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('gigabytes'))
|
||||
|
||||
@ -662,7 +670,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_quota_for_snapshot_gigabytes(self):
|
||||
self.update_quotas(self.tenant_id, snapshot_gigabytes=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('snapshot_gigabytes'))
|
||||
|
||||
@ -671,7 +679,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_user_quota_for_gigabytes(self):
|
||||
self.update_quotas(self.tenant_id, user_id=self.user_id, gigabytes=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('gigabytes'))
|
||||
|
||||
@ -682,7 +691,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
user_id=self.user_id,
|
||||
snapshot_gigabytes=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('snapshot_gigabytes'))
|
||||
|
||||
@ -691,7 +701,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_quota_for_share_networks(self):
|
||||
self.update_quotas(self.tenant_id, share_networks=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('share_networks'))
|
||||
|
||||
@ -702,7 +712,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
user_id=self.user_id,
|
||||
share_networks=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('share_networks'))
|
||||
|
||||
@ -714,7 +725,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
def test_unlimited_quota_for_share_groups(self):
|
||||
self.update_quotas(self.tenant_id, share_groups=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('share_groups'))
|
||||
|
||||
@ -728,7 +739,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
user_id=self.user_id,
|
||||
share_group_snapshots=-1)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get('share_group_snapshots'))
|
||||
|
||||
@ -741,7 +753,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
kwargs = {quota_key: -1}
|
||||
self.update_quotas(self.tenant_id, **kwargs)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get(quota_key))
|
||||
|
||||
@ -754,7 +766,8 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
kwargs = {quota_key: -1}
|
||||
self.update_quotas(self.tenant_id, user_id=self.user_id, **kwargs)
|
||||
|
||||
quotas = self.client.show_quotas(self.tenant_id, self.user_id)
|
||||
quotas = self.client.show_quotas(
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
|
||||
self.assertEqual(-1, quotas.get(quota_key))
|
||||
|
||||
@ -858,7 +871,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
(4, 4, 2, 1, {'share_type': st_1['id']}),
|
||||
(4, 3, 2, 1, {'share_type': st_2['name']})):
|
||||
quotas = self.client.detail_quotas(
|
||||
tenant_id=self.tenant_id, **kwargs)
|
||||
tenant_id=self.tenant_id, **kwargs)['quota_set']
|
||||
self.assertEqual(0, quotas['gigabytes']['reserved'])
|
||||
self.assertEqual(g_l, quotas['gigabytes']['limit'])
|
||||
self.assertEqual(g_use, quotas['gigabytes']['in_use'])
|
||||
@ -873,7 +886,7 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
for kwargs in ({}, {'share_type': st_1['name']},
|
||||
{'user_id': self.user_id}, {'share_type': st_2['id']}):
|
||||
quotas = self.client.detail_quotas(
|
||||
tenant_id=self.tenant_id, **kwargs)
|
||||
tenant_id=self.tenant_id, **kwargs)['quota_set']
|
||||
for key in ('shares', 'gigabytes'):
|
||||
self.assertEqual(0, quotas[key]['reserved'])
|
||||
self.assertEqual(0, quotas[key]['in_use'])
|
||||
@ -893,9 +906,10 @@ class SharesAdminQuotasUpdateTest(base.BaseSharesAdminTest):
|
||||
|
||||
def _check_usages(self, sg_in_use, sgs_in_use):
|
||||
"""Helper method for 'test_share_group_quotas_usages' test."""
|
||||
p_quotas = self.client.detail_quotas(tenant_id=self.tenant_id)
|
||||
p_quotas = self.client.detail_quotas(
|
||||
tenant_id=self.tenant_id)['quota_set']
|
||||
u_quotas = self.client.detail_quotas(
|
||||
tenant_id=self.tenant_id, user_id=self.user_id)
|
||||
tenant_id=self.tenant_id, user_id=self.user_id)['quota_set']
|
||||
self._check_sg_usages(p_quotas, sg_in_use, 3)
|
||||
self._check_sg_usages(u_quotas, sg_in_use, 2)
|
||||
self._check_sgs_usages(p_quotas, sgs_in_use)
|
||||
|
@ -124,7 +124,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
@decorators.idempotent_id('75d39eda-a2b5-4271-a61d-9e2c86370b3e')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_create_share_with_size_bigger_than_quota(self):
|
||||
quotas = self.client.show_quotas(self.tenant_id)
|
||||
quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
overquota = int(quotas['gigabytes']) + 2
|
||||
|
||||
# try schedule share with size, bigger than gigabytes quota
|
||||
@ -152,7 +152,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
def test_try_set_user_quota_shares_bigger_than_tenant_quota(self):
|
||||
|
||||
# get current quotas for tenant
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# try set user quota for shares bigger than tenant quota
|
||||
bigger_value = int(tenant_quotas["shares"]) + 2
|
||||
@ -168,7 +168,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
def test_try_set_user_quota_snaps_bigger_than_tenant_quota(self):
|
||||
|
||||
# get current quotas for tenant
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# try set user quota for snapshots bigger than tenant quota
|
||||
bigger_value = int(tenant_quotas["snapshots"]) + 2
|
||||
@ -184,7 +184,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
def test_try_set_user_quota_gigabytes_bigger_than_tenant_quota(self):
|
||||
|
||||
# get current quotas for tenant
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# try set user quota for gigabytes bigger than tenant quota
|
||||
bigger_value = int(tenant_quotas["gigabytes"]) + 2
|
||||
@ -199,7 +199,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_try_set_user_quota_snap_gigabytes_bigger_than_tenant_quota(self):
|
||||
# get current quotas for tenant
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# try set user quota for snapshot gigabytes bigger than tenant quota
|
||||
bigger_value = int(tenant_quotas["snapshot_gigabytes"]) + 2
|
||||
@ -215,7 +215,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
def test_try_set_user_quota_share_networks_bigger_than_tenant_quota(self):
|
||||
|
||||
# get current quotas for tenant
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# try set user quota for share_networks bigger than tenant quota
|
||||
bigger_value = int(tenant_quotas["share_networks"]) + 2
|
||||
@ -233,7 +233,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
SHARE_REPLICA_QUOTAS_MICROVERSION)
|
||||
def test_try_set_user_quota_replicas_bigger_than_tenant_quota(self, key):
|
||||
# get current quotas for tenant
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# try set user quota for snapshots bigger than tenant quota
|
||||
bigger_value = int(tenant_quotas[key]) + 2
|
||||
@ -290,7 +290,8 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
|
||||
kwargs = {"share_type": "fake_nonexistent_share_type"}
|
||||
if op == 'update':
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(
|
||||
self.tenant_id)['quota_set']
|
||||
kwargs['shares'] = tenant_quotas['shares']
|
||||
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
@ -304,7 +305,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
@utils.skip_if_microversion_not_supported("2.39")
|
||||
def test_try_update_share_type_quota_for_share_networks(self, key):
|
||||
share_type = self.create_share_type()
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
# Try to set 'share_networks' quota for share type
|
||||
self.assertRaises(lib_exc.BadRequest,
|
||||
@ -319,7 +320,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
@utils.skip_if_microversion_not_supported(SHARE_GROUPS_MICROVERSION)
|
||||
def test_try_update_share_type_quota_for_share_groups(self, quota_name):
|
||||
share_type = self.create_share_type()
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)['quota_set']
|
||||
|
||||
self.assertRaises(lib_exc.BadRequest,
|
||||
self.update_quotas,
|
||||
@ -334,7 +335,7 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
@utils.skip_if_microversion_not_supported(SHARE_GROUPS_MICROVERSION)
|
||||
def test_share_group_quotas_using_too_old_microversion(self, quota_key):
|
||||
tenant_quotas = self.client.show_quotas(
|
||||
self.tenant_id, version=SHARE_GROUPS_MICROVERSION)
|
||||
self.tenant_id, version=SHARE_GROUPS_MICROVERSION)['quota_set']
|
||||
kwargs = {
|
||||
"version": PRE_SHARE_GROUPS_MICROVERSION,
|
||||
quota_key: tenant_quotas[quota_key],
|
||||
@ -352,7 +353,8 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
SHARE_REPLICA_QUOTAS_MICROVERSION)
|
||||
def test_share_replica_quotas_using_too_old_microversion(self, quota_key):
|
||||
tenant_quotas = self.client.show_quotas(
|
||||
self.tenant_id, version=SHARE_REPLICA_QUOTAS_MICROVERSION)
|
||||
self.tenant_id,
|
||||
version=SHARE_REPLICA_QUOTAS_MICROVERSION)['quota_set']
|
||||
kwargs = {
|
||||
"version": PRE_SHARE_REPLICA_QUOTAS_MICROVERSION,
|
||||
quota_key: tenant_quotas[quota_key],
|
||||
@ -371,7 +373,8 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
share_type = self.create_share_type()
|
||||
kwargs = {"version": "2.38", "share_type": share_type["name"]}
|
||||
if op == 'update':
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(
|
||||
self.tenant_id)['quota_set']
|
||||
kwargs['shares'] = tenant_quotas['shares']
|
||||
|
||||
self.assertRaises(lib_exc.BadRequest,
|
||||
@ -387,7 +390,8 @@ class SharesAdminQuotasNegativeTest(base.BaseSharesAdminTest):
|
||||
share_type = self.create_share_type()
|
||||
kwargs = {"share_type": share_type["name"], "user_id": self.user_id}
|
||||
if op == 'update':
|
||||
tenant_quotas = self.client.show_quotas(self.tenant_id)
|
||||
tenant_quotas = self.client.show_quotas(
|
||||
self.tenant_id)['quota_set']
|
||||
kwargs['shares'] = tenant_quotas['shares']
|
||||
|
||||
self.assertRaises(lib_exc.BadRequest,
|
||||
@ -456,7 +460,8 @@ class ReplicaQuotasNegativeTest(rep_neg_test.ReplicationNegativeBase):
|
||||
self.update_quotas(self.tenant_id, client=self.admin_client, **kwargs)
|
||||
|
||||
# Get the updated quotas and add a cleanup
|
||||
updated_quota = self.admin_client.show_quotas(self.tenant_id)
|
||||
updated_quota = self.admin_client.show_quotas(
|
||||
self.tenant_id)['quota_set']
|
||||
|
||||
# Make sure that the new value was properly set
|
||||
self.assertEqual(new_limit, updated_quota[quota_key])
|
||||
|
@ -61,7 +61,7 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
|
||||
cls.sn_id = None
|
||||
if cls.multitenancy_enabled:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.sn_id = cls.share_network['id']
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
@ -75,7 +75,7 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
|
||||
share_network_id=cls.sn_id,
|
||||
client=cls.admin_client)
|
||||
cls.replica = cls.admin_client.list_share_replicas(
|
||||
share_id=cls.share['id'])[0]
|
||||
share_id=cls.share['id'])['share_replicas'][0]
|
||||
|
||||
@staticmethod
|
||||
def _filter_share_replica_list(replica_list, r_state):
|
||||
@ -101,7 +101,7 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
|
||||
share_type_id=self.share_type_id, client=self.admin_client,
|
||||
availability_zone=self.share_zone, share_network_id=self.sn_id)
|
||||
original_replica = self.admin_client.list_share_replicas(
|
||||
share_id=share['id'], version=version)[0]
|
||||
share_id=share['id'], version=version)['share_replicas'][0]
|
||||
|
||||
# NOTE(Yogi1): Cleanup needs to be disabled for replica that is
|
||||
# being promoted since it will become the 'primary'/'active' replica.
|
||||
@ -116,7 +116,7 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
|
||||
|
||||
# List replicas
|
||||
replica_list = self.admin_client.list_share_replicas(
|
||||
share_id=share['id'], version=version)
|
||||
share_id=share['id'], version=version)['share_replicas']
|
||||
|
||||
# Check if there is only 1 'active' replica before promotion.
|
||||
active_replicas = self._filter_share_replica_list(
|
||||
@ -141,7 +141,7 @@ class ReplicationAdminTest(base.BaseSharesMixedTest):
|
||||
|
||||
# Check if there is still only 1 'active' replica after promotion.
|
||||
replica_list = self.admin_client.list_share_replicas(
|
||||
share_id=self.share["id"], version=version)
|
||||
share_id=self.share["id"], version=version)['share_replicas']
|
||||
new_active_replicas = self._filter_share_replica_list(
|
||||
replica_list, constants.REPLICATION_STATE_ACTIVE)
|
||||
self.assertEqual(1, len(new_active_replicas))
|
||||
|
@ -64,7 +64,7 @@ class ReplicationActionsAdminTest(base.BaseSharesMixedTest):
|
||||
cls.sn_id = None
|
||||
if cls.multitenancy_enabled:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.sn_id = cls.share_network['id']
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
@ -79,7 +79,7 @@ class ReplicationActionsAdminTest(base.BaseSharesMixedTest):
|
||||
share_network_id=cls.sn_id,
|
||||
client=cls.admin_client)
|
||||
cls.replica = cls.admin_client.list_share_replicas(
|
||||
share_id=cls.share['id'])[0]
|
||||
share_id=cls.share['id'])['share_replicas'][0]
|
||||
|
||||
@decorators.idempotent_id('b39f319e-2515-42c0-85c4-21c2fb2123bf')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
@ -91,7 +91,7 @@ class ReplicationActionsAdminTest(base.BaseSharesMixedTest):
|
||||
self.admin_client.extend_share(self.share["id"], new_size)
|
||||
waiters.wait_for_resource_status(
|
||||
self.admin_client, self.share["id"], "available")
|
||||
share = self.admin_client.get_share(self.share["id"])
|
||||
share = self.admin_client.get_share(self.share["id"])['share']
|
||||
self.assertEqual(new_size, int(share["size"]))
|
||||
|
||||
@decorators.idempotent_id('743bfb8e-a314-4e8e-92b5-079bd3eae72d')
|
||||
@ -99,12 +99,12 @@ class ReplicationActionsAdminTest(base.BaseSharesMixedTest):
|
||||
@testtools.skipUnless(CONF.share.run_shrink_tests,
|
||||
'Shrink share tests are disabled.')
|
||||
def test_shrink_replicated_share(self):
|
||||
share = self.admin_client.get_share(self.share["id"])
|
||||
share = self.admin_client.get_share(self.share["id"])['share']
|
||||
new_size = self.share["size"] - 1
|
||||
self.admin_client.shrink_share(self.share["id"], new_size)
|
||||
waiters.wait_for_resource_status(
|
||||
self.admin_client, share["id"], "available")
|
||||
shrink_share = self.admin_client.get_share(self.share["id"])
|
||||
shrink_share = self.admin_client.get_share(self.share["id"])['share']
|
||||
self.assertEqual(new_size, int(shrink_share["size"]))
|
||||
|
||||
@decorators.idempotent_id('84150cd6-2777-4806-8aa3-51359f16816e')
|
||||
@ -120,9 +120,9 @@ class ReplicationActionsAdminTest(base.BaseSharesMixedTest):
|
||||
share_network_id=self.sn_id,
|
||||
cleanup_in_class=True,
|
||||
client=self.admin_client)
|
||||
share = self.admin_client.get_share(share["id"])
|
||||
share = self.admin_client.get_share(share["id"])['share']
|
||||
export_locations = self.admin_client.list_share_export_locations(
|
||||
share["id"])
|
||||
share["id"])['export_locations']
|
||||
export_path = export_locations[0]['path']
|
||||
|
||||
self.admin_client.unmanage_share(share['id'])
|
||||
@ -131,7 +131,7 @@ class ReplicationActionsAdminTest(base.BaseSharesMixedTest):
|
||||
# Manage the previously unmanaged share
|
||||
managed_share = self.admin_client.manage_share(
|
||||
share['host'], share['share_proto'],
|
||||
export_path, self.share_type_id)
|
||||
export_path, self.share_type_id)['share']
|
||||
waiters.wait_for_resource_status(
|
||||
self.admin_client, managed_share['id'], 'available')
|
||||
|
||||
|
@ -51,7 +51,7 @@ class SecurityServiceAdminTest(
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_list_security_services_all_tenants(self):
|
||||
listed = self.shares_client.list_security_services(
|
||||
params={'all_tenants': 1})
|
||||
params={'all_tenants': 1})['security_services']
|
||||
self.assertTrue(any(self.ss_ldap['id'] == ss['id'] for ss in listed))
|
||||
self.assertTrue(any(self.ss_kerberos['id'] == ss['id']
|
||||
for ss in listed))
|
||||
@ -63,5 +63,5 @@ class SecurityServiceAdminTest(
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_list_security_services_invalid_filters(self):
|
||||
listed = self.shares_client.list_security_services(
|
||||
params={'fake_opt': 'some_value'})
|
||||
params={'fake_opt': 'some_value'})['security_services']
|
||||
self.assertEqual(0, len(listed))
|
||||
|
@ -25,13 +25,13 @@ class ServicesAdminTest(base.BaseSharesAdminTest):
|
||||
|
||||
def setUp(self):
|
||||
super(ServicesAdminTest, self).setUp()
|
||||
self.services = self.shares_client.list_services()
|
||||
self.services = self.shares_client.list_services()['services']
|
||||
|
||||
@decorators.idempotent_id('74cd12ab-a1f5-40fb-9110-d9035b4b20c5')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
@ddt.data('shares_client', 'shares_v2_client')
|
||||
def test_list_services(self, client_name):
|
||||
services = getattr(self, client_name).list_services()
|
||||
services = getattr(self, client_name).list_services()['services']
|
||||
self.assertNotEqual(0, len(services))
|
||||
|
||||
for service in services:
|
||||
@ -43,7 +43,7 @@ class ServicesAdminTest(base.BaseSharesAdminTest):
|
||||
def test_get_services_by_host_name(self, client_name):
|
||||
host = self.services[0]["host"]
|
||||
params = {"host": host}
|
||||
services = getattr(self, client_name).list_services(params)
|
||||
services = getattr(self, client_name).list_services(params)['services']
|
||||
self.assertNotEqual(0, len(services))
|
||||
for service in services:
|
||||
self.assertEqual(host, service["host"])
|
||||
@ -54,7 +54,7 @@ class ServicesAdminTest(base.BaseSharesAdminTest):
|
||||
def test_get_services_by_binary_name(self, client_name):
|
||||
binary = self.services[0]["binary"]
|
||||
params = {"binary": binary, }
|
||||
services = getattr(self, client_name).list_services(params)
|
||||
services = getattr(self, client_name).list_services(params)['services']
|
||||
self.assertNotEqual(0, len(services))
|
||||
for service in services:
|
||||
self.assertEqual(binary, service["binary"])
|
||||
@ -65,7 +65,7 @@ class ServicesAdminTest(base.BaseSharesAdminTest):
|
||||
def test_get_services_by_availability_zone(self, client_name):
|
||||
zone = self.services[0]["zone"]
|
||||
params = {"zone": zone, }
|
||||
services = getattr(self, client_name).list_services(params)
|
||||
services = getattr(self, client_name).list_services(params)['services']
|
||||
self.assertNotEqual(0, len(services))
|
||||
for service in services:
|
||||
self.assertEqual(zone, service["zone"])
|
||||
@ -76,7 +76,7 @@ class ServicesAdminTest(base.BaseSharesAdminTest):
|
||||
def test_get_services_by_status(self, client_name):
|
||||
status = self.services[0]["status"]
|
||||
params = {"status": status, }
|
||||
services = getattr(self, client_name).list_services(params)
|
||||
services = getattr(self, client_name).list_services(params)['services']
|
||||
self.assertNotEqual(0, len(services))
|
||||
for service in services:
|
||||
self.assertEqual(status, service["status"])
|
||||
@ -87,7 +87,7 @@ class ServicesAdminTest(base.BaseSharesAdminTest):
|
||||
def test_get_services_by_state(self, client_name):
|
||||
state = self.services[0]["state"]
|
||||
params = {"state": state, }
|
||||
services = getattr(self, client_name).list_services(params)
|
||||
services = getattr(self, client_name).list_services(params)['services']
|
||||
self.assertNotEqual(0, len(services))
|
||||
for service in services:
|
||||
self.assertEqual(state, service["state"])
|
||||
@ -103,7 +103,7 @@ class ServicesAdminTest(base.BaseSharesAdminTest):
|
||||
"status": self.services[0]["status"],
|
||||
"state": self.services[0]["state"],
|
||||
}
|
||||
services = getattr(self, client_name).list_services(params)
|
||||
services = getattr(self, client_name).list_services(params)['services']
|
||||
self.assertNotEqual(0, len(services))
|
||||
for service in services:
|
||||
self.assertEqual(params["host"], service["host"])
|
||||
|
@ -41,9 +41,9 @@ class ServicesAdminNegativeTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_get_service_by_invalid_params(self):
|
||||
# All services are expected if send the request with invalid parameter
|
||||
services = self.admin_client.list_services()
|
||||
services = self.admin_client.list_services()['services']
|
||||
params = {'fake_param': 'fake_param_value'}
|
||||
services_fake = self.admin_client.list_services(params)
|
||||
services_fake = self.admin_client.list_services(params)['services']
|
||||
self.assertEqual(len(services), len(services_fake))
|
||||
|
||||
# "update_at" field could be updated before second request,
|
||||
@ -62,35 +62,35 @@ class ServicesAdminNegativeTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_get_service_by_invalid_host(self):
|
||||
params = {'host': 'fake_host'}
|
||||
services_fake = self.admin_client.list_services(params)
|
||||
services_fake = self.admin_client.list_services(params)['services']
|
||||
self.assertEqual(0, len(services_fake))
|
||||
|
||||
@decorators.idempotent_id('766461b0-e89a-4113-8229-24c4d11d585a')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_get_service_by_invalid_binary(self):
|
||||
params = {'binary': 'fake_binary'}
|
||||
services_fake = self.admin_client.list_services(params)
|
||||
services_fake = self.admin_client.list_services(params)['services']
|
||||
self.assertEqual(0, len(services_fake))
|
||||
|
||||
@decorators.idempotent_id('ac570fde-690d-4448-9cce-ce35e0a14b88')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_get_service_by_invalid_zone(self):
|
||||
params = {'zone': 'fake_zone'}
|
||||
services_fake = self.admin_client.list_services(params)
|
||||
services_fake = self.admin_client.list_services(params)['services']
|
||||
self.assertEqual(0, len(services_fake))
|
||||
|
||||
@decorators.idempotent_id('da0fef1d-c4d3-4c33-a836-5f836e85df69')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_get_service_by_invalid_status(self):
|
||||
params = {'status': 'fake_status'}
|
||||
services_fake = self.admin_client.list_services(params)
|
||||
services_fake = self.admin_client.list_services(params)['services']
|
||||
self.assertEqual(0, len(services_fake))
|
||||
|
||||
@decorators.idempotent_id('41936575-3a96-455b-8069-7f6563abf0e2')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_get_service_by_invalid_state(self):
|
||||
params = {'state': 'fake_state'}
|
||||
services_fake = self.admin_client.list_services(params)
|
||||
services_fake = self.admin_client.list_services(params)['services']
|
||||
self.assertEqual(0, len(services_fake))
|
||||
|
||||
@decorators.idempotent_id('3c72227b-7fa1-4294-bdf4-413ec4c324e5')
|
||||
|
@ -80,7 +80,7 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Read share group type
|
||||
sg_type_r = self.shares_v2_client.get_share_group_type(
|
||||
sg_type_c['id'], version=version)
|
||||
sg_type_c['id'], version=version)['share_group_type']
|
||||
keys = set(sg_type_r.keys())
|
||||
self.assertTrue(
|
||||
constants.SHARE_GROUP_TYPE_REQUIRED_KEYS.issubset(keys),
|
||||
@ -166,7 +166,8 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
|
||||
self.shares_v2_client.update_share_group_type_spec(
|
||||
sg_type['id'], 'key1', 'value3', version=version)
|
||||
sg_type = self.shares_v2_client.get_share_group_type(sg_type['id'])
|
||||
sg_type = self.shares_v2_client.get_share_group_type(
|
||||
sg_type['id'])['share_group_type']
|
||||
|
||||
self.assertIn('key1', sg_type['group_specs'])
|
||||
self.assertIn('key2', sg_type['group_specs'])
|
||||
@ -192,7 +193,8 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
|
||||
self.shares_v2_client.update_share_group_type_specs(
|
||||
sg_type['id'], group_specs)
|
||||
sg_type = self.shares_v2_client.get_share_group_type(sg_type['id'])
|
||||
sg_type = self.shares_v2_client.get_share_group_type(
|
||||
sg_type['id'])['share_group_type']
|
||||
|
||||
for k, v in group_specs.items():
|
||||
self.assertIn(k, sg_type['group_specs'])
|
||||
@ -224,7 +226,7 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
self.shares_v2_client.delete_share_group_type_spec(
|
||||
sg_type['id'], key_to_delete, version=version)
|
||||
sg_type = self.shares_v2_client.get_share_group_type(
|
||||
sg_type['id'], version=version)
|
||||
sg_type['id'], version=version)['share_group_type']
|
||||
|
||||
self.assertDictMatch(group_specs, sg_type['group_specs'])
|
||||
|
||||
@ -253,12 +255,12 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
|
||||
# It should not be listed without access
|
||||
sgt_list = self.shares_v2_client.list_share_group_types(
|
||||
version=version)
|
||||
version=version)['share_group_types']
|
||||
self.assertFalse(any(sgt_id == sgt["id"] for sgt in sgt_list))
|
||||
|
||||
# List projects that have access for share group type - none expected
|
||||
access = self.shares_v2_client.list_access_to_share_group_type(
|
||||
sgt_id, version=version)
|
||||
sgt_id, version=version)['share_group_type_access']
|
||||
self.assertEmpty(access)
|
||||
|
||||
# Add project access to share group type
|
||||
@ -267,12 +269,12 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Now it should be listed
|
||||
sgt_list = self.shares_v2_client.list_share_group_types(
|
||||
version=version)
|
||||
version=version)['share_group_types']
|
||||
self.assertTrue(any(sgt_id == sgt["id"] for sgt in sgt_list))
|
||||
|
||||
# List projects that have access for share group type - one expected
|
||||
access = self.shares_v2_client.list_access_to_share_group_type(
|
||||
sgt_id, version=version)
|
||||
sgt_id, version=version)['share_group_type_access']
|
||||
expected = [{'share_group_type_id': sgt_id, 'project_id': project_id}]
|
||||
self.assertEqual(expected, access)
|
||||
|
||||
@ -282,12 +284,12 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
|
||||
# It should not be listed without access
|
||||
sgt_list = self.shares_v2_client.list_share_group_types(
|
||||
version=version)
|
||||
version=version)['share_group_types']
|
||||
self.assertFalse(any(sgt_id == sgt["id"] for sgt in sgt_list))
|
||||
|
||||
# List projects that have access for share group type - none expected
|
||||
access = self.shares_v2_client.list_access_to_share_group_type(
|
||||
sgt_id, version=version)
|
||||
sgt_id, version=version)['share_group_type_access']
|
||||
self.assertEmpty(access)
|
||||
|
||||
@decorators.idempotent_id('b8b20a96-cecc-4677-8a77-aae3b93e5b96')
|
||||
@ -312,7 +314,7 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
|
||||
# List share group type
|
||||
sg_type_list = self.shares_v2_client.list_share_group_types(
|
||||
version=version)
|
||||
version=version)['share_group_types']
|
||||
for sg_type_get in sg_type_list:
|
||||
if utils.is_microversion_ge(version, '2.46'):
|
||||
self.assertIn('is_default', sg_type_get)
|
||||
@ -323,7 +325,7 @@ class ShareGroupTypesTest(base.BaseSharesAdminTest):
|
||||
# Show share group type
|
||||
sg_type_id = sg_type_c['id']
|
||||
sg_type_show = self.shares_v2_client.get_share_group_type(
|
||||
sg_type_id, version=version)
|
||||
sg_type_id, version=version)['share_group_type']
|
||||
if utils.is_microversion_ge(version, '2.46'):
|
||||
self.assertIn('is_default', sg_type_show)
|
||||
self.assertIs(False, sg_type_show['is_default'])
|
||||
|
@ -191,7 +191,8 @@ class ShareGroupsTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Get latest share group information
|
||||
orig_sg = self.shares_v2_client.get_share_group(
|
||||
orig_sg['id'], version=constants.MIN_SHARE_GROUP_MICROVERSION)
|
||||
orig_sg['id'],
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION)['share_group']
|
||||
|
||||
# Assert share server information
|
||||
self.assertIsNotNone(orig_sg['share_network_id'])
|
||||
|
@ -39,7 +39,7 @@ class ShareInstancesTest(base.BaseSharesAdminTest):
|
||||
"""Test that we get only the 1 share instance back for the share."""
|
||||
share_instances = self.shares_v2_client.get_instances_of_share(
|
||||
self.share['id'], version='2.3'
|
||||
)
|
||||
)['share_instances']
|
||||
|
||||
self.assertEqual(1, len(share_instances),
|
||||
'Too many share instances found; expected 1, '
|
||||
@ -58,7 +58,7 @@ class ShareInstancesTest(base.BaseSharesAdminTest):
|
||||
"""Test that we list the share instance back."""
|
||||
share_instances = self.shares_v2_client.list_share_instances(
|
||||
version='2.3'
|
||||
)
|
||||
)['share_instances']
|
||||
|
||||
share_ids = [si['share_id'] for si in share_instances]
|
||||
|
||||
@ -74,10 +74,10 @@ class ShareInstancesTest(base.BaseSharesAdminTest):
|
||||
|
||||
share_instances = self.shares_v2_client.get_instances_of_share(
|
||||
self.share['id'], version=version,
|
||||
)
|
||||
)['share_instances']
|
||||
|
||||
si = self.shares_v2_client.get_share_instance(
|
||||
share_instances[0]['id'], version=version)
|
||||
share_instances[0]['id'], version=version)['share_instance']
|
||||
|
||||
expected_keys = [
|
||||
'host', 'share_id', 'id', 'share_network_id', 'status',
|
||||
@ -110,17 +110,17 @@ class ShareInstancesTest(base.BaseSharesAdminTest):
|
||||
self, export_location_type):
|
||||
share_instances_except = (
|
||||
self.shares_v2_client.get_instances_of_share(
|
||||
self.share['id']))
|
||||
self.share['id']))['share_instances']
|
||||
export_locations = (
|
||||
self.shares_v2_client.list_share_instance_export_locations(
|
||||
share_instances_except[0]['id']))
|
||||
share_instances_except[0]['id']))['export_locations']
|
||||
|
||||
filters = {
|
||||
'export_location_' + export_location_type:
|
||||
export_locations[0][export_location_type],
|
||||
}
|
||||
share_instances = self.shares_v2_client.list_share_instances(
|
||||
params=filters)
|
||||
params=filters)['share_instances']
|
||||
|
||||
self.assertEqual(1, len(share_instances))
|
||||
self.assertEqual(share_instances_except[0]['id'],
|
||||
|
@ -43,7 +43,7 @@ class ShareInstancesNegativeTest(base.BaseSharesAdminTest):
|
||||
'export_location_' + export_location_type: 'fake',
|
||||
}
|
||||
share_instances = self.shares_v2_client.list_share_instances(
|
||||
params=filters, version="2.34")
|
||||
params=filters, version="2.34")['share_instances']
|
||||
|
||||
self.assertGreater(len(share_instances), 0)
|
||||
|
||||
@ -57,6 +57,6 @@ class ShareInstancesNegativeTest(base.BaseSharesAdminTest):
|
||||
'export_location_' + export_location_type: 'fake_not_exist',
|
||||
}
|
||||
share_instances = self.shares_v2_client.list_share_instances(
|
||||
params=filters)
|
||||
params=filters)['share_instances']
|
||||
|
||||
self.assertEqual(0, len(share_instances))
|
||||
|
@ -79,7 +79,8 @@ class ManageNFSShareTest(base.BaseSharesAdminTest):
|
||||
# After 'unmanage' operation, share instance should be deleted.
|
||||
# Assert not related to 'manage' test, but placed here for
|
||||
# resource optimization.
|
||||
share_instance_list = self.shares_v2_client.list_share_instances()
|
||||
share_instance_list = self.shares_v2_client.list_share_instances(
|
||||
)['share_instances']
|
||||
share_ids = [si['share_id'] for si in share_instance_list]
|
||||
self.assertNotIn(share['id'], share_ids)
|
||||
|
||||
@ -100,7 +101,8 @@ class ManageNFSShareTest(base.BaseSharesAdminTest):
|
||||
}
|
||||
if CONF.share.multitenancy_enabled:
|
||||
manage_params['share_server_id'] = share['share_server_id']
|
||||
managed_share = self.shares_v2_client.manage_share(**manage_params)
|
||||
managed_share = self.shares_v2_client.manage_share(
|
||||
**manage_params)['share']
|
||||
|
||||
# Add managed share to cleanup queue
|
||||
self.method_resources.insert(
|
||||
|
@ -66,7 +66,7 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest):
|
||||
state=constants.STATUS_AVAILABLE):
|
||||
# Manage the share and wait for the expected state.
|
||||
# Return the managed share object.
|
||||
managed_share = self.shares_v2_client.manage_share(**params)
|
||||
managed_share = self.shares_v2_client.manage_share(**params)['share']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, managed_share['id'], state)
|
||||
|
||||
@ -82,7 +82,8 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest):
|
||||
valid_params['share_server_id'] = share['share_server_id']
|
||||
|
||||
if utils.is_microversion_ge(CONF.share.max_api_microversion, "2.9"):
|
||||
el = self.shares_v2_client.list_share_export_locations(share["id"])
|
||||
el = self.shares_v2_client.list_share_export_locations(
|
||||
share["id"])['export_locations']
|
||||
valid_params['export_path'] = el[0]['path']
|
||||
|
||||
if invalid_params:
|
||||
@ -168,7 +169,7 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest):
|
||||
# and leave it in manage_error state
|
||||
invalid_share = self.shares_v2_client.manage_share(
|
||||
**invalid_params
|
||||
)
|
||||
)['share']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, invalid_share['id'],
|
||||
constants.STATUS_MANAGE_ERROR)
|
||||
@ -200,7 +201,8 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest):
|
||||
managed_share = self._manage_share_and_wait(manage_params)
|
||||
|
||||
# update managed share's reference
|
||||
managed_share = self.shares_v2_client.get_share(managed_share['id'])
|
||||
managed_share = self.shares_v2_client.get_share(
|
||||
managed_share['id'])['share']
|
||||
manage_params = self._get_manage_params_from_share(managed_share)
|
||||
|
||||
# the second attempt to manage the same share should fail
|
||||
@ -262,7 +264,8 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest):
|
||||
invalid_params.update(
|
||||
{'export_path': data_utils.rand_name(name='invalid-share-export')}
|
||||
)
|
||||
invalid_share = self.shares_v2_client.manage_share(**invalid_params)
|
||||
invalid_share = self.shares_v2_client.manage_share(
|
||||
**invalid_params)['share']
|
||||
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, invalid_share['id'],
|
||||
@ -299,7 +302,7 @@ class ManageNFSShareNegativeTest(base.BaseSharesAdminTest):
|
||||
share = self._create_share_for_manage()
|
||||
|
||||
snap = self.create_snapshot_wait_for_active(share["id"])
|
||||
snap = self.shares_v2_client.get_snapshot(snap['id'])
|
||||
snap = self.shares_v2_client.get_snapshot(snap['id'])['snapshot']
|
||||
|
||||
self.assertRaises(
|
||||
lib_exc.Forbidden,
|
||||
|
@ -65,13 +65,13 @@ class ShareNetworkAdminTest(base.BaseSharesMixedTest,
|
||||
|
||||
cls.ss_kerberos = cls.alt_shares_v2_client.create_security_service(
|
||||
ss_type='kerberos',
|
||||
**cls.data_sn_with_ldap_ss)
|
||||
**cls.data_sn_with_ldap_ss)['security_service']
|
||||
|
||||
cls.sn_with_kerberos_ss = (
|
||||
cls.alt_shares_v2_client.create_share_network(
|
||||
cleanup_in_class=True,
|
||||
add_security_services=False,
|
||||
**cls.data_sn_with_kerberos_ss)
|
||||
**cls.data_sn_with_kerberos_ss)['share_network']
|
||||
)
|
||||
|
||||
cls.alt_shares_v2_client.add_sec_service_to_share_network(
|
||||
@ -82,7 +82,7 @@ class ShareNetworkAdminTest(base.BaseSharesMixedTest,
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_list_share_networks_all_tenants(self):
|
||||
listed = self.admin_shares_v2_client.list_share_networks_with_detail(
|
||||
{'all_tenants': 1})
|
||||
{'all_tenants': 1})['share_networks']
|
||||
self.assertTrue(any(self.sn_with_ldap_ss['id'] == sn['id']
|
||||
for sn in listed))
|
||||
self.assertTrue(any(self.sn_with_kerberos_ss['id'] == sn['id']
|
||||
@ -92,7 +92,9 @@ class ShareNetworkAdminTest(base.BaseSharesMixedTest,
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_list_share_networks_filter_by_project_id(self):
|
||||
listed = self.admin_shares_v2_client.list_share_networks_with_detail(
|
||||
{'project_id': self.sn_with_kerberos_ss['project_id']})
|
||||
{
|
||||
'project_id': self.sn_with_kerberos_ss['project_id']
|
||||
})['share_networks']
|
||||
self.assertTrue(any(self.sn_with_kerberos_ss['id'] == sn['id']
|
||||
for sn in listed))
|
||||
self.assertTrue(all(self.sn_with_kerberos_ss['project_id'] ==
|
||||
|
@ -51,7 +51,7 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
cls.share = cls.create_share(
|
||||
share_type_id=cls.share_type_id)
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
|
||||
if not cls.share_network["name"]:
|
||||
sn_id = cls.share_network["id"]
|
||||
@ -74,7 +74,7 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
@decorators.idempotent_id('3f821248-2c05-4323-a95f-a0216a537b0a')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_share_servers_without_filters(self):
|
||||
servers = self.shares_v2_client.list_share_servers()
|
||||
servers = self.shares_v2_client.list_share_servers()['share_servers']
|
||||
self.assertGreater(len(servers), 0)
|
||||
keys = [
|
||||
"id",
|
||||
@ -106,7 +106,7 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_share_servers_with_host_filter(self):
|
||||
# Get list of share servers and remember 'host' name
|
||||
servers = self.shares_v2_client.list_share_servers()
|
||||
servers = self.shares_v2_client.list_share_servers()['share_servers']
|
||||
# Remember name of server that was used by this test suite
|
||||
# to be sure it will be still existing.
|
||||
for server in servers:
|
||||
@ -123,7 +123,8 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
six.text_type(servers))
|
||||
raise lib_exc.NotFound(message=msg)
|
||||
search_opts = {"host": host}
|
||||
servers = self.shares_v2_client.list_share_servers(search_opts)
|
||||
servers = self.shares_v2_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
self.assertGreater(len(servers), 0)
|
||||
for server in servers:
|
||||
self.assertEqual(server["host"], host)
|
||||
@ -132,7 +133,8 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_share_servers_with_status_filter(self):
|
||||
search_opts = {"status": "active"}
|
||||
servers = self.shares_v2_client.list_share_servers(search_opts)
|
||||
servers = self.shares_v2_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
|
||||
# At least 1 share server should exist always - the one created
|
||||
# for this class.
|
||||
@ -144,7 +146,8 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_share_servers_with_project_id_filter(self):
|
||||
search_opts = {"project_id": self.share_network["project_id"]}
|
||||
servers = self.shares_v2_client.list_share_servers(search_opts)
|
||||
servers = self.shares_v2_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
# Should exist, at least, one share server, used by this test suite.
|
||||
self.assertGreater(len(servers), 0)
|
||||
for server in servers:
|
||||
@ -155,7 +158,8 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_share_servers_with_share_network_name_filter(self):
|
||||
search_opts = {"share_network": self.share_network["name"]}
|
||||
servers = self.shares_v2_client.list_share_servers(search_opts)
|
||||
servers = self.shares_v2_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
# Should exist, at least, one share server, used by this test suite.
|
||||
self.assertGreater(len(servers), 0)
|
||||
for server in servers:
|
||||
@ -166,7 +170,8 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_share_servers_with_share_network_id_filter(self):
|
||||
search_opts = {"share_network": self.share_network["id"]}
|
||||
servers = self.shares_v2_client.list_share_servers(search_opts)
|
||||
servers = self.shares_v2_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
# Should exist, at least, one share server, used by this test suite.
|
||||
self.assertGreater(len(servers), 0)
|
||||
for server in servers:
|
||||
@ -176,9 +181,9 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
@decorators.idempotent_id('e1af24f4-bf63-467d-a857-3a402fa9b65b')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_show_share_server(self):
|
||||
share = self.shares_v2_client.get_share(self.share["id"])
|
||||
share = self.shares_v2_client.get_share(self.share["id"])['share']
|
||||
server = self.shares_v2_client.show_share_server(
|
||||
share["share_server_id"])
|
||||
share["share_server_id"])['share_server']
|
||||
keys = [
|
||||
"id",
|
||||
"host",
|
||||
@ -215,9 +220,9 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
@decorators.idempotent_id('782d8f5f-2c02-44dd-8d43-e06b651a71be')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_show_share_server_details(self):
|
||||
share = self.shares_v2_client.get_share(self.share['id'])
|
||||
share = self.shares_v2_client.get_share(self.share['id'])['share']
|
||||
details = self.shares_v2_client.show_share_server_details(
|
||||
share['share_server_id'])
|
||||
share['share_server_id'])['details']
|
||||
|
||||
# If details are present they and their values should be only strings
|
||||
for k, v in details.items():
|
||||
@ -246,7 +251,7 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
|
||||
# List share servers, filtered by share_network_id
|
||||
servers = self.shares_v2_client.list_share_servers(
|
||||
{"share_network": new_sn["id"]})
|
||||
{"share_network": new_sn["id"]})['share_servers']
|
||||
|
||||
# There can be more than one share server for share network when retry
|
||||
# was used and share was created successfully not from first time.
|
||||
@ -258,7 +263,7 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
|
||||
# List shares by share server id
|
||||
shares = self.shares_v2_client.list_shares_with_detail(
|
||||
{"share_server_id": serv["id"]})
|
||||
{"share_server_id": serv["id"]})['shares']
|
||||
for s in shares:
|
||||
self.assertEqual(new_sn["id"], s["share_network_id"])
|
||||
|
||||
@ -273,7 +278,7 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
|
||||
# List shares by share server id, we expect empty list
|
||||
empty = self.shares_v2_client.list_shares_with_detail(
|
||||
{"share_server_id": serv["id"]})
|
||||
{"share_server_id": serv["id"]})['shares']
|
||||
self.assertEqual(0, len(empty))
|
||||
|
||||
if delete_share_network:
|
||||
@ -308,12 +313,12 @@ class ShareServersAdminTest(base.BaseSharesAdminTest):
|
||||
share_type_id=self.share_type_id,
|
||||
share_network_id=new_sn['id']
|
||||
)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
# obtain share server
|
||||
share_server = self.shares_v2_client.show_share_server(
|
||||
share['share_server_id']
|
||||
)
|
||||
)['share_server']
|
||||
|
||||
for state in (constants.SERVER_STATE_ACTIVE,
|
||||
constants.SERVER_STATE_CREATING,
|
||||
|
@ -70,7 +70,7 @@ class ManageShareServersTest(base.BaseSharesAdminTest):
|
||||
# will be created
|
||||
original_share_network = self.shares_v2_client.get_share_network(
|
||||
self.shares_v2_client.share_network_id
|
||||
)
|
||||
)['share_network']
|
||||
share_net_info = (
|
||||
utils.share_network_get_default_subnet(original_share_network)
|
||||
if utils.share_network_subnets_are_supported()
|
||||
@ -90,7 +90,7 @@ class ManageShareServersTest(base.BaseSharesAdminTest):
|
||||
neutron_net_id=share_network['neutron_net_id'],
|
||||
neutron_subnet_id=share_network['neutron_subnet_id'],
|
||||
availability_zone=az
|
||||
)
|
||||
)['share_network_subnet']
|
||||
params = {'share_network_subnet_id': az_subnet['id']}
|
||||
|
||||
# create share
|
||||
@ -98,12 +98,13 @@ class ManageShareServersTest(base.BaseSharesAdminTest):
|
||||
share_type_id=self.share_type['id'],
|
||||
share_network_id=share_network['id'], availability_zone=az
|
||||
)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
el = self.shares_v2_client.list_share_export_locations(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
el = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'])['export_locations']
|
||||
share['export_locations'] = el
|
||||
share_server = self.shares_v2_client.show_share_server(
|
||||
share['share_server_id']
|
||||
)
|
||||
)['share_server']
|
||||
|
||||
keys = [
|
||||
"id",
|
||||
@ -136,7 +137,7 @@ class ManageShareServersTest(base.BaseSharesAdminTest):
|
||||
# an unmanaged share will never be auto-deleted.
|
||||
share_server = self.shares_v2_client.show_share_server(
|
||||
share_server['id']
|
||||
)
|
||||
)['share_server']
|
||||
self.assertIs(False, share_server['is_auto_deletable'])
|
||||
|
||||
# unmanage share server and manage it again
|
||||
@ -153,7 +154,7 @@ class ManageShareServersTest(base.BaseSharesAdminTest):
|
||||
# check managed share server
|
||||
managed_share_server = self.shares_v2_client.show_share_server(
|
||||
managed_share_server['id']
|
||||
)
|
||||
)['share_server']
|
||||
|
||||
# all expected keys are present in the managed share server
|
||||
for key in keys:
|
||||
|
@ -59,7 +59,7 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
|
||||
cleanup_in_class=True,
|
||||
extra_specs=cls.extra_specs)
|
||||
cls.original_share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.share_net_info = (
|
||||
utils.share_network_get_default_subnet(cls.original_share_network)
|
||||
if utils.share_network_subnets_are_supported() else
|
||||
@ -75,7 +75,7 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
|
||||
share_type_id=self.share_type['id'],
|
||||
share_network_id=share_network['id']
|
||||
)
|
||||
return self.shares_v2_client.get_share(share['id'])
|
||||
return self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
@ddt.data(
|
||||
('host', 'invalid_host'),
|
||||
@ -98,11 +98,12 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
|
||||
|
||||
# create share
|
||||
share = self._create_share_with_new_share_network()
|
||||
el = self.shares_v2_client.list_share_export_locations(share['id'])
|
||||
el = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'])['export_locations']
|
||||
share['export_locations'] = el
|
||||
share_server = self.shares_v2_client.show_share_server(
|
||||
share['share_server_id']
|
||||
)
|
||||
)['share_server']
|
||||
|
||||
self._unmanage_share_and_wait(share)
|
||||
self._unmanage_share_server_and_wait(share_server)
|
||||
@ -225,7 +226,7 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
|
||||
# create share
|
||||
share = self.create_share(
|
||||
share_type_id=self.share_type['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
# try to change it to wrong state
|
||||
self.assertRaises(
|
||||
@ -245,7 +246,7 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
|
||||
# create share
|
||||
share = self.create_share(
|
||||
share_type_id=self.share_type['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
# try to unmanage
|
||||
self.assertRaises(
|
||||
@ -265,11 +266,12 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
|
||||
def test_manage_share_server_invalid_identifier(self):
|
||||
# create share
|
||||
share = self._create_share_with_new_share_network()
|
||||
el = self.shares_v2_client.list_share_export_locations(share['id'])
|
||||
el = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'])['export_locations']
|
||||
share['export_locations'] = el
|
||||
share_server = self.shares_v2_client.show_share_server(
|
||||
share['share_server_id']
|
||||
)
|
||||
)['share_server']
|
||||
|
||||
self._unmanage_share_and_wait(share)
|
||||
self._unmanage_share_server_and_wait(share_server)
|
||||
@ -286,14 +288,15 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
|
||||
|
||||
# unmanage the share server in manage_error
|
||||
search_opts = {'identifier': 'invalid_id'}
|
||||
invalid_servers = self.shares_v2_client.list_share_servers(search_opts)
|
||||
invalid_servers = self.shares_v2_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
self._unmanage_share_server_and_wait(invalid_servers[0])
|
||||
|
||||
# manage in the correct way
|
||||
managed_share_server = self._manage_share_server(share_server)
|
||||
managed_share_server = self.shares_v2_client.show_share_server(
|
||||
managed_share_server['id']
|
||||
)
|
||||
)['share_server']
|
||||
managed_share = self._manage_share(
|
||||
share,
|
||||
name="managed share that had ID %s" % share['id'],
|
||||
@ -314,10 +317,10 @@ class ManageShareServersNegativeTest(base.BaseSharesAdminTest):
|
||||
# create share
|
||||
share = self.create_share(
|
||||
share_type_id=self.share_type['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
share_server = self.shares_v2_client.show_share_server(
|
||||
share['share_server_id'])
|
||||
share['share_server_id'])['share_server']
|
||||
|
||||
# try with more data around the identifier
|
||||
invalid_params = share_server.copy()
|
||||
|
@ -69,7 +69,7 @@ class MigrationShareServerBase(base.BaseSharesAdminTest):
|
||||
def _setup_migration(self, share):
|
||||
"""Initial share server migration setup."""
|
||||
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
server_id = share['share_server_id']
|
||||
|
||||
# (andrer) Verify if have at least one backend compatible with
|
||||
@ -85,7 +85,7 @@ class MigrationShareServerBase(base.BaseSharesAdminTest):
|
||||
|
||||
# (andrer) Check the share export locations.
|
||||
old_exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'])
|
||||
share['id'])['export_locations']
|
||||
self.assertNotEmpty(old_exports)
|
||||
old_exports = [x['path'] for x in old_exports
|
||||
if x['is_admin_only'] is False]
|
||||
@ -104,7 +104,7 @@ class MigrationShareServerBase(base.BaseSharesAdminTest):
|
||||
self.shares_v2_client, share['id'], constants.RULE_STATE_ACTIVE,
|
||||
status_attr='access_rules_status')
|
||||
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
return share, server_id, dest_host, snapshot
|
||||
|
||||
@ -115,11 +115,12 @@ class MigrationShareServerBase(base.BaseSharesAdminTest):
|
||||
if not isinstance(expected_status, (tuple, list, set))
|
||||
else expected_status)
|
||||
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
self.assertIn(share['status'], statuses)
|
||||
|
||||
if snapshot_id:
|
||||
snapshot = self.shares_v2_client.get_snapshot(snapshot_id)
|
||||
snapshot = self.shares_v2_client.get_snapshot(
|
||||
snapshot_id)['snapshot']
|
||||
self.assertIn(snapshot['status'], statuses)
|
||||
|
||||
def _validate_share_server_migration_complete(
|
||||
@ -129,14 +130,14 @@ class MigrationShareServerBase(base.BaseSharesAdminTest):
|
||||
|
||||
# Check the export locations
|
||||
new_exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'], version=version)
|
||||
share['id'], version=version)['export_locations']
|
||||
self.assertNotEmpty(new_exports)
|
||||
new_exports = [x['path'] for x in new_exports if
|
||||
x['is_admin_only'] is False]
|
||||
self.assertNotEmpty(new_exports)
|
||||
|
||||
# Check the share host, share_network, share_server and status.
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
self.assertEqual(share['host'].split('#')[0], dest_host)
|
||||
self.assertEqual(share_network_id, share['share_network_id'])
|
||||
self.assertEqual(dest_server_id, share['share_server_id'])
|
||||
@ -150,12 +151,14 @@ class MigrationShareServerBase(base.BaseSharesAdminTest):
|
||||
)
|
||||
|
||||
# Check the share server destination status.
|
||||
dest_server = self.shares_v2_client.show_share_server(dest_server_id)
|
||||
dest_server = self.shares_v2_client.show_share_server(
|
||||
dest_server_id)['share_server']
|
||||
self.assertIn(dest_server['task_state'],
|
||||
constants.TASK_STATE_MIGRATION_SUCCESS)
|
||||
|
||||
# Check if the access rules are in the share.
|
||||
rules = self.shares_v2_client.list_access_rules(share['id'])
|
||||
rules = self.shares_v2_client.list_access_rules(
|
||||
share['id'])['access_list']
|
||||
if self.protocol == 'cifs':
|
||||
expected_rules = [{
|
||||
'state': constants.RULE_STATE_ACTIVE,
|
||||
@ -227,7 +230,7 @@ class MigrationShareServerBase(base.BaseSharesAdminTest):
|
||||
params = {'source_share_server_id': src_server_id,
|
||||
'status': constants.STATUS_SERVER_MIGRATING_TO}
|
||||
dest_server = self.admin_shares_v2_client.list_share_servers(
|
||||
search_opts=params)
|
||||
search_opts=params)['share_servers']
|
||||
dest_server_id = dest_server[0]['id'] if dest_server else None
|
||||
|
||||
return dest_server_id
|
||||
@ -269,7 +272,7 @@ class ShareServerMigrationBasicNFS(MigrationShareServerBase):
|
||||
share_type_id=self.share_type['id'],
|
||||
share_network_id=share_network_id,
|
||||
cleanup_in_class=False)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
# Initial migration setup.
|
||||
share, src_server_id, dest_host, snapshot_id = self._setup_migration(
|
||||
@ -292,7 +295,8 @@ class ShareServerMigrationBasicNFS(MigrationShareServerBase):
|
||||
dest_server_id = self._get_share_server_destination_for_migration(
|
||||
src_server_id)
|
||||
|
||||
dest_server = self.shares_v2_client.show_share_server(dest_server_id)
|
||||
dest_server = self.shares_v2_client.show_share_server(
|
||||
dest_server_id)['share_server']
|
||||
self.assertEqual(dest_host, dest_server['host'])
|
||||
self.assertEqual(share_network_id, dest_server['share_network_id'])
|
||||
|
||||
@ -324,7 +328,7 @@ class ShareServerMigrationBasicNFS(MigrationShareServerBase):
|
||||
dest_share_network_id = share_network_id
|
||||
if new_share_network:
|
||||
src_share_network = self.shares_v2_client.get_share_network(
|
||||
share_network_id)
|
||||
share_network_id)['share_network']
|
||||
share_net_info = (
|
||||
utils.share_network_get_default_subnet(src_share_network))
|
||||
dest_share_network_id = self.create_share_network(
|
||||
@ -336,7 +340,7 @@ class ShareServerMigrationBasicNFS(MigrationShareServerBase):
|
||||
share_type_id=self.share_type['id'],
|
||||
share_network_id=share_network_id,
|
||||
cleanup_in_class=False)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
# Initial migration setup.
|
||||
share, src_server_id, dest_host, snapshot_id = self._setup_migration(
|
||||
@ -360,7 +364,8 @@ class ShareServerMigrationBasicNFS(MigrationShareServerBase):
|
||||
dest_server_id = self._get_share_server_destination_for_migration(
|
||||
src_server_id)
|
||||
|
||||
dest_server = self.shares_v2_client.show_share_server(dest_server_id)
|
||||
dest_server = self.shares_v2_client.show_share_server(
|
||||
dest_server_id)['share_server']
|
||||
self.assertEqual(dest_host, dest_server['host'])
|
||||
self.assertEqual(dest_share_network_id,
|
||||
dest_server['share_network_id'])
|
||||
@ -380,7 +385,8 @@ class ShareServerMigrationBasicNFS(MigrationShareServerBase):
|
||||
|
||||
# Check if the source server went to inactive status if it exists.
|
||||
try:
|
||||
src_server = self.shares_v2_client.show_share_server(src_server_id)
|
||||
src_server = self.shares_v2_client.show_share_server(
|
||||
src_server_id)['share_server']
|
||||
except exceptions.NotFound:
|
||||
src_server = None
|
||||
|
||||
@ -389,7 +395,7 @@ class ShareServerMigrationBasicNFS(MigrationShareServerBase):
|
||||
src_server['status'], constants.SERVER_STATE_INACTIVE)
|
||||
|
||||
# Validate the share server migration complete.
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
self._validate_share_server_migration_complete(
|
||||
share, dest_host, dest_server_id, snapshot_id=snapshot_id,
|
||||
share_network_id=dest_share_network_id)
|
||||
@ -402,7 +408,7 @@ class ShareServerMigrationBasicNFS(MigrationShareServerBase):
|
||||
share = self.create_share(share_protocol=self.protocol,
|
||||
share_type_id=self.share_type['id'],
|
||||
cleanup_in_class=False)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
# Find a backend compatible or not for the share server
|
||||
# check compatibility operation.
|
||||
if compatible:
|
||||
|
@ -46,7 +46,7 @@ class MigrationShareServerNegative(
|
||||
share = cls.create_share(share_protocol=cls.protocol,
|
||||
share_type_id=share_type['id'],
|
||||
cleanup_in_class=cleanup_in_class)
|
||||
share = cls.shares_v2_client.get_share(share['id'])
|
||||
share = cls.shares_v2_client.get_share(share['id'])['share']
|
||||
share_server_id = share['share_server_id']
|
||||
dest_host, compatible = (
|
||||
cls._choose_compatible_backend_for_share_server(share_server_id))
|
||||
@ -115,7 +115,7 @@ class ShareServerMigrationInvalidParametersNFS(MigrationShareServerNegative):
|
||||
share = self.create_share(
|
||||
share_protocol=self.protocol,
|
||||
share_type_id=self.share_type['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
share_server_id = share['share_server_id']
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
self.shares_v2_client.share_server_migration_start,
|
||||
@ -129,7 +129,7 @@ class ShareServerMigrationInvalidParametersNFS(MigrationShareServerNegative):
|
||||
share = self.create_share(
|
||||
share_protocol=self.protocol,
|
||||
share_type_id=self.share_type['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
share_server_id = share['share_server_id']
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
self.shares_v2_client.share_server_migration_check,
|
||||
@ -143,7 +143,7 @@ class ShareServerMigrationInvalidParametersNFS(MigrationShareServerNegative):
|
||||
share = self.create_share(
|
||||
share_protocol=self.protocol,
|
||||
share_type_id=self.share_type['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
share_server_id = share['share_server_id']
|
||||
dest_host, _ = self._choose_compatible_backend_for_share_server(
|
||||
share_server_id)
|
||||
@ -160,7 +160,7 @@ class ShareServerMigrationInvalidParametersNFS(MigrationShareServerNegative):
|
||||
share = self.create_share(
|
||||
share_protocol=self.protocol,
|
||||
share_type_id=self.share_type['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
share_server_id = share['share_server_id']
|
||||
dest_host, _ = self._choose_compatible_backend_for_share_server(
|
||||
share_server_id)
|
||||
@ -180,7 +180,7 @@ class ShareServerErrorStatusOperationNFS(MigrationShareServerNegative):
|
||||
cls.share = cls.create_share(
|
||||
share_protocol=cls.protocol,
|
||||
share_type_id=cls.share_type['id'])
|
||||
cls.share = cls.shares_v2_client.get_share(cls.share['id'])
|
||||
cls.share = cls.shares_v2_client.get_share(cls.share['id'])['share']
|
||||
cls.share_server_id = cls.share['share_server_id']
|
||||
cls.dest_host, _ = cls._choose_compatible_backend_for_share_server(
|
||||
cls.share_server_id)
|
||||
@ -361,7 +361,7 @@ class ShareServerMigrationStartInvalidStatesNFS(MigrationShareServerNegative):
|
||||
share = self.create_share(share_type_id=share_type['share_type']['id'],
|
||||
share_protocol=self.protocol,
|
||||
cleanup_in_class=False)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
share_server_id = share['share_server_id']
|
||||
dest_host, _ = self._choose_compatible_backend_for_share_server(
|
||||
share_server_id)
|
||||
|
@ -67,35 +67,40 @@ class ShareServersNegativeAdminTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_list_share_servers_with_wrong_filter_key(self):
|
||||
search_opts = {'fake_filter_key': 'ACTIVE'}
|
||||
servers = self.admin_client.list_share_servers(search_opts)
|
||||
servers = self.admin_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
self.assertEqual(0, len(servers))
|
||||
|
||||
@decorators.idempotent_id('dcf169c9-1238-40cb-8a5c-ca6aca9d4d6b')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_list_share_servers_with_wrong_filter_value(self):
|
||||
search_opts = {'host': 123}
|
||||
servers = self.admin_client.list_share_servers(search_opts)
|
||||
servers = self.admin_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
self.assertEqual(0, len(servers))
|
||||
|
||||
@decorators.idempotent_id('3e5d6007-5214-4fa2-bd33-dfd3bead67bf')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_list_share_servers_with_fake_status(self):
|
||||
search_opts = {"status": data_utils.rand_name("fake_status")}
|
||||
servers = self.admin_client.list_share_servers(search_opts)
|
||||
servers = self.admin_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
self.assertEqual(0, len(servers))
|
||||
|
||||
@decorators.idempotent_id('e893b32a-124f-4e5c-a425-58c8a4eac4a5')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_list_share_servers_with_fake_host(self):
|
||||
search_opts = {"host": data_utils.rand_name("fake_host")}
|
||||
servers = self.admin_client.list_share_servers(search_opts)
|
||||
servers = self.admin_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
self.assertEqual(0, len(servers))
|
||||
|
||||
@decorators.idempotent_id('2f1162a8-bb52-4e2a-abc0-68d16f769e4f')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
def test_list_share_servers_with_fake_project(self):
|
||||
search_opts = {"project_id": data_utils.rand_name("fake_project_id")}
|
||||
servers = self.admin_client.list_share_servers(search_opts)
|
||||
servers = self.admin_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
self.assertEqual(0, len(servers))
|
||||
|
||||
@decorators.idempotent_id('ca23f385-56b2-4c02-9797-d88c3b7fb981')
|
||||
@ -104,7 +109,8 @@ class ShareServersNegativeAdminTest(base.BaseSharesMixedTest):
|
||||
search_opts = {
|
||||
"share_network": data_utils.rand_name("fake_share_network"),
|
||||
}
|
||||
servers = self.admin_client.list_share_servers(search_opts)
|
||||
servers = self.admin_client.list_share_servers(
|
||||
search_opts)['share_servers']
|
||||
self.assertEqual(0, len(servers))
|
||||
|
||||
@decorators.idempotent_id('0acb9107-18b2-4e9d-8432-37fd0d4c79b3')
|
||||
|
@ -46,7 +46,8 @@ class ShareSnapshotInstancesTest(base.BaseSharesAdminTest):
|
||||
# create share
|
||||
cls.share = cls.create_share(share_type_id=cls.share_type_id)
|
||||
snap = cls.create_snapshot_wait_for_active(cls.share["id"])
|
||||
cls.snapshot = cls.shares_v2_client.get_snapshot(snap['id'])
|
||||
cls.snapshot = cls.shares_v2_client.get_snapshot(
|
||||
snap['id'])['snapshot']
|
||||
|
||||
@ddt.data(True, False)
|
||||
@decorators.idempotent_id('bcb29129-9713-4481-8e74-97682c62f218')
|
||||
@ -54,7 +55,8 @@ class ShareSnapshotInstancesTest(base.BaseSharesAdminTest):
|
||||
def test_list_snapshot_instances_by_snapshot(self, detail):
|
||||
"""Test that we get only the 1 snapshot instance from snapshot."""
|
||||
snapshot_instances = self.shares_v2_client.list_snapshot_instances(
|
||||
detail=detail, snapshot_id=self.snapshot['id'])
|
||||
detail=detail,
|
||||
snapshot_id=self.snapshot['id'])['snapshot_instances']
|
||||
|
||||
expected_keys = ['id', 'snapshot_id', 'status']
|
||||
|
||||
@ -86,7 +88,8 @@ class ShareSnapshotInstancesTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_snapshot_instances(self):
|
||||
"""Test that we get at least the snapshot instance."""
|
||||
snapshot_instances = self.shares_v2_client.list_snapshot_instances()
|
||||
snapshot_instances = self.shares_v2_client.list_snapshot_instances(
|
||||
)['snapshot_instances']
|
||||
|
||||
snapshot_ids = [si['snapshot_id'] for si in snapshot_instances]
|
||||
|
||||
@ -98,9 +101,9 @@ class ShareSnapshotInstancesTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_get_snapshot_instance(self):
|
||||
instances = self.shares_v2_client.list_snapshot_instances(
|
||||
snapshot_id=self.snapshot['id'])
|
||||
snapshot_id=self.snapshot['id'])['snapshot_instances']
|
||||
instance_detail = self.shares_v2_client.get_snapshot_instance(
|
||||
instance_id=instances[0]['id'])
|
||||
instance_id=instances[0]['id'])['snapshot_instance']
|
||||
|
||||
expected_keys = (
|
||||
'id', 'created_at', 'updated_at', 'progress', 'provider_location',
|
||||
@ -123,7 +126,7 @@ class ShareSnapshotInstancesTest(base.BaseSharesAdminTest):
|
||||
snapshot = self.create_snapshot_wait_for_active(self.share["id"])
|
||||
|
||||
snapshot_instances = self.shares_v2_client.list_snapshot_instances(
|
||||
snapshot_id=snapshot['id'])
|
||||
snapshot_id=snapshot['id'])['snapshot_instances']
|
||||
|
||||
sii = snapshot_instances[0]['id']
|
||||
|
||||
|
@ -61,7 +61,7 @@ class SnapshotInstancesNegativeTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_get_snapshot_instance_by_non_admin(self):
|
||||
instances = self.admin_client.list_snapshot_instances(
|
||||
snapshot_id=self.snapshot['id'])
|
||||
snapshot_id=self.snapshot['id'])['snapshot_instances']
|
||||
self.assertRaises(
|
||||
lib_exc.Forbidden,
|
||||
self.member_client.get_snapshot_instance,
|
||||
@ -71,7 +71,7 @@ class SnapshotInstancesNegativeTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_reset_snapshot_instance_status_by_non_admin(self):
|
||||
instances = self.admin_client.list_snapshot_instances(
|
||||
snapshot_id=self.snapshot['id'])
|
||||
snapshot_id=self.snapshot['id'])['snapshot_instances']
|
||||
self.assertRaises(
|
||||
lib_exc.Forbidden,
|
||||
self.member_client.reset_snapshot_instance_status,
|
||||
|
@ -246,12 +246,14 @@ class ShareTypesAdminTest(base.BaseSharesAdminTest):
|
||||
self.shares_client, share["id"], "available")
|
||||
|
||||
# Verify share info
|
||||
get = self.shares_v2_client.get_share(share["id"], version="2.5")
|
||||
get = self.shares_v2_client.get_share(
|
||||
share["id"], version="2.5")['share']
|
||||
self.assertEqual(share_name, get["name"])
|
||||
self.assertEqual(share["id"], get["id"])
|
||||
self.assertEqual(shr_type_name, get["share_type"])
|
||||
|
||||
get = self.shares_v2_client.get_share(share["id"], version="2.6")
|
||||
get = self.shares_v2_client.get_share(
|
||||
share["id"], version="2.6")['share']
|
||||
self.assertEqual(st_create["id"], get["share_type"])
|
||||
self.assertEqual(shr_type_name, get["share_type_name"])
|
||||
|
||||
@ -274,7 +276,8 @@ class ShareTypesAdminTest(base.BaseSharesAdminTest):
|
||||
self.assertFalse(any(st_id in st["id"] for st in sts))
|
||||
|
||||
# List projects that have access for share type - none expected
|
||||
access = self.shares_v2_client.list_access_to_share_type(st_id)
|
||||
access = self.shares_v2_client.list_access_to_share_type(
|
||||
st_id)['share_type_access']
|
||||
self.assertEmpty(access)
|
||||
|
||||
# Add project access to share type
|
||||
@ -287,7 +290,8 @@ class ShareTypesAdminTest(base.BaseSharesAdminTest):
|
||||
self.assertTrue(any(st_id in st["id"] for st in sts))
|
||||
|
||||
# List projects that have access for share type - one expected
|
||||
access = self.shares_v2_client.list_access_to_share_type(st_id)
|
||||
access = self.shares_v2_client.list_access_to_share_type(
|
||||
st_id)['share_type_access']
|
||||
expected = [{'share_type_id': st_id, 'project_id': project_id}, ]
|
||||
self.assertEqual(expected, access)
|
||||
|
||||
@ -301,7 +305,8 @@ class ShareTypesAdminTest(base.BaseSharesAdminTest):
|
||||
self.assertFalse(any(st_id in st["id"] for st in sts))
|
||||
|
||||
# List projects that have access for share type - none expected
|
||||
access = self.shares_v2_client.list_access_to_share_type(st_id)
|
||||
access = self.shares_v2_client.list_access_to_share_type(
|
||||
st_id)['share_type_access']
|
||||
self.assertEmpty(access)
|
||||
|
||||
@decorators.idempotent_id('90dca5c5-f28e-4f16-90ed-78f5d725664e')
|
||||
|
@ -59,7 +59,8 @@ class ExtraSpecsReadAdminTest(base.BaseSharesAdminTest):
|
||||
@decorators.idempotent_id('508ceb85-5456-4db9-b33f-00620d7baea1')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_get_all_share_type_extra_specs(self):
|
||||
es_get_all = self.shares_client.get_share_type_extra_specs(self.st_id)
|
||||
es_get_all = self.shares_client.get_share_type_extra_specs(
|
||||
self.st_id)['extra_specs']
|
||||
|
||||
self.assertEqual(self.expected_extra_specs, es_get_all)
|
||||
|
||||
@ -93,7 +94,8 @@ class ExtraSpecsWriteAdminTest(base.BaseSharesAdminTest):
|
||||
self.st_id, "key1", self.custom_extra_specs["key1"])
|
||||
self.assertEqual({"key1": self.custom_extra_specs["key1"]}, update_one)
|
||||
|
||||
get = self.shares_client.get_share_type_extra_specs(self.st_id)
|
||||
get = self.shares_client.get_share_type_extra_specs(
|
||||
self.st_id)['extra_specs']
|
||||
expected_extra_specs = self.custom_extra_specs
|
||||
expected_extra_specs.update(self.required_extra_specs)
|
||||
self.assertEqual(self.custom_extra_specs, get)
|
||||
@ -105,10 +107,11 @@ class ExtraSpecsWriteAdminTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Update extra specs of share type
|
||||
update_all = self.shares_client.update_share_type_extra_specs(
|
||||
self.st_id, self.custom_extra_specs)
|
||||
self.st_id, self.custom_extra_specs)['extra_specs']
|
||||
self.assertEqual(self.custom_extra_specs, update_all)
|
||||
|
||||
get = self.shares_client.get_share_type_extra_specs(self.st_id)
|
||||
get = self.shares_client.get_share_type_extra_specs(
|
||||
self.st_id)['extra_specs']
|
||||
expected_extra_specs = self.custom_extra_specs
|
||||
expected_extra_specs.update(self.required_extra_specs)
|
||||
self.assertEqual(self.custom_extra_specs, get)
|
||||
@ -120,7 +123,8 @@ class ExtraSpecsWriteAdminTest(base.BaseSharesAdminTest):
|
||||
self.shares_client.delete_share_type_extra_spec(self.st_id, "key1")
|
||||
|
||||
# Get metadata
|
||||
get = self.shares_client.get_share_type_extra_specs(self.st_id)
|
||||
get = self.shares_client.get_share_type_extra_specs(
|
||||
self.st_id)['extra_specs']
|
||||
|
||||
self.assertNotIn('key1', get)
|
||||
|
||||
@ -137,7 +141,7 @@ class ExtraSpecsWriteAdminTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Get extra specs
|
||||
share_type_extra_specs = self.shares_client.get_share_type_extra_specs(
|
||||
self.st_id)
|
||||
self.st_id)['extra_specs']
|
||||
|
||||
self.assertIn('snapshot_support', share_type_extra_specs)
|
||||
self.assertEqual('True', share_type_extra_specs['snapshot_support'])
|
||||
@ -148,6 +152,6 @@ class ExtraSpecsWriteAdminTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Get extra specs
|
||||
share_type_extra_specs = self.shares_client.get_share_type_extra_specs(
|
||||
self.st_id)
|
||||
self.st_id)['extra_specs']
|
||||
|
||||
self.assertNotIn('snapshot_support', share_type_extra_specs)
|
||||
|
@ -143,7 +143,7 @@ class ShareTypesAdminNegativeTest(base.BaseSharesMixedTest):
|
||||
|
||||
# List projects that have access for share type - none expected
|
||||
access = self.admin_shares_v2_client.list_access_to_share_type(
|
||||
share_type['id'])
|
||||
share_type['id'])['share_type_access']
|
||||
self.assertEmpty(access)
|
||||
|
||||
# Although the share type should not be found on alt project,
|
||||
@ -153,6 +153,7 @@ class ShareTypesAdminNegativeTest(base.BaseSharesMixedTest):
|
||||
share_type_id=share_type['name'])
|
||||
|
||||
# The share should not be listed
|
||||
share_list = self.alt_shares_v2_client.list_shares(detailed=True)
|
||||
share_list = self.alt_shares_v2_client.list_shares(
|
||||
detailed=True)['shares']
|
||||
self.assertFalse(
|
||||
any(share_type['id'] in s['share_type'] for s in share_list))
|
||||
|
@ -91,7 +91,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_get_share(self):
|
||||
|
||||
# get share
|
||||
share = self.shares_client.get_share(self.shares[0]['id'])
|
||||
share = self.shares_client.get_share(self.shares[0]['id'])['share']
|
||||
|
||||
# verify keys
|
||||
expected_keys = ["status", "description", "links", "availability_zone",
|
||||
@ -119,7 +119,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_shares(self):
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares()
|
||||
shares = self.shares_client.list_shares()['shares']
|
||||
|
||||
# verify keys
|
||||
keys = ["name", "id", "links"]
|
||||
@ -136,7 +136,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_shares_with_detail(self):
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail()
|
||||
shares = self.shares_client.list_shares_with_detail()['shares']
|
||||
|
||||
# verify keys
|
||||
keys = [
|
||||
@ -158,7 +158,8 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
filters = {'metadata': self.metadata}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -179,7 +180,8 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
share_type_list = self.shares_client.list_share_types()["share_types"]
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -199,7 +201,8 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
"nonexistent share type '%(st)s'." % {
|
||||
"s_id": share["id"], "st": share["share_type"]}
|
||||
)
|
||||
extra_specs = self.shares_client.get_share_type_extra_specs(st_id)
|
||||
extra_specs = self.shares_client.get_share_type_extra_specs(
|
||||
st_id)['extra_specs']
|
||||
self.assertDictContainsSubset(filters["extra_specs"], extra_specs)
|
||||
|
||||
@decorators.idempotent_id('76fbe8ba-f1d3-4446-b9b8-55617762a2c7')
|
||||
@ -208,7 +211,8 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
filters = {'share_type_id': self.share_type_id}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -236,11 +240,13 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
@decorators.idempotent_id('04afc330-78ee-494f-a660-7670c877a440')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_list_shares_with_detail_filter_by_host(self):
|
||||
base_share = self.shares_client.get_share(self.shares[0]['id'])
|
||||
base_share = self.shares_client.get_share(
|
||||
self.shares[0]['id'])['share']
|
||||
filters = {'host': base_share['host']}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -255,7 +261,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_shares_or_with_detail_filter_by_export_location(
|
||||
self, export_location_type, enable_detail):
|
||||
export_locations = self.shares_v2_client.list_share_export_locations(
|
||||
self.shares[0]['id'])
|
||||
self.shares[0]['id'])['export_locations']
|
||||
if not isinstance(export_locations, (list, tuple, set)):
|
||||
export_locations = (export_locations, )
|
||||
|
||||
@ -266,9 +272,10 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
# list shares
|
||||
if enable_detail:
|
||||
shares = self.shares_v2_client.list_shares_with_detail(
|
||||
params=filters)
|
||||
params=filters)['shares']
|
||||
else:
|
||||
shares = self.shares_v2_client.list_shares(params=filters)
|
||||
shares = self.shares_v2_client.list_shares(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertEqual(1, len(shares))
|
||||
@ -279,11 +286,13 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
@testtools.skipIf(
|
||||
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
|
||||
def test_list_shares_with_detail_filter_by_share_network_id(self):
|
||||
base_share = self.shares_client.get_share(self.shares[0]['id'])
|
||||
base_share = self.shares_client.get_share(
|
||||
self.shares[0]['id'])['share']
|
||||
filters = {'share_network_id': base_share['share_network_id']}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -300,7 +309,8 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
filters = {'snapshot_id': self.snap['id']}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -314,7 +324,8 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
filters = {'sort_key': 'created_at', 'sort_dir': 'asc'}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -326,7 +337,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_shares_with_detail_filter_by_existed_name(self):
|
||||
# list shares by name, at least one share is expected
|
||||
params = {"name": self.share_name}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(params)['shares']
|
||||
self.assertEqual(self.share_name, shares[0]["name"])
|
||||
|
||||
@decorators.idempotent_id('d0dae9e5-a826-48e4-b7b7-24b08ad5a7cb')
|
||||
@ -334,7 +345,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_shares_with_detail_filter_by_fake_name(self):
|
||||
# list shares by fake name, no shares are expected
|
||||
params = {"name": data_utils.rand_name("fake-nonexistent-name")}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(params)['shares']
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@decorators.idempotent_id('8eac9b63-666f-4c52-8c5f-58b1fdf201e2')
|
||||
@ -342,7 +353,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_shares_with_detail_filter_by_active_status(self):
|
||||
# list shares by active status, at least one share is expected
|
||||
params = {"status": "available"}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(params)['shares']
|
||||
self.assertGreater(len(shares), 0)
|
||||
for share in shares:
|
||||
self.assertEqual(params["status"], share["status"])
|
||||
@ -352,7 +363,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_shares_with_detail_filter_by_fake_status(self):
|
||||
# list shares by fake status, no shares are expected
|
||||
params = {"status": 'fake'}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(params)['shares']
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@decorators.idempotent_id('d24a438e-4622-48ac-993e-a30d04746745')
|
||||
@ -362,7 +373,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_get_snapshot(self):
|
||||
|
||||
# get snapshot
|
||||
get = self.shares_client.get_snapshot(self.snap["id"])
|
||||
get = self.shares_client.get_snapshot(self.snap["id"])['snapshot']
|
||||
|
||||
# verify keys
|
||||
expected_keys = ["status", "links", "share_id", "name",
|
||||
@ -393,7 +404,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_snapshots(self):
|
||||
|
||||
# list share snapshots
|
||||
snaps = self.shares_client.list_snapshots()
|
||||
snaps = self.shares_client.list_snapshots()['snapshots']
|
||||
|
||||
# verify keys
|
||||
keys = ["id", "name", "links"]
|
||||
@ -411,7 +422,7 @@ class SharesActionsAdminTest(base.BaseSharesAdminTest):
|
||||
def test_list_snapshots_with_detail(self):
|
||||
|
||||
# list share snapshots
|
||||
snaps = self.shares_client.list_snapshots_with_detail()
|
||||
snaps = self.shares_client.list_snapshots_with_detail()['snapshots']
|
||||
|
||||
# verify keys
|
||||
keys = ["status", "links", "share_id", "name",
|
||||
|
@ -60,9 +60,10 @@ class SnapshotExportLocationsTest(base.BaseSharesMixedTest):
|
||||
client=cls.admin_client)
|
||||
cls.snapshot = cls.create_snapshot_wait_for_active(
|
||||
cls.share['id'], client=cls.admin_client)
|
||||
cls.snapshot = cls.admin_client.get_snapshot(cls.snapshot['id'])
|
||||
cls.snapshot = cls.admin_client.get_snapshot(
|
||||
cls.snapshot['id'])['snapshot']
|
||||
cls.snapshot_instances = cls.admin_client.list_snapshot_instances(
|
||||
snapshot_id=cls.snapshot['id'])
|
||||
snapshot_id=cls.snapshot['id'])['snapshot_instances']
|
||||
|
||||
def _verify_export_location_structure(
|
||||
self, export_locations, role='admin', detail=False):
|
||||
@ -105,7 +106,7 @@ class SnapshotExportLocationsTest(base.BaseSharesMixedTest):
|
||||
def test_list_snapshot_export_location(self):
|
||||
export_locations = (
|
||||
self.admin_client.list_snapshot_export_locations(
|
||||
self.snapshot['id']))
|
||||
self.snapshot['id']))['share_snapshot_export_locations']
|
||||
|
||||
for el in export_locations:
|
||||
self._verify_export_location_structure(el)
|
||||
@ -115,11 +116,12 @@ class SnapshotExportLocationsTest(base.BaseSharesMixedTest):
|
||||
def test_get_snapshot_export_location(self):
|
||||
export_locations = (
|
||||
self.admin_client.list_snapshot_export_locations(
|
||||
self.snapshot['id']))
|
||||
self.snapshot['id']))['share_snapshot_export_locations']
|
||||
|
||||
for export_location in export_locations:
|
||||
el = self.admin_client.get_snapshot_export_location(
|
||||
self.snapshot['id'], export_location['id'])
|
||||
self.snapshot['id'],
|
||||
export_location['id'])['share_snapshot_export_location']
|
||||
self._verify_export_location_structure(el, detail=True)
|
||||
|
||||
@decorators.idempotent_id('03be6418-5ba3-4919-a798-89d7e5ffb925')
|
||||
@ -128,10 +130,14 @@ class SnapshotExportLocationsTest(base.BaseSharesMixedTest):
|
||||
for snapshot_instance in self.snapshot_instances:
|
||||
export_locations = (
|
||||
self.admin_client.list_snapshot_instance_export_locations(
|
||||
snapshot_instance['id']))
|
||||
snapshot_instance['id'])['share_snapshot_export_locations']
|
||||
)
|
||||
for el in export_locations:
|
||||
el = self.admin_client.get_snapshot_instance_export_location(
|
||||
snapshot_instance['id'], el['id'])
|
||||
el = (
|
||||
self.admin_client.get_snapshot_instance_export_location(
|
||||
snapshot_instance['id'],
|
||||
el['id'])['share_snapshot_export_location']
|
||||
)
|
||||
self._verify_export_location_structure(el, detail=True)
|
||||
|
||||
@decorators.idempotent_id('cdf444ea-95a3-4f7b-ae48-6b027a6b9529')
|
||||
@ -140,12 +146,13 @@ class SnapshotExportLocationsTest(base.BaseSharesMixedTest):
|
||||
self):
|
||||
snapshot_export_locations = (
|
||||
self.admin_client.list_snapshot_export_locations(
|
||||
self.snapshot['id']))
|
||||
self.snapshot['id']))['share_snapshot_export_locations']
|
||||
snapshot_instances_export_locations = []
|
||||
for snapshot_instance in self.snapshot_instances:
|
||||
snapshot_instance_export_locations = (
|
||||
self.admin_client.list_snapshot_instance_export_locations(
|
||||
snapshot_instance['id']))
|
||||
snapshot_instance['id'])['share_snapshot_export_locations']
|
||||
)
|
||||
snapshot_instances_export_locations.extend(
|
||||
snapshot_instance_export_locations)
|
||||
|
||||
|
@ -57,9 +57,10 @@ class SnapshotExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
client=cls.admin_client)
|
||||
cls.snapshot = cls.create_snapshot_wait_for_active(
|
||||
cls.share['id'], client=cls.admin_client)
|
||||
cls.snapshot = cls.admin_client.get_snapshot(cls.snapshot['id'])
|
||||
cls.snapshot = cls.admin_client.get_snapshot(
|
||||
cls.snapshot['id'])['snapshot']
|
||||
cls.snapshot_instances = cls.admin_client.list_snapshot_instances(
|
||||
snapshot_id=cls.snapshot['id'])
|
||||
snapshot_id=cls.snapshot['id'])['snapshot_instances']
|
||||
|
||||
@decorators.idempotent_id('53f0f184-7398-4e7a-ac21-fa432570db7f')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
@ -85,7 +86,7 @@ class SnapshotExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
def test_get_snapshot_export_location_by_different_project_user(self):
|
||||
export_locations = (
|
||||
self.admin_client.list_snapshot_export_locations(
|
||||
self.snapshot['id']))
|
||||
self.snapshot['id'])['share_snapshot_export_locations'])
|
||||
|
||||
for export_location in export_locations:
|
||||
if export_location['is_admin_only']:
|
||||
@ -113,7 +114,8 @@ class SnapshotExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
for snapshot_instance in self.snapshot_instances:
|
||||
export_locations = (
|
||||
self.admin_client.list_snapshot_instance_export_locations(
|
||||
snapshot_instance['id']))
|
||||
snapshot_instance['id'])['share_snapshot_export_locations']
|
||||
)
|
||||
for el in export_locations:
|
||||
self.assertRaises(
|
||||
lib_exc.Forbidden,
|
||||
|
@ -71,7 +71,7 @@ class ManageNFSSnapshotTest(base.BaseSharesAdminTest):
|
||||
share_protocol=cls.protocol)
|
||||
|
||||
# Get updated data
|
||||
cls.share = cls.shares_v2_client.get_share(cls.share['id'])
|
||||
cls.share = cls.shares_v2_client.get_share(cls.share['id'])['share']
|
||||
|
||||
def _test_manage(self, snapshot, version=CONF.share.max_api_microversion):
|
||||
name = ("Name for 'managed' snapshot that had ID %s" %
|
||||
@ -92,7 +92,7 @@ class ManageNFSSnapshotTest(base.BaseSharesAdminTest):
|
||||
# - size: Hitachi HNAS Driver
|
||||
driver_options={'size': snapshot['size']},
|
||||
version=version,
|
||||
)
|
||||
)['snapshot']
|
||||
|
||||
# Add managed snapshot to cleanup queue
|
||||
self.method_resources.insert(
|
||||
@ -119,7 +119,8 @@ class ManageNFSSnapshotTest(base.BaseSharesAdminTest):
|
||||
self.assertEqual(set(expected_keys), set(actual_keys))
|
||||
|
||||
# Verify data of managed snapshot
|
||||
get_snapshot = self.shares_v2_client.get_snapshot(snapshot['id'])
|
||||
get_snapshot = self.shares_v2_client.get_snapshot(
|
||||
snapshot['id'])['snapshot']
|
||||
self.assertEqual(name, get_snapshot['name'])
|
||||
self.assertEqual(description, get_snapshot['description'])
|
||||
self.assertEqual(snapshot['share_id'], get_snapshot['share_id'])
|
||||
@ -152,7 +153,8 @@ class ManageNFSSnapshotTest(base.BaseSharesAdminTest):
|
||||
# Create snapshot
|
||||
snapshot = self.create_snapshot_wait_for_active(
|
||||
self.share['id'], snap_name, snap_desc)
|
||||
snapshot = self.shares_v2_client.get_snapshot(snapshot['id'])
|
||||
snapshot = self.shares_v2_client.get_snapshot(
|
||||
snapshot['id'])['snapshot']
|
||||
# Unmanage snapshot
|
||||
self.shares_v2_client.unmanage_snapshot(snapshot['id'],
|
||||
version=version)
|
||||
|
@ -84,7 +84,8 @@ class ManageNFSSnapshotNegativeTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Create snapshot
|
||||
snap = self.create_snapshot_wait_for_active(self.share['id'])
|
||||
snap = self.shares_v2_client.get_snapshot(snap['id'])
|
||||
snap = self.shares_v2_client.get_snapshot(
|
||||
snap['id'])['snapshot']
|
||||
self.assertEqual(self.share['id'], snap['share_id'])
|
||||
self.assertIsNotNone(snap['provider_location'])
|
||||
|
||||
@ -106,7 +107,8 @@ class ManageNFSSnapshotNegativeTest(base.BaseSharesAdminTest):
|
||||
|
||||
# Create snapshot
|
||||
snap = self.create_snapshot_wait_for_active(self.share['id'])
|
||||
snap = self.shares_v2_client.get_snapshot(snap['id'])
|
||||
snap = self.shares_v2_client.get_snapshot(
|
||||
snap['id'])['snapshot']
|
||||
|
||||
# Unmanage snapshot
|
||||
self.shares_v2_client.unmanage_snapshot(snap['id'])
|
||||
@ -120,7 +122,7 @@ class ManageNFSSnapshotNegativeTest(base.BaseSharesAdminTest):
|
||||
self.share['id'],
|
||||
'invalid_provider_location',
|
||||
driver_options={}
|
||||
)
|
||||
)['snapshot']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, invalid_snap['id'],
|
||||
constants.STATUS_MANAGE_ERROR, resource_name='snapshot'
|
||||
@ -131,7 +133,7 @@ class ManageNFSSnapshotNegativeTest(base.BaseSharesAdminTest):
|
||||
managed_snap = self.shares_v2_client.manage_snapshot(
|
||||
self.share['id'],
|
||||
snap['provider_location']
|
||||
)
|
||||
)['snapshot']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, managed_snap['id'],
|
||||
constants.STATUS_AVAILABLE, resource_name='snapshot'
|
||||
|
@ -54,7 +54,7 @@ class UserMessageTest(base.BaseSharesAdminTest):
|
||||
@decorators.attr(type=[base.TAG_POSITIVE, base.TAG_API])
|
||||
@decorators.idempotent_id('37127e11-7aa7-46b2-ab05-e3bf36d94fd8')
|
||||
def test_list_messages(self):
|
||||
body = self.shares_v2_client.list_messages()
|
||||
body = self.shares_v2_client.list_messages()['messages']
|
||||
self.assertIsInstance(body, list)
|
||||
self.assertTrue(self.message['id'], [x['id'] for x in body])
|
||||
message = body[0]
|
||||
@ -83,7 +83,7 @@ class UserMessageTest(base.BaseSharesAdminTest):
|
||||
def test_list_messages_filtered(self):
|
||||
self.create_user_message()
|
||||
params = {'resource_id': self.message['resource_id']}
|
||||
body = self.shares_v2_client.list_messages(params=params)
|
||||
body = self.shares_v2_client.list_messages(params=params)['messages']
|
||||
self.assertIsInstance(body, list)
|
||||
ids = [x['id'] for x in body]
|
||||
self.assertEqual([self.message['id']], ids)
|
||||
@ -94,7 +94,8 @@ class UserMessageTest(base.BaseSharesAdminTest):
|
||||
self.addCleanup(self.shares_v2_client.delete_message,
|
||||
self.message['id'])
|
||||
|
||||
message = self.shares_v2_client.get_message(self.message['id'])
|
||||
message = self.shares_v2_client.get_message(
|
||||
self.message['id'])['message']
|
||||
|
||||
self.assertEqual(set(MESSAGE_KEYS), set(message.keys()))
|
||||
self.assertTrue(uuidutils.is_uuid_like(message['id']))
|
||||
@ -133,7 +134,8 @@ class UserMessageTest(base.BaseSharesAdminTest):
|
||||
params1 = {'created_since': str(time_1)}
|
||||
# should return all user messages created by this test including
|
||||
# self.message
|
||||
messages = self.shares_v2_client.list_messages(params=params1)
|
||||
messages = self.shares_v2_client.list_messages(
|
||||
params=params1)['messages']
|
||||
ids = [x['id'] for x in messages]
|
||||
self.assertGreaterEqual(len(ids), 2)
|
||||
self.assertIn(self.message['id'], ids)
|
||||
@ -147,7 +149,8 @@ class UserMessageTest(base.BaseSharesAdminTest):
|
||||
'created_before': str(time_2)}
|
||||
# should not return new_message, but return a list that is equal to 1
|
||||
# and include self.message
|
||||
messages = self.shares_v2_client.list_messages(params=params2)
|
||||
messages = self.shares_v2_client.list_messages(
|
||||
params=params2)['messages']
|
||||
self.assertIsInstance(messages, list)
|
||||
ids = [x['id'] for x in messages]
|
||||
self.assertGreaterEqual(len(ids), 1)
|
||||
@ -163,7 +166,8 @@ class UserMessageTest(base.BaseSharesAdminTest):
|
||||
|
||||
params3 = {'created_before': str(time_2)}
|
||||
# should not include self.message
|
||||
messages = self.shares_v2_client.list_messages(params=params3)
|
||||
messages = self.shares_v2_client.list_messages(
|
||||
params=params3)['messages']
|
||||
ids = [x['id'] for x in messages]
|
||||
self.assertGreaterEqual(len(ids), 1)
|
||||
self.assertNotIn(new_message['id'], ids)
|
||||
|
@ -361,7 +361,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
if share_group_id:
|
||||
kwargs['share_group_id'] = share_group_id
|
||||
|
||||
share = client.create_share(**kwargs)
|
||||
share = client.create_share(**kwargs)['share']
|
||||
resource = {"type": "share", "id": share["id"], "client": client,
|
||||
"share_group_id": share_group_id}
|
||||
cleanup_list = (cls.class_resources if cleanup_in_class else
|
||||
@ -499,7 +499,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
if kwargs.get('source_share_group_snapshot_id') is None:
|
||||
kwargs['share_network_id'] = (share_network_id or
|
||||
client.share_network_id or None)
|
||||
share_group = client.create_share_group(**kwargs)
|
||||
share_group = client.create_share_group(**kwargs)['share_group']
|
||||
resource = {
|
||||
"type": "share_group",
|
||||
"id": share_group["id"],
|
||||
@ -513,7 +513,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
if kwargs.get('source_share_group_snapshot_id'):
|
||||
new_share_group_shares = client.list_shares(
|
||||
detailed=True,
|
||||
params={'share_group_id': share_group['id']})
|
||||
params={'share_group_id': share_group['id']})['shares']
|
||||
|
||||
for share in new_share_group_shares:
|
||||
resource = {"type": "share",
|
||||
@ -546,7 +546,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
share_types=share_types,
|
||||
is_public=is_public,
|
||||
group_specs=group_specs,
|
||||
**kwargs)
|
||||
**kwargs)['share_group_type']
|
||||
resource = {
|
||||
"type": "share_group_type",
|
||||
"id": share_group_type["id"],
|
||||
@ -566,7 +566,8 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
client = cls.shares_v2_client
|
||||
if description is None:
|
||||
description = "Tempest's snapshot"
|
||||
snapshot = client.create_snapshot(share_id, name, description, force)
|
||||
snapshot = client.create_snapshot(
|
||||
share_id, name, description, force)['snapshot']
|
||||
resource = {
|
||||
"type": "snapshot",
|
||||
"id": snapshot["id"],
|
||||
@ -588,7 +589,8 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
if description is None:
|
||||
description = "Tempest's share group snapshot"
|
||||
sg_snapshot = client.create_share_group_snapshot(
|
||||
share_group_id, name=name, description=description, **kwargs)
|
||||
share_group_id, name=name, description=description,
|
||||
**kwargs)['share_group_snapshot']
|
||||
resource = {
|
||||
"type": "share_group_snapshot",
|
||||
"id": sg_snapshot["id"],
|
||||
@ -614,7 +616,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
'|'.join(['^%s$' % backend for backend in backends])
|
||||
if backends else '.*'
|
||||
)
|
||||
cls.services = client.list_services()
|
||||
cls.services = client.list_services()['services']
|
||||
zones = [service['zone'] for service in cls.services if
|
||||
service['binary'] == 'manila-share' and
|
||||
service['state'] == 'up' and
|
||||
@ -659,7 +661,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
# Get the list of pools for the replication domain
|
||||
pools = self.admin_client.list_pools(detail=True)['pools']
|
||||
instance_host = self.admin_client.get_share(
|
||||
self.shares[0]['id'])['host']
|
||||
self.shares[0]['id'])['share']['host']
|
||||
host_pool = [p for p in pools if p['name'] == instance_host][0]
|
||||
rep_domain = host_pool['capabilities']['replication_domain']
|
||||
pools_in_rep_domain = [p for p in pools if p['capabilities'][
|
||||
@ -673,7 +675,8 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
version=CONF.share.max_api_microversion):
|
||||
client = client or cls.shares_v2_client
|
||||
replica = client.create_share_replica(
|
||||
share_id, availability_zone=availability_zone, version=version)
|
||||
share_id, availability_zone=availability_zone,
|
||||
version=version)['share_replica']
|
||||
resource = {
|
||||
"type": "share_replica",
|
||||
"id": replica["id"],
|
||||
@ -705,7 +708,8 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
def promote_share_replica(cls, replica_id, client=None,
|
||||
version=CONF.share.max_api_microversion):
|
||||
client = client or cls.shares_v2_client
|
||||
replica = client.promote_share_replica(replica_id, version=version)
|
||||
replica = client.promote_share_replica(
|
||||
replica_id, version=version)['share_replica']
|
||||
waiters.wait_for_resource_status(
|
||||
client, replica["id"], constants.REPLICATION_STATE_ACTIVE,
|
||||
resource_name='share_replica', status_attr="replica_state")
|
||||
@ -747,7 +751,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
|
||||
if client is None:
|
||||
client = cls.shares_client
|
||||
share_network = client.create_share_network(**kwargs)
|
||||
share_network = client.create_share_network(**kwargs)['share_network']
|
||||
resource = {
|
||||
"type": "share_network",
|
||||
"id": share_network["id"],
|
||||
@ -772,7 +776,8 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
**kwargs):
|
||||
if client is None:
|
||||
client = cls.shares_v2_client
|
||||
share_network_subnet = client.create_subnet(**kwargs)
|
||||
share_network_subnet = client.create_subnet(
|
||||
**kwargs)['share_network_subnet']
|
||||
resource = {
|
||||
"type": "share-network-subnet",
|
||||
"id": share_network_subnet["id"],
|
||||
@ -792,7 +797,8 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
cleanup_in_class=False, **kwargs):
|
||||
if client is None:
|
||||
client = cls.shares_client
|
||||
security_service = client.create_security_service(ss_type, **kwargs)
|
||||
security_service = client.create_security_service(
|
||||
ss_type, **kwargs)['security_service']
|
||||
resource = {
|
||||
"type": "security_service",
|
||||
"id": security_service["id"],
|
||||
@ -820,7 +826,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
client = client or cls.shares_v2_client
|
||||
updated_quotas = client.update_quotas(project_id,
|
||||
user_id=user_id,
|
||||
**kwargs)
|
||||
**kwargs)['quota_set']
|
||||
resource = {
|
||||
"type": "quotas",
|
||||
"id": project_id,
|
||||
@ -835,7 +841,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
def clear_share_replicas(cls, share_id, client=None):
|
||||
client = client or cls.shares_v2_client
|
||||
share_replicas = client.list_share_replicas(
|
||||
share_id=share_id)
|
||||
share_id=share_id)['share_replicas']
|
||||
|
||||
for replica in share_replicas:
|
||||
try:
|
||||
@ -1029,7 +1035,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
|
||||
params = {'share_type_id': bogus_type['id'],
|
||||
'share_network_id': self.shares_v2_client.share_network_id}
|
||||
share = self.shares_v2_client.create_share(**params)
|
||||
share = self.shares_v2_client.create_share(**params)['share']
|
||||
self.addCleanup(self.shares_v2_client.delete_share, share['id'])
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, share['id'], "error")
|
||||
@ -1045,7 +1051,7 @@ class BaseSharesTest(test.BaseTestCase):
|
||||
access_to = access_to or a_to
|
||||
|
||||
rule = client.create_access_rule(share_id, access_type, access_to,
|
||||
access_level)
|
||||
access_level)['access']
|
||||
waiters.wait_for_resource_status(
|
||||
client, share_id, status, resource_name='access_rule',
|
||||
rule_id=rule['id'],
|
||||
@ -1112,10 +1118,11 @@ class BaseSharesAdminTest(BaseSharesTest):
|
||||
}
|
||||
|
||||
share = self.create_share(**creation_data)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
if utils.is_microversion_ge(CONF.share.max_api_microversion, "2.9"):
|
||||
el = self.shares_v2_client.list_share_export_locations(share["id"])
|
||||
el = self.shares_v2_client.list_share_export_locations(
|
||||
share["id"])['export_locations']
|
||||
share["export_locations"] = el
|
||||
|
||||
return share
|
||||
@ -1153,7 +1160,7 @@ class BaseSharesAdminTest(BaseSharesTest):
|
||||
name=name,
|
||||
description=description,
|
||||
share_server_id=share_server_id
|
||||
)
|
||||
)['share']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, managed_share['id'],
|
||||
constants.STATUS_AVAILABLE
|
||||
@ -1175,7 +1182,7 @@ class BaseSharesAdminTest(BaseSharesTest):
|
||||
params.get('share_network_id', share_server['share_network_id']),
|
||||
params.get('identifier', share_server['identifier']),
|
||||
share_network_subnet_id=subnet_id,
|
||||
)
|
||||
)['share_server']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, managed_share_server['id'],
|
||||
constants.SERVER_STATE_ACTIVE, resource_name='share_server'
|
||||
@ -1205,7 +1212,7 @@ class BaseSharesAdminTest(BaseSharesTest):
|
||||
|
||||
params = {'share_type_id': bogus_type['id'],
|
||||
'share_network_id': self.shares_v2_client.share_network_id}
|
||||
share = self.shares_v2_client.create_share(**params)
|
||||
share = self.shares_v2_client.create_share(**params)['share']
|
||||
self.addCleanup(self.shares_v2_client.delete_share, share['id'])
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, share['id'], "error")
|
||||
|
@ -75,7 +75,8 @@ class AccessRulesMetadataTest(base.BaseSharesMixedTest):
|
||||
cls.md1 = {"key1": "value1", "key2": "value2"}
|
||||
cls.access = cls.shares_v2_client.create_access_rule(
|
||||
cls.share["id"], cls.access_type,
|
||||
cls.access_to[cls.access_type].pop(), 'rw', metadata=cls.md1)
|
||||
cls.access_to[cls.access_type].pop(), 'rw',
|
||||
metadata=cls.md1)['access']
|
||||
|
||||
@decorators.idempotent_id('4c8e0236-2e7b-4337-be3c-17b51a738644')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
@ -84,10 +85,12 @@ class AccessRulesMetadataTest(base.BaseSharesMixedTest):
|
||||
# set metadata
|
||||
access = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type,
|
||||
self.access_to[self.access_type].pop(), 'rw', metadata=data)
|
||||
self.access_to[self.access_type].pop(), 'rw',
|
||||
metadata=data)['access']
|
||||
|
||||
# read metadata
|
||||
get_access = self.shares_v2_client.get_access_rule(access["id"])
|
||||
get_access = self.shares_v2_client.get_access_rule(
|
||||
access["id"])['access']
|
||||
|
||||
# verify metadata
|
||||
self.assertEqual(data, get_access['metadata'])
|
||||
@ -97,7 +100,8 @@ class AccessRulesMetadataTest(base.BaseSharesMixedTest):
|
||||
self.shares_v2_client.delete_access_metadata(access["id"], key)
|
||||
|
||||
# verify deletion of metadata
|
||||
access_without_md = self.shares_v2_client.get_access_rule(access["id"])
|
||||
access_without_md = self.shares_v2_client.get_access_rule(
|
||||
access["id"])['access']
|
||||
self.assertEqual({}, access_without_md['metadata'])
|
||||
self.shares_v2_client.delete_access_rule(self.share["id"],
|
||||
access["id"])
|
||||
@ -113,7 +117,8 @@ class AccessRulesMetadataTest(base.BaseSharesMixedTest):
|
||||
self.shares_v2_client.update_access_metadata(
|
||||
access_id=self.access['id'], metadata=md2)
|
||||
# get metadata
|
||||
get_access = self.shares_v2_client.get_access_rule(self.access['id'])
|
||||
get_access = self.shares_v2_client.get_access_rule(
|
||||
self.access['id'])['access']
|
||||
|
||||
# verify metadata
|
||||
self.md1.update(md2)
|
||||
@ -126,11 +131,13 @@ class AccessRulesMetadataTest(base.BaseSharesMixedTest):
|
||||
# set metadata
|
||||
access = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type,
|
||||
self.access_to[self.access_type].pop(), 'rw', metadata=data)
|
||||
self.access_to[self.access_type].pop(), 'rw',
|
||||
metadata=data)['access']
|
||||
|
||||
# list metadata with metadata filter
|
||||
list_access = self.shares_v2_client.list_access_rules(
|
||||
share_id=self.share["id"], metadata={'metadata': data})
|
||||
share_id=self.share["id"],
|
||||
metadata={'metadata': data})['access_list']
|
||||
|
||||
# verify metadata
|
||||
self.assertEqual(1, len(list_access))
|
||||
|
@ -66,7 +66,7 @@ class AccessesMetadataNegativeTest(base.BaseSharesMixedTest):
|
||||
cls.share = cls.create_share(share_type_id=cls.share_type_id)
|
||||
cls.access = cls.shares_v2_client.create_access_rule(
|
||||
cls.share["id"], cls.access_type, cls.access_to,
|
||||
'rw', metadata={u"key1": u"value1"})
|
||||
'rw', metadata={u"key1": u"value1"})['access']
|
||||
|
||||
@decorators.idempotent_id('d2d41db8-ae00-4641-a5ec-499cee1877f1')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
|
@ -35,7 +35,8 @@ class AvailabilityZonesTest(base.BaseSharesTest):
|
||||
def test_list_availability_zones_legacy_url_api_v1(self):
|
||||
# NOTE(vponomaryov): remove this test with removal of availability zone
|
||||
# extension url support.
|
||||
azs = self.shares_client.list_availability_zones()
|
||||
azs = self.shares_client.list_availability_zones(
|
||||
)['availability_zones']
|
||||
self._list_availability_zones_assertions(azs)
|
||||
|
||||
@decorators.idempotent_id('7054f2f4-bc77-4d60-82a6-2f23b93d281e')
|
||||
@ -45,12 +46,13 @@ class AvailabilityZonesTest(base.BaseSharesTest):
|
||||
# NOTE(vponomaryov): remove this test with removal of availability zone
|
||||
# extension url support.
|
||||
azs = self.shares_v2_client.list_availability_zones(
|
||||
url='os-availability-zone', version='2.6')
|
||||
url='os-availability-zone', version='2.6')['availability_zones']
|
||||
self._list_availability_zones_assertions(azs)
|
||||
|
||||
@decorators.idempotent_id('4caadb86-2988-4adb-b705-aece99235c1e')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
@utils.skip_if_microversion_not_supported("2.7")
|
||||
def test_list_availability_zones(self):
|
||||
azs = self.shares_v2_client.list_availability_zones(version='2.7')
|
||||
azs = self.shares_v2_client.list_availability_zones(
|
||||
version='2.7')['availability_zones']
|
||||
self._list_availability_zones_assertions(azs)
|
||||
|
@ -26,7 +26,7 @@ class ExtensionsTest(base.BaseSharesTest):
|
||||
def test_extensions(self):
|
||||
|
||||
# get extensions
|
||||
extensions = self.shares_client.list_extensions()
|
||||
extensions = self.shares_client.list_extensions()['extensions']
|
||||
|
||||
# verify response
|
||||
keys = ["alias", "updated", "name", "description"]
|
||||
|
@ -26,7 +26,7 @@ class ShareLimitsTest(base.BaseSharesTest):
|
||||
def test_limits_keys(self):
|
||||
|
||||
# list limits
|
||||
limits = self.shares_client.get_limits()
|
||||
limits = self.shares_client.get_limits()['limits']
|
||||
|
||||
# verify response
|
||||
keys = ["rate", "absolute"]
|
||||
@ -51,7 +51,7 @@ class ShareLimitsTest(base.BaseSharesTest):
|
||||
def test_limits_values(self):
|
||||
|
||||
# list limits
|
||||
limits = self.shares_client.get_limits()
|
||||
limits = self.shares_client.get_limits()['limits']
|
||||
|
||||
# verify integer values for absolute limits
|
||||
abs_l = limits["absolute"]
|
||||
|
@ -43,7 +43,7 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
cleanup_in_class=False)
|
||||
|
||||
# get metadata of share
|
||||
metadata = self.shares_client.get_metadata(share["id"])
|
||||
metadata = self.shares_client.get_metadata(share["id"])['metadata']
|
||||
|
||||
# verify metadata
|
||||
self.assertEqual(md, metadata)
|
||||
@ -62,7 +62,7 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
self.shares_client.set_metadata(share["id"], md)
|
||||
|
||||
# read metadata
|
||||
get_md = self.shares_client.get_metadata(share["id"])
|
||||
get_md = self.shares_client.get_metadata(share["id"])['metadata']
|
||||
|
||||
# verify metadata
|
||||
self.assertEqual(md, get_md)
|
||||
@ -77,7 +77,7 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
self.shares_client.delete_metadata(share["id"], key)
|
||||
|
||||
# verify deletion of metadata
|
||||
get_metadata = self.shares_client.get_metadata(share["id"])
|
||||
get_metadata = self.shares_client.get_metadata(share["id"])['metadata']
|
||||
self.assertEqual({}, get_metadata)
|
||||
|
||||
@decorators.idempotent_id('c94851f4-2559-4712-9297-9912db1da7ff')
|
||||
@ -98,7 +98,7 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
self.shares_client.update_all_metadata(share["id"], md2)
|
||||
|
||||
# get metadata
|
||||
get_md = self.shares_client.get_metadata(share["id"])
|
||||
get_md = self.shares_client.get_metadata(share["id"])['metadata']
|
||||
|
||||
# verify metadata
|
||||
self.assertEqual(md2, get_md)
|
||||
@ -110,7 +110,8 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_client.set_metadata(self.share["id"], data)
|
||||
|
||||
body_get = self.shares_client.get_metadata(self.share["id"])
|
||||
body_get = self.shares_client.get_metadata(
|
||||
self.share["id"])['metadata']
|
||||
self.assertEqual(data['k'], body_get.get('k'))
|
||||
|
||||
@decorators.idempotent_id('34c5bd96-ced7-42ef-a114-570cc63cf81d')
|
||||
@ -121,7 +122,8 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_client.set_metadata(self.share["id"], data)
|
||||
|
||||
body_get = self.shares_client.get_metadata(self.share["id"])
|
||||
body_get = self.shares_client.get_metadata(
|
||||
self.share["id"])['metadata']
|
||||
self.assertIn(max_key, body_get)
|
||||
self.assertEqual(data[max_key], body_get.get(max_key))
|
||||
|
||||
@ -132,7 +134,8 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_client.set_metadata(self.share["id"], data)
|
||||
|
||||
body_get = self.shares_client.get_metadata(self.share["id"])
|
||||
body_get = self.shares_client.get_metadata(
|
||||
self.share["id"])['metadata']
|
||||
self.assertEqual(data['key'], body_get['key'])
|
||||
|
||||
@decorators.idempotent_id('759ec4ab-2537-44ad-852b-1af85c6ca933')
|
||||
@ -143,7 +146,8 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_client.set_metadata(self.share["id"], data)
|
||||
|
||||
body_get = self.shares_client.get_metadata(self.share["id"])
|
||||
body_get = self.shares_client.get_metadata(
|
||||
self.share["id"])['metadata']
|
||||
self.assertEqual(data['key'], body_get['key'])
|
||||
|
||||
@decorators.idempotent_id('c5ca19ba-3595-414a-8ff9-fbc88cd801ba')
|
||||
@ -153,7 +157,8 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_client.update_all_metadata(self.share["id"], data)
|
||||
|
||||
body_get = self.shares_client.get_metadata(self.share["id"])
|
||||
body_get = self.shares_client.get_metadata(
|
||||
self.share["id"])['metadata']
|
||||
self.assertEqual(data, body_get)
|
||||
|
||||
@decorators.idempotent_id('5eff5619-b7cd-42f1-85e0-47d3d47098dd')
|
||||
@ -164,7 +169,8 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_client.update_all_metadata(self.share["id"], data)
|
||||
|
||||
body_get = self.shares_client.get_metadata(self.share["id"])
|
||||
body_get = self.shares_client.get_metadata(
|
||||
self.share["id"])['metadata']
|
||||
self.assertEqual(data, body_get)
|
||||
|
||||
@decorators.idempotent_id('44a572f1-6b5c-49d0-8f2e-1583ec3428d8')
|
||||
@ -174,7 +180,8 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_client.update_all_metadata(self.share["id"], data)
|
||||
|
||||
body_get = self.shares_client.get_metadata(self.share["id"])
|
||||
body_get = self.shares_client.get_metadata(
|
||||
self.share["id"])['metadata']
|
||||
self.assertEqual(data, body_get)
|
||||
|
||||
@decorators.idempotent_id('694d95e1-ba8c-49fc-a888-6f9f0d51d77d')
|
||||
@ -185,5 +192,6 @@ class SharesMetadataTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_client.update_all_metadata(self.share["id"], data)
|
||||
|
||||
body_get = self.shares_client.get_metadata(self.share["id"])
|
||||
body_get = self.shares_client.get_metadata(
|
||||
self.share["id"])['metadata']
|
||||
self.assertEqual(data, body_get)
|
||||
|
@ -54,7 +54,8 @@ class PublicSharesTest(base.BaseSharesMixedTest):
|
||||
)
|
||||
|
||||
params = {'is_public': True}
|
||||
shares = self.alt_shares_v2_client.list_shares_with_detail(params)
|
||||
shares = self.alt_shares_v2_client.list_shares_with_detail(
|
||||
params)['shares']
|
||||
|
||||
keys = [
|
||||
'status', 'description', 'links', 'availability_zone',
|
||||
@ -84,7 +85,7 @@ class PublicSharesTest(base.BaseSharesMixedTest):
|
||||
cleanup_in_class=False,
|
||||
version=LATEST_MICROVERSION)
|
||||
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
self.assertEqual(share_name, share['name'])
|
||||
self.assertEqual('a share we will update', share['description'])
|
||||
self.assertFalse(share['is_public'])
|
||||
@ -94,13 +95,13 @@ class PublicSharesTest(base.BaseSharesMixedTest):
|
||||
new_name = data_utils.rand_name('tempest-new-share-name')
|
||||
new_desc = 'share is now updated'
|
||||
updated = self.admin_shares_v2_client.update_share(
|
||||
share['id'], name=new_name, desc=new_desc, is_public=True)
|
||||
share['id'], name=new_name, desc=new_desc, is_public=True)['share']
|
||||
self.assertEqual(new_name, updated['name'])
|
||||
self.assertEqual(new_desc, updated['description'])
|
||||
self.assertTrue(updated['is_public'])
|
||||
|
||||
# this share must now be publicly accessible
|
||||
share = self.alt_shares_v2_client.get_share(share['id'])
|
||||
share = self.alt_shares_v2_client.get_share(share['id'])['share']
|
||||
self.assertEqual(new_name, share['name'])
|
||||
self.assertEqual(new_desc, share['description'])
|
||||
self.assertTrue(share['is_public'])
|
||||
|
@ -49,7 +49,8 @@ class SharesQuotasTest(base.BaseSharesTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
@ddt.data('shares_client', 'shares_v2_client')
|
||||
def test_default_quotas(self, client_name):
|
||||
quotas = getattr(self, client_name).default_quotas(self.tenant_id)
|
||||
quotas = getattr(self, client_name).default_quotas(
|
||||
self.tenant_id)['quota_set']
|
||||
uses_v2_client = client_name == 'shares_v2_client'
|
||||
self.assertGreater(int(quotas["gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
|
||||
@ -64,7 +65,8 @@ class SharesQuotasTest(base.BaseSharesTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
@ddt.data('shares_client', 'shares_v2_client')
|
||||
def test_show_quotas(self, client_name):
|
||||
quotas = getattr(self, client_name).show_quotas(self.tenant_id)
|
||||
quotas = getattr(self, client_name).show_quotas(
|
||||
self.tenant_id)['quota_set']
|
||||
uses_v2_client = client_name == 'shares_v2_client'
|
||||
self.assertGreater(int(quotas["gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
|
||||
@ -80,7 +82,7 @@ class SharesQuotasTest(base.BaseSharesTest):
|
||||
@ddt.data('shares_client', 'shares_v2_client')
|
||||
def test_show_quotas_for_user(self, client_name):
|
||||
quotas = getattr(self, client_name).show_quotas(
|
||||
self.tenant_id, self.user_id)
|
||||
self.tenant_id, self.user_id)['quota_set']
|
||||
uses_v2_client = client_name == 'shares_v2_client'
|
||||
self.assertGreater(int(quotas["gigabytes"]), -2)
|
||||
self.assertGreater(int(quotas["snapshot_gigabytes"]), -2)
|
||||
@ -108,7 +110,7 @@ class SharesQuotasTest(base.BaseSharesTest):
|
||||
keys.append('replica_gigabytes')
|
||||
if with_user:
|
||||
quota_args.update({"user_id": self.user_id})
|
||||
quotas = self.shares_v2_client.detail_quotas(**quota_args)
|
||||
quotas = self.shares_v2_client.detail_quotas(**quota_args)['quota_set']
|
||||
quota_keys = list(quotas.keys())
|
||||
for outer in keys:
|
||||
self.assertIn(outer, quota_keys)
|
||||
|
@ -77,7 +77,7 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
cls.sn_id = None
|
||||
if cls.multitenancy_enabled:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.creation_data['kwargs'].update({
|
||||
'share_network_id': cls.share_network['id']})
|
||||
cls.sn_id = cls.share_network['id']
|
||||
@ -85,14 +85,15 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
# Data for creating shares in parallel
|
||||
data = [cls.creation_data, cls.creation_data]
|
||||
cls.shares = cls.create_shares(data)
|
||||
cls.shares = [cls.shares_v2_client.get_share(s['id']) for s in
|
||||
cls.shares = [cls.shares_v2_client.get_share(s['id'])['share'] for s in
|
||||
cls.shares]
|
||||
cls.instance_id1 = cls._get_instance(cls.shares[0])
|
||||
cls.instance_id2 = cls._get_instance(cls.shares[1])
|
||||
|
||||
@classmethod
|
||||
def _get_instance(cls, share):
|
||||
share_instances = cls.admin_client.get_instances_of_share(share["id"])
|
||||
share_instances = cls.admin_client.get_instances_of_share(
|
||||
share["id"])['share_instances']
|
||||
return share_instances[0]["id"]
|
||||
|
||||
def _verify_create_replica(self):
|
||||
@ -101,7 +102,7 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
self.replica_zone,
|
||||
cleanup_in_class=False)
|
||||
share_replicas = self.shares_v2_client.list_share_replicas(
|
||||
share_id=self.shares[0]["id"])
|
||||
share_id=self.shares[0]["id"])['share_replicas']
|
||||
# Ensure replica is created successfully.
|
||||
replica_ids = [replica["id"] for replica in share_replicas]
|
||||
self.assertIn(share_replica["id"], replica_ids)
|
||||
@ -110,7 +111,7 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
def _verify_active_replica_count(self, share_id):
|
||||
# List replicas
|
||||
replica_list = self.shares_v2_client.list_share_replicas(
|
||||
share_id=share_id)
|
||||
share_id=share_id)['share_replicas']
|
||||
|
||||
# Check if there is only 1 'active' replica before promotion.
|
||||
active_replicas = self._filter_replica_list(
|
||||
@ -142,7 +143,7 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
self._verify_active_replica_count(share["id"])
|
||||
# Verify the replica_state for promoted replica
|
||||
promoted_replica = self.shares_v2_client.get_share_replica(
|
||||
promoted_replica["id"])
|
||||
promoted_replica["id"])['share_replica']
|
||||
self.assertEqual(constants.REPLICATION_STATE_ACTIVE,
|
||||
promoted_replica["replica_state"])
|
||||
|
||||
@ -192,7 +193,7 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
# Add access rule to the share
|
||||
access_type, access_to = self._get_access_rule_data_from_config()
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.shares[0]["id"], access_type, access_to, 'ro')
|
||||
self.shares[0]["id"], access_type, access_to, 'ro')['access']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, self.shares[0]["id"],
|
||||
constants.RULE_STATE_ACTIVE, resource_name='access_rule',
|
||||
@ -251,7 +252,7 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
self.shares_v2_client.get_share_replica(share_replica2['id'])
|
||||
|
||||
share_replicas = self.admin_client.list_share_replicas(
|
||||
share_id=self.shares[0]["id"])
|
||||
share_id=self.shares[0]["id"])['share_replicas']
|
||||
replica_host_set = {r['host'] for r in share_replicas}
|
||||
|
||||
# Assert that replicas are created on different pools.
|
||||
@ -269,7 +270,7 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
self._check_skip_promotion_tests()
|
||||
share = self.create_shares([self.creation_data])[0]
|
||||
original_replica = self.shares_v2_client.list_share_replicas(
|
||||
share["id"])[0]
|
||||
share["id"])['share_replicas'][0]
|
||||
self._verify_in_sync_replica_promotion(share, original_replica)
|
||||
|
||||
@decorators.idempotent_id('3af912f4-b5d7-4241-b2b3-bdf12ff398a4')
|
||||
@ -282,17 +283,18 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
# Add access rule
|
||||
access_type, access_to = self._get_access_rule_data_from_config()
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
share["id"], access_type, access_to, 'ro')
|
||||
share["id"], access_type, access_to, 'ro')['access']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, share["id"], constants.RULE_STATE_ACTIVE,
|
||||
resource_name='access_rule', rule_id=rule["id"])
|
||||
|
||||
original_replica = self.shares_v2_client.list_share_replicas(
|
||||
share["id"])[0]
|
||||
share["id"])['share_replicas'][0]
|
||||
self._verify_in_sync_replica_promotion(share, original_replica)
|
||||
|
||||
# verify rule's values
|
||||
rules_list = self.shares_v2_client.list_access_rules(share["id"])
|
||||
rules_list = self.shares_v2_client.list_access_rules(
|
||||
share["id"])['access_list']
|
||||
self.assertEqual(1, len(rules_list))
|
||||
self.assertEqual(access_type, rules_list[0]["access_type"])
|
||||
self.assertEqual(access_to, rules_list[0]["access_to"])
|
||||
@ -312,9 +314,10 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
share = self.create_share(
|
||||
share_type_id=self.share_type['id'], cleanup_in_class=False,
|
||||
availability_zone=self.share_zone, share_network_id=self.sn_id)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
replica = self.create_share_replica(share['id'], self.replica_zone)
|
||||
replica = self.shares_v2_client.get_share_replica(replica['id'])
|
||||
replica = self.shares_v2_client.get_share_replica(
|
||||
replica['id'])['share_replica']
|
||||
|
||||
self.assertEqual(self.share_zone, share['availability_zone'])
|
||||
self.assertEqual(self.replica_zone, replica['availability_zone'])
|
||||
@ -332,7 +335,7 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
|
||||
# Discover the original replica
|
||||
initial_replicas = self.shares_v2_client.list_share_replicas(
|
||||
share_id=share['id'])
|
||||
share_id=share['id'])['share_replicas']
|
||||
self.assertEqual(1, len(initial_replicas),
|
||||
'%s replicas initially created for share %s' %
|
||||
(len(initial_replicas), share['id']))
|
||||
@ -367,7 +370,8 @@ class ReplicationTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_active_replication_state(self):
|
||||
# Verify the replica_state of first instance is set to active.
|
||||
replica = self.shares_v2_client.get_share_replica(self.instance_id1)
|
||||
replica = self.shares_v2_client.get_share_replica(
|
||||
self.instance_id1)['share_replica']
|
||||
self.assertEqual(
|
||||
constants.REPLICATION_STATE_ACTIVE, replica['replica_state'])
|
||||
|
||||
@ -417,7 +421,7 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
if cls.multitenancy_enabled:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.creation_data['kwargs'].update({
|
||||
'share_network_id': cls.share_network['id']})
|
||||
cls.sn_id = (
|
||||
@ -425,7 +429,7 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
||||
# Data for creating shares in parallel
|
||||
data = [cls.creation_data, cls.creation_data]
|
||||
cls.shares = cls.create_shares(data)
|
||||
cls.shares = [cls.shares_v2_client.get_share(s['id']) for s in
|
||||
cls.shares = [cls.shares_v2_client.get_share(s['id'])['share'] for s in
|
||||
cls.shares]
|
||||
cls.instance_id1 = cls._get_instance(cls.shares[0])
|
||||
cls.instance_id2 = cls._get_instance(cls.shares[1])
|
||||
@ -440,7 +444,8 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
@classmethod
|
||||
def _get_instance(cls, share):
|
||||
share_instances = cls.admin_client.get_instances_of_share(share["id"])
|
||||
share_instances = cls.admin_client.get_instances_of_share(
|
||||
share["id"])['share_instances']
|
||||
return share_instances[0]["id"]
|
||||
|
||||
def _validate_replica_list(self, replica_list, detail=True):
|
||||
@ -461,7 +466,8 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
||||
@decorators.idempotent_id('abe0e49d-0b94-4b81-a220-ab047712492d')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_show_share_replica(self):
|
||||
replica = self.shares_v2_client.get_share_replica(self.replica1["id"])
|
||||
replica = self.shares_v2_client.get_share_replica(
|
||||
self.replica1["id"])['share_replica']
|
||||
|
||||
actual_keys = sorted(list(replica.keys()))
|
||||
detail_keys = sorted(DETAIL_KEYS)
|
||||
@ -475,7 +481,7 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
||||
def test_detail_list_share_replicas_for_share(self):
|
||||
# List replicas for share
|
||||
replica_list = self.shares_v2_client.list_share_replicas(
|
||||
share_id=self.shares[0]["id"])
|
||||
share_id=self.shares[0]["id"])['share_replicas']
|
||||
replica_ids_list = [rep['id'] for rep in replica_list]
|
||||
self.assertIn(self.replica1['id'], replica_ids_list,
|
||||
'Replica %s was not returned in the list of replicas: %s'
|
||||
@ -487,7 +493,8 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_detail_list_share_replicas_for_all_shares(self):
|
||||
# List replicas for all available shares
|
||||
replica_list = self.shares_v2_client.list_share_replicas()
|
||||
replica_list = self.shares_v2_client.list_share_replicas(
|
||||
)['share_replicas']
|
||||
replica_ids_list = [rep['id'] for rep in replica_list]
|
||||
for replica in [self.replica1, self.replica2]:
|
||||
self.assertIn(replica['id'], replica_ids_list,
|
||||
@ -500,7 +507,8 @@ class ReplicationActionsTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_summary_list_share_replicas_for_all_shares(self):
|
||||
# List replicas
|
||||
replica_list = self.shares_v2_client.list_share_replicas_summary()
|
||||
replica_list = self.shares_v2_client.list_share_replicas_summary(
|
||||
)['share_replicas']
|
||||
|
||||
# Verify keys
|
||||
self._validate_replica_list(replica_list, detail=False)
|
||||
|
@ -59,7 +59,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
cls.sn_id = None
|
||||
if cls.multitenancy_enabled:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.sn_id = cls.share_network['id']
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type)
|
||||
@ -77,20 +77,21 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
replica = self.create_share_replica(share['id'], self.replica_zone,
|
||||
cleanup=cleanup_replica)
|
||||
replicas = self.shares_v2_client.list_share_replicas(
|
||||
share_id=share['id'])
|
||||
share_id=share['id'])['share_replicas']
|
||||
primary_replica = [r for r in replicas if r['id'] != replica['id']][0]
|
||||
|
||||
# Refresh share and replica
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
replica = self.shares_v2_client.get_share_replica(replica['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
replica = self.shares_v2_client.get_share_replica(
|
||||
replica['id'])['share_replica']
|
||||
|
||||
# Grab export locations of the share instances using admin API
|
||||
replica_exports = self._remove_admin_only_exports(
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
replica['id']))
|
||||
replica['id'])['export_locations'])
|
||||
primary_replica_exports = self._remove_admin_only_exports(
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
primary_replica['id']))
|
||||
primary_replica['id'])['export_locations'])
|
||||
|
||||
return share, replica, primary_replica_exports, replica_exports
|
||||
|
||||
@ -131,7 +132,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# Share export locations list API
|
||||
share_exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'], version=version)
|
||||
share['id'], version=version)['export_locations']
|
||||
|
||||
self._validate_export_location_api_behavior(replica, replica_exports,
|
||||
primary_replica_exports,
|
||||
@ -150,7 +151,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
self._create_share_and_replica_get_exports(cleanup_replica=False)
|
||||
)
|
||||
primary_replica = self.shares_v2_client.get_share_replica(
|
||||
primary_replica_exports[0]['share_instance_id'])
|
||||
primary_replica_exports[0]['share_instance_id'])['share_replica']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, replica['id'],
|
||||
constants.REPLICATION_STATE_IN_SYNC, resource_name='share_replica',
|
||||
@ -158,7 +159,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# Share export locations list API
|
||||
share_exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'], version=version)
|
||||
share['id'], version=version)['export_locations']
|
||||
|
||||
# Validate API behavior
|
||||
self._validate_export_location_api_behavior(replica, replica_exports,
|
||||
@ -170,15 +171,15 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# Refresh for verification
|
||||
current_secondary_replica = self.shares_v2_client.get_share_replica(
|
||||
primary_replica['id'])
|
||||
primary_replica['id'])['share_replica']
|
||||
current_primary_replica_exports = self._remove_admin_only_exports(
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
replica['id'], version=version))
|
||||
replica['id'], version=version)['export_locations'])
|
||||
current_secondary_replica_exports = self._remove_admin_only_exports(
|
||||
self.admin_client.list_share_instance_export_locations(
|
||||
primary_replica['id'], version=version))
|
||||
primary_replica['id'], version=version)['export_locations'])
|
||||
share_exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'], version=version)
|
||||
share['id'], version=version)['export_locations']
|
||||
|
||||
# Validate API behavior
|
||||
self._validate_export_location_api_behavior(
|
||||
@ -200,7 +201,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
self._create_share_and_replica_get_exports()
|
||||
)
|
||||
primary_replica = self.shares_v2_client.get_share_replica(
|
||||
expected_primary_exports[0]['share_instance_id'])
|
||||
expected_primary_exports[0]['share_instance_id'])['share_replica']
|
||||
expected_primary_export_paths = [e['path'] for e in
|
||||
expected_primary_exports]
|
||||
expected_replica_export_paths = [e['path'] for e in
|
||||
@ -209,7 +210,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
# For the primary replica
|
||||
actual_primary_exports = (
|
||||
self.shares_v2_client.list_share_replica_export_locations(
|
||||
primary_replica['id'])
|
||||
primary_replica['id'])['export_locations']
|
||||
)
|
||||
|
||||
self.assertEqual(len(expected_primary_exports),
|
||||
@ -224,7 +225,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
|
||||
export_location_details = (
|
||||
self.shares_v2_client.get_share_replica_export_location(
|
||||
primary_replica['id'], export['id'])
|
||||
primary_replica['id'], export['id'])['export_location']
|
||||
)
|
||||
self.assertEqual(sorted(el_detail_keys),
|
||||
sorted(export_location_details.keys()))
|
||||
@ -234,7 +235,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
# For the secondary replica
|
||||
actual_replica_exports = (
|
||||
self.shares_v2_client.list_share_replica_export_locations(
|
||||
replica['id'])
|
||||
replica['id'])['export_locations']
|
||||
)
|
||||
|
||||
self.assertEqual(len(expected_replica_exports),
|
||||
@ -249,7 +250,7 @@ class ReplicationExportLocationsTest(base.BaseSharesMixedTest):
|
||||
|
||||
export_location_details = (
|
||||
self.shares_v2_client.get_share_replica_export_location(
|
||||
replica['id'], export['id'])
|
||||
replica['id'], export['id'])['export_location']
|
||||
)
|
||||
self.assertEqual(sorted(el_detail_keys),
|
||||
sorted(export_location_details.keys()))
|
||||
|
@ -56,7 +56,7 @@ class ReplicationExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
cls.sn_id = None
|
||||
if cls.multitenancy_enabled:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.sn_id = cls.share_network['id']
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type)
|
||||
@ -79,7 +79,7 @@ class ReplicationExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
replica_exports = (
|
||||
self.shares_v2_client.list_share_replica_export_locations(
|
||||
replica['id'])
|
||||
)
|
||||
)['export_locations']
|
||||
|
||||
for export in replica_exports:
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
@ -96,7 +96,8 @@ class ReplicationExportLocationsNegativeTest(base.BaseSharesMixedTest):
|
||||
share = self.create_share(share_type_id=share_type['id'],
|
||||
availability_zone=self.share_zone,
|
||||
share_network_id=self.sn_id)
|
||||
share_instances = self.admin_client.get_instances_of_share(share['id'])
|
||||
share_instances = self.admin_client.get_instances_of_share(
|
||||
share['id'])['share_instances']
|
||||
for instance in share_instances:
|
||||
self.assertRaises(
|
||||
lib_exc.NotFound,
|
||||
|
@ -60,7 +60,7 @@ class ReplicationNegativeBase(base.BaseSharesMixedTest):
|
||||
cls.sn_id = None
|
||||
if cls.multitenancy_enabled:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.sn_id = cls.share_network['id']
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
cls.share_type, client=cls.admin_client)
|
||||
@ -78,7 +78,7 @@ class ReplicationNegativeBase(base.BaseSharesMixedTest):
|
||||
share_network_id=sn_id)
|
||||
share_instances = cls.admin_client.get_instances_of_share(
|
||||
share["id"], version=_MIN_SUPPORTED_MICROVERSION
|
||||
)
|
||||
)['share_instances']
|
||||
instance_id = share_instances[0]["id"]
|
||||
return share, instance_id
|
||||
|
||||
@ -214,7 +214,8 @@ class ReplicationNegativeTest(ReplicationNegativeBase):
|
||||
hosts = [p['name'] for p in pools]
|
||||
self.create_share_replica(self.share1["id"], self.replica_zone,
|
||||
cleanup_in_class=False)
|
||||
share_host = self.admin_client.get_share(self.share1['id'])['host']
|
||||
share_host = self.admin_client.get_share(
|
||||
self.share1['id'])['share']['host']
|
||||
|
||||
for host in hosts:
|
||||
if host != share_host:
|
||||
@ -251,7 +252,8 @@ class ReplicationNegativeTest(ReplicationNegativeBase):
|
||||
data['neutron_net_id'] = subnet['neutron_net_id']
|
||||
data['neutron_subnet_id'] = subnet['neutron_subnet_id']
|
||||
data['availability_zone'] = self.share_zone
|
||||
share_net = self.shares_v2_client.create_share_network(**data)
|
||||
share_net = self.shares_v2_client.create_share_network(
|
||||
**data)['share_network']
|
||||
share, instance_id = self._create_share_get_instance(
|
||||
share_network_id=share_net['id'])
|
||||
|
||||
|
@ -68,7 +68,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
||||
cls.sn_id = None
|
||||
if cls.multitenancy_enabled:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.sn_id = cls.share_network['id']
|
||||
|
||||
cls.zones = cls.get_availability_zones_matching_share_type(
|
||||
@ -89,7 +89,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
||||
availability_zone=self.share_zone,
|
||||
share_network_id=self.sn_id)
|
||||
original_replica = self.shares_v2_client.list_share_replicas(
|
||||
share["id"])[0]
|
||||
share["id"])['share_replicas'][0]
|
||||
|
||||
share_replica = self.create_share_replica(share["id"],
|
||||
self.replica_zone,
|
||||
@ -104,7 +104,8 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
||||
self.promote_share_replica(share_replica['id'])
|
||||
self.delete_share_replica(original_replica['id'])
|
||||
|
||||
snapshot = self.shares_v2_client.get_snapshot(snapshot['id'])
|
||||
snapshot = self.shares_v2_client.get_snapshot(
|
||||
snapshot['id'])['snapshot']
|
||||
self.assertEqual(constants.STATUS_AVAILABLE, snapshot['status'])
|
||||
|
||||
if CONF.share.capability_create_share_from_snapshot_support:
|
||||
@ -127,7 +128,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
||||
snapshot = self.create_snapshot_wait_for_active(share["id"])
|
||||
|
||||
original_replica = self.shares_v2_client.list_share_replicas(
|
||||
share["id"])[0]
|
||||
share["id"])['share_replicas'][0]
|
||||
share_replica = self.create_share_replica(share["id"],
|
||||
self.replica_zone,
|
||||
cleanup=False)
|
||||
@ -145,7 +146,8 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
||||
self.promote_share_replica(share_replica['id'])
|
||||
self.delete_share_replica(original_replica['id'])
|
||||
|
||||
snapshot = self.shares_v2_client.get_snapshot(snapshot['id'])
|
||||
snapshot = self.shares_v2_client.get_snapshot(
|
||||
snapshot['id'])['snapshot']
|
||||
self.assertEqual(constants.STATUS_AVAILABLE, snapshot['status'])
|
||||
|
||||
if CONF.share.capability_create_share_from_snapshot_support:
|
||||
@ -168,7 +170,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
||||
snapshot1 = self.create_snapshot_wait_for_active(share["id"])
|
||||
|
||||
original_replica = self.shares_v2_client.list_share_replicas(
|
||||
share["id"])[0]
|
||||
share["id"])['share_replicas'][0]
|
||||
|
||||
share_replica = self.create_share_replica(share["id"],
|
||||
self.replica_zone,
|
||||
@ -191,10 +193,12 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
||||
# still being created successfully.
|
||||
self.delete_share_replica(original_replica['id'])
|
||||
|
||||
snapshot1 = self.shares_v2_client.get_snapshot(snapshot1['id'])
|
||||
snapshot1 = self.shares_v2_client.get_snapshot(
|
||||
snapshot1['id'])['snapshot']
|
||||
self.assertEqual(constants.STATUS_AVAILABLE, snapshot1['status'])
|
||||
|
||||
snapshot2 = self.shares_v2_client.get_snapshot(snapshot2['id'])
|
||||
snapshot2 = self.shares_v2_client.get_snapshot(
|
||||
snapshot2['id'])['snapshot']
|
||||
self.assertEqual(constants.STATUS_AVAILABLE, snapshot2['status'])
|
||||
|
||||
if CONF.share.capability_create_share_from_snapshot_support:
|
||||
@ -244,7 +248,7 @@ class ReplicationSnapshotTest(base.BaseSharesMixedTest):
|
||||
snapshot_id=orig_snapshot['id'],
|
||||
share_network_id=self.sn_id)
|
||||
original_replica = self.shares_v2_client.list_share_replicas(
|
||||
snap_share["id"])[0]
|
||||
snap_share["id"])['share_replicas'][0]
|
||||
share_replica = self.create_share_replica(snap_share["id"],
|
||||
self.replica_zone,
|
||||
cleanup=False)
|
||||
|
@ -103,7 +103,7 @@ class RevertToSnapshotTest(base.BaseSharesMixedTest):
|
||||
cls.sn_id = None
|
||||
if cls.replication_multitenancy:
|
||||
cls.share_network = cls.shares_v2_client.get_share_network(
|
||||
cls.shares_v2_client.share_network_id)
|
||||
cls.shares_v2_client.share_network_id)['share_network']
|
||||
cls.sn_id = cls.share_network['id']
|
||||
|
||||
@decorators.idempotent_id('196f2bc5-e13a-4730-ac51-61e339068a06')
|
||||
|
@ -39,11 +39,11 @@ def _create_delete_ro_access_rule(self, version):
|
||||
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
self.share["id"], self.access_type, self.access_to, 'ro')
|
||||
self.share["id"], self.access_type, self.access_to, 'ro')['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type, self.access_to, 'ro',
|
||||
version=version)
|
||||
version=version)['access']
|
||||
|
||||
self.assertEqual('ro', rule['access_level'])
|
||||
for key in ('deleted', 'deleted_at', 'instance_mappings'):
|
||||
@ -65,7 +65,8 @@ def _create_delete_ro_access_rule(self, version):
|
||||
status_attr='access_rules_status', version=version)
|
||||
# If the 'access_rules_status' transitions to 'active',
|
||||
# rule state must too
|
||||
rules = self.shares_v2_client.list_access_rules(self.share['id'])
|
||||
rules = self.shares_v2_client.list_access_rules(
|
||||
self.share['id'])['access_list']
|
||||
rule = [r for r in rules if r['id'] == rule['id']][0]
|
||||
self.assertEqual("active", rule['state'])
|
||||
|
||||
@ -122,11 +123,11 @@ class ShareIpRulesForNFSTest(base.BaseSharesMixedTest):
|
||||
# create rule
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
self.share["id"], self.access_type, access_to)
|
||||
self.share["id"], self.access_type, access_to)['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type, access_to,
|
||||
version=version)
|
||||
version=version)['access']
|
||||
|
||||
self.assertEqual('rw', rule['access_level'])
|
||||
for key in ('deleted', 'deleted_at', 'instance_mappings'):
|
||||
@ -177,11 +178,11 @@ class ShareIpRulesForNFSTest(base.BaseSharesMixedTest):
|
||||
# create rule
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
self.share["id"], self.access_type, access_to)
|
||||
self.share["id"], self.access_type, access_to)['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type, access_to,
|
||||
version=version)
|
||||
version=version)['access']
|
||||
|
||||
for key in ('deleted', 'deleted_at', 'instance_mappings'):
|
||||
self.assertNotIn(key, rule.keys())
|
||||
@ -280,11 +281,11 @@ class ShareUserRulesForNFSTest(base.BaseSharesMixedTest):
|
||||
# create rule
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
self.share["id"], self.access_type, self.access_to)
|
||||
self.share["id"], self.access_type, self.access_to)['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type, self.access_to,
|
||||
version=version)
|
||||
version=version)['access']
|
||||
|
||||
self.assertEqual('rw', rule['access_level'])
|
||||
for key in ('deleted', 'deleted_at', 'instance_mappings'):
|
||||
@ -384,11 +385,11 @@ class ShareCertRulesForGLUSTERFSTest(base.BaseSharesMixedTest):
|
||||
# create rule
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
self.share["id"], self.access_type, self.access_to)
|
||||
self.share["id"], self.access_type, self.access_to)['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type, self.access_to,
|
||||
version=version)
|
||||
version=version)['access']
|
||||
|
||||
self.assertEqual('rw', rule['access_level'])
|
||||
for key in ('deleted', 'deleted_at', 'instance_mappings'):
|
||||
@ -434,11 +435,11 @@ class ShareCertRulesForGLUSTERFSTest(base.BaseSharesMixedTest):
|
||||
def test_create_delete_cert_ro_access_rule(self, version):
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
self.share["id"], 'cert', 'client2.com', 'ro')
|
||||
self.share["id"], 'cert', 'client2.com', 'ro')['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], 'cert', 'client2.com', 'ro',
|
||||
version=version)
|
||||
version=version)['access']
|
||||
|
||||
self.assertEqual('ro', rule['access_level'])
|
||||
for key in ('deleted', 'deleted_at', 'instance_mappings'):
|
||||
@ -513,7 +514,7 @@ class ShareCephxRulesForCephFSTest(base.BaseSharesMixedTest):
|
||||
def test_create_delete_cephx_rule(self, version, access_to, access_level):
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type, access_to, version=version,
|
||||
access_level=access_level)
|
||||
access_level=access_level)['access']
|
||||
|
||||
self.assertEqual(access_level, rule['access_level'])
|
||||
for key in ('deleted', 'deleted_at', 'instance_mappings'):
|
||||
@ -532,7 +533,7 @@ class ShareCephxRulesForCephFSTest(base.BaseSharesMixedTest):
|
||||
def test_different_users_in_same_tenant_can_use_same_cephx_id(self):
|
||||
# Grant access to the share
|
||||
access1 = self.shares_v2_client.create_access_rule(
|
||||
self.share['id'], self.access_type, self.access_to, 'rw')
|
||||
self.share['id'], self.access_type, self.access_to, 'rw')['access']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, self.share["id"], "active",
|
||||
resource_name='access_rule', rule_id=access1["id"])
|
||||
@ -550,7 +551,7 @@ class ShareCephxRulesForCephFSTest(base.BaseSharesMixedTest):
|
||||
# Grant access to the second share using the same cephx ID that was
|
||||
# used in access1
|
||||
access2 = user_client.shares_v2_client.create_access_rule(
|
||||
share2['id'], self.access_type, self.access_to, 'rw')
|
||||
share2['id'], self.access_type, self.access_to, 'rw')['access']
|
||||
waiters.wait_for_resource_status(
|
||||
user_client.shares_v2_client, share2['id'], "active",
|
||||
resource_name='access_rule', rule_id=access2['id'])
|
||||
@ -608,11 +609,11 @@ class ShareRulesTest(base.BaseSharesMixedTest):
|
||||
# create rule
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
self.share["id"], self.access_type, self.access_to)
|
||||
self.share["id"], self.access_type, self.access_to)['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], self.access_type, self.access_to,
|
||||
metadata=metadata, version=version)
|
||||
metadata=metadata, version=version)['access']
|
||||
|
||||
# verify added rule keys since 2.33 when create rule
|
||||
if utils.is_microversion_ge(version, '2.33'):
|
||||
@ -643,10 +644,11 @@ class ShareRulesTest(base.BaseSharesMixedTest):
|
||||
|
||||
# list rules
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rules = self.shares_client.list_access_rules(self.share["id"])
|
||||
rules = self.shares_client.list_access_rules(
|
||||
self.share["id"])['access_list']
|
||||
else:
|
||||
rules = self.shares_v2_client.list_access_rules(self.share["id"],
|
||||
version=version)
|
||||
rules = self.shares_v2_client.list_access_rules(
|
||||
self.share["id"], version=version)['access_list']
|
||||
|
||||
# verify keys
|
||||
keys = ("id", "access_type", "access_to", "access_level")
|
||||
@ -703,11 +705,11 @@ class ShareRulesTest(base.BaseSharesMixedTest):
|
||||
# create rule
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
share["id"], self.access_type, self.access_to)
|
||||
share["id"], self.access_type, self.access_to)['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
share["id"], self.access_type, self.access_to,
|
||||
version=version)
|
||||
version=version)['access']
|
||||
|
||||
# rules must start out in 'new' until 2.28 & 'queued_to_apply' after
|
||||
if utils.is_microversion_le(version, "2.27"):
|
||||
|
@ -102,10 +102,11 @@ class ShareIpRulesForNFSNegativeTest(base.BaseSharesMixedTest):
|
||||
# create rule
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
rule = self.shares_client.create_access_rule(
|
||||
self.share["id"], access_type, access_to)
|
||||
self.share["id"], access_type, access_to)['access']
|
||||
else:
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], access_type, access_to, version=version)
|
||||
self.share["id"], access_type, access_to,
|
||||
version=version)['access']
|
||||
|
||||
if utils.is_microversion_eq(version, '1.0'):
|
||||
waiters.wait_for_resource_status(
|
||||
@ -157,7 +158,7 @@ class ShareIpRulesForNFSNegativeTest(base.BaseSharesMixedTest):
|
||||
raise self.skipException(reason)
|
||||
|
||||
rule = self.shares_v2_client.create_access_rule(
|
||||
self.share["id"], "ip", access_to)
|
||||
self.share["id"], "ip", access_to)['access']
|
||||
self.addCleanup(self.shares_v2_client.delete_access_rule,
|
||||
self.share["id"], rule['id'])
|
||||
waiters.wait_for_resource_status(
|
||||
@ -449,7 +450,7 @@ class ShareCephxRulesForCephFSNegativeTest(base.BaseSharesMixedTest):
|
||||
raise_rule_in_error_state=False)
|
||||
|
||||
share_alt_updated = self.alt_shares_v2_client.get_share(
|
||||
share2['id'])
|
||||
share2['id'])['share']
|
||||
self.assertEqual('error', share_alt_updated['access_rules_status'])
|
||||
|
||||
@decorators.idempotent_id('1a9f46f0-d4e1-40ac-8726-aedd0320d583')
|
||||
@ -473,7 +474,7 @@ class ShareCephxRulesForCephFSNegativeTest(base.BaseSharesMixedTest):
|
||||
|
||||
# Share's "access_rules_status" must be in "error" status
|
||||
share_alt_updated = self.alt_shares_v2_client.get_share(
|
||||
share_alt['id'])
|
||||
share_alt['id'])['share']
|
||||
self.assertEqual('error', share_alt_updated['access_rules_status'])
|
||||
|
||||
# Add second access rule to different client by "alt" user.
|
||||
|
@ -35,7 +35,8 @@ class SecurityServiceListMixin(object):
|
||||
@decorators.idempotent_id('f6f5657c-a93c-49ed-86e3-b351a92734d5')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_list_security_services(self):
|
||||
listed = self.shares_client.list_security_services()
|
||||
listed = self.shares_client.list_security_services(
|
||||
)['security_services']
|
||||
self.assertTrue(any(self.ss_ldap['id'] == ss['id'] for ss in listed))
|
||||
self.assertTrue(any(self.ss_kerberos['id'] == ss['id']
|
||||
for ss in listed))
|
||||
@ -52,9 +53,10 @@ class SecurityServiceListMixin(object):
|
||||
with_ou = True if utils.is_microversion_ge(version, '2.44') else False
|
||||
if utils.is_microversion_ge(version, '2.0'):
|
||||
listed = self.shares_v2_client.list_security_services(
|
||||
detailed=True, version=version)
|
||||
detailed=True, version=version)['security_services']
|
||||
else:
|
||||
listed = self.shares_client.list_security_services(detailed=True)
|
||||
listed = self.shares_client.list_security_services(
|
||||
detailed=True)['security_services']
|
||||
|
||||
self.assertTrue(any(self.ss_ldap['id'] == ss['id'] for ss in listed))
|
||||
self.assertTrue(any(self.ss_kerberos['id'] == ss['id']
|
||||
@ -77,7 +79,7 @@ class SecurityServiceListMixin(object):
|
||||
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
|
||||
def test_list_security_services_filter_by_share_network(self):
|
||||
sn = self.shares_client.get_share_network(
|
||||
self.shares_client.share_network_id)
|
||||
self.shares_client.share_network_id)['share_network']
|
||||
fresh_sn = []
|
||||
for i in range(2):
|
||||
sn = self.create_share_network(
|
||||
@ -92,7 +94,9 @@ class SecurityServiceListMixin(object):
|
||||
fresh_sn[1]["id"], self.ss_kerberos["id"])
|
||||
|
||||
listed = self.shares_client.list_security_services(
|
||||
params={'share_network_id': fresh_sn[0]['id']})
|
||||
params={
|
||||
'share_network_id': fresh_sn[0]['id']
|
||||
})['security_services']
|
||||
self.assertEqual(1, len(listed))
|
||||
self.assertEqual(self.ss_ldap['id'], listed[0]['id'])
|
||||
|
||||
@ -112,7 +116,7 @@ class SecurityServiceListMixin(object):
|
||||
}
|
||||
listed = self.shares_client.list_security_services(
|
||||
detailed=True,
|
||||
params=search_opts)
|
||||
params=search_opts)['security_services']
|
||||
self.assertTrue(any(self.ss_ldap['id'] == ss['id'] for ss in listed))
|
||||
for ss in listed:
|
||||
self.assertTrue(all(ss[key] == value for key, value
|
||||
@ -179,10 +183,11 @@ class SecurityServicesTest(base.BaseSharesMixedTest,
|
||||
ss = self.create_security_service(
|
||||
client=self.shares_v2_client, version=version, **data)
|
||||
get = self.shares_v2_client.get_security_service(
|
||||
ss["id"], version=version)
|
||||
ss["id"], version=version)['security_service']
|
||||
else:
|
||||
ss = self.create_security_service(**data)
|
||||
get = self.shares_client.get_security_service(ss["id"])
|
||||
get = self.shares_client.get_security_service(
|
||||
ss["id"])['security_service']
|
||||
|
||||
self.assertDictContainsSubset(data, ss)
|
||||
self.assertEqual(with_ou, 'ou' in ss)
|
||||
@ -198,9 +203,10 @@ class SecurityServicesTest(base.BaseSharesMixedTest,
|
||||
|
||||
upd_data = self.generate_security_service_data()
|
||||
updated = self.shares_client.update_security_service(
|
||||
ss["id"], **upd_data)
|
||||
ss["id"], **upd_data)['security_service']
|
||||
|
||||
get = self.shares_client.get_security_service(ss["id"])
|
||||
get = self.shares_client.get_security_service(
|
||||
ss["id"])['security_service']
|
||||
self.assertDictContainsSubset(upd_data, updated)
|
||||
self.assertDictContainsSubset(upd_data, get)
|
||||
|
||||
@ -208,9 +214,10 @@ class SecurityServicesTest(base.BaseSharesMixedTest,
|
||||
# update again with ou
|
||||
upd_data_ou = self.generate_security_service_data(set_ou=True)
|
||||
updated_ou = self.shares_v2_client.update_security_service(
|
||||
ss["id"], **upd_data_ou)
|
||||
ss["id"], **upd_data_ou)['security_service']
|
||||
|
||||
get_ou = self.shares_v2_client.get_security_service(ss["id"])
|
||||
get_ou = self.shares_v2_client.get_security_service(
|
||||
ss["id"])['security_service']
|
||||
self.assertDictContainsSubset(upd_data_ou, updated_ou)
|
||||
self.assertDictContainsSubset(upd_data_ou, get_ou)
|
||||
|
||||
@ -223,7 +230,7 @@ class SecurityServicesTest(base.BaseSharesMixedTest,
|
||||
ss = self.create_security_service(**ss_data)
|
||||
|
||||
sn = self.shares_client.get_share_network(
|
||||
self.shares_client.share_network_id)
|
||||
self.shares_client.share_network_id)['share_network']
|
||||
fresh_sn = self.create_share_network(
|
||||
add_security_services=False,
|
||||
neutron_net_id=sn["neutron_net_id"],
|
||||
@ -252,14 +259,14 @@ class SecurityServicesTest(base.BaseSharesMixedTest,
|
||||
"description": "new_description",
|
||||
}
|
||||
updated = self.shares_client.update_security_service(
|
||||
ss["id"], **update_data)
|
||||
ss["id"], **update_data)['security_service']
|
||||
self.assertDictContainsSubset(update_data, updated)
|
||||
|
||||
@decorators.idempotent_id('8d9af272-df89-470d-9ff8-92ba774c9fff')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_list_security_services_filter_by_invalid_opt(self):
|
||||
listed = self.shares_client.list_security_services(
|
||||
params={'fake_opt': 'some_value'})
|
||||
params={'fake_opt': 'some_value'})['security_services']
|
||||
self.assertTrue(any(self.ss_ldap['id'] == ss['id'] for ss in listed))
|
||||
self.assertTrue(any(self.ss_kerberos['id'] == ss['id']
|
||||
for ss in listed))
|
||||
@ -268,7 +275,7 @@ class SecurityServicesTest(base.BaseSharesMixedTest,
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_try_list_security_services_all_tenants(self):
|
||||
listed = self.shares_client.list_security_services(
|
||||
params={'all_tenants': 1})
|
||||
params={'all_tenants': 1})['security_services']
|
||||
self.assertTrue(any(self.ss_ldap['id'] == ss['id'] for ss in listed))
|
||||
self.assertTrue(any(self.ss_kerberos['id'] == ss['id']
|
||||
for ss in listed))
|
||||
|
@ -51,7 +51,8 @@ class SecurityServicesMappingTest(base.BaseSharesTest):
|
||||
def test_map_ss_to_sn_and_list(self):
|
||||
|
||||
# List security services for share network
|
||||
ls = self.cl.list_sec_services_for_share_network(self.sn["id"])
|
||||
ls = self.cl.list_sec_services_for_share_network(
|
||||
self.sn["id"])['security_services']
|
||||
self.assertEqual(1, len(ls))
|
||||
for key in ["status", "id", "name"]:
|
||||
self.assertIn(self.ss[key], ls[0][key])
|
||||
|
@ -114,7 +114,7 @@ class SecServicesMappingNegativeTest(base.BaseSharesMixedTest):
|
||||
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
|
||||
def test_delete_ss_from_sn_used_by_share_server(self):
|
||||
sn = self.shares_client.get_share_network(
|
||||
self.shares_client.share_network_id)
|
||||
self.shares_client.share_network_id)['share_network']
|
||||
fresh_sn = self.create_share_network(
|
||||
add_security_services=False,
|
||||
neutron_net_id=sn["neutron_net_id"],
|
||||
|
@ -98,7 +98,7 @@ class SecurityServicesNegativeTest(base.BaseSharesMixedTest):
|
||||
ss = self.create_security_service(**ss_data)
|
||||
|
||||
sn = self.shares_client.get_share_network(
|
||||
self.shares_client.share_network_id)
|
||||
self.shares_client.share_network_id)['share_network']
|
||||
fresh_sn = self.create_share_network(
|
||||
add_security_services=False,
|
||||
neutron_net_id=sn["neutron_net_id"],
|
||||
|
@ -122,7 +122,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# Get share group
|
||||
share_group = self.shares_v2_client.get_share_group(
|
||||
self.share_group['id'], version=version)
|
||||
self.share_group['id'], version=version)['share_group']
|
||||
|
||||
# Verify keys
|
||||
actual_keys = set(share_group.keys())
|
||||
@ -145,7 +145,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
# Get share
|
||||
share = self.shares_v2_client.get_share(
|
||||
self.shares[0]['id'],
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION)
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION)['share']
|
||||
|
||||
# Verify keys
|
||||
expected_keys = {
|
||||
@ -177,7 +177,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# List share groups
|
||||
share_groups = self.shares_v2_client.list_share_groups(
|
||||
version=version)
|
||||
version=version)['share_groups']
|
||||
|
||||
# Verify keys
|
||||
self.assertGreater(len(share_groups), 0)
|
||||
@ -211,7 +211,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
params = {'name~': 'tempest', 'description~': 'tempest'}
|
||||
# List share groups
|
||||
share_groups = self.shares_v2_client.list_share_groups(
|
||||
detailed=True, params=params, version=version)
|
||||
detailed=True, params=params, version=version)['share_groups']
|
||||
|
||||
# Verify keys
|
||||
for sg in share_groups:
|
||||
@ -242,7 +242,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
detailed=True,
|
||||
params={'share_group_id': self.share_group['id']},
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION,
|
||||
)
|
||||
)['shares']
|
||||
|
||||
share_ids = [share['id'] for share in shares]
|
||||
|
||||
@ -274,7 +274,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
sg_snapshot = self.shares_v2_client.get_share_group_snapshot(
|
||||
self.sg_snapshot['id'],
|
||||
version=version,
|
||||
)
|
||||
)['share_group_snapshot']
|
||||
|
||||
# Verify keys
|
||||
actual_keys = set(sg_snapshot.keys())
|
||||
@ -301,7 +301,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
sg_snapshot = self.shares_v2_client.get_share_group_snapshot(
|
||||
self.sg_snapshot['id'],
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION,
|
||||
)
|
||||
)['share_group_snapshot']
|
||||
sg_snapshot_members = sg_snapshot['members']
|
||||
member_share_ids = [m['share_id'] for m in sg_snapshot_members]
|
||||
self.assertEqual(
|
||||
@ -338,7 +338,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
sg_snapshot = self.shares_v2_client.get_share_group_snapshot(
|
||||
self.sg_snapshot['id'],
|
||||
version=version,
|
||||
)
|
||||
)['share_group_snapshot']
|
||||
snapshot_members = sg_snapshot['members']
|
||||
|
||||
new_share_group = self.create_share_group(
|
||||
@ -351,7 +351,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
new_share_group = self.shares_v2_client.get_share_group(
|
||||
new_share_group['id'],
|
||||
version=version,
|
||||
)
|
||||
)['share_group']
|
||||
|
||||
# Verify that share_network information matches source share group
|
||||
self.assertEqual(
|
||||
@ -362,7 +362,7 @@ class ShareGroupActionsTest(base.BaseSharesMixedTest):
|
||||
params={'share_group_id': new_share_group['id']},
|
||||
detailed=True,
|
||||
version=version,
|
||||
)
|
||||
)['shares']
|
||||
|
||||
# Verify each new share is available
|
||||
for share in new_shares:
|
||||
@ -444,7 +444,7 @@ class ShareGroupRenameTest(base.BaseSharesMixedTest):
|
||||
share_group = self.shares_v2_client.get_share_group(
|
||||
self.share_group['id'],
|
||||
version=version
|
||||
)
|
||||
)['share_group']
|
||||
self.assertEqual(self.share_group_name, share_group["name"])
|
||||
self.assertEqual(self.share_group_desc, share_group["description"])
|
||||
|
||||
@ -456,7 +456,7 @@ class ShareGroupRenameTest(base.BaseSharesMixedTest):
|
||||
name=new_name,
|
||||
description=new_desc,
|
||||
version=version,
|
||||
)
|
||||
)['share_group']
|
||||
self.assertEqual(new_name, updated["name"])
|
||||
self.assertEqual(new_desc, updated["description"])
|
||||
|
||||
@ -464,7 +464,7 @@ class ShareGroupRenameTest(base.BaseSharesMixedTest):
|
||||
share_group = self.shares_v2_client.get_share_group(
|
||||
self.share_group['id'],
|
||||
version=version,
|
||||
)
|
||||
)['share_group']
|
||||
self.assertEqual(new_name, share_group["name"])
|
||||
self.assertEqual(new_desc, share_group["description"])
|
||||
|
||||
@ -502,13 +502,13 @@ class ShareGroupRenameTest(base.BaseSharesMixedTest):
|
||||
name=value2,
|
||||
description=value2,
|
||||
version=version,
|
||||
)
|
||||
)['share_group']
|
||||
self.assertEqual(value2, updated["name"])
|
||||
self.assertEqual(value2, updated["description"])
|
||||
|
||||
# Get share group
|
||||
share_group = self.shares_v2_client.get_share_group(
|
||||
share_group['id'], version=version)
|
||||
share_group['id'], version=version)['share_group']
|
||||
self.assertEqual(value2, share_group["name"])
|
||||
self.assertEqual(value2, share_group["description"])
|
||||
|
||||
|
@ -176,7 +176,7 @@ class ShareGroupsTest(base.BaseSharesMixedTest):
|
||||
|
||||
new_shares = self.shares_v2_client.list_shares(
|
||||
params={'share_group_id': new_share_group['id']},
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION)
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION)['shares']
|
||||
|
||||
self.assertEmpty(
|
||||
new_shares, 'Expected 0 new shares, got %s' % len(new_shares))
|
||||
@ -232,7 +232,7 @@ class ShareGroupsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# Get latest share group info
|
||||
share_group = self.shares_v2_client.get_share_group(
|
||||
share_group['id'], '2.34')
|
||||
share_group['id'], '2.34')['share_group']
|
||||
|
||||
self.assertIn('availability_zone', share_group)
|
||||
if where_specify_az in ('sg', 'sg_and_share'):
|
||||
@ -258,7 +258,7 @@ class ShareGroupsTest(base.BaseSharesMixedTest):
|
||||
share = self.create_share(**s_kwargs)
|
||||
|
||||
# Get latest share info
|
||||
share = self.shares_v2_client.get_share(share['id'], '2.34')
|
||||
share = self.shares_v2_client.get_share(share['id'], '2.34')['share']
|
||||
|
||||
# Verify that share always has the same AZ as share group does
|
||||
self.assertEqual(
|
||||
|
@ -245,7 +245,7 @@ class ShareGroupsNegativeTest(base.BaseSharesMixedTest):
|
||||
# Verify share group is not put into error state from conflict
|
||||
sg = self.shares_v2_client.get_share_group(
|
||||
self.share_group['id'],
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION)
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION)['share_group']
|
||||
self.assertEqual('available', sg['status'])
|
||||
|
||||
@decorators.idempotent_id('edd329b8-7188-481f-9445-8f6d913538fa')
|
||||
@ -255,7 +255,7 @@ class ShareGroupsNegativeTest(base.BaseSharesMixedTest):
|
||||
detailed=True,
|
||||
params={'share_group_id': 'foobar'},
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION,
|
||||
)
|
||||
)['shares']
|
||||
self.assertEqual(0, len(shares), 'Incorrect number of shares returned')
|
||||
|
||||
@decorators.idempotent_id('5dc10968-cbff-46d9-a1aa-bafccc7a1905')
|
||||
@ -265,7 +265,7 @@ class ShareGroupsNegativeTest(base.BaseSharesMixedTest):
|
||||
detailed=True,
|
||||
params={'share_group_id': self.share['id']},
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION,
|
||||
)
|
||||
)['shares']
|
||||
self.assertEqual(0, len(shares), 'Incorrect number of shares returned')
|
||||
|
||||
@decorators.idempotent_id('f805f683-fe05-4534-9f40-a74be42ff82b')
|
||||
@ -283,7 +283,7 @@ class ShareGroupsNegativeTest(base.BaseSharesMixedTest):
|
||||
detailed=True,
|
||||
params={'share_group_id': share_group['id']},
|
||||
version=constants.MIN_SHARE_GROUP_MICROVERSION,
|
||||
)
|
||||
)['shares']
|
||||
self.assertEqual(0, len(shares), 'Incorrect number of shares returned')
|
||||
|
||||
@decorators.idempotent_id('8fc20c22-082f-4851-bcc3-d2f3af57f027')
|
||||
@ -303,14 +303,15 @@ class ShareGroupsNegativeTest(base.BaseSharesMixedTest):
|
||||
@decorators.idempotent_id('64527564-9cd6-42db-8897-910f4fc1a151')
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_create_sg_and_share_with_different_azs(self):
|
||||
azs = self.shares_v2_client.list_availability_zones()
|
||||
azs = self.shares_v2_client.list_availability_zones(
|
||||
)['availability_zones']
|
||||
|
||||
if len(azs) < 2:
|
||||
raise self.skipException(
|
||||
'Test requires presence of at least 2 availability zones.')
|
||||
else:
|
||||
share_group = self.shares_v2_client.get_share_group(
|
||||
self.share_group['id'], '2.34')
|
||||
self.share_group['id'], '2.34')['share_group']
|
||||
different_az = [
|
||||
az['name']
|
||||
for az in azs
|
||||
|
@ -49,13 +49,15 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
@decorators.idempotent_id('3e1e4da7-049f-404e-8673-142695a9a785')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_create_delete_subnet(self):
|
||||
share_network = self.shares_v2_client.create_share_network()
|
||||
share_network = self.shares_v2_client.create_share_network(
|
||||
)['share_network']
|
||||
share_network = self.shares_v2_client.get_share_network(
|
||||
share_network['id']
|
||||
)
|
||||
)['share_network']
|
||||
default_subnet = share_network['share_network_subnets'][0]
|
||||
|
||||
az = self.shares_v2_client.list_availability_zones()[0]
|
||||
az = self.shares_v2_client.list_availability_zones(
|
||||
)['availability_zones'][0]
|
||||
az_name = az['name']
|
||||
|
||||
# Generate subnet data
|
||||
@ -88,7 +90,8 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_show_share_network_subnet(self):
|
||||
share_network = self.create_share_network()
|
||||
az = self.shares_v2_client.list_availability_zones()[0]
|
||||
az = self.shares_v2_client.list_availability_zones(
|
||||
)['availability_zones'][0]
|
||||
az_name = az['name']
|
||||
|
||||
# Generate subnet data
|
||||
@ -100,8 +103,8 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
created = self.create_share_network_subnet(**data)
|
||||
|
||||
# Shows the share network subnet
|
||||
shown = self.shares_v2_client.get_subnet(created['id'],
|
||||
share_network['id'])
|
||||
shown = self.shares_v2_client.get_subnet(
|
||||
created['id'], share_network['id'])['share_network_subnet']
|
||||
|
||||
# Asserts
|
||||
self.assertDictContainsSubset(data, shown)
|
||||
@ -127,7 +130,7 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
|
||||
original_share_network = self.shares_v2_client.get_share_network(
|
||||
self.shares_v2_client.share_network_id
|
||||
)
|
||||
)['share_network']
|
||||
share_net_info = (
|
||||
utils.share_network_get_default_subnet(original_share_network))
|
||||
share_network = self.create_share_network(
|
||||
@ -136,7 +139,7 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
)
|
||||
share_network = self.shares_v2_client.get_share_network(
|
||||
share_network['id']
|
||||
)
|
||||
)['share_network']
|
||||
default_subnet = share_network['share_network_subnets'][0]
|
||||
availability_zone = compatible_azs[0]
|
||||
|
||||
@ -160,10 +163,10 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
# case of Dummy driver).
|
||||
self.assertIn(share['status'], ('creating', 'available'))
|
||||
|
||||
share = self.admin_shares_v2_client.get_share(share['id'])
|
||||
share = self.admin_shares_v2_client.get_share(share['id'])['share']
|
||||
share_server = self.admin_shares_v2_client.show_share_server(
|
||||
share['share_server_id']
|
||||
)
|
||||
)['share_server']
|
||||
|
||||
# Default subnet was created during share network creation
|
||||
self.assertIsNone(default_subnet['availability_zone'])
|
||||
@ -197,7 +200,7 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
|
||||
original_share_network = self.shares_v2_client.get_share_network(
|
||||
self.shares_v2_client.share_network_id
|
||||
)
|
||||
)['share_network']
|
||||
share_net_info = (
|
||||
utils.share_network_get_default_subnet(original_share_network))
|
||||
share_network = self.create_share_network(
|
||||
@ -206,7 +209,7 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
)
|
||||
share_network = self.shares_v2_client.get_share_network(
|
||||
share_network['id']
|
||||
)
|
||||
)['share_network']
|
||||
default_subnet = share_network['share_network_subnets'][0]
|
||||
# Save one availability zone to remain associated with default subnet
|
||||
destination_az = compatible_azs.pop()
|
||||
@ -236,10 +239,10 @@ class ShareNetworkSubnetsTest(base.BaseSharesMixedTest):
|
||||
# creation is really fast as in case of Dummy driver).
|
||||
self.assertIn(share['status'], ('creating', 'available'))
|
||||
|
||||
share = self.admin_shares_v2_client.get_share(share['id'])
|
||||
share = self.admin_shares_v2_client.get_share(share['id'])['share']
|
||||
share_server = self.admin_shares_v2_client.show_share_server(
|
||||
share['share_server_id']
|
||||
)
|
||||
)['share_server']
|
||||
# If no availability zone was provided during share creation, it is
|
||||
# expected that the Scheduler selects one of the compatible backends to
|
||||
# place the share. The destination availability zone may or may not
|
||||
|
@ -42,10 +42,13 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
super(ShareNetworkSubnetsNegativeTest, cls).resource_setup()
|
||||
# Create a new share network which will be used in the tests
|
||||
cls.share_network = cls.shares_v2_client.create_share_network(
|
||||
cleanup_in_class=True)
|
||||
cleanup_in_class=True)['share_network']
|
||||
cls.share_network_id = cls.share_network['id']
|
||||
cls.share_type = cls.create_share_type()
|
||||
cls.az = cls.shares_v2_client.list_availability_zones()[0]
|
||||
cls.az = (
|
||||
cls.shares_v2_client.list_availability_zones()
|
||||
['availability_zones'][0]
|
||||
)
|
||||
cls.az_name = cls.az['name']
|
||||
|
||||
@decorators.idempotent_id('d20b6105-22d1-4fc0-8468-45dd019240c0')
|
||||
@ -70,7 +73,8 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API)
|
||||
@ddt.data(True, False)
|
||||
def test_add_share_network_subnet_in_same_az_exists(self, is_default):
|
||||
share_network = self.shares_v2_client.create_share_network()
|
||||
share_network = self.shares_v2_client.create_share_network(
|
||||
)['share_network']
|
||||
data = {}
|
||||
|
||||
if not is_default:
|
||||
@ -118,7 +122,8 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
# Generate subnet data
|
||||
data = self.generate_subnet_data()
|
||||
data['share_network_id'] = self.share_network_id
|
||||
az = self.shares_v2_client.list_availability_zones()[0]
|
||||
az = self.shares_v2_client.list_availability_zones(
|
||||
)['availability_zones'][0]
|
||||
data['availability_zone'] = az['name']
|
||||
|
||||
subnet = self.create_share_network_subnet(**data)
|
||||
@ -131,7 +136,7 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
subnet['id'])
|
||||
share_network = self.shares_v2_client.get_share_network(
|
||||
self.share_network_id
|
||||
)
|
||||
)['share_network']
|
||||
|
||||
self.assertIsNotNone(share_network)
|
||||
self.assertRaises(lib_exc.NotFound,
|
||||
@ -153,7 +158,7 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
|
||||
share_network = self.shares_v2_client.get_share_network(
|
||||
self.shares_v2_client.share_network_id
|
||||
)
|
||||
)['share_network']
|
||||
share_network_id = share_network['id']
|
||||
subnet = utils.share_network_get_default_subnet(share_network)
|
||||
|
||||
@ -171,13 +176,14 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
'availability_zone': az}
|
||||
|
||||
# Create a share into the share network
|
||||
share = self.shares_v2_client.create_share(**args)
|
||||
share = self.shares_v2_client.create_share(**args)['share']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, share['id'], constants.STATUS_AVAILABLE)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
|
||||
# Gets the export locations to be used in the future
|
||||
el = self.shares_v2_client.list_share_export_locations(share['id'])
|
||||
el = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'])['export_locations']
|
||||
share['export_locations'] = el
|
||||
|
||||
# Unmanages the share to make the share server become is_auto
|
||||
@ -200,7 +206,7 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
name='share_to_be_deleted',
|
||||
description='share managed to be deleted',
|
||||
share_server_id=share['share_server_id']
|
||||
)
|
||||
)['share']
|
||||
|
||||
# Do some necessary cleanup
|
||||
waiters.wait_for_resource_status(
|
||||
@ -228,7 +234,7 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
|
||||
original_share_network = self.shares_v2_client.get_share_network(
|
||||
self.shares_v2_client.share_network_id
|
||||
)
|
||||
)['share_network']
|
||||
share_net_info = (
|
||||
utils.share_network_get_default_subnet(original_share_network))
|
||||
share_network = self.create_share_network(
|
||||
@ -237,7 +243,7 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
)
|
||||
share_network = self.shares_v2_client.get_share_network(
|
||||
share_network['id']
|
||||
)
|
||||
)['share_network']
|
||||
share_network_id = share_network['id']
|
||||
default_subnet = share_network['share_network_subnets'][0]
|
||||
|
||||
@ -255,13 +261,13 @@ class ShareNetworkSubnetsNegativeTest(base.BaseSharesAdminTest):
|
||||
'availability_zone': az}
|
||||
|
||||
# Create a share into the share network
|
||||
share = self.shares_v2_client.create_share(**args)
|
||||
share = self.shares_v2_client.create_share(**args)['share']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, share['id'], constants.STATUS_AVAILABLE)
|
||||
share = self.admin_shares_v2_client.get_share(share['id'])
|
||||
share = self.admin_shares_v2_client.get_share(share['id'])['share']
|
||||
share_server = self.admin_shares_v2_client.show_share_server(
|
||||
share['share_server_id']
|
||||
)
|
||||
)['share_server']
|
||||
# Match share server subnet
|
||||
self.assertEqual(subnet['id'],
|
||||
share_server['share_network_subnet_id'])
|
||||
|
@ -30,7 +30,7 @@ class ShareNetworkListMixin(object):
|
||||
@tc.attr("gate", "smoke", )
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_list_share_networks(self):
|
||||
listed = self.shares_client.list_share_networks()
|
||||
listed = self.shares_client.list_share_networks()['share_networks']
|
||||
any(self.sn_with_ldap_ss["id"] in sn["id"] for sn in listed)
|
||||
|
||||
# verify keys
|
||||
@ -41,7 +41,7 @@ class ShareNetworkListMixin(object):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_try_list_share_networks_all_tenants(self):
|
||||
listed = self.shares_client.list_share_networks_with_detail(
|
||||
params={'all_tenants': 1})
|
||||
params={'all_tenants': 1})['share_networks']
|
||||
any(self.sn_with_ldap_ss["id"] in sn["id"] for sn in listed)
|
||||
|
||||
# verify keys
|
||||
@ -52,7 +52,7 @@ class ShareNetworkListMixin(object):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_try_list_share_networks_project_id(self):
|
||||
listed = self.shares_client.list_share_networks_with_detail(
|
||||
params={'project_id': 'some_project'})
|
||||
params={'project_id': 'some_project'})['share_networks']
|
||||
any(self.sn_with_ldap_ss["id"] in sn["id"] for sn in listed)
|
||||
|
||||
# verify keys
|
||||
@ -62,7 +62,8 @@ class ShareNetworkListMixin(object):
|
||||
@decorators.idempotent_id('285c7a91-1703-42a5-86c8-2463edde60e2')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_list_share_networks_with_detail(self):
|
||||
listed = self.shares_v2_client.list_share_networks_with_detail()
|
||||
listed = self.shares_v2_client.list_share_networks_with_detail(
|
||||
)['share_networks']
|
||||
any(self.sn_with_ldap_ss["id"] in sn["id"] for sn in listed)
|
||||
|
||||
# verify keys
|
||||
@ -100,12 +101,12 @@ class ShareNetworkListMixin(object):
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_list_share_networks_filter_by_ss(self):
|
||||
listed = self.shares_client.list_share_networks_with_detail(
|
||||
{'security_service_id': self.ss_ldap['id']})
|
||||
{'security_service_id': self.ss_ldap['id']})['share_networks']
|
||||
self.assertTrue(any(self.sn_with_ldap_ss['id'] == sn['id']
|
||||
for sn in listed))
|
||||
for sn in listed:
|
||||
ss_list = self.shares_client.list_sec_services_for_share_network(
|
||||
sn['id'])
|
||||
sn['id'])['security_services']
|
||||
self.assertTrue(any(ss['id'] == self.ss_ldap['id']
|
||||
for ss in ss_list))
|
||||
|
||||
@ -119,7 +120,7 @@ class ShareNetworkListMixin(object):
|
||||
}
|
||||
|
||||
listed = self.shares_v2_client.list_share_networks_with_detail(
|
||||
{'name~': 'ldap_ss', 'description~': 'fa'})
|
||||
{'name~': 'ldap_ss', 'description~': 'fa'})['share_networks']
|
||||
self.assertTrue(any(self.sn_with_ldap_ss['id'] == sn['id']
|
||||
for sn in listed))
|
||||
for sn in listed:
|
||||
@ -142,7 +143,7 @@ class ShareNetworkListMixin(object):
|
||||
}
|
||||
|
||||
listed = self.shares_client.list_share_networks_with_detail(
|
||||
valid_filter_opts)
|
||||
valid_filter_opts)['share_networks']
|
||||
self.assertTrue(any(self.sn_with_ldap_ss['id'] == sn['id']
|
||||
for sn in listed))
|
||||
created_before = valid_filter_opts.pop('created_before')
|
||||
@ -221,7 +222,8 @@ class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
|
||||
data = self.generate_share_network_data()
|
||||
|
||||
# create share network
|
||||
created = self.shares_client.create_share_network(**data)
|
||||
created = self.shares_client.create_share_network(
|
||||
**data)['share_network']
|
||||
self.assertDictContainsSubset(data, created)
|
||||
|
||||
# Delete share_network
|
||||
@ -230,7 +232,8 @@ class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
|
||||
@decorators.idempotent_id('55990ec2-37f0-483f-9c67-76fd6f377cc1')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API)
|
||||
def test_get_share_network(self):
|
||||
get = self.shares_client.get_share_network(self.sn_with_ldap_ss["id"])
|
||||
get = self.shares_client.get_share_network(
|
||||
self.sn_with_ldap_ss["id"])['share_network']
|
||||
self.assertEqual('2002-02-02T00:00:00.000000', get['created_at'])
|
||||
data = self.data_sn_with_ldap_ss.copy()
|
||||
del data['created_at']
|
||||
@ -242,7 +245,7 @@ class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
|
||||
update_data = self.generate_share_network_data()
|
||||
updated = self.shares_client.update_share_network(
|
||||
self.sn_with_ldap_ss["id"],
|
||||
**update_data)
|
||||
**update_data)['share_network']
|
||||
self.assertDictContainsSubset(update_data, updated)
|
||||
|
||||
@decorators.idempotent_id('198a5c08-3aaf-4623-9720-95d33ebe3376')
|
||||
@ -257,7 +260,8 @@ class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
|
||||
"description": "new_description",
|
||||
}
|
||||
updated = self.shares_client.update_share_network(
|
||||
self.shares_client.share_network_id, **update_dict)
|
||||
self.shares_client.share_network_id,
|
||||
**update_dict)['share_network']
|
||||
self.assertDictContainsSubset(update_dict, updated)
|
||||
|
||||
@decorators.idempotent_id('7595a844-a28e-476c-89f1-4d3193ce9d5b')
|
||||
@ -267,14 +271,14 @@ class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
|
||||
data = self.generate_share_network_data()
|
||||
|
||||
# create share network
|
||||
sn1 = self.shares_client.create_share_network(**data)
|
||||
sn1 = self.shares_client.create_share_network(**data)['share_network']
|
||||
self.assertDictContainsSubset(data, sn1)
|
||||
|
||||
# Delete first share network
|
||||
self.shares_client.delete_share_network(sn1["id"])
|
||||
|
||||
# create second share network with same data
|
||||
sn2 = self.shares_client.create_share_network(**data)
|
||||
sn2 = self.shares_client.create_share_network(**data)['share_network']
|
||||
self.assertDictContainsSubset(data, sn2)
|
||||
|
||||
# Delete second share network
|
||||
@ -308,7 +312,7 @@ class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
|
||||
self.create_share(share_type_id=self.share_type_id,
|
||||
cleanup_in_class=False)
|
||||
share_net_details = self.shares_v2_client.get_share_network(
|
||||
self.shares_v2_client.share_network_id)
|
||||
self.shares_v2_client.share_network_id)['share_network']
|
||||
share_net_info = (
|
||||
utils.share_network_get_default_subnet(share_net_details)
|
||||
if utils.share_network_subnets_are_supported()
|
||||
@ -332,7 +336,7 @@ class ShareNetworksTest(base.BaseSharesMixedTest, ShareNetworkListMixin):
|
||||
self.create_share(share_type_id=self.share_type_id,
|
||||
cleanup_in_class=False)
|
||||
share_net_details = self.shares_v2_client.get_share_network(
|
||||
self.shares_v2_client.share_network_id)
|
||||
self.shares_v2_client.share_network_id)['share_network']
|
||||
share_net_info = (
|
||||
utils.share_network_get_default_subnet(share_net_details)
|
||||
if utils.share_network_subnets_are_supported()
|
||||
|
@ -126,7 +126,7 @@ class ShareNetworksNegativeTest(base.BaseSharesMixedTest):
|
||||
def test_try_delete_share_network_with_existing_shares(self):
|
||||
# Get valid network data for successful share creation
|
||||
share_network = self.shares_client.get_share_network(
|
||||
self.shares_client.share_network_id)
|
||||
self.shares_client.share_network_id)['share_network']
|
||||
new_sn = self.create_share_network(
|
||||
neutron_net_id=share_network['neutron_net_id'],
|
||||
neutron_subnet_id=share_network['neutron_subnet_id'],
|
||||
@ -152,7 +152,7 @@ class ShareNetworksNegativeTest(base.BaseSharesMixedTest):
|
||||
}
|
||||
share_networks = (
|
||||
self.shares_v2_client.list_share_networks_with_detail(
|
||||
params=filters))
|
||||
params=filters)['share_networks'])
|
||||
|
||||
self.assertEqual(0, len(share_networks))
|
||||
|
||||
@ -161,7 +161,8 @@ class ShareNetworksNegativeTest(base.BaseSharesMixedTest):
|
||||
@tc.attr(base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND)
|
||||
def test_delete_share_network_contains_more_than_one_subnet(self):
|
||||
share_network = self.create_share_network()
|
||||
az = self.shares_v2_client.list_availability_zones()[0]
|
||||
az = self.shares_v2_client.list_availability_zones(
|
||||
)['availability_zones'][0]
|
||||
az_name = az['name']
|
||||
|
||||
# Generate subnet data
|
||||
@ -181,7 +182,7 @@ class ShareNetworksNegativeTest(base.BaseSharesMixedTest):
|
||||
|
||||
self.shares_v2_client.delete_subnet(share_network['id'], subnet['id'])
|
||||
share_network = self.shares_v2_client.get_share_network(
|
||||
share_network['id'])
|
||||
share_network['id'])['share_network']
|
||||
default_subnet = share_network['share_network_subnets'][0]
|
||||
self.assertIsNone(default_subnet['availability_zone'])
|
||||
|
||||
|
@ -108,7 +108,7 @@ class ShareTypeAvailabilityZonesTest(base.BaseSharesMixedTest):
|
||||
self.share_type_id, self.az_spec, self.invalid_azs_spec)
|
||||
share = self.create_share(share_type_id=self.share_type_id,
|
||||
cleanup_in_class=False, version='2.47')
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
# Test default scheduler behavior: the share type capabilities should
|
||||
# have ensured the share landed in an AZ that is supported
|
||||
# regardless of the 'availability_zones' extra-spec
|
||||
@ -126,7 +126,7 @@ class ShareTypeAvailabilityZonesTest(base.BaseSharesMixedTest):
|
||||
'availability_zone': self.valid_azs[0] if specify_az else None,
|
||||
}
|
||||
share = self.create_share(**kwargs)
|
||||
share = self.shares_v2_client.get_share(share['id'])
|
||||
share = self.shares_v2_client.get_share(share['id'])['share']
|
||||
if specify_az:
|
||||
self.assertEqual(self.valid_azs[0], share['availability_zone'])
|
||||
else:
|
||||
@ -146,7 +146,8 @@ class ShareTypeAvailabilityZonesTest(base.BaseSharesMixedTest):
|
||||
}
|
||||
# Create share group
|
||||
share_group = self.create_share_group(**kwargs)
|
||||
share_group = self.shares_v2_client.get_share_group(share_group['id'])
|
||||
share_group = self.shares_v2_client.get_share_group(
|
||||
share_group['id'])['share_group']
|
||||
if specify_az:
|
||||
self.assertEqual(self.valid_azs[0],
|
||||
share_group['availability_zone'])
|
||||
|
@ -72,12 +72,14 @@ class SharesNFSTest(base.BaseSharesMixedTest):
|
||||
self.assertIn(share['status'], ('creating', 'available'))
|
||||
|
||||
# Get share using v 2.1 - we expect key 'snapshot_support' to be absent
|
||||
share_get = self.shares_v2_client.get_share(share['id'], version='2.1')
|
||||
share_get = self.shares_v2_client.get_share(
|
||||
share['id'], version='2.1')['share']
|
||||
detailed_elements.add('export_location')
|
||||
self.assertTrue(detailed_elements.issubset(share_get.keys()), msg)
|
||||
|
||||
# Get share using v 2.2 - we expect key 'snapshot_support' to exist
|
||||
share_get = self.shares_v2_client.get_share(share['id'], version='2.2')
|
||||
share_get = self.shares_v2_client.get_share(
|
||||
share['id'], version='2.2')['share']
|
||||
detailed_elements.add('snapshot_support')
|
||||
self.assertTrue(detailed_elements.issubset(share_get.keys()), msg)
|
||||
|
||||
@ -85,7 +87,7 @@ class SharesNFSTest(base.BaseSharesMixedTest):
|
||||
# Get share using v 2.9 - key 'export_location' is expected
|
||||
# to be absent
|
||||
share_get = self.shares_v2_client.get_share(
|
||||
share['id'], version='2.9')
|
||||
share['id'], version='2.9')['share']
|
||||
detailed_elements.remove('export_location')
|
||||
self.assertTrue(detailed_elements.issubset(share_get.keys()), msg)
|
||||
|
||||
@ -197,7 +199,7 @@ class SharesNFSTest(base.BaseSharesMixedTest):
|
||||
self.assertIn(s2['status'], ('creating', 'available'))
|
||||
|
||||
# verify share, created from snapshot
|
||||
get = self.shares_client.get_share(s2["id"])
|
||||
get = self.shares_client.get_share(s2["id"])['share']
|
||||
msg = ("Expected snapshot_id %s as "
|
||||
"source of share %s" % (snap["id"], get["snapshot_id"]))
|
||||
self.assertEqual(get["snapshot_id"], snap["id"], msg)
|
||||
@ -227,7 +229,7 @@ class SharesNFSTest(base.BaseSharesMixedTest):
|
||||
cleanup_in_class=False)
|
||||
|
||||
# get parent share
|
||||
parent = self.shares_client.get_share(share["id"])
|
||||
parent = self.shares_client.get_share(share["id"])['share']
|
||||
|
||||
# create snapshot
|
||||
snap = self.create_snapshot_wait_for_active(share["id"],
|
||||
@ -245,7 +247,7 @@ class SharesNFSTest(base.BaseSharesMixedTest):
|
||||
self.assertIn(child['status'], ('creating', 'available'))
|
||||
|
||||
# verify share, created from snapshot
|
||||
get = self.shares_client.get_share(child["id"])
|
||||
get = self.shares_client.get_share(child["id"])['share']
|
||||
keys = {
|
||||
"share": share["id"],
|
||||
"actual_sn": get["share_network_id"],
|
||||
|
@ -93,7 +93,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# get share
|
||||
share = self.shares_v2_client.get_share(
|
||||
self.shares[0]['id'], version=six.text_type(version))
|
||||
self.shares[0]['id'], version=six.text_type(version))['share']
|
||||
|
||||
# verify keys
|
||||
expected_keys = [
|
||||
@ -195,7 +195,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_shares(self):
|
||||
|
||||
# list shares
|
||||
shares = self.shares_v2_client.list_shares()
|
||||
shares = self.shares_v2_client.list_shares()['shares']
|
||||
|
||||
# verify keys
|
||||
keys = ["name", "id", "links"]
|
||||
@ -211,7 +211,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# list shares
|
||||
shares = self.shares_v2_client.list_shares_with_detail(
|
||||
version=six.text_type(version))
|
||||
version=six.text_type(version))['shares']
|
||||
|
||||
# verify keys
|
||||
keys = [
|
||||
@ -305,7 +305,8 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
filters = {'metadata': self.metadata}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -320,11 +321,13 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
@testtools.skipIf(
|
||||
not CONF.share.multitenancy_enabled, "Only for multitenancy.")
|
||||
def test_list_shares_with_detail_filter_by_share_network_id(self):
|
||||
base_share = self.shares_client.get_share(self.shares[0]['id'])
|
||||
base_share = self.shares_client.get_share(
|
||||
self.shares[0]['id'])['share']
|
||||
filters = {'share_network_id': base_share['share_network_id']}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -343,7 +346,8 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
filters = {'snapshot_id': self.snap['id']}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -357,7 +361,8 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
filters = {'sort_key': 'created_at', 'sort_dir': 'asc'}
|
||||
|
||||
# list shares
|
||||
shares = self.shares_client.list_shares_with_detail(params=filters)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params=filters)['shares']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(shares), 0)
|
||||
@ -369,7 +374,8 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_shares_with_detail_filter_by_existed_name(self):
|
||||
# list shares by name, at least one share is expected
|
||||
params = {"name": self.share_name}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(
|
||||
params)['shares']
|
||||
self.assertEqual(self.share_name, shares[0]["name"])
|
||||
|
||||
@decorators.idempotent_id('f446e8cb-5bef-45ac-8b87-f4136f44ca69')
|
||||
@ -378,7 +384,8 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_shares_with_detail_filter_by_existed_description(self):
|
||||
# list shares by description, at least one share is expected
|
||||
params = {"description": self.share_desc}
|
||||
shares = self.shares_v2_client.list_shares_with_detail(params)
|
||||
shares = self.shares_v2_client.list_shares_with_detail(
|
||||
params)['shares']
|
||||
self.assertEqual(self.share_name, shares[0]["name"])
|
||||
|
||||
@decorators.idempotent_id('1276b97b-cf46-4953-973f-f995985a1ce4')
|
||||
@ -387,7 +394,8 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_shares_with_detail_filter_by_inexact_name(self):
|
||||
# list shares by name, at least one share is expected
|
||||
params = {"name~": 'tempest-share'}
|
||||
shares = self.shares_v2_client.list_shares_with_detail(params)
|
||||
shares = self.shares_v2_client.list_shares_with_detail(
|
||||
params)['shares']
|
||||
for share in shares:
|
||||
self.assertIn('tempest-share', share["name"])
|
||||
|
||||
@ -396,7 +404,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_shares_with_detail_filter_by_fake_name(self):
|
||||
# list shares by fake name, no shares are expected
|
||||
params = {"name": data_utils.rand_name("fake-nonexistent-name")}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(params)['shares']
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@decorators.idempotent_id('708e3e2e-8761-4d16-b18d-a834ee7ca69e')
|
||||
@ -404,7 +412,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_shares_with_detail_filter_by_active_status(self):
|
||||
# list shares by active status, at least one share is expected
|
||||
params = {"status": "available"}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(params)['shares']
|
||||
self.assertGreater(len(shares), 0)
|
||||
for share in shares:
|
||||
self.assertEqual(params["status"], share["status"])
|
||||
@ -414,7 +422,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_shares_with_detail_filter_by_fake_status(self):
|
||||
# list shares by fake status, no shares are expected
|
||||
params = {"status": 'fake'}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(params)['shares']
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@decorators.idempotent_id('7609b7bb-613e-474d-a9b3-e41584842503')
|
||||
@ -422,11 +430,11 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_shares_with_detail_filter_by_all_tenants(self):
|
||||
# non-admin user can get shares only from his project
|
||||
params = {"all_tenants": 1}
|
||||
shares = self.shares_client.list_shares_with_detail(params)
|
||||
shares = self.shares_client.list_shares_with_detail(params)['shares']
|
||||
self.assertGreater(len(shares), 0)
|
||||
|
||||
# get share with detailed info, we need its 'project_id'
|
||||
share = self.shares_client.get_share(self.shares[0]["id"])
|
||||
share = self.shares_client.get_share(self.shares[0]["id"])['share']
|
||||
project_id = share["project_id"]
|
||||
for share in shares:
|
||||
self.assertEqual(project_id, share["project_id"])
|
||||
@ -449,11 +457,12 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# get snapshot
|
||||
if version is None:
|
||||
snapshot = self.shares_client.get_snapshot(self.snap["id"])
|
||||
snapshot = self.shares_client.get_snapshot(
|
||||
self.snap["id"])['snapshot']
|
||||
else:
|
||||
utils.check_skip_if_microversion_not_supported(version)
|
||||
snapshot = self.shares_v2_client.get_snapshot(
|
||||
self.snap["id"], version=version)
|
||||
self.snap["id"], version=version)['snapshot']
|
||||
|
||||
# verify keys
|
||||
expected_keys = ["status", "links", "share_id", "name",
|
||||
@ -504,7 +513,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
def test_list_snapshots(self):
|
||||
|
||||
# list share snapshots
|
||||
snaps = self.shares_client.list_snapshots()
|
||||
snaps = self.shares_client.list_snapshots()['snapshots']
|
||||
|
||||
# verify keys
|
||||
keys = ["id", "name", "links"]
|
||||
@ -526,11 +535,12 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
params = {'name~': 'tempest', 'description~': 'tempest'}
|
||||
# list share snapshots
|
||||
if version is None:
|
||||
snaps = self.shares_client.list_snapshots_with_detail()
|
||||
snaps = self.shares_client.list_snapshots_with_detail(
|
||||
)['snapshots']
|
||||
else:
|
||||
utils.check_skip_if_microversion_not_supported(version)
|
||||
snaps = self.shares_v2_client.list_snapshots_with_detail(
|
||||
version=version, params=params)
|
||||
version=version, params=params)['snapshots']
|
||||
|
||||
# verify keys
|
||||
expected_keys = ["status", "links", "share_id", "name",
|
||||
@ -561,7 +571,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# list snapshots
|
||||
snaps = self.shares_client.list_snapshots_with_detail(
|
||||
params=filters)
|
||||
params=filters)['snapshots']
|
||||
|
||||
# Our snapshot should not be listed
|
||||
self.assertEqual(0, len(snaps))
|
||||
@ -569,10 +579,10 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
# Only our one snapshot should be listed
|
||||
snaps = self.shares_client.list_snapshots_with_detail(
|
||||
params={'limit': '1', 'offset': '0',
|
||||
'share_id': self.shares[0]['id']})
|
||||
'share_id': self.shares[0]['id']})['snapshots']
|
||||
|
||||
self.assertEqual(1, len(snaps['snapshots']))
|
||||
self.assertEqual(self.snap['id'], snaps['snapshots'][0]['id'])
|
||||
self.assertEqual(1, len(snaps))
|
||||
self.assertEqual(self.snap['id'], snaps[0]['id'])
|
||||
|
||||
@decorators.idempotent_id('0a94e996-c4db-4fef-b486-4004ea65c11a')
|
||||
@tc.attr(base.TAG_POSITIVE, base.TAG_API_WITH_BACKEND)
|
||||
@ -583,7 +593,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# list snapshots
|
||||
snaps = self.shares_client.list_snapshots_with_detail(
|
||||
params=filters)
|
||||
params=filters)['snapshots']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(snaps), 0)
|
||||
@ -601,7 +611,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# list snapshots
|
||||
snaps = self.shares_client.list_snapshots_with_detail(
|
||||
params=filters)
|
||||
params=filters)['snapshots']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(snaps), 0)
|
||||
@ -617,7 +627,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
|
||||
# list snapshots
|
||||
snaps = self.shares_client.list_snapshots_with_detail(
|
||||
params=filters)
|
||||
params=filters)['snapshots']
|
||||
|
||||
# verify response
|
||||
self.assertGreater(len(snaps), 0)
|
||||
@ -640,7 +650,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
self.shares_client, share['id'], 'available')
|
||||
|
||||
# check state and new size
|
||||
share_get = self.shares_v2_client.get_share(share['id'])
|
||||
share_get = self.shares_v2_client.get_share(share['id'])['share']
|
||||
msg = (
|
||||
"Share could not be extended. "
|
||||
"Expected %(expected)s, got %(actual)s." % {
|
||||
@ -668,7 +678,7 @@ class SharesActionsTest(base.BaseSharesMixedTest):
|
||||
self.shares_client, share['id'], 'available')
|
||||
|
||||
# check state and new size
|
||||
share_get = self.shares_v2_client.get_share(share['id'])
|
||||
share_get = self.shares_v2_client.get_share(share['id'])['share']
|
||||
msg = (
|
||||
"Share could not be shrunk. "
|
||||
"Expected %(expected)s, got %(actual)s." % {
|
||||
@ -713,7 +723,7 @@ class SharesRenameTest(base.BaseSharesMixedTest):
|
||||
def test_update_share(self):
|
||||
|
||||
# get share
|
||||
share = self.shares_client.get_share(self.share['id'])
|
||||
share = self.shares_client.get_share(self.share['id'])['share']
|
||||
self.assertEqual(self.share_name, share["name"])
|
||||
self.assertEqual(self.share_desc, share["description"])
|
||||
self.assertFalse(share["is_public"])
|
||||
@ -722,12 +732,12 @@ class SharesRenameTest(base.BaseSharesMixedTest):
|
||||
new_name = data_utils.rand_name("tempest-new-name")
|
||||
new_desc = data_utils.rand_name("tempest-new-description")
|
||||
updated = self.shares_client.update_share(
|
||||
share["id"], name=new_name, desc=new_desc)
|
||||
share["id"], name=new_name, desc=new_desc)['share']
|
||||
self.assertEqual(new_name, updated["name"])
|
||||
self.assertEqual(new_desc, updated["description"])
|
||||
|
||||
# get share
|
||||
share = self.shares_client.get_share(self.share['id'])
|
||||
share = self.shares_client.get_share(self.share['id'])['share']
|
||||
self.assertEqual(new_name, share["name"])
|
||||
self.assertEqual(new_desc, share["description"])
|
||||
self.assertFalse(share["is_public"])
|
||||
@ -739,7 +749,7 @@ class SharesRenameTest(base.BaseSharesMixedTest):
|
||||
def test_rename_snapshot(self):
|
||||
|
||||
# get snapshot
|
||||
get = self.shares_client.get_snapshot(self.snap["id"])
|
||||
get = self.shares_client.get_snapshot(self.snap["id"])['snapshot']
|
||||
self.assertEqual(self.snap_name, get["name"])
|
||||
self.assertEqual(self.snap_desc, get["description"])
|
||||
|
||||
@ -747,11 +757,11 @@ class SharesRenameTest(base.BaseSharesMixedTest):
|
||||
new_name = data_utils.rand_name("tempest-new-name-for-snapshot")
|
||||
new_desc = data_utils.rand_name("tempest-new-description-for-snapshot")
|
||||
renamed = self.shares_client.rename_snapshot(
|
||||
self.snap["id"], new_name, new_desc)
|
||||
self.snap["id"], new_name, new_desc)['snapshot']
|
||||
self.assertEqual(new_name, renamed["name"])
|
||||
self.assertEqual(new_desc, renamed["description"])
|
||||
|
||||
# get snapshot
|
||||
get = self.shares_client.get_snapshot(self.snap["id"])
|
||||
get = self.shares_client.get_snapshot(self.snap["id"])['snapshot']
|
||||
self.assertEqual(new_name, get["name"])
|
||||
self.assertEqual(new_desc, get["description"])
|
||||
|
@ -65,7 +65,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
"Quota tests are disabled.")
|
||||
def test_share_extend_over_quota(self):
|
||||
tenant_quotas = self.shares_client.show_quotas(
|
||||
self.shares_client.tenant_id)
|
||||
self.shares_client.tenant_id)['quota_set']
|
||||
new_size = int(tenant_quotas["gigabytes"]) + 1
|
||||
|
||||
# extend share with over quota and check result
|
||||
@ -183,7 +183,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
'export_location_' + export_location_type: 'fake',
|
||||
}
|
||||
shares = self.shares_v2_client.list_shares(
|
||||
params=filters, version="2.34")
|
||||
params=filters, version="2.34")['shares']
|
||||
|
||||
self.assertGreater(len(shares), 0)
|
||||
|
||||
@ -197,7 +197,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
'export_location_' + export_location_type: 'fake_not_exist',
|
||||
}
|
||||
shares = self.shares_v2_client.list_shares(
|
||||
params=filters)
|
||||
params=filters)['shares']
|
||||
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@ -213,7 +213,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
'description~': 'fake',
|
||||
}
|
||||
shares = self.shares_v2_client.list_shares(
|
||||
params=filters, version="2.35")
|
||||
params=filters, version="2.35")['shares']
|
||||
|
||||
self.assertGreater(len(shares), 0)
|
||||
|
||||
@ -225,7 +225,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
'name~': 'fake_not_exist',
|
||||
'description~': 'fake_not_exist',
|
||||
}
|
||||
shares = self.shares_v2_client.list_shares(params=filters)
|
||||
shares = self.shares_v2_client.list_shares(params=filters)['shares']
|
||||
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@ -235,7 +235,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
filters = {
|
||||
'name': "tempest-share",
|
||||
}
|
||||
shares = self.shares_v2_client.list_shares(params=filters)
|
||||
shares = self.shares_v2_client.list_shares(params=filters)['shares']
|
||||
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@ -246,7 +246,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
filters = {
|
||||
'description': "tempest-share",
|
||||
}
|
||||
shares = self.shares_v2_client.list_shares(params=filters)
|
||||
shares = self.shares_v2_client.list_shares(params=filters)['shares']
|
||||
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@ -258,7 +258,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
'description': "tempest-snapshot",
|
||||
}
|
||||
shares = self.shares_v2_client.list_snapshots_with_detail(
|
||||
params=filters)
|
||||
params=filters)['snapshots']
|
||||
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
@ -269,7 +269,7 @@ class SharesActionsNegativeTest(base.BaseSharesMixedTest):
|
||||
'name': "tempest-snapshot",
|
||||
}
|
||||
shares = self.shares_v2_client.list_snapshots_with_detail(
|
||||
params=filters)
|
||||
params=filters)['snapshots']
|
||||
|
||||
self.assertEqual(0, len(shares))
|
||||
|
||||
|
@ -104,7 +104,7 @@ class SharesFromSnapshotAcrossPools(base.BaseSharesMixedTest):
|
||||
|
||||
# Retrieving the share using admin client because the shares's host
|
||||
# field is necessary to do the assert
|
||||
share_get_a = self.admin_client.get_share(share_a["id"])
|
||||
share_get_a = self.admin_client.get_share(share_a["id"])['share']
|
||||
|
||||
# Create snapshot from source share
|
||||
snap = self.create_snapshot_wait_for_active(share_get_a["id"])
|
||||
@ -121,7 +121,7 @@ class SharesFromSnapshotAcrossPools(base.BaseSharesMixedTest):
|
||||
|
||||
# Retrieving the share using admin client because the shares's host
|
||||
# field is necessary to do the assert
|
||||
share_get_b = self.admin_client.get_share(share_b['id'])
|
||||
share_get_b = self.admin_client.get_share(share_b['id'])['share']
|
||||
|
||||
# Verify share created from snapshot
|
||||
msg = ("Expected snapshot_id %s as "
|
||||
|
@ -117,9 +117,9 @@ class SharesNegativeTest(base.BaseSharesMixedTest):
|
||||
cleanup_in_class=False)
|
||||
|
||||
# get parent's share network
|
||||
parent_share = self.shares_client.get_share(share["id"])
|
||||
parent_share = self.shares_client.get_share(share["id"])['share']
|
||||
parent_sn = self.shares_client.get_share_network(
|
||||
parent_share["share_network_id"])
|
||||
parent_share["share_network_id"])['share_network']
|
||||
|
||||
# create new share-network - net duplicate of parent's share
|
||||
new_duplicated_sn = self.create_share_network(
|
||||
|
@ -50,14 +50,15 @@ class BaseShareSnapshotRulesTest(base.BaseSharesMixedTest):
|
||||
def _test_create_delete_access_rules(self, access_to):
|
||||
# create rule
|
||||
rule = self.shares_v2_client.create_snapshot_access_rule(
|
||||
self.snapshot['id'], self.access_type, access_to)
|
||||
self.snapshot['id'], self.access_type,
|
||||
access_to)['snapshot_access']
|
||||
|
||||
for key in ('deleted', 'deleted_at', 'instance_mappings'):
|
||||
self.assertNotIn(key, list(six.iterkeys(rule)))
|
||||
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, self.snapshot['id'], 'active',
|
||||
resource_name='snapshot_access_rule', rule_id=rule['id'],
|
||||
resource_name='snapshot_access', rule_id=rule['id'],
|
||||
status_attr='state')
|
||||
|
||||
# delete rule and wait for deletion
|
||||
|
@ -94,11 +94,11 @@ class SnapshotIpRulesForNFSNegativeTest(
|
||||
|
||||
# create rule
|
||||
rule = self.shares_v2_client.create_snapshot_access_rule(
|
||||
self.snap['id'], access_type, access_to)
|
||||
self.snap['id'], access_type, access_to)['snapshot_access']
|
||||
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, self.snap['id'], 'active',
|
||||
resource_name='snapshot_access_rule', rule_id=rule['id'],
|
||||
resource_name='snapshot_access', rule_id=rule['id'],
|
||||
status_attr='state')
|
||||
|
||||
# try create duplicate of rule
|
||||
|
@ -198,7 +198,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
# NOTE(u_glide): Workaround for bug #1465682
|
||||
remote_client = remote_client.ssh_client
|
||||
|
||||
self.share = self.shares_client.get_share(self.share['id'])
|
||||
self.share = self.shares_client.get_share(self.share['id'])['share']
|
||||
return remote_client
|
||||
|
||||
def validate_ping_to_export_location(self, export, remote_client,
|
||||
@ -411,7 +411,8 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
self.__class__.__name__ + '-cephx-id')
|
||||
# Check if access is already granted to the client
|
||||
access_rules_matching_client = client.list_access_rules(
|
||||
share['id'], metadata={'metadata': {'access_to': access_to}})
|
||||
share['id'],
|
||||
metadata={'metadata': {'access_to': access_to}})['access_list']
|
||||
access_rule = (access_rules_matching_client[0] if
|
||||
access_rules_matching_client else None)
|
||||
|
||||
@ -426,7 +427,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
client.update_access_metadata(
|
||||
metadata={"access_to": "{}".format(access_to)},
|
||||
access_id=access_rule['id'])
|
||||
get_access = client.get_access_rule(access_rule['id'])
|
||||
get_access = client.get_access_rule(access_rule['id'])['access']
|
||||
# Set 'access_key' and 'access_to' attributes for being use in mount
|
||||
# operation.
|
||||
setattr(self, 'access_key', get_access['access_key'])
|
||||
@ -471,13 +472,13 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
locations = share['export_locations']
|
||||
else:
|
||||
exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'])
|
||||
share['id'])['export_locations']
|
||||
locations = [x['path'] for x in exports]
|
||||
return locations
|
||||
|
||||
def _get_snapshot_export_locations(self, snapshot):
|
||||
exports = (self.shares_v2_client.
|
||||
list_snapshot_export_locations(snapshot['id']))
|
||||
exports = (self.shares_v2_client.list_snapshot_export_locations(
|
||||
snapshot['id'])['share_snapshot_export_locations'])
|
||||
locations = [x['path'] for x in exports]
|
||||
|
||||
return locations
|
||||
@ -529,7 +530,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
'share_network_id': share_network_id,
|
||||
'share_type_id': share_type_id,
|
||||
}
|
||||
share = self.shares_client.create_share(**kwargs)
|
||||
share = self.shares_client.create_share(**kwargs)['share']
|
||||
|
||||
if cleanup:
|
||||
self.addCleanup(client.wait_for_resource_deletion,
|
||||
@ -543,7 +544,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
|
||||
def _create_snapshot(self, share_id, client=None, **kwargs):
|
||||
client = client or self.shares_v2_client
|
||||
snapshot = client.create_snapshot(share_id, **kwargs)
|
||||
snapshot = client.create_snapshot(share_id, **kwargs)['snapshot']
|
||||
self.addCleanup(
|
||||
client.wait_for_resource_deletion, snapshot_id=snapshot['id'])
|
||||
self.addCleanup(client.delete_snapshot, snapshot['id'])
|
||||
@ -559,7 +560,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
"""
|
||||
client = client or self.shares_admin_client
|
||||
servers = client.list_share_servers(
|
||||
search_opts={"share_network": sn_id})
|
||||
search_opts={"share_network": sn_id})['share_servers']
|
||||
for server in servers:
|
||||
client.delete_share_server(server['id'])
|
||||
for server in servers:
|
||||
@ -573,7 +574,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
"""
|
||||
|
||||
client = client or self.shares_client
|
||||
sn = client.create_share_network(**kwargs)
|
||||
sn = client.create_share_network(**kwargs)['share_network']
|
||||
|
||||
self.addCleanup(client.wait_for_resource_deletion,
|
||||
sn_id=sn['id'])
|
||||
@ -596,7 +597,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
"""
|
||||
client = client or self.shares_v2_client
|
||||
access = client.create_access_rule(share_id, access_type, access_to,
|
||||
access_level)
|
||||
access_level)['access']
|
||||
|
||||
share_waiters.wait_for_resource_status(
|
||||
client, share_id, "active", status_attr='access_rules_status')
|
||||
@ -618,7 +619,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
"""
|
||||
client = client or self.shares_v2_client
|
||||
access = client.create_snapshot_access_rule(
|
||||
snapshot_id, access_type, access_to)
|
||||
snapshot_id, access_type, access_to)['snapshot_access']
|
||||
|
||||
if cleanup:
|
||||
self.addCleanup(client.delete_snapshot_access_rule,
|
||||
@ -626,7 +627,7 @@ class ShareScenarioTest(manager.NetworkScenarioTest):
|
||||
|
||||
share_waiters.wait_for_resource_status(
|
||||
client, snapshot_id, 'active',
|
||||
resource_name='snapshot_access_rule', rule_id=access['id'],
|
||||
resource_name='snapshot_access', rule_id=access['id'],
|
||||
status_attr='state')
|
||||
|
||||
return access
|
||||
|
@ -167,7 +167,8 @@ class ShareBasicOpsBase(manager.ShareScenarioTest):
|
||||
self.create_share()
|
||||
export_location = self.get_user_export_locations(self.share)[0]
|
||||
instance = self.wait_for_active_instance(instance["id"])
|
||||
self.share = self.shares_admin_v2_client.get_share(self.share['id'])
|
||||
self.share = self.shares_admin_v2_client.get_share(
|
||||
self.share['id'])['share']
|
||||
|
||||
default_type = self.shares_v2_client.list_share_types(
|
||||
default=True)['share_type']
|
||||
|
@ -98,7 +98,7 @@ class ShareExtendBase(manager.ShareScenarioTest):
|
||||
new_size=extended_share_size)
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_v2_client, share["id"], constants.STATUS_AVAILABLE)
|
||||
share = self.shares_v2_client.get_share(share["id"])
|
||||
share = self.shares_v2_client.get_share(share["id"])['share']
|
||||
self.assertEqual(extended_share_size, int(share["size"]))
|
||||
|
||||
LOG.debug('Step 8 - writing more data, should succeed')
|
||||
|
@ -89,14 +89,14 @@ class ShareManageUnmanageBase(manager.ShareScenarioTest):
|
||||
locations = share['export_locations']
|
||||
else:
|
||||
exports = self.shares_v2_client.list_share_export_locations(
|
||||
share['id'])
|
||||
share['id'])['export_locations']
|
||||
locations = [x['path'] for x in exports]
|
||||
|
||||
LOG.debug('Step 5 - mount')
|
||||
self.mount_share(locations[0], remote_client)
|
||||
|
||||
# Update share info, needed later
|
||||
share = self.shares_admin_v2_client.get_share(share['id'])
|
||||
share = self.shares_admin_v2_client.get_share(share['id'])['share']
|
||||
|
||||
LOG.debug('Step 6a - create file')
|
||||
remote_client.exec_command("sudo touch /mnt/t1")
|
||||
@ -131,7 +131,7 @@ class ShareManageUnmanageBase(manager.ShareScenarioTest):
|
||||
share['host'],
|
||||
share['share_proto'],
|
||||
locations[0],
|
||||
share_type['id'])
|
||||
share_type['id'])['share']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_admin_v2_client, managed_share['id'], 'available')
|
||||
|
||||
@ -142,7 +142,7 @@ class ShareManageUnmanageBase(manager.ShareScenarioTest):
|
||||
client=self.shares_admin_v2_client)
|
||||
|
||||
exports = self.shares_admin_v2_client.list_share_export_locations(
|
||||
managed_share['id'])
|
||||
managed_share['id'])['export_locations']
|
||||
locations = [x['path'] for x in exports]
|
||||
|
||||
LOG.debug('Step 12 - mount')
|
||||
@ -165,7 +165,7 @@ class ShareManageUnmanageBase(manager.ShareScenarioTest):
|
||||
share['host'],
|
||||
share['share_proto'],
|
||||
locations[0],
|
||||
share_type['id'])
|
||||
share_type['id'])['share']
|
||||
waiters.wait_for_resource_status(
|
||||
self.shares_admin_v2_client, remanaged_share['id'], 'manage_error')
|
||||
|
||||
|
@ -91,11 +91,12 @@ class ShareShrinkBase(manager.ShareScenarioTest):
|
||||
self.shares_v2_client, share['id'],
|
||||
['shrinking_possible_data_loss_error', 'available'])
|
||||
|
||||
share = self.shares_v2_client.get_share(share["id"])
|
||||
share = self.shares_v2_client.get_share(share["id"])['share']
|
||||
|
||||
if share["status"] == constants.STATUS_AVAILABLE:
|
||||
params = {'resource_id': share['id']}
|
||||
messages = self.shares_v2_client.list_messages(params=params)
|
||||
messages = self.shares_v2_client.list_messages(
|
||||
params=params)['messages']
|
||||
self.assertIn('009',
|
||||
[message['action_id'] for message in messages])
|
||||
self.assertEqual(share_size, int(share["size"]))
|
||||
@ -113,7 +114,7 @@ class ShareShrinkBase(manager.ShareScenarioTest):
|
||||
self.share_shrink_retry_until_success(share["id"],
|
||||
new_size=default_share_size)
|
||||
|
||||
share = self.shares_v2_client.get_share(share["id"])
|
||||
share = self.shares_v2_client.get_share(share["id"])['share']
|
||||
self.assertEqual(default_share_size, int(share["size"]))
|
||||
|
||||
LOG.debug('Step 11 - write more data than allocated, should fail')
|
||||
@ -130,7 +131,7 @@ class ShareShrinkBase(manager.ShareScenarioTest):
|
||||
"""Try share reset, followed by shrink, until timeout"""
|
||||
|
||||
check_interval = CONF.share.build_interval * 2
|
||||
share = self.shares_v2_client.get_share(share_id)
|
||||
share = self.shares_v2_client.get_share(share_id)['share']
|
||||
share_current_size = share["size"]
|
||||
share_status = share[status_attr]
|
||||
start = int(time.time())
|
||||
@ -149,7 +150,7 @@ class ShareShrinkBase(manager.ShareScenarioTest):
|
||||
break
|
||||
|
||||
time.sleep(check_interval)
|
||||
share = self.shares_v2_client.get_share(share_id)
|
||||
share = self.shares_v2_client.get_share(share_id)['share']
|
||||
share_status = share[status_attr]
|
||||
share_current_size = share["size"]
|
||||
if share_current_size == new_size:
|
||||
|
Loading…
x
Reference in New Issue
Block a user