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_'
|
||||
DEFAULT_IPSPACE = 'Default'
|
||||
DEFAULT_BROADCAST_DOMAIN = 'OpenStack'
|
||||
DEFAULT_MAX_PAGE_LENGTH = 50
|
||||
|
||||
|
||||
class NetAppCmodeClient(client_base.NetAppBaseClient):
|
||||
|
@ -78,10 +79,61 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
else:
|
||||
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):
|
||||
self.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
|
||||
def create_vserver(self, vserver_name, root_volume_aggregate_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)
|
||||
|
||||
@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:
|
||||
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:
|
||||
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)
|
||||
|
||||
@na_utils.trace
|
||||
|
@ -229,21 +281,20 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
if 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(
|
||||
'attributes-list') or netapp_api.NaElement('none')
|
||||
return [vserver_info.get_child_content('vserver-name')
|
||||
for vserver_info in vserver_info_list.get_children()]
|
||||
|
||||
@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.
|
||||
|
||||
Call this on a vserver client to see how many volumes exist
|
||||
on that vserver.
|
||||
"""
|
||||
api_args = {
|
||||
'max-records': max_records,
|
||||
'desired-attributes': {
|
||||
'volume-attributes': {
|
||||
'volume-id-attributes': {
|
||||
|
@ -252,8 +303,8 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
},
|
||||
},
|
||||
}
|
||||
volumes_data = self.send_request('volume-get-iter', api_args)
|
||||
return int(volumes_data.get_child_content('num-records'))
|
||||
volumes_data = self.send_iter_request('volume-get-iter', api_args)
|
||||
return self._get_record_count(volumes_data)
|
||||
|
||||
@na_utils.trace
|
||||
def delete_vserver(self, vserver_name, vserver_client,
|
||||
|
@ -268,7 +319,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
return
|
||||
|
||||
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:
|
||||
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(
|
||||
'attributes-list') or netapp_api.NaElement('none')
|
||||
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(
|
||||
'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(
|
||||
'attributes-list').get_children()
|
||||
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(
|
||||
'attributes-list') or netapp_api.NaElement('none')
|
||||
|
@ -553,8 +604,8 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
'net-port-broadcast-domain-info': None,
|
||||
},
|
||||
}
|
||||
result = self.send_request('net-port-broadcast-domain-get-iter',
|
||||
api_args)
|
||||
result = self.send_iter_request('net-port-broadcast-domain-get-iter',
|
||||
api_args)
|
||||
return self._has_records(result)
|
||||
|
||||
@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)
|
||||
|
||||
@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(
|
||||
'attributes-list') or netapp_api.NaElement('none')
|
||||
return [lif_info.get_child_content('interface-name') for lif_info
|
||||
|
@ -686,7 +737,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
}
|
||||
} 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(
|
||||
'attributes-list') or netapp_api.NaElement('none')
|
||||
|
||||
|
@ -712,13 +763,13 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
self.send_request('net-interface-delete', api_args)
|
||||
|
||||
@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."""
|
||||
|
||||
if not self.features.IPSPACES:
|
||||
return []
|
||||
|
||||
api_args = {'max-records': max_records}
|
||||
api_args = {}
|
||||
if ipspace_name:
|
||||
api_args['query'] = {
|
||||
'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):
|
||||
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)
|
||||
|
||||
@na_utils.trace
|
||||
|
@ -952,7 +1003,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
if 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):
|
||||
return []
|
||||
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') 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)
|
||||
|
||||
@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') 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)
|
||||
|
||||
@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)
|
||||
|
||||
@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):
|
||||
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):
|
||||
return None
|
||||
|
||||
|
@ -1784,7 +1835,6 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
@na_utils.trace
|
||||
def get_cifs_share_access(self, share_name):
|
||||
api_args = {
|
||||
'max-records': 1000,
|
||||
'query': {
|
||||
'cifs-share-access-control': {
|
||||
'share': share_name,
|
||||
|
@ -1797,8 +1847,8 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
},
|
||||
},
|
||||
}
|
||||
result = self.send_request('cifs-share-access-control-get-iter',
|
||||
api_args)
|
||||
result = self.send_iter_request('cifs-share-access-control-get-iter',
|
||||
api_args)
|
||||
|
||||
attributes_list = result.get_child_by_name(
|
||||
'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') 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') 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') or netapp_api.NaElement('none')
|
||||
|
@ -2219,7 +2269,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
def get_cluster_peers(self, remote_cluster_name=None):
|
||||
"""Gets one or more cluster peer relationships."""
|
||||
|
||||
api_args = {'max-records': 1000}
|
||||
api_args = {}
|
||||
if remote_cluster_name:
|
||||
api_args['query'] = {
|
||||
'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):
|
||||
return []
|
||||
|
||||
|
@ -2370,9 +2420,8 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
if peer_vserver_name:
|
||||
api_args['query']['vserver-peer-info']['peer-vserver'] = (
|
||||
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):
|
||||
return []
|
||||
|
||||
|
@ -2647,7 +2696,7 @@ class NetAppCmodeClient(client_base.NetAppBaseClient):
|
|||
if 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):
|
||||
return []
|
||||
else:
|
||||
|
|
|
@ -112,6 +112,20 @@ PASSED_RESPONSE = etree.XML("""
|
|||
<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("""
|
||||
<results status="passed">
|
||||
<attributes-list>
|
||||
|
@ -1440,6 +1454,116 @@ STORAGE_DISK_GET_ITER_RESPONSE = etree.XML("""
|
|||
</results>
|
||||
""" % 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("""
|
||||
<results status="passed">
|
||||
<attributes-list>
|
||||
|
|
|
@ -106,6 +106,128 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
self.assertFalse(self.client._has_records(
|
||||
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):
|
||||
self.client.set_vserver(fake.VSERVER_NAME)
|
||||
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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
vserver_get_args = {
|
||||
|
@ -125,7 +247,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
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)])
|
||||
self.assertTrue(result)
|
||||
|
||||
|
@ -211,7 +333,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VSERVER_GET_ROOT_VOLUME_NAME_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
vserver_get_args = {
|
||||
|
@ -221,7 +343,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
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)])
|
||||
self.assertEqual(fake.ROOT_VOLUME_NAME, result)
|
||||
|
||||
|
@ -229,7 +351,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
self.assertRaises(exception.NetAppException,
|
||||
|
@ -242,7 +364,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VSERVER_GET_IPSPACE_NAME_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertEqual(fake.IPSPACE_NAME, result)
|
||||
|
||||
|
@ -274,7 +396,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
self.client.features.add_feature('IPSPACES')
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
self.assertRaises(exception.NetAppException,
|
||||
|
@ -286,7 +408,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
self.client.features.add_feature('IPSPACES')
|
||||
api_response = netapp_api.NaElement(fake.VSERVER_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertTrue(result)
|
||||
|
||||
|
@ -331,7 +453,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VSERVER_DATA_LIST_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertListEqual([fake.VSERVER_NAME], result)
|
||||
|
||||
|
@ -357,7 +479,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VSERVER_DATA_LIST_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertListEqual([fake.VSERVER_NAME], result)
|
||||
|
||||
|
@ -394,7 +516,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.VOLUME_COUNT_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_vserver_volume_count()
|
||||
|
@ -409,7 +531,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
self.mock_object(self.client,
|
||||
'get_vserver_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',
|
||||
mock.Mock(return_value=0))
|
||||
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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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.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)])
|
||||
|
||||
def test_get_node_data_ports_not_found(self):
|
||||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_node_data_ports(fake.NODE_NAME)
|
||||
|
@ -903,7 +1025,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NET_PORT_GET_ITER_BROADCAST_DOMAIN_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
net_port_get_iter_args = {
|
||||
|
@ -927,7 +1049,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
'broadcast-domain': fake.BROADCAST_DOMAIN,
|
||||
'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)])
|
||||
self.assertEqual(expected, result)
|
||||
|
||||
|
@ -936,7 +1058,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
self.assertRaises(exception.NetAppException,
|
||||
|
@ -949,7 +1071,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NET_PORT_GET_ITER_BROADCAST_DOMAIN_MISSING_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client._get_broadcast_domain_for_port(fake.NODE_NAME,
|
||||
|
@ -966,7 +1088,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NET_PORT_BROADCAST_DOMAIN_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client._broadcast_domain_exists(fake.BROADCAST_DOMAIN,
|
||||
|
@ -983,7 +1105,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
'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',
|
||||
net_port_broadcast_domain_get_iter_args)])
|
||||
self.assertTrue(result)
|
||||
|
@ -1132,7 +1254,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NET_INTERFACE_GET_ONE_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
net_interface_get_args = {
|
||||
|
@ -1154,7 +1276,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
fake.VSERVER_NAME, fake.NODE_NAME, fake.PORT, fake.IP_ADDRESS,
|
||||
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)])
|
||||
self.assertTrue(result)
|
||||
|
||||
|
@ -1162,7 +1284,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
net_interface_get_args = {
|
||||
|
@ -1183,7 +1305,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
result = self.client.network_interface_exists(
|
||||
fake.VSERVER_NAME, fake.NODE_NAME, fake.PORT, fake.IP_ADDRESS,
|
||||
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)])
|
||||
self.assertFalse(result)
|
||||
|
||||
|
@ -1192,7 +1314,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NET_INTERFACE_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
net_interface_get_args = {
|
||||
|
@ -1205,7 +1327,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
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)])
|
||||
self.assertSequenceEqual(fake.LIF_NAMES, result)
|
||||
|
||||
|
@ -1225,12 +1347,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NET_INTERFACE_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertSequenceEqual(fake.LIFS, result)
|
||||
|
||||
|
@ -1239,7 +1361,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NET_INTERFACE_GET_ITER_RESPONSE_NFS)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertListEqual(fake.NFS_LIFS, result)
|
||||
|
||||
|
@ -1262,12 +1384,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertListEqual([], result)
|
||||
|
||||
|
@ -1291,21 +1413,19 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.NET_IPSPACES_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_ipspaces(ipspace_name=fake.IPSPACE_NAME,
|
||||
max_records=500)
|
||||
result = self.client.get_ipspaces(ipspace_name=fake.IPSPACE_NAME)
|
||||
|
||||
net_ipspaces_get_iter_args = {
|
||||
'max-records': 500,
|
||||
'query': {
|
||||
'net-ipspaces-info': {
|
||||
'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)])
|
||||
self.assertEqual(fake.IPSPACES, result)
|
||||
|
||||
|
@ -1314,23 +1434,23 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
self.client.features.add_feature('IPSPACES')
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_ipspaces()
|
||||
|
||||
net_ipspaces_get_iter_args = {'max-records': 1000}
|
||||
self.client.send_request.assert_has_calls([
|
||||
net_ipspaces_get_iter_args = {}
|
||||
self.client.send_iter_request.assert_has_calls([
|
||||
mock.call('net-ipspaces-get-iter', net_ipspaces_get_iter_args)])
|
||||
self.assertEqual([], result)
|
||||
|
||||
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()
|
||||
|
||||
self.assertFalse(self.client.send_request.called)
|
||||
self.assertFalse(self.client.send_iter_request.called)
|
||||
self.assertEqual([], result)
|
||||
|
||||
@ddt.data((fake.NET_IPSPACES_GET_ITER_RESPONSE, True),
|
||||
|
@ -1341,7 +1461,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
self.client.features.add_feature('IPSPACES')
|
||||
api_response = netapp_api.NaElement(api_response)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertEqual(expected, result)
|
||||
|
||||
|
@ -1443,7 +1563,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
def test_get_node_for_aggregate_api_not_found(self):
|
||||
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(side_effect=self._mock_api_error(
|
||||
netapp_api.EAPINOTFOUND)))
|
||||
|
||||
|
@ -1453,7 +1573,9 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
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.client.get_node_for_aggregate,
|
||||
|
@ -1463,7 +1585,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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', {})])
|
||||
self.assertListEqual(
|
||||
[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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
desired_attributes = {
|
||||
|
@ -1646,7 +1768,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
'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)])
|
||||
self.assertListEqual(
|
||||
[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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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', {})])
|
||||
self.assertListEqual([], result)
|
||||
|
||||
|
@ -2132,7 +2254,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.SIS_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
|
||||
expected = {'dedupe': True, 'compression': True}
|
||||
|
@ -2160,7 +2282,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertTrue(result)
|
||||
|
||||
|
@ -2428,7 +2550,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.GET_AGGREGATE_FOR_VOLUME_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertEqual(fake.SHARE_AGGREGATE_NAME, result)
|
||||
|
||||
|
@ -2459,7 +2581,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
self.assertRaises(exception.NetAppException,
|
||||
|
@ -2470,7 +2592,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.LUN_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertTrue(result)
|
||||
|
||||
|
@ -2508,7 +2630,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VOLUME_GET_ITER_JUNCTIONED_VOLUMES_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertTrue(result)
|
||||
|
||||
|
@ -2569,7 +2691,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VOLUME_GET_ITER_VOLUME_TO_MANAGE_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
fake_junction_path = '/%s' % fake.SHARE_NAME
|
||||
|
||||
|
@ -2606,7 +2728,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
'style': 'flex',
|
||||
'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)])
|
||||
self.assertDictEqual(expected, result)
|
||||
|
||||
|
@ -2620,7 +2742,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
fake_junction_path = '/%s' % fake.SHARE_NAME
|
||||
|
||||
|
@ -2633,7 +2755,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VOLUME_GET_ITER_VOLUME_TO_MANAGE_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_volume_to_manage(fake.SHARE_AGGREGATE_NAME,
|
||||
|
@ -2671,7 +2793,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
'style': 'flex',
|
||||
'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)])
|
||||
self.assertDictEqual(expected, result)
|
||||
|
||||
|
@ -2679,7 +2801,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_volume_to_manage(fake.SHARE_AGGREGATE_NAME,
|
||||
|
@ -3121,13 +3243,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.CIFS_SHARE_ACCESS_CONTROL_GET_ITER)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_cifs_share_access(fake.SHARE_NAME)
|
||||
|
||||
cifs_share_access_control_get_iter_args = {
|
||||
'max-records': 1000,
|
||||
'query': {
|
||||
'cifs-share-access-control': {
|
||||
'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',
|
||||
cifs_share_access_control_get_iter_args)])
|
||||
|
||||
|
@ -3156,7 +3277,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client._get_nfs_export_rule_indices(
|
||||
|
@ -3381,7 +3502,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
},
|
||||
}
|
||||
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)])
|
||||
|
||||
def test_remove_nfs_export_rule(self):
|
||||
|
@ -3480,7 +3601,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VOLUME_GET_EXPORT_POLICY_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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.client.send_request.assert_has_calls([
|
||||
self.client.send_iter_request.assert_has_calls([
|
||||
mock.call('volume-get-iter', volume_get_iter_args)])
|
||||
|
||||
def test_get_nfs_export_policy_for_volume_not_found(self):
|
||||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
self.assertRaises(exception.NetAppException,
|
||||
|
@ -3654,7 +3775,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.DELETED_EXPORT_POLICY_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client._get_deleted_nfs_export_policies()
|
||||
|
@ -3673,7 +3794,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
},
|
||||
}
|
||||
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)])
|
||||
|
||||
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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_aggregate_raid_types(
|
||||
|
@ -3823,7 +3944,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
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)])
|
||||
self.assertDictEqual(expected, result)
|
||||
|
||||
|
@ -3831,7 +3952,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.check_for_cluster_credentials()
|
||||
|
@ -3889,7 +4010,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
def test_check_for_cluster_credentials_not_cluster(self):
|
||||
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(side_effect=self._mock_api_error(
|
||||
netapp_api.EAPINOTFOUND)))
|
||||
|
||||
|
@ -3899,7 +4020,9 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
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.client.check_for_cluster_credentials)
|
||||
|
@ -3929,13 +4052,13 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.CLUSTER_PEER_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_cluster_peers()
|
||||
|
||||
cluster_peer_get_iter_args = {'max-records': 1000}
|
||||
self.client.send_request.assert_has_calls([
|
||||
cluster_peer_get_iter_args = {}
|
||||
self.client.send_iter_request.assert_has_calls([
|
||||
mock.call('cluster-peer-get-iter', cluster_peer_get_iter_args)])
|
||||
|
||||
expected = [{
|
||||
|
@ -3959,7 +4082,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.CLUSTER_PEER_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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,
|
||||
}
|
||||
},
|
||||
'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)])
|
||||
|
||||
def test_get_cluster_peers_not_found(self):
|
||||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_cluster_peers(
|
||||
remote_cluster_name=fake.CLUSTER_NAME)
|
||||
|
||||
self.assertEqual([], result)
|
||||
self.assertTrue(self.client.send_request.called)
|
||||
self.assertTrue(self.client.send_iter_request.called)
|
||||
|
||||
def test_delete_cluster_peer(self):
|
||||
|
||||
|
@ -4104,7 +4226,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.VSERVER_PEER_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_vserver_peers(
|
||||
|
@ -4118,9 +4240,8 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
'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)])
|
||||
|
||||
expected = [{
|
||||
|
@ -4135,7 +4256,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
result = self.client.get_vserver_peers(
|
||||
|
@ -4143,7 +4264,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
peer_vserver_name=fake.VSERVER_NAME_2)
|
||||
|
||||
self.assertEqual([], result)
|
||||
self.assertTrue(self.client.send_request.called)
|
||||
self.assertTrue(self.client.send_iter_request.called)
|
||||
|
||||
def test_ensure_snapmirror_v2(self):
|
||||
|
||||
|
@ -4491,7 +4612,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.SNAPMIRROR_GET_ITER_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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)])
|
||||
self.assertEqual(1, len(result))
|
||||
|
||||
|
@ -4536,12 +4657,12 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
|
||||
api_response = netapp_api.NaElement(fake.NO_RECORDS_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
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', {})])
|
||||
|
||||
self.assertEqual([], result)
|
||||
|
@ -4551,7 +4672,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
api_response = netapp_api.NaElement(
|
||||
fake.SNAPMIRROR_GET_ITER_FILTERED_RESPONSE)
|
||||
self.mock_object(self.client,
|
||||
'send_request',
|
||||
'send_iter_request',
|
||||
mock.Mock(return_value=api_response))
|
||||
|
||||
desired_attributes = ['source-vserver', 'source-volume',
|
||||
|
@ -4595,7 +4716,7 @@ class NetAppClientCmodeTestCase(test.TestCase):
|
|||
'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)])
|
||||
self.assertEqual(expected, result)
|
||||
|
||||
|
|
Loading…
Reference in New Issue