NetApp cDOT APIs may get too little data
There are a few API calls in the NetApp cDOT driver where the default value of 20 records in iterator queries isn't overridden and is potentially too low in some deployments. This commit resolves the issue by adding a generic getter API pagination wrapper and using that for all appropriate API calls. Change-Id: Ia05ac6be2f84bb0db3adf458fb399187be0b2635 Closes-Bug: #1500255
This commit is contained in:
parent
f11558ff16
commit
9c42513edb
|
@ -35,6 +35,7 @@ LOG = log.getLogger(__name__)
|
||||||
DELETED_PREFIX = 'deleted_manila_'
|
DELETED_PREFIX = 'deleted_manila_'
|
||||||
DEFAULT_IPSPACE = 'Default'
|
DEFAULT_IPSPACE = 'Default'
|
||||||
DEFAULT_BROADCAST_DOMAIN = 'OpenStack'
|
DEFAULT_BROADCAST_DOMAIN = 'OpenStack'
|
||||||
|
DEFAULT_MAX_PAGE_LENGTH = 50
|
||||||
|
|
||||||
|
|
||||||
class NetAppCmodeClient(client_base.NetAppBaseClient):
|
class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
|
@ -78,10 +79,61 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def _get_record_count(self, api_result_element):
|
||||||
|
try:
|
||||||
|
return int(api_result_element.get_child_content('num-records'))
|
||||||
|
except TypeError:
|
||||||
|
msg = _('Missing record count for NetApp iterator API invocation.')
|
||||||
|
raise exception.NetAppException(msg)
|
||||||
|
|
||||||
def set_vserver(self, vserver):
|
def set_vserver(self, vserver):
|
||||||
self.vserver = vserver
|
self.vserver = vserver
|
||||||
self.connection.set_vserver(vserver)
|
self.connection.set_vserver(vserver)
|
||||||
|
|
||||||
|
def send_iter_request(self, api_name, api_args=None,
|
||||||
|
max_page_length=DEFAULT_MAX_PAGE_LENGTH):
|
||||||
|
"""Invoke an iterator-style getter API."""
|
||||||
|
|
||||||
|
if not api_args:
|
||||||
|
api_args = {}
|
||||||
|
|
||||||
|
api_args['max-records'] = max_page_length
|
||||||
|
|
||||||
|
# Get first page
|
||||||
|
result = self.send_request(api_name, api_args)
|
||||||
|
|
||||||
|
# Most commonly, we can just return here if there is no more data
|
||||||
|
next_tag = result.get_child_content('next-tag')
|
||||||
|
if not next_tag:
|
||||||
|
return result
|
||||||
|
|
||||||
|
# Ensure pagination data is valid and prepare to store remaining pages
|
||||||
|
num_records = self._get_record_count(result)
|
||||||
|
attributes_list = result.get_child_by_name('attributes-list')
|
||||||
|
if not attributes_list:
|
||||||
|
msg = _('Missing attributes list for API %s.') % api_name
|
||||||
|
raise exception.NetAppException(msg)
|
||||||
|
|
||||||
|
# Get remaining pages, saving data into first page
|
||||||
|
while next_tag is not None:
|
||||||
|
next_api_args = copy.deepcopy(api_args)
|
||||||
|
next_api_args['tag'] = next_tag
|
||||||
|
next_result = self.send_request(api_name, next_api_args)
|
||||||
|
|
||||||
|
next_attributes_list = next_result.get_child_by_name(
|
||||||
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
|
||||||
|
for record in next_attributes_list.get_children():
|
||||||
|
attributes_list.add_child_elem(record)
|
||||||
|
|
||||||
|
num_records += self._get_record_count(next_result)
|
||||||
|
next_tag = next_result.get_child_content('next-tag')
|
||||||
|
|
||||||
|
result.get_child_by_name('num-records').set_content(
|
||||||
|
six.text_type(num_records))
|
||||||
|
result.get_child_by_name('next-tag').set_content('')
|
||||||
|
return result
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
def create_vserver(self, vserver_name, root_volume_aggregate_name,
|
def create_vserver(self, vserver_name, root_volume_aggregate_name,
|
||||||
root_volume_name, aggregate_names, ipspace_name):
|
root_volume_name, aggregate_names, ipspace_name):
|
||||||
|
@ -129,7 +181,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('vserver-get-iter', api_args)
|
result = self.send_iter_request('vserver-get-iter', api_args)
|
||||||
return self._has_records(result)
|
return self._has_records(result)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
|
@ -147,7 +199,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
vserver_info = self.send_request('vserver-get-iter', api_args)
|
vserver_info = self.send_iter_request('vserver-get-iter', api_args)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
root_volume_name = vserver_info.get_child_by_name(
|
root_volume_name = vserver_info.get_child_by_name(
|
||||||
|
@ -177,7 +229,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
vserver_info = self.send_request('vserver-get-iter', api_args)
|
vserver_info = self.send_iter_request('vserver-get-iter', api_args)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ipspace = vserver_info.get_child_by_name(
|
ipspace = vserver_info.get_child_by_name(
|
||||||
|
@ -207,7 +259,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('vserver-get-iter', api_args)
|
result = self.send_iter_request('vserver-get-iter', api_args)
|
||||||
return self._has_records(result)
|
return self._has_records(result)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
|
@ -229,21 +281,20 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
if query:
|
if query:
|
||||||
api_args['query'] = query
|
api_args['query'] = query
|
||||||
|
|
||||||
result = self.send_request('vserver-get-iter', api_args)
|
result = self.send_iter_request('vserver-get-iter', api_args)
|
||||||
vserver_info_list = result.get_child_by_name(
|
vserver_info_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
return [vserver_info.get_child_content('vserver-name')
|
return [vserver_info.get_child_content('vserver-name')
|
||||||
for vserver_info in vserver_info_list.get_children()]
|
for vserver_info in vserver_info_list.get_children()]
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
def get_vserver_volume_count(self, max_records=20):
|
def get_vserver_volume_count(self):
|
||||||
"""Get the number of volumes present on a cluster or vserver.
|
"""Get the number of volumes present on a cluster or vserver.
|
||||||
|
|
||||||
Call this on a vserver client to see how many volumes exist
|
Call this on a vserver client to see how many volumes exist
|
||||||
on that vserver.
|
on that vserver.
|
||||||
"""
|
"""
|
||||||
api_args = {
|
api_args = {
|
||||||
'max-records': max_records,
|
|
||||||
'desired-attributes': {
|
'desired-attributes': {
|
||||||
'volume-attributes': {
|
'volume-attributes': {
|
||||||
'volume-id-attributes': {
|
'volume-id-attributes': {
|
||||||
|
@ -252,8 +303,8 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
volumes_data = self.send_request('volume-get-iter', api_args)
|
volumes_data = self.send_iter_request('volume-get-iter', api_args)
|
||||||
return int(volumes_data.get_child_content('num-records'))
|
return self._get_record_count(volumes_data)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
def delete_vserver(self, vserver_name, vserver_client,
|
def delete_vserver(self, vserver_name, vserver_client,
|
||||||
|
@ -268,7 +319,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
return
|
return
|
||||||
|
|
||||||
root_volume_name = self.get_vserver_root_volume_name(vserver_name)
|
root_volume_name = self.get_vserver_root_volume_name(vserver_name)
|
||||||
volumes_count = vserver_client.get_vserver_volume_count(max_records=2)
|
volumes_count = vserver_client.get_vserver_volume_count()
|
||||||
|
|
||||||
if volumes_count == 1:
|
if volumes_count == 1:
|
||||||
try:
|
try:
|
||||||
|
@ -319,7 +370,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('system-node-get-iter', api_args)
|
result = self.send_iter_request('system-node-get-iter', api_args)
|
||||||
nodes_info_list = result.get_child_by_name(
|
nodes_info_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
return [node_info.get_child_content('node') for node_info
|
return [node_info.get_child_content('node') for node_info
|
||||||
|
@ -351,7 +402,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('net-port-get-iter', api_args)
|
result = self.send_iter_request('net-port-get-iter', api_args)
|
||||||
net_port_info_list = result.get_child_by_name(
|
net_port_info_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
|
||||||
|
@ -400,7 +451,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('aggr-get-iter', api_args)
|
result = self.send_iter_request('aggr-get-iter', api_args)
|
||||||
aggr_list = result.get_child_by_name(
|
aggr_list = result.get_child_by_name(
|
||||||
'attributes-list').get_children()
|
'attributes-list').get_children()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
|
@ -522,7 +573,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('net-port-get-iter', api_args)
|
result = self.send_iter_request('net-port-get-iter', api_args)
|
||||||
|
|
||||||
net_port_info_list = result.get_child_by_name(
|
net_port_info_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
@ -553,8 +604,8 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
'net-port-broadcast-domain-info': None,
|
'net-port-broadcast-domain-info': None,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('net-port-broadcast-domain-get-iter',
|
result = self.send_iter_request('net-port-broadcast-domain-get-iter',
|
||||||
api_args)
|
api_args)
|
||||||
return self._has_records(result)
|
return self._has_records(result)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
|
@ -651,7 +702,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('net-interface-get-iter', api_args)
|
result = self.send_iter_request('net-interface-get-iter', api_args)
|
||||||
return self._has_records(result)
|
return self._has_records(result)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
|
@ -664,7 +715,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('net-interface-get-iter', api_args)
|
result = self.send_iter_request('net-interface-get-iter', api_args)
|
||||||
lif_info_list = result.get_child_by_name(
|
lif_info_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
return [lif_info.get_child_content('interface-name') for lif_info
|
return [lif_info.get_child_content('interface-name') for lif_info
|
||||||
|
@ -686,7 +737,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
}
|
}
|
||||||
} if protocols else None
|
} if protocols else None
|
||||||
|
|
||||||
result = self.send_request('net-interface-get-iter', api_args)
|
result = self.send_iter_request('net-interface-get-iter', api_args)
|
||||||
lif_info_list = result.get_child_by_name(
|
lif_info_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
|
||||||
|
@ -712,13 +763,13 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
self.send_request('net-interface-delete', api_args)
|
self.send_request('net-interface-delete', api_args)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
def get_ipspaces(self, ipspace_name=None, max_records=1000):
|
def get_ipspaces(self, ipspace_name=None):
|
||||||
"""Gets one or more IPSpaces."""
|
"""Gets one or more IPSpaces."""
|
||||||
|
|
||||||
if not self.features.IPSPACES:
|
if not self.features.IPSPACES:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
api_args = {'max-records': max_records}
|
api_args = {}
|
||||||
if ipspace_name:
|
if ipspace_name:
|
||||||
api_args['query'] = {
|
api_args['query'] = {
|
||||||
'net-ipspaces-info': {
|
'net-ipspaces-info': {
|
||||||
|
@ -726,7 +777,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = self.send_request('net-ipspaces-get-iter', api_args)
|
result = self.send_iter_request('net-ipspaces-get-iter', api_args)
|
||||||
if not self._has_records(result):
|
if not self._has_records(result):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -784,7 +835,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('net-ipspaces-get-iter', api_args)
|
result = self.send_iter_request('net-ipspaces-get-iter', api_args)
|
||||||
return self._has_records(result)
|
return self._has_records(result)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
|
@ -952,7 +1003,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
if desired_attributes:
|
if desired_attributes:
|
||||||
api_args['desired-attributes'] = desired_attributes
|
api_args['desired-attributes'] = desired_attributes
|
||||||
|
|
||||||
result = self.send_request('aggr-get-iter', api_args)
|
result = self.send_iter_request('aggr-get-iter', api_args)
|
||||||
if not self._has_records(result):
|
if not self._has_records(result):
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
|
@ -1207,7 +1258,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('sis-get-iter', api_args)
|
result = self.send_iter_request('sis-get-iter', api_args)
|
||||||
|
|
||||||
attributes_list = result.get_child_by_name(
|
attributes_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
@ -1365,7 +1416,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('volume-get-iter', api_args)
|
result = self.send_iter_request('volume-get-iter', api_args)
|
||||||
return self._has_records(result)
|
return self._has_records(result)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
|
@ -1389,7 +1440,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('volume-get-iter', api_args)
|
result = self.send_iter_request('volume-get-iter', api_args)
|
||||||
|
|
||||||
attributes_list = result.get_child_by_name(
|
attributes_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
@ -1424,7 +1475,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('lun-get-iter', api_args)
|
result = self.send_iter_request('lun-get-iter', api_args)
|
||||||
return self._has_records(result)
|
return self._has_records(result)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
|
@ -1450,7 +1501,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('volume-get-iter', api_args)
|
result = self.send_iter_request('volume-get-iter', api_args)
|
||||||
return self._has_records(result)
|
return self._has_records(result)
|
||||||
|
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
|
@ -1482,7 +1533,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('volume-get-iter', api_args)
|
result = self.send_iter_request('volume-get-iter', api_args)
|
||||||
if not self._has_records(result):
|
if not self._has_records(result):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -1535,7 +1586,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('volume-get-iter', api_args)
|
result = self.send_iter_request('volume-get-iter', api_args)
|
||||||
if not self._has_records(result):
|
if not self._has_records(result):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -1784,7 +1835,6 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
@na_utils.trace
|
@na_utils.trace
|
||||||
def get_cifs_share_access(self, share_name):
|
def get_cifs_share_access(self, share_name):
|
||||||
api_args = {
|
api_args = {
|
||||||
'max-records': 1000,
|
|
||||||
'query': {
|
'query': {
|
||||||
'cifs-share-access-control': {
|
'cifs-share-access-control': {
|
||||||
'share': share_name,
|
'share': share_name,
|
||||||
|
@ -1797,8 +1847,8 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('cifs-share-access-control-get-iter',
|
result = self.send_iter_request('cifs-share-access-control-get-iter',
|
||||||
api_args)
|
api_args)
|
||||||
|
|
||||||
attributes_list = result.get_child_by_name(
|
attributes_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
@ -1905,7 +1955,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('export-rule-get-iter', api_args)
|
result = self.send_iter_request('export-rule-get-iter', api_args)
|
||||||
|
|
||||||
attributes_list = result.get_child_by_name(
|
attributes_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
@ -1979,7 +2029,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('volume-get-iter', api_args)
|
result = self.send_iter_request('volume-get-iter', api_args)
|
||||||
|
|
||||||
attributes_list = result.get_child_by_name(
|
attributes_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
@ -2060,7 +2110,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
result = self.send_request('export-policy-get-iter', api_args)
|
result = self.send_iter_request('export-policy-get-iter', api_args)
|
||||||
|
|
||||||
attributes_list = result.get_child_by_name(
|
attributes_list = result.get_child_by_name(
|
||||||
'attributes-list') or netapp_api.NaElement('none')
|
'attributes-list') or netapp_api.NaElement('none')
|
||||||
|
@ -2219,7 +2269,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
def get_cluster_peers(self, remote_cluster_name=None):
|
def get_cluster_peers(self, remote_cluster_name=None):
|
||||||
"""Gets one or more cluster peer relationships."""
|
"""Gets one or more cluster peer relationships."""
|
||||||
|
|
||||||
api_args = {'max-records': 1000}
|
api_args = {}
|
||||||
if remote_cluster_name:
|
if remote_cluster_name:
|
||||||
api_args['query'] = {
|
api_args['query'] = {
|
||||||
'cluster-peer-info': {
|
'cluster-peer-info': {
|
||||||
|
@ -2227,7 +2277,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = self.send_request('cluster-peer-get-iter', api_args)
|
result = self.send_iter_request('cluster-peer-get-iter', api_args)
|
||||||
if not self._has_records(result):
|
if not self._has_records(result):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -2370,9 +2420,8 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
if peer_vserver_name:
|
if peer_vserver_name:
|
||||||
api_args['query']['vserver-peer-info']['peer-vserver'] = (
|
api_args['query']['vserver-peer-info']['peer-vserver'] = (
|
||||||
peer_vserver_name)
|
peer_vserver_name)
|
||||||
api_args['max-records'] = 1000
|
|
||||||
|
|
||||||
result = self.send_request('vserver-peer-get-iter', api_args)
|
result = self.send_iter_request('vserver-peer-get-iter', api_args)
|
||||||
if not self._has_records(result):
|
if not self._has_records(result):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
@ -2647,7 +2696,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||||
if desired_attributes:
|
if desired_attributes:
|
||||||
api_args['desired-attributes'] = desired_attributes
|
api_args['desired-attributes'] = desired_attributes
|
||||||
|
|
||||||
result = self.send_request('snapmirror-get-iter', api_args)
|
result = self.send_iter_request('snapmirror-get-iter', api_args)
|
||||||
if not self._has_records(result):
|
if not self._has_records(result):
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -112,6 +112,20 @@ PASSED_RESPONSE = etree.XML("""
|
||||||
<results status="passed" />
|
<results status="passed" />
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
INVALID_GET_ITER_RESPONSE_NO_ATTRIBUTES = etree.XML("""
|
||||||
|
<results status="passed">
|
||||||
|
<num-records>1</num-records>
|
||||||
|
<next-tag>fake_tag</next-tag>
|
||||||
|
</results>
|
||||||
|
""")
|
||||||
|
|
||||||
|
INVALID_GET_ITER_RESPONSE_NO_RECORDS = etree.XML("""
|
||||||
|
<results status="passed">
|
||||||
|
<attributes-list/>
|
||||||
|
<next-tag>fake_tag</next-tag>
|
||||||
|
</results>
|
||||||
|
""")
|
||||||
|
|
||||||
VSERVER_GET_ITER_RESPONSE = etree.XML("""
|
VSERVER_GET_ITER_RESPONSE = etree.XML("""
|
||||||
<results status="passed">
|
<results status="passed">
|
||||||
<attributes-list>
|
<attributes-list>
|
||||||
|
@ -1440,6 +1454,116 @@ STORAGE_DISK_GET_ITER_RESPONSE = etree.XML("""
|
||||||
</results>
|
</results>
|
||||||
""" % SHARE_AGGREGATE_DISK_TYPE)
|
""" % SHARE_AGGREGATE_DISK_TYPE)
|
||||||
|
|
||||||
|
STORAGE_DISK_GET_ITER_RESPONSE_PAGE_1 = etree.XML("""
|
||||||
|
<results status="passed">
|
||||||
|
<attributes-list>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.16</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.17</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.18</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.19</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.20</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.21</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.22</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.24</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.25</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.26</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
</attributes-list>
|
||||||
|
<next-tag>next_tag_1</next-tag>
|
||||||
|
<num-records>10</num-records>
|
||||||
|
</results>
|
||||||
|
""")
|
||||||
|
|
||||||
|
STORAGE_DISK_GET_ITER_RESPONSE_PAGE_2 = etree.XML("""
|
||||||
|
<results status="passed">
|
||||||
|
<attributes-list>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.27</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.28</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.29</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v4.32</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.16</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.17</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.18</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.19</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.20</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.21</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
</attributes-list>
|
||||||
|
<next-tag>next_tag_2</next-tag>
|
||||||
|
<num-records>10</num-records>
|
||||||
|
</results>
|
||||||
|
""")
|
||||||
|
|
||||||
|
STORAGE_DISK_GET_ITER_RESPONSE_PAGE_3 = etree.XML("""
|
||||||
|
<results status="passed">
|
||||||
|
<attributes-list>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.22</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.24</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.25</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.26</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.27</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.28</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.29</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
<storage-disk-info>
|
||||||
|
<disk-name>cluster3-01:v5.32</disk-name>
|
||||||
|
</storage-disk-info>
|
||||||
|
</attributes-list>
|
||||||
|
<num-records>8</num-records>
|
||||||
|
</results>
|
||||||
|
""")
|
||||||
|
|
||||||
GET_AGGREGATE_FOR_VOLUME_RESPONSE = etree.XML("""
|
GET_AGGREGATE_FOR_VOLUME_RESPONSE = etree.XML("""
|
||||||
<results status="passed">
|
<results status="passed">
|
||||||
<attributes-list>
|
<attributes-list>
|
||||||
|
|
|
@ -106,6 +106,128 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
self.assertFalse(self.client._has_records(
|
self.assertFalse(self.client._has_records(
|
||||||
netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)))
|
netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)))
|
||||||
|
|
||||||
|
@ddt.data((fake.VSERVER_GET_ITER_RESPONSE, 1),
|
||||||
|
(fake.NO_RECORDS_RESPONSE, 0))
|
||||||
|
@ddt.unpack
|
||||||
|
def test_get_record_count(self, response, expected):
|
||||||
|
|
||||||
|
api_response = netapp_api.NaElement(response)
|
||||||
|
|
||||||
|
result = self.client._get_record_count(api_response)
|
||||||
|
|
||||||
|
self.assertEqual(expected, result)
|
||||||
|
|
||||||
|
def test_get_records_count_invalid(self):
|
||||||
|
|
||||||
|
api_response = netapp_api.NaElement(
|
||||||
|
fake.INVALID_GET_ITER_RESPONSE_NO_RECORDS)
|
||||||
|
|
||||||
|
self.assertRaises(exception.NetAppException,
|
||||||
|
self.client._get_record_count,
|
||||||
|
api_response)
|
||||||
|
|
||||||
|
def test_send_iter_request(self):
|
||||||
|
|
||||||
|
api_responses = [
|
||||||
|
netapp_api.NaElement(fake.STORAGE_DISK_GET_ITER_RESPONSE_PAGE_1),
|
||||||
|
netapp_api.NaElement(fake.STORAGE_DISK_GET_ITER_RESPONSE_PAGE_2),
|
||||||
|
netapp_api.NaElement(fake.STORAGE_DISK_GET_ITER_RESPONSE_PAGE_3),
|
||||||
|
]
|
||||||
|
mock_send_request = self.mock_object(
|
||||||
|
self.client, 'send_request',
|
||||||
|
mock.Mock(side_effect=api_responses))
|
||||||
|
|
||||||
|
storage_disk_get_iter_args = {
|
||||||
|
'desired-attributes': {
|
||||||
|
'storage-disk-info': {
|
||||||
|
'disk-name': None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = self.client.send_iter_request(
|
||||||
|
'storage-disk-get-iter', api_args=storage_disk_get_iter_args,
|
||||||
|
max_page_length=10)
|
||||||
|
|
||||||
|
num_records = result.get_child_content('num-records')
|
||||||
|
self.assertEqual('28', num_records)
|
||||||
|
next_tag = result.get_child_content('next-tag')
|
||||||
|
self.assertEqual('', next_tag)
|
||||||
|
|
||||||
|
args1 = copy.deepcopy(storage_disk_get_iter_args)
|
||||||
|
args1['max-records'] = 10
|
||||||
|
args2 = copy.deepcopy(storage_disk_get_iter_args)
|
||||||
|
args2['max-records'] = 10
|
||||||
|
args2['tag'] = 'next_tag_1'
|
||||||
|
args3 = copy.deepcopy(storage_disk_get_iter_args)
|
||||||
|
args3['max-records'] = 10
|
||||||
|
args3['tag'] = 'next_tag_2'
|
||||||
|
|
||||||
|
mock_send_request.assert_has_calls([
|
||||||
|
mock.call('storage-disk-get-iter', args1),
|
||||||
|
mock.call('storage-disk-get-iter', args2),
|
||||||
|
mock.call('storage-disk-get-iter', args3),
|
||||||
|
])
|
||||||
|
|
||||||
|
def test_send_iter_request_single_page(self):
|
||||||
|
|
||||||
|
api_response = netapp_api.NaElement(
|
||||||
|
fake.STORAGE_DISK_GET_ITER_RESPONSE)
|
||||||
|
mock_send_request = self.mock_object(
|
||||||
|
self.client, 'send_request',
|
||||||
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
|
storage_disk_get_iter_args = {
|
||||||
|
'desired-attributes': {
|
||||||
|
'storage-disk-info': {
|
||||||
|
'disk-name': None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result = self.client.send_iter_request(
|
||||||
|
'storage-disk-get-iter', api_args=storage_disk_get_iter_args,
|
||||||
|
max_page_length=10)
|
||||||
|
|
||||||
|
num_records = result.get_child_content('num-records')
|
||||||
|
self.assertEqual('1', num_records)
|
||||||
|
|
||||||
|
args = copy.deepcopy(storage_disk_get_iter_args)
|
||||||
|
args['max-records'] = 10
|
||||||
|
|
||||||
|
mock_send_request.assert_has_calls([
|
||||||
|
mock.call('storage-disk-get-iter', args),
|
||||||
|
])
|
||||||
|
|
||||||
|
def test_send_iter_request_not_found(self):
|
||||||
|
|
||||||
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
|
mock_send_request = self.mock_object(
|
||||||
|
self.client, 'send_request',
|
||||||
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
|
result = self.client.send_iter_request('storage-disk-get-iter')
|
||||||
|
|
||||||
|
num_records = result.get_child_content('num-records')
|
||||||
|
self.assertEqual('0', num_records)
|
||||||
|
|
||||||
|
args = {'max-records': client_cmode.DEFAULT_MAX_PAGE_LENGTH}
|
||||||
|
|
||||||
|
mock_send_request.assert_has_calls([
|
||||||
|
mock.call('storage-disk-get-iter', args),
|
||||||
|
])
|
||||||
|
|
||||||
|
@ddt.data(fake.INVALID_GET_ITER_RESPONSE_NO_ATTRIBUTES,
|
||||||
|
fake.INVALID_GET_ITER_RESPONSE_NO_RECORDS)
|
||||||
|
def test_send_iter_request_invalid(self, fake_response):
|
||||||
|
|
||||||
|
api_response = netapp_api.NaElement(fake_response)
|
||||||
|
self.mock_object(self.client,
|
||||||
|
'send_request',
|
||||||
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
|
self.assertRaises(exception.NetAppException,
|
||||||
|
self.client.send_iter_request,
|
||||||
|
'storage-disk-get-iter')
|
||||||
|
|
||||||
def test_set_vserver(self):
|
def test_set_vserver(self):
|
||||||
self.client.set_vserver(fake.VSERVER_NAME)
|
self.client.set_vserver(fake.VSERVER_NAME)
|
||||||
self.client.connection.set_vserver.assert_has_calls(
|
self.client.connection.set_vserver.assert_has_calls(
|
||||||
|
@ -115,7 +237,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.VSERVER_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.VSERVER_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
vserver_get_args = {
|
vserver_get_args = {
|
||||||
|
@ -125,7 +247,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
result = self.client.vserver_exists(fake.VSERVER_NAME)
|
result = self.client.vserver_exists(fake.VSERVER_NAME)
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('vserver-get-iter', vserver_get_args)])
|
mock.call('vserver-get-iter', vserver_get_args)])
|
||||||
self.assertTrue(result)
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
@ -211,7 +333,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VSERVER_GET_ROOT_VOLUME_NAME_RESPONSE)
|
fake.VSERVER_GET_ROOT_VOLUME_NAME_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
vserver_get_args = {
|
vserver_get_args = {
|
||||||
|
@ -221,7 +343,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
result = self.client.get_vserver_root_volume_name(fake.VSERVER_NAME)
|
result = self.client.get_vserver_root_volume_name(fake.VSERVER_NAME)
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('vserver-get-iter', vserver_get_args)])
|
mock.call('vserver-get-iter', vserver_get_args)])
|
||||||
self.assertEqual(fake.ROOT_VOLUME_NAME, result)
|
self.assertEqual(fake.ROOT_VOLUME_NAME, result)
|
||||||
|
|
||||||
|
@ -229,7 +351,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
self.assertRaises(exception.NetAppException,
|
self.assertRaises(exception.NetAppException,
|
||||||
|
@ -242,7 +364,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VSERVER_GET_IPSPACE_NAME_RESPONSE)
|
fake.VSERVER_GET_IPSPACE_NAME_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_vserver_ipspace(fake.VSERVER_NAME)
|
result = self.client.get_vserver_ipspace(fake.VSERVER_NAME)
|
||||||
|
@ -259,7 +381,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('vserver-get-iter', vserver_get_iter_args)])
|
mock.call('vserver-get-iter', vserver_get_iter_args)])
|
||||||
self.assertEqual(fake.IPSPACE_NAME, result)
|
self.assertEqual(fake.IPSPACE_NAME, result)
|
||||||
|
|
||||||
|
@ -274,7 +396,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
self.client.features.add_feature('IPSPACES')
|
self.client.features.add_feature('IPSPACES')
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
self.assertRaises(exception.NetAppException,
|
self.assertRaises(exception.NetAppException,
|
||||||
|
@ -286,7 +408,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
self.client.features.add_feature('IPSPACES')
|
self.client.features.add_feature('IPSPACES')
|
||||||
api_response = netapp_api.NaElement(fake.VSERVER_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.VSERVER_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.ipspace_has_data_vservers(fake.IPSPACE_NAME)
|
result = self.client.ipspace_has_data_vservers(fake.IPSPACE_NAME)
|
||||||
|
@ -304,7 +426,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('vserver-get-iter', vserver_get_iter_args)])
|
mock.call('vserver-get-iter', vserver_get_iter_args)])
|
||||||
self.assertTrue(result)
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
@ -331,7 +453,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VSERVER_DATA_LIST_RESPONSE)
|
fake.VSERVER_DATA_LIST_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.list_vservers()
|
result = self.client.list_vservers()
|
||||||
|
@ -348,7 +470,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('vserver-get-iter', vserver_get_iter_args)])
|
mock.call('vserver-get-iter', vserver_get_iter_args)])
|
||||||
self.assertListEqual([fake.VSERVER_NAME], result)
|
self.assertListEqual([fake.VSERVER_NAME], result)
|
||||||
|
|
||||||
|
@ -357,7 +479,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VSERVER_DATA_LIST_RESPONSE)
|
fake.VSERVER_DATA_LIST_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.list_vservers(vserver_type='node')
|
result = self.client.list_vservers(vserver_type='node')
|
||||||
|
@ -374,7 +496,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('vserver-get-iter', vserver_get_iter_args)])
|
mock.call('vserver-get-iter', vserver_get_iter_args)])
|
||||||
self.assertListEqual([fake.VSERVER_NAME], result)
|
self.assertListEqual([fake.VSERVER_NAME], result)
|
||||||
|
|
||||||
|
@ -394,7 +516,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.VOLUME_COUNT_RESPONSE)
|
api_response = netapp_api.NaElement(fake.VOLUME_COUNT_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_vserver_volume_count()
|
result = self.client.get_vserver_volume_count()
|
||||||
|
@ -409,7 +531,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'get_vserver_root_volume_name',
|
'get_vserver_root_volume_name',
|
||||||
mock.Mock(return_value=fake.ROOT_VOLUME_NAME))
|
mock.Mock(return_value=fake.ROOT_VOLUME_NAME))
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.vserver_client,
|
||||||
'get_vserver_volume_count',
|
'get_vserver_volume_count',
|
||||||
mock.Mock(return_value=0))
|
mock.Mock(return_value=0))
|
||||||
self.mock_object(self.client, '_terminate_vserver_services')
|
self.mock_object(self.client, '_terminate_vserver_services')
|
||||||
|
@ -627,7 +749,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NET_PORT_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NET_PORT_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_node_data_ports(fake.NODE_NAME)
|
result = self.client.get_node_data_ports(fake.NODE_NAME)
|
||||||
|
@ -652,14 +774,14 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
}
|
}
|
||||||
|
|
||||||
self.assertSequenceEqual(fake.SPEED_SORTED_PORTS, result)
|
self.assertSequenceEqual(fake.SPEED_SORTED_PORTS, result)
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-port-get-iter', net_port_get_iter_args)])
|
mock.call('net-port-get-iter', net_port_get_iter_args)])
|
||||||
|
|
||||||
def test_get_node_data_ports_not_found(self):
|
def test_get_node_data_ports_not_found(self):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_node_data_ports(fake.NODE_NAME)
|
result = self.client.get_node_data_ports(fake.NODE_NAME)
|
||||||
|
@ -903,7 +1025,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NET_PORT_GET_ITER_BROADCAST_DOMAIN_RESPONSE)
|
fake.NET_PORT_GET_ITER_BROADCAST_DOMAIN_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
net_port_get_iter_args = {
|
net_port_get_iter_args = {
|
||||||
|
@ -927,7 +1049,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
'broadcast-domain': fake.BROADCAST_DOMAIN,
|
'broadcast-domain': fake.BROADCAST_DOMAIN,
|
||||||
'ipspace': fake.IPSPACE_NAME,
|
'ipspace': fake.IPSPACE_NAME,
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-port-get-iter', net_port_get_iter_args)])
|
mock.call('net-port-get-iter', net_port_get_iter_args)])
|
||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
|
||||||
|
@ -936,7 +1058,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NO_RECORDS_RESPONSE)
|
fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
self.assertRaises(exception.NetAppException,
|
self.assertRaises(exception.NetAppException,
|
||||||
|
@ -949,7 +1071,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NET_PORT_GET_ITER_BROADCAST_DOMAIN_MISSING_RESPONSE)
|
fake.NET_PORT_GET_ITER_BROADCAST_DOMAIN_MISSING_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client._get_broadcast_domain_for_port(fake.NODE_NAME,
|
result = self.client._get_broadcast_domain_for_port(fake.NODE_NAME,
|
||||||
|
@ -966,7 +1088,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NET_PORT_BROADCAST_DOMAIN_GET_ITER_RESPONSE)
|
fake.NET_PORT_BROADCAST_DOMAIN_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client._broadcast_domain_exists(fake.BROADCAST_DOMAIN,
|
result = self.client._broadcast_domain_exists(fake.BROADCAST_DOMAIN,
|
||||||
|
@ -983,7 +1105,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
'net-port-broadcast-domain-info': None,
|
'net-port-broadcast-domain-info': None,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-port-broadcast-domain-get-iter',
|
mock.call('net-port-broadcast-domain-get-iter',
|
||||||
net_port_broadcast_domain_get_iter_args)])
|
net_port_broadcast_domain_get_iter_args)])
|
||||||
self.assertTrue(result)
|
self.assertTrue(result)
|
||||||
|
@ -1132,7 +1254,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NET_INTERFACE_GET_ONE_RESPONSE)
|
fake.NET_INTERFACE_GET_ONE_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
net_interface_get_args = {
|
net_interface_get_args = {
|
||||||
|
@ -1154,7 +1276,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
fake.VSERVER_NAME, fake.NODE_NAME, fake.PORT, fake.IP_ADDRESS,
|
fake.VSERVER_NAME, fake.NODE_NAME, fake.PORT, fake.IP_ADDRESS,
|
||||||
fake.NETMASK, fake.VLAN)
|
fake.NETMASK, fake.VLAN)
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-interface-get-iter', net_interface_get_args)])
|
mock.call('net-interface-get-iter', net_interface_get_args)])
|
||||||
self.assertTrue(result)
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
@ -1162,7 +1284,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
net_interface_get_args = {
|
net_interface_get_args = {
|
||||||
|
@ -1183,7 +1305,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
result = self.client.network_interface_exists(
|
result = self.client.network_interface_exists(
|
||||||
fake.VSERVER_NAME, fake.NODE_NAME, fake.PORT, fake.IP_ADDRESS,
|
fake.VSERVER_NAME, fake.NODE_NAME, fake.PORT, fake.IP_ADDRESS,
|
||||||
fake.NETMASK, None)
|
fake.NETMASK, None)
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-interface-get-iter', net_interface_get_args)])
|
mock.call('net-interface-get-iter', net_interface_get_args)])
|
||||||
self.assertFalse(result)
|
self.assertFalse(result)
|
||||||
|
|
||||||
|
@ -1192,7 +1314,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NET_INTERFACE_GET_ITER_RESPONSE)
|
fake.NET_INTERFACE_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
net_interface_get_args = {
|
net_interface_get_args = {
|
||||||
|
@ -1205,7 +1327,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
result = self.client.list_network_interfaces()
|
result = self.client.list_network_interfaces()
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-interface-get-iter', net_interface_get_args)])
|
mock.call('net-interface-get-iter', net_interface_get_args)])
|
||||||
self.assertSequenceEqual(fake.LIF_NAMES, result)
|
self.assertSequenceEqual(fake.LIF_NAMES, result)
|
||||||
|
|
||||||
|
@ -1225,12 +1347,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NET_INTERFACE_GET_ITER_RESPONSE)
|
fake.NET_INTERFACE_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_network_interfaces()
|
result = self.client.get_network_interfaces()
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-interface-get-iter', None)])
|
mock.call('net-interface-get-iter', None)])
|
||||||
self.assertSequenceEqual(fake.LIFS, result)
|
self.assertSequenceEqual(fake.LIFS, result)
|
||||||
|
|
||||||
|
@ -1239,7 +1361,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NET_INTERFACE_GET_ITER_RESPONSE_NFS)
|
fake.NET_INTERFACE_GET_ITER_RESPONSE_NFS)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_network_interfaces(protocols=['NFS'])
|
result = self.client.get_network_interfaces(protocols=['NFS'])
|
||||||
|
@ -1254,7 +1376,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-interface-get-iter', net_interface_get_args)])
|
mock.call('net-interface-get-iter', net_interface_get_args)])
|
||||||
self.assertListEqual(fake.NFS_LIFS, result)
|
self.assertListEqual(fake.NFS_LIFS, result)
|
||||||
|
|
||||||
|
@ -1262,12 +1384,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_network_interfaces()
|
result = self.client.get_network_interfaces()
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-interface-get-iter', None)])
|
mock.call('net-interface-get-iter', None)])
|
||||||
self.assertListEqual([], result)
|
self.assertListEqual([], result)
|
||||||
|
|
||||||
|
@ -1291,21 +1413,19 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.NET_IPSPACES_GET_ITER_RESPONSE)
|
fake.NET_IPSPACES_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_ipspaces(ipspace_name=fake.IPSPACE_NAME,
|
result = self.client.get_ipspaces(ipspace_name=fake.IPSPACE_NAME)
|
||||||
max_records=500)
|
|
||||||
|
|
||||||
net_ipspaces_get_iter_args = {
|
net_ipspaces_get_iter_args = {
|
||||||
'max-records': 500,
|
|
||||||
'query': {
|
'query': {
|
||||||
'net-ipspaces-info': {
|
'net-ipspaces-info': {
|
||||||
'ipspace': fake.IPSPACE_NAME,
|
'ipspace': fake.IPSPACE_NAME,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-ipspaces-get-iter', net_ipspaces_get_iter_args)])
|
mock.call('net-ipspaces-get-iter', net_ipspaces_get_iter_args)])
|
||||||
self.assertEqual(fake.IPSPACES, result)
|
self.assertEqual(fake.IPSPACES, result)
|
||||||
|
|
||||||
|
@ -1314,23 +1434,23 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
self.client.features.add_feature('IPSPACES')
|
self.client.features.add_feature('IPSPACES')
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_ipspaces()
|
result = self.client.get_ipspaces()
|
||||||
|
|
||||||
net_ipspaces_get_iter_args = {'max-records': 1000}
|
net_ipspaces_get_iter_args = {}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-ipspaces-get-iter', net_ipspaces_get_iter_args)])
|
mock.call('net-ipspaces-get-iter', net_ipspaces_get_iter_args)])
|
||||||
self.assertEqual([], result)
|
self.assertEqual([], result)
|
||||||
|
|
||||||
def test_get_ipspaces_not_supported(self):
|
def test_get_ipspaces_not_supported(self):
|
||||||
|
|
||||||
self.mock_object(self.client, 'send_request')
|
self.mock_object(self.client, 'send_iter_request')
|
||||||
|
|
||||||
result = self.client.get_ipspaces()
|
result = self.client.get_ipspaces()
|
||||||
|
|
||||||
self.assertFalse(self.client.send_request.called)
|
self.assertFalse(self.client.send_iter_request.called)
|
||||||
self.assertEqual([], result)
|
self.assertEqual([], result)
|
||||||
|
|
||||||
@ddt.data((fake.NET_IPSPACES_GET_ITER_RESPONSE, True),
|
@ddt.data((fake.NET_IPSPACES_GET_ITER_RESPONSE, True),
|
||||||
|
@ -1341,7 +1461,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
self.client.features.add_feature('IPSPACES')
|
self.client.features.add_feature('IPSPACES')
|
||||||
api_response = netapp_api.NaElement(api_response)
|
api_response = netapp_api.NaElement(api_response)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.ipspace_exists(fake.IPSPACE_NAME)
|
result = self.client.ipspace_exists(fake.IPSPACE_NAME)
|
||||||
|
@ -1358,7 +1478,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('net-ipspaces-get-iter', net_ipspaces_get_iter_args)])
|
mock.call('net-ipspaces-get-iter', net_ipspaces_get_iter_args)])
|
||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
|
||||||
|
@ -1443,7 +1563,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
def test_get_node_for_aggregate_api_not_found(self):
|
def test_get_node_for_aggregate_api_not_found(self):
|
||||||
|
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(side_effect=self._mock_api_error(
|
mock.Mock(side_effect=self._mock_api_error(
|
||||||
netapp_api.EAPINOTFOUND)))
|
netapp_api.EAPINOTFOUND)))
|
||||||
|
|
||||||
|
@ -1453,7 +1573,9 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
def test_get_node_for_aggregate_api_error(self):
|
def test_get_node_for_aggregate_api_error(self):
|
||||||
|
|
||||||
self.mock_object(self.client, 'send_request', self._mock_api_error())
|
self.mock_object(self.client,
|
||||||
|
'send_iter_request',
|
||||||
|
self._mock_api_error())
|
||||||
|
|
||||||
self.assertRaises(netapp_api.NaApiError,
|
self.assertRaises(netapp_api.NaApiError,
|
||||||
self.client.get_node_for_aggregate,
|
self.client.get_node_for_aggregate,
|
||||||
|
@ -1463,7 +1585,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_node_for_aggregate(fake.SHARE_AGGREGATE_NAME)
|
result = self.client.get_node_for_aggregate(fake.SHARE_AGGREGATE_NAME)
|
||||||
|
@ -1604,12 +1726,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.AGGR_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.AGGR_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client._get_aggregates()
|
result = self.client._get_aggregates()
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('aggr-get-iter', {})])
|
mock.call('aggr-get-iter', {})])
|
||||||
self.assertListEqual(
|
self.assertListEqual(
|
||||||
[aggr.to_string() for aggr in api_response.get_child_by_name(
|
[aggr.to_string() for aggr in api_response.get_child_by_name(
|
||||||
|
@ -1620,7 +1742,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.AGGR_GET_SPACE_RESPONSE)
|
api_response = netapp_api.NaElement(fake.AGGR_GET_SPACE_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
desired_attributes = {
|
desired_attributes = {
|
||||||
|
@ -1646,7 +1768,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
'desired-attributes': desired_attributes
|
'desired-attributes': desired_attributes
|
||||||
}
|
}
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('aggr-get-iter', aggr_get_iter_args)])
|
mock.call('aggr-get-iter', aggr_get_iter_args)])
|
||||||
self.assertListEqual(
|
self.assertListEqual(
|
||||||
[aggr.to_string() for aggr in api_response.get_child_by_name(
|
[aggr.to_string() for aggr in api_response.get_child_by_name(
|
||||||
|
@ -1657,12 +1779,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client._get_aggregates()
|
result = self.client._get_aggregates()
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('aggr-get-iter', {})])
|
mock.call('aggr-get-iter', {})])
|
||||||
self.assertListEqual([], result)
|
self.assertListEqual([], result)
|
||||||
|
|
||||||
|
@ -2132,7 +2254,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.SIS_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.SIS_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_volume_efficiency_status(fake.SHARE_NAME)
|
result = self.client.get_volume_efficiency_status(fake.SHARE_NAME)
|
||||||
|
@ -2150,7 +2272,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('sis-get-iter', sis_get_iter_args)])
|
mock.call('sis-get-iter', sis_get_iter_args)])
|
||||||
|
|
||||||
expected = {'dedupe': True, 'compression': True}
|
expected = {'dedupe': True, 'compression': True}
|
||||||
|
@ -2160,7 +2282,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_volume_efficiency_status(fake.SHARE_NAME)
|
result = self.client.get_volume_efficiency_status(fake.SHARE_NAME)
|
||||||
|
@ -2388,7 +2510,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.VOLUME_GET_NAME_RESPONSE)
|
api_response = netapp_api.NaElement(fake.VOLUME_GET_NAME_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.volume_exists(fake.SHARE_NAME)
|
result = self.client.volume_exists(fake.SHARE_NAME)
|
||||||
|
@ -2410,7 +2532,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('volume-get-iter', volume_get_iter_args)])
|
mock.call('volume-get-iter', volume_get_iter_args)])
|
||||||
self.assertTrue(result)
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
@ -2428,7 +2550,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.GET_AGGREGATE_FOR_VOLUME_RESPONSE)
|
fake.GET_AGGREGATE_FOR_VOLUME_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_aggregate_for_volume(fake.SHARE_NAME)
|
result = self.client.get_aggregate_for_volume(fake.SHARE_NAME)
|
||||||
|
@ -2451,7 +2573,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('volume-get-iter', volume_get_iter_args)])
|
mock.call('volume-get-iter', volume_get_iter_args)])
|
||||||
self.assertEqual(fake.SHARE_AGGREGATE_NAME, result)
|
self.assertEqual(fake.SHARE_AGGREGATE_NAME, result)
|
||||||
|
|
||||||
|
@ -2459,7 +2581,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
self.assertRaises(exception.NetAppException,
|
self.assertRaises(exception.NetAppException,
|
||||||
|
@ -2470,7 +2592,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.LUN_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.LUN_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.volume_has_luns(fake.SHARE_NAME)
|
result = self.client.volume_has_luns(fake.SHARE_NAME)
|
||||||
|
@ -2488,7 +2610,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('lun-get-iter', lun_get_iter_args)])
|
mock.call('lun-get-iter', lun_get_iter_args)])
|
||||||
self.assertTrue(result)
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
@ -2508,7 +2630,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VOLUME_GET_ITER_JUNCTIONED_VOLUMES_RESPONSE)
|
fake.VOLUME_GET_ITER_JUNCTIONED_VOLUMES_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
fake_junction_path = '/%s' % fake.SHARE_NAME
|
fake_junction_path = '/%s' % fake.SHARE_NAME
|
||||||
|
@ -2534,7 +2656,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('volume-get-iter', volume_get_iter_args)])
|
mock.call('volume-get-iter', volume_get_iter_args)])
|
||||||
self.assertTrue(result)
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
@ -2569,7 +2691,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VOLUME_GET_ITER_VOLUME_TO_MANAGE_RESPONSE)
|
fake.VOLUME_GET_ITER_VOLUME_TO_MANAGE_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
fake_junction_path = '/%s' % fake.SHARE_NAME
|
fake_junction_path = '/%s' % fake.SHARE_NAME
|
||||||
|
|
||||||
|
@ -2606,7 +2728,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
'style': 'flex',
|
'style': 'flex',
|
||||||
'size': fake.SHARE_SIZE,
|
'size': fake.SHARE_SIZE,
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('volume-get-iter', volume_get_iter_args)])
|
mock.call('volume-get-iter', volume_get_iter_args)])
|
||||||
self.assertDictEqual(expected, result)
|
self.assertDictEqual(expected, result)
|
||||||
|
|
||||||
|
@ -2620,7 +2742,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
fake_junction_path = '/%s' % fake.SHARE_NAME
|
fake_junction_path = '/%s' % fake.SHARE_NAME
|
||||||
|
|
||||||
|
@ -2633,7 +2755,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VOLUME_GET_ITER_VOLUME_TO_MANAGE_RESPONSE)
|
fake.VOLUME_GET_ITER_VOLUME_TO_MANAGE_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_volume_to_manage(fake.SHARE_AGGREGATE_NAME,
|
result = self.client.get_volume_to_manage(fake.SHARE_AGGREGATE_NAME,
|
||||||
|
@ -2671,7 +2793,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
'style': 'flex',
|
'style': 'flex',
|
||||||
'size': fake.SHARE_SIZE,
|
'size': fake.SHARE_SIZE,
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('volume-get-iter', volume_get_iter_args)])
|
mock.call('volume-get-iter', volume_get_iter_args)])
|
||||||
self.assertDictEqual(expected, result)
|
self.assertDictEqual(expected, result)
|
||||||
|
|
||||||
|
@ -2679,7 +2801,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_volume_to_manage(fake.SHARE_AGGREGATE_NAME,
|
result = self.client.get_volume_to_manage(fake.SHARE_AGGREGATE_NAME,
|
||||||
|
@ -3121,13 +3243,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.CIFS_SHARE_ACCESS_CONTROL_GET_ITER)
|
fake.CIFS_SHARE_ACCESS_CONTROL_GET_ITER)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_cifs_share_access(fake.SHARE_NAME)
|
result = self.client.get_cifs_share_access(fake.SHARE_NAME)
|
||||||
|
|
||||||
cifs_share_access_control_get_iter_args = {
|
cifs_share_access_control_get_iter_args = {
|
||||||
'max-records': 1000,
|
|
||||||
'query': {
|
'query': {
|
||||||
'cifs-share-access-control': {
|
'cifs-share-access-control': {
|
||||||
'share': fake.SHARE_NAME,
|
'share': fake.SHARE_NAME,
|
||||||
|
@ -3140,7 +3261,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('cifs-share-access-control-get-iter',
|
mock.call('cifs-share-access-control-get-iter',
|
||||||
cifs_share_access_control_get_iter_args)])
|
cifs_share_access_control_get_iter_args)])
|
||||||
|
|
||||||
|
@ -3156,7 +3277,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_cifs_share_access(fake.SHARE_NAME)
|
result = self.client.get_cifs_share_access(fake.SHARE_NAME)
|
||||||
|
@ -3358,7 +3479,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.EXPORT_RULE_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.EXPORT_RULE_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client._get_nfs_export_rule_indices(
|
result = self.client._get_nfs_export_rule_indices(
|
||||||
|
@ -3381,7 +3502,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.assertListEqual(['1', '3'], result)
|
self.assertListEqual(['1', '3'], result)
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('export-rule-get-iter', export_rule_get_iter_args)])
|
mock.call('export-rule-get-iter', export_rule_get_iter_args)])
|
||||||
|
|
||||||
def test_remove_nfs_export_rule(self):
|
def test_remove_nfs_export_rule(self):
|
||||||
|
@ -3480,7 +3601,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VOLUME_GET_EXPORT_POLICY_RESPONSE)
|
fake.VOLUME_GET_EXPORT_POLICY_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_nfs_export_policy_for_volume(fake.SHARE_NAME)
|
result = self.client.get_nfs_export_policy_for_volume(fake.SHARE_NAME)
|
||||||
|
@ -3502,14 +3623,14 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.assertEqual(fake.EXPORT_POLICY_NAME, result)
|
self.assertEqual(fake.EXPORT_POLICY_NAME, result)
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('volume-get-iter', volume_get_iter_args)])
|
mock.call('volume-get-iter', volume_get_iter_args)])
|
||||||
|
|
||||||
def test_get_nfs_export_policy_for_volume_not_found(self):
|
def test_get_nfs_export_policy_for_volume_not_found(self):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
self.assertRaises(exception.NetAppException,
|
self.assertRaises(exception.NetAppException,
|
||||||
|
@ -3654,7 +3775,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.DELETED_EXPORT_POLICY_GET_ITER_RESPONSE)
|
fake.DELETED_EXPORT_POLICY_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client._get_deleted_nfs_export_policies()
|
result = self.client._get_deleted_nfs_export_policies()
|
||||||
|
@ -3673,7 +3794,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.assertSequenceEqual(fake.DELETED_EXPORT_POLICIES, result)
|
self.assertSequenceEqual(fake.DELETED_EXPORT_POLICIES, result)
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('export-policy-get-iter', export_policy_get_iter_args)])
|
mock.call('export-policy-get-iter', export_policy_get_iter_args)])
|
||||||
|
|
||||||
def test_get_ems_log_destination_vserver(self):
|
def test_get_ems_log_destination_vserver(self):
|
||||||
|
@ -3794,7 +3915,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.AGGR_GET_RAID_TYPE_RESPONSE)
|
api_response = netapp_api.NaElement(fake.AGGR_GET_RAID_TYPE_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_aggregate_raid_types(
|
result = self.client.get_aggregate_raid_types(
|
||||||
|
@ -3823,7 +3944,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
fake.SHARE_AGGREGATE_RAID_TYPES[1]
|
fake.SHARE_AGGREGATE_RAID_TYPES[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('aggr-get-iter', aggr_get_iter_args)])
|
mock.call('aggr-get-iter', aggr_get_iter_args)])
|
||||||
self.assertDictEqual(expected, result)
|
self.assertDictEqual(expected, result)
|
||||||
|
|
||||||
|
@ -3831,7 +3952,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_aggregate_raid_types(
|
result = self.client.get_aggregate_raid_types(
|
||||||
|
@ -3879,7 +4000,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.SYSTEM_NODE_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.SYSTEM_NODE_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.check_for_cluster_credentials()
|
result = self.client.check_for_cluster_credentials()
|
||||||
|
@ -3889,7 +4010,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
def test_check_for_cluster_credentials_not_cluster(self):
|
def test_check_for_cluster_credentials_not_cluster(self):
|
||||||
|
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(side_effect=self._mock_api_error(
|
mock.Mock(side_effect=self._mock_api_error(
|
||||||
netapp_api.EAPINOTFOUND)))
|
netapp_api.EAPINOTFOUND)))
|
||||||
|
|
||||||
|
@ -3899,7 +4020,9 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
def test_check_for_cluster_credentials_api_error(self):
|
def test_check_for_cluster_credentials_api_error(self):
|
||||||
|
|
||||||
self.mock_object(self.client, 'send_request', self._mock_api_error())
|
self.mock_object(self.client,
|
||||||
|
'send_iter_request',
|
||||||
|
self._mock_api_error())
|
||||||
|
|
||||||
self.assertRaises(netapp_api.NaApiError,
|
self.assertRaises(netapp_api.NaApiError,
|
||||||
self.client.check_for_cluster_credentials)
|
self.client.check_for_cluster_credentials)
|
||||||
|
@ -3929,13 +4052,13 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.CLUSTER_PEER_GET_ITER_RESPONSE)
|
fake.CLUSTER_PEER_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_cluster_peers()
|
result = self.client.get_cluster_peers()
|
||||||
|
|
||||||
cluster_peer_get_iter_args = {'max-records': 1000}
|
cluster_peer_get_iter_args = {}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('cluster-peer-get-iter', cluster_peer_get_iter_args)])
|
mock.call('cluster-peer-get-iter', cluster_peer_get_iter_args)])
|
||||||
|
|
||||||
expected = [{
|
expected = [{
|
||||||
|
@ -3959,7 +4082,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.CLUSTER_PEER_GET_ITER_RESPONSE)
|
fake.CLUSTER_PEER_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
self.client.get_cluster_peers(remote_cluster_name=fake.CLUSTER_NAME)
|
self.client.get_cluster_peers(remote_cluster_name=fake.CLUSTER_NAME)
|
||||||
|
@ -3970,23 +4093,22 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
'remote-cluster-name': fake.CLUSTER_NAME,
|
'remote-cluster-name': fake.CLUSTER_NAME,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'max-records': 1000,
|
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('cluster-peer-get-iter', cluster_peer_get_iter_args)])
|
mock.call('cluster-peer-get-iter', cluster_peer_get_iter_args)])
|
||||||
|
|
||||||
def test_get_cluster_peers_not_found(self):
|
def test_get_cluster_peers_not_found(self):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_cluster_peers(
|
result = self.client.get_cluster_peers(
|
||||||
remote_cluster_name=fake.CLUSTER_NAME)
|
remote_cluster_name=fake.CLUSTER_NAME)
|
||||||
|
|
||||||
self.assertEqual([], result)
|
self.assertEqual([], result)
|
||||||
self.assertTrue(self.client.send_request.called)
|
self.assertTrue(self.client.send_iter_request.called)
|
||||||
|
|
||||||
def test_delete_cluster_peer(self):
|
def test_delete_cluster_peer(self):
|
||||||
|
|
||||||
|
@ -4104,7 +4226,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.VSERVER_PEER_GET_ITER_RESPONSE)
|
fake.VSERVER_PEER_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_vserver_peers(
|
result = self.client.get_vserver_peers(
|
||||||
|
@ -4118,9 +4240,8 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
'peer-vserver': fake.VSERVER_NAME_2,
|
'peer-vserver': fake.VSERVER_NAME_2,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'max-records': 1000,
|
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('vserver-peer-get-iter', vserver_peer_get_iter_args)])
|
mock.call('vserver-peer-get-iter', vserver_peer_get_iter_args)])
|
||||||
|
|
||||||
expected = [{
|
expected = [{
|
||||||
|
@ -4135,7 +4256,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client.get_vserver_peers(
|
result = self.client.get_vserver_peers(
|
||||||
|
@ -4143,7 +4264,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
peer_vserver_name=fake.VSERVER_NAME_2)
|
peer_vserver_name=fake.VSERVER_NAME_2)
|
||||||
|
|
||||||
self.assertEqual([], result)
|
self.assertEqual([], result)
|
||||||
self.assertTrue(self.client.send_request.called)
|
self.assertTrue(self.client.send_iter_request.called)
|
||||||
|
|
||||||
def test_ensure_snapmirror_v2(self):
|
def test_ensure_snapmirror_v2(self):
|
||||||
|
|
||||||
|
@ -4491,7 +4612,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.SNAPMIRROR_GET_ITER_RESPONSE)
|
api_response = netapp_api.NaElement(fake.SNAPMIRROR_GET_ITER_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
desired_attributes = {
|
desired_attributes = {
|
||||||
|
@ -4528,7 +4649,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('snapmirror-get-iter', snapmirror_get_iter_args)])
|
mock.call('snapmirror-get-iter', snapmirror_get_iter_args)])
|
||||||
self.assertEqual(1, len(result))
|
self.assertEqual(1, len(result))
|
||||||
|
|
||||||
|
@ -4536,12 +4657,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
|
|
||||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
result = self.client._get_snapmirrors()
|
result = self.client._get_snapmirrors()
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('snapmirror-get-iter', {})])
|
mock.call('snapmirror-get-iter', {})])
|
||||||
|
|
||||||
self.assertEqual([], result)
|
self.assertEqual([], result)
|
||||||
|
@ -4551,7 +4672,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
api_response = netapp_api.NaElement(
|
api_response = netapp_api.NaElement(
|
||||||
fake.SNAPMIRROR_GET_ITER_FILTERED_RESPONSE)
|
fake.SNAPMIRROR_GET_ITER_FILTERED_RESPONSE)
|
||||||
self.mock_object(self.client,
|
self.mock_object(self.client,
|
||||||
'send_request',
|
'send_iter_request',
|
||||||
mock.Mock(return_value=api_response))
|
mock.Mock(return_value=api_response))
|
||||||
|
|
||||||
desired_attributes = ['source-vserver', 'source-volume',
|
desired_attributes = ['source-vserver', 'source-volume',
|
||||||
|
@ -4595,7 +4716,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
||||||
'schedule': 'daily',
|
'schedule': 'daily',
|
||||||
}]
|
}]
|
||||||
|
|
||||||
self.client.send_request.assert_has_calls([
|
self.client.send_iter_request.assert_has_calls([
|
||||||
mock.call('snapmirror-get-iter', snapmirror_get_iter_args)])
|
mock.call('snapmirror-get-iter', snapmirror_get_iter_args)])
|
||||||
self.assertEqual(expected, result)
|
self.assertEqual(expected, result)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue