add unittest of disk_array
Change-Id: I9aa259a6880c3ca470aff58fb1e53cefef36f013
This commit is contained in:
@@ -470,7 +470,8 @@ class Controller(controller.BaseController):
|
|||||||
return roles
|
return roles
|
||||||
|
|
||||||
# backend_index should be unique in cluster
|
# backend_index should be unique in cluster
|
||||||
def _get_cinder_volume_backend_index(self, req, disk_array, cluster_id):
|
def _get_cinder_volume_backend_index(self, req, disk_array, cluster_id,
|
||||||
|
cinder_volume_id=None):
|
||||||
cluster_roles = self._get_cluster_roles(req, cluster_id)
|
cluster_roles = self._get_cluster_roles(req, cluster_id)
|
||||||
cinder_volumes = []
|
cinder_volumes = []
|
||||||
for role in cluster_roles:
|
for role in cluster_roles:
|
||||||
@@ -485,6 +486,8 @@ class Controller(controller.BaseController):
|
|||||||
flag = True
|
flag = True
|
||||||
for cinder_volume in cinder_volumes:
|
for cinder_volume in cinder_volumes:
|
||||||
if backend_index == cinder_volume['backend_index']:
|
if backend_index == cinder_volume['backend_index']:
|
||||||
|
if cinder_volume['id'] == cinder_volume_id:
|
||||||
|
continue
|
||||||
index = index + 1
|
index = index + 1
|
||||||
flag = False
|
flag = False
|
||||||
break
|
break
|
||||||
@@ -626,8 +629,13 @@ class Controller(controller.BaseController):
|
|||||||
raise HTTPBadRequest(explanation=msg,
|
raise HTTPBadRequest(explanation=msg,
|
||||||
request=req,
|
request=req,
|
||||||
content_type="text/plain")
|
content_type="text/plain")
|
||||||
|
orgin_cinder_volume = self.get_cinder_volume_meta_or_404(req, id)
|
||||||
if 'role_id' in disk_meta:
|
if 'role_id' in disk_meta:
|
||||||
self._raise_404_if_role_deleted(req, disk_meta['role_id'])
|
role_detail = self.get_role_meta_or_404(
|
||||||
|
req, disk_meta['role_id'])
|
||||||
|
else:
|
||||||
|
role_detail = self.get_role_meta_or_404(
|
||||||
|
req, orgin_cinder_volume['role_id'])
|
||||||
if ('volume_driver' in disk_meta and disk_meta[
|
if ('volume_driver' in disk_meta and disk_meta[
|
||||||
'volume_driver'] not in CINDER_VOLUME_BACKEND_DRIVER):
|
'volume_driver'] not in CINDER_VOLUME_BACKEND_DRIVER):
|
||||||
msg = "volume_driver %s is not supported" % disk_meta[
|
msg = "volume_driver %s is not supported" % disk_meta[
|
||||||
@@ -635,11 +643,17 @@ class Controller(controller.BaseController):
|
|||||||
raise HTTPBadRequest(explanation=msg,
|
raise HTTPBadRequest(explanation=msg,
|
||||||
request=req,
|
request=req,
|
||||||
content_type="text/plain")
|
content_type="text/plain")
|
||||||
orgin_cinder_volume = self.get_cinder_volume_meta_or_404(req, id)
|
if disk_meta.get('volume_driver', None):
|
||||||
volume_driver = disk_meta.get('volume_driver',
|
volume_driver = disk_meta['volume_driver']
|
||||||
orgin_cinder_volume['volume_driver'])
|
disk_meta['backend_index'] = \
|
||||||
|
self._get_cinder_volume_backend_index(
|
||||||
|
req, disk_meta, role_detail['cluster_id'], id)
|
||||||
|
else:
|
||||||
|
volume_driver = orgin_cinder_volume['volume_driver']
|
||||||
if volume_driver == 'FUJITSU_ETERNUS':
|
if volume_driver == 'FUJITSU_ETERNUS':
|
||||||
if not disk_meta.get('root_pwd', orgin_cinder_volume['root_pwd']):
|
if not disk_meta.get('root_pwd', None):
|
||||||
|
disk_meta['root_pwd'] = orgin_cinder_volume['root_pwd']
|
||||||
|
if not disk_meta['root_pwd']:
|
||||||
msg = "root_pwd must be given " + \
|
msg = "root_pwd must be given " + \
|
||||||
"when using FUJITSU Disk Array"
|
"when using FUJITSU Disk Array"
|
||||||
LOG.error(msg)
|
LOG.error(msg)
|
||||||
|
|||||||
@@ -24,8 +24,6 @@ inline callbacks.
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
# import uuid
|
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
import mock
|
import mock
|
||||||
from mox3 import mox
|
from mox3 import mox
|
||||||
|
|||||||
228
code/daisy/daisy/tests/api/test_disk_array.py
Normal file
228
code/daisy/daisy/tests/api/test_disk_array.py
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
import mock
|
||||||
|
import webob
|
||||||
|
from oslo_serialization import jsonutils
|
||||||
|
from daisy.api.v1 import disk_array
|
||||||
|
from daisy.context import RequestContext
|
||||||
|
import daisy.registry.client.v1.api as registry
|
||||||
|
from daisy import test
|
||||||
|
|
||||||
|
|
||||||
|
def fake_do_request_for_get_roles(method, path, **params):
|
||||||
|
res = mock.Mock()
|
||||||
|
if method == "GET":
|
||||||
|
get_result = {'roles': [{'id': 'role_id_1'},
|
||||||
|
{'id': 'role_id_2'}]}
|
||||||
|
res.read.return_value = jsonutils.dumps(get_result)
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
def set_cinder_volume_list():
|
||||||
|
cinder_vol_lists = [
|
||||||
|
{
|
||||||
|
'management_ips': '10.43.178.9',
|
||||||
|
'data_ips': '10.43.178.19',
|
||||||
|
'role_id': 'badb5177-4659-4b40-8e46-856ef5a121e0',
|
||||||
|
'volume_type': 'ext4',
|
||||||
|
'user_pwd': 'pwd',
|
||||||
|
'volume_driver': 'FUJITSU_ETERNUS',
|
||||||
|
'root_pwd': 'root',
|
||||||
|
'pools': 'pool2,pool3',
|
||||||
|
'backend_index': 'FUJITSU_ETERNUS-1',
|
||||||
|
'resource_pools': None,
|
||||||
|
'user_name': 'user',
|
||||||
|
'id': '77a3eec6-6cf0-4f84-82a4-e9339d824b3a'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'management_ips': '10.43.178.9',
|
||||||
|
'data_ips': '10.43.178.19',
|
||||||
|
'role_id': 'badb5177-4659-4b40-8e46-856ef5a121e0',
|
||||||
|
'volume_type': 'ext4',
|
||||||
|
'user_pwd': 'pwd',
|
||||||
|
'volume_driver': 'FUJITSU_ETERNUS',
|
||||||
|
'root_pwd': 'root',
|
||||||
|
'pools': 'pool3,pool4',
|
||||||
|
'backend_index': 'FUJITSU_ETERNUS-2',
|
||||||
|
'resource_pools': 'resource_pools',
|
||||||
|
'user_name': 'user',
|
||||||
|
'id': 'a1a726c6-161e-4a79-9b2b-a627d4722417'
|
||||||
|
}]
|
||||||
|
return cinder_vol_lists
|
||||||
|
|
||||||
|
|
||||||
|
def set_add_cinder_volume_info():
|
||||||
|
add_cinder_volume_info = {
|
||||||
|
'disk_array': "[{'management_ips': " +
|
||||||
|
"'10.43.178.9', 'data_ips': '10.43.178.19'," +
|
||||||
|
"'user_pwd': 'pwd', 'volume_type': 'ext4'," +
|
||||||
|
"'volume_driver': 'FUJITSU_ETERNUS', " +
|
||||||
|
"'root_pwd': 'root', 'pools': 'pool2,pool4'," +
|
||||||
|
"'resource_pools': 'resource_pools', " +
|
||||||
|
"'user_name': 'user'}]",
|
||||||
|
'role_id': 'badb5177-4659-4b40-8e46-856ef5a121e0'}
|
||||||
|
return add_cinder_volume_info
|
||||||
|
|
||||||
|
|
||||||
|
def returned_cinder_vol_info():
|
||||||
|
cinder_vol_info = {
|
||||||
|
'management_ips': '10.43.178.9',
|
||||||
|
'data_ips': '10.43.178.19',
|
||||||
|
'deleted': False,
|
||||||
|
'role_id': 'badb5177-4659-4b40-8e46-856ef5a121e0',
|
||||||
|
'volume_type': 'ext4',
|
||||||
|
'user_pwd': 'pwd',
|
||||||
|
'volume_driver': 'FUJITSU_ETERNUS',
|
||||||
|
'root_pwd': 'root',
|
||||||
|
'pools': 'pool2,pool4',
|
||||||
|
'backend_index': 'FUJITSU_ETERNUS-1',
|
||||||
|
'resource_pools': 'resource_pools',
|
||||||
|
'user_name': 'user',
|
||||||
|
'id': '77a3eec6-6cf0-4f84-82a4-e9339d824b3a'}
|
||||||
|
return cinder_vol_info
|
||||||
|
|
||||||
|
|
||||||
|
class TestDiskArray(test.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestDiskArray, self).setUp()
|
||||||
|
self.controller = disk_array.Controller()
|
||||||
|
self.req = webob.Request.blank('/')
|
||||||
|
self.req.context = RequestContext(is_admin=True,
|
||||||
|
user='fake user',
|
||||||
|
tenant='fake tenamet')
|
||||||
|
|
||||||
|
def test__get_cinder_volume_backend_index(self):
|
||||||
|
cluster_id = "cluster_id_123"
|
||||||
|
roles = [{'id': 'role_id_1'},
|
||||||
|
{'id': 'role_id_2'}]
|
||||||
|
cinder_volume_id = '3'
|
||||||
|
self.controller._get_cluster_roles =\
|
||||||
|
mock.Mock(return_value=roles)
|
||||||
|
cinder_volumes = [{'backend_index': 'KS3200_IPSAN-1',
|
||||||
|
'id': '1'},
|
||||||
|
{'backend_index': 'KS3200_IPSAN-2',
|
||||||
|
'id': '2'}]
|
||||||
|
self.controller._cinder_volume_list =\
|
||||||
|
mock.Mock(return_value=cinder_volumes)
|
||||||
|
disk_array_1 = {'volume_driver': 'KS3200_IPSAN'}
|
||||||
|
backend_index = self.controller._get_cinder_volume_backend_index(
|
||||||
|
self.req, disk_array_1, cluster_id)
|
||||||
|
self.assertEqual(backend_index, 'KS3200_IPSAN-3')
|
||||||
|
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.get_role_metadata')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.'
|
||||||
|
'update_cinder_volume_metadata')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.'
|
||||||
|
'get_cinder_volume_detail_metadata')
|
||||||
|
def test_cinder_volume_update(self,
|
||||||
|
mock_get_cinder_volume,
|
||||||
|
mock_update_cinder_volume_metadata,
|
||||||
|
mock_get_role):
|
||||||
|
cinder_volume_id = '1'
|
||||||
|
mock_get_cinder_volume.return_value = \
|
||||||
|
{'id': '1',
|
||||||
|
'management_ips': ['10.4.5.7'],
|
||||||
|
'volume_driver': 'FUJITSU_ETERNUS',
|
||||||
|
'root_pwd': 'aaaa',
|
||||||
|
'data_ips': ['19.4.5.7'],
|
||||||
|
'role_id': '1'}
|
||||||
|
mock_get_role.return_value = {'cluster_id': '1'}
|
||||||
|
disk_meta = {
|
||||||
|
'management_ips': ['10.5.6.7'],
|
||||||
|
'data_ips': ['13.5.8.9'],
|
||||||
|
'root_pwd': 'bbbb'
|
||||||
|
}
|
||||||
|
mock_update_cinder_volume_metadata.return_value = \
|
||||||
|
{'id': '1',
|
||||||
|
'management_ips': ['10.5.6.7'],
|
||||||
|
'volume_driver': 'FUJITSU_ETERNUS',
|
||||||
|
'root_pwd': 'bbbb',
|
||||||
|
'data_ips': ['13.5.8.9']}
|
||||||
|
cinder_volume = self.controller.cinder_volume_update(
|
||||||
|
self.req, cinder_volume_id, disk_meta)
|
||||||
|
self.assertEqual('bbbb',
|
||||||
|
cinder_volume['disk_meta']['root_pwd'])
|
||||||
|
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.get_role_metadata')
|
||||||
|
def test_cinder_volume_update_with_resource_pools(self, mock_get_role):
|
||||||
|
cinder_volume_lists = set_cinder_volume_list()
|
||||||
|
registry.list_cinder_volume_metadata = \
|
||||||
|
mock.Mock(return_value=cinder_volume_lists)
|
||||||
|
cinder_vol_info = returned_cinder_vol_info()
|
||||||
|
self.controller.get_cinder_volume_meta_or_404 = \
|
||||||
|
mock.Mock(return_value=cinder_vol_info)
|
||||||
|
mock_get_role.return_value = {'cluster_id': '1'}
|
||||||
|
disk_meta = {'resource_pools': 'pool3,pool4', 'root_pwd': 'root3'}
|
||||||
|
cinder_vol_info['resource_pools'] = disk_meta['resource_pools']
|
||||||
|
cinder_vol_info['root_pwd'] = disk_meta['root_pwd']
|
||||||
|
registry.update_cinder_volume_metadata = \
|
||||||
|
mock.Mock(return_value=cinder_vol_info)
|
||||||
|
cinder_vol_id = '77a3eec6-6cf0-4f84-82a4-e9339d824b3a'
|
||||||
|
return_info = self.controller.cinder_volume_update(self.req,
|
||||||
|
cinder_vol_id,
|
||||||
|
disk_meta)
|
||||||
|
self.assertEqual('root3',
|
||||||
|
return_info['disk_meta']['root_pwd'])
|
||||||
|
self.assertEqual('pool3,pool4',
|
||||||
|
return_info['disk_meta']['resource_pools'])
|
||||||
|
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.'
|
||||||
|
'update_cinder_volume_metadata')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.'
|
||||||
|
'list_cinder_volume_metadata')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.get_roles_detail')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.get_role_metadata')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.'
|
||||||
|
'get_cinder_volume_detail_metadata')
|
||||||
|
def test_update_cinder_volume_with_same_volume_driver(
|
||||||
|
self, mock_get_cinder_volume, mock_get_role, mock_get_roles,
|
||||||
|
mock_get_cinder_volumes, mock_update_cinder_volume):
|
||||||
|
cinder_volume_id = '1'
|
||||||
|
disk_meta = {
|
||||||
|
'volume_driver': 'FUJITSU_ETERNUS',
|
||||||
|
'root_pwd': 'aaaaaaa',
|
||||||
|
'data_ips': ['192.168.1.2']
|
||||||
|
}
|
||||||
|
mock_get_cinder_volume.return_value = {
|
||||||
|
'role_id': '1', 'volume_driver': 'FUJITSU_ETERNUS',
|
||||||
|
'data_ips': ['192.1.3.4'], 'root_pwd': 'bbbbb'}
|
||||||
|
mock_get_role.return_value = {'cluster_id': '1'}
|
||||||
|
mock_get_roles.return_value = [{'id': '1'}]
|
||||||
|
mock_get_cinder_volumes.return_value = [
|
||||||
|
{'id': '1', 'backend_index': 'FUJITSU_ETERNUS-1'}]
|
||||||
|
mock_update_cinder_volume.return_value = {}
|
||||||
|
self.controller.cinder_volume_update(self.req, cinder_volume_id,
|
||||||
|
disk_meta)
|
||||||
|
self.assertEqual('FUJITSU_ETERNUS-1',
|
||||||
|
disk_meta.get('backend_index', None))
|
||||||
|
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.'
|
||||||
|
'update_cinder_volume_metadata')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.'
|
||||||
|
'list_cinder_volume_metadata')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.get_roles_detail')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.get_role_metadata')
|
||||||
|
@mock.patch('daisy.registry.client.v1.api.'
|
||||||
|
'get_cinder_volume_detail_metadata')
|
||||||
|
def test_update_cinder_volume_with_another_volume_driver(
|
||||||
|
self, mock_get_cinder_volume, mock_get_role, mock_get_roles,
|
||||||
|
mock_get_cinder_volumes, mock_update_cinder_volume):
|
||||||
|
cinder_volume_id = '2'
|
||||||
|
disk_meta = {
|
||||||
|
'volume_driver': 'FUJITSU_ETERNUS',
|
||||||
|
'root_pwd': 'aaaaaaa',
|
||||||
|
'data_ips': ['192.168.1.2']
|
||||||
|
}
|
||||||
|
mock_get_cinder_volume.return_value = {
|
||||||
|
'role_id': '1', 'volume_driver': 'NETAPP_FCSAN',
|
||||||
|
'data_ips': '', 'root_pwd': 'bbbbbbb'}
|
||||||
|
mock_get_role.return_value = {'cluster_id': '1'}
|
||||||
|
mock_get_roles.return_value = [{'id': '1'}]
|
||||||
|
mock_get_cinder_volumes.return_value = [
|
||||||
|
{'id': '1', 'backend_index': 'FUJITSU_ETERNUS-1'},
|
||||||
|
{'id': '2', 'backend_index': 'NETAPP_FCSAN-1'}]
|
||||||
|
mock_update_cinder_volume.return_value = {}
|
||||||
|
self.controller.cinder_volume_update(self.req,
|
||||||
|
cinder_volume_id,
|
||||||
|
disk_meta)
|
||||||
|
self.assertEqual('FUJITSU_ETERNUS-2',
|
||||||
|
disk_meta.get('backend_index', None))
|
||||||
Reference in New Issue
Block a user