XtremIO: fix the returned value of CG actions

- create_consistencygroup_from_src
- create_cgsnapshot
- delete_cgsnapshot

Conflicts:
    cinder/tests/unit/test_emc_xtremio.py
    cinder/volume/drivers/emc/xtremio.py

Change-Id: Ied00d82ee3906e6eb7ad54b043f6137e10e62f14
(cherry picked from commit cb94db1933)
This commit is contained in:
Shay Halsband 2016-07-24 17:39:02 +03:00
parent 9b8b4a8c6a
commit 63e8d55fb2
2 changed files with 64 additions and 26 deletions

View File

@ -571,10 +571,53 @@ class EMCXIODriverISCSITestCase(test.TestCase):
self.driver.update_consistencygroup(d.context, d.group, self.driver.update_consistencygroup(d.context, d.group,
remove_volumes=[d.test_volume2]) remove_volumes=[d.test_volume2])
self.assertEqual(1, len(xms_data['consistency-group-volumes'])) self.assertEqual(1, len(xms_data['consistency-group-volumes']))
@mock.patch('cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot')
def test_create_cg(self, get_all_for_cgsnapshot, req):
req.side_effect = xms_request
d = self.data
snapshot_obj = fake_snapshot.fake_snapshot_obj(d.context)
snapshot_obj.consistencygroup_id = d.group['id']
get_all_for_cgsnapshot.return_value = [snapshot_obj]
self.driver.create_consistencygroup(d.context, d.group)
self.driver.update_consistencygroup(d.context, d.group,
add_volumes=[d.test_volume,
d.test_volume2])
self.driver.db = mock.Mock() self.driver.db = mock.Mock()
(self.driver.db. (self.driver.db.
volume_get_all_by_group.return_value) = [mock.MagicMock()] volume_get_all_by_group.return_value) = [mock.MagicMock()]
self.driver.create_cgsnapshot(d.context, d.cgsnapshot, []) res = self.driver.create_cgsnapshot(d.context, d.cgsnapshot,
[snapshot_obj])
self.assertEqual((None, None), res)
@mock.patch('cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot')
def test_cg_delete(self, get_all_for_cgsnapshot, req):
req.side_effect = xms_request
d = self.data
snapshot_obj = fake_snapshot.fake_snapshot_obj(d.context)
snapshot_obj.consistencygroup_id = d.group['id']
get_all_for_cgsnapshot.return_value = [snapshot_obj]
self.driver.create_consistencygroup(d.context, d.group)
self.driver.update_consistencygroup(d.context, d.group,
add_volumes=[d.test_volume,
d.test_volume2])
self.driver.db = mock.Mock()
(self.driver.db.
volume_get_all_by_group.return_value) = [mock.MagicMock()]
self.driver.create_cgsnapshot(d.context, d.cgsnapshot, [snapshot_obj])
self.driver.delete_consistencygroup(d.context, d.group, [])
@mock.patch('cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot')
def test_cg_snapshot(self, get_all_for_cgsnapshot, req):
req.side_effect = xms_request
d = self.data
snapshot_obj = fake_snapshot.fake_snapshot_obj(d.context)
snapshot_obj.consistencygroup_id = d.group['id']
get_all_for_cgsnapshot.return_value = [snapshot_obj]
self.driver.create_consistencygroup(d.context, d.group)
self.driver.update_consistencygroup(d.context, d.group,
add_volumes=[d.test_volume,
d.test_volume2])
snapset_name = self.driver._get_cgsnap_name(d.cgsnapshot) snapset_name = self.driver._get_cgsnap_name(d.cgsnapshot)
self.assertEqual(snapset_name, self.assertEqual(snapset_name,
'192eb39b6c2f420cbae33cfd117f0345192eb39b6c2f420cbae' '192eb39b6c2f420cbae33cfd117f0345192eb39b6c2f420cbae'
@ -584,9 +627,19 @@ class EMCXIODriverISCSITestCase(test.TestCase):
'name': snapset_name, 'name': snapset_name,
'index': 1} 'index': 1}
xms_data['snapshot-sets'] = {snapset_name: snapset1, 1: snapset1} xms_data['snapshot-sets'] = {snapset_name: snapset1, 1: snapset1}
self.driver.delete_cgsnapshot(d.context, d.cgsnapshot, []) res = self.driver.delete_cgsnapshot(d.context, d.cgsnapshot,
self.driver.delete_consistencygroup(d.context, d.group, []) [snapshot_obj])
xms_data['snapshot-sets'] = {} self.assertEqual((None, None), res)
def test_delete_cgsnapshot(self, req):
d = self.data
snapshot_obj = fake_snapshot.fake_snapshot_obj(d.context)
snapshot_obj.consistencygroup_id = d.group['id']
self.driver.delete_cgsnapshot(d.context, d.cgsnapshot,
[snapshot_obj])
req.assert_called_once_with('snapshot-sets', 'DELETE', None,
'192eb39b6c2f420cbae33cfd117f0345192eb39'
'b6c2f420cbae33cfd117f9876', None, 'v2')
@mock.patch('cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot') @mock.patch('cinder.objects.snapshot.SnapshotList.get_all_for_cgsnapshot')
def test_cg_from_src(self, get_all_for_cgsnapshot, req): def test_cg_from_src(self, get_all_for_cgsnapshot, req):
@ -618,9 +671,11 @@ class EMCXIODriverISCSITestCase(test.TestCase):
snapshot1 = (fake_snapshot snapshot1 = (fake_snapshot
.fake_snapshot_obj .fake_snapshot_obj
(d.context, volume_id=d.test_volume['id'])) (d.context, volume_id=d.test_volume['id']))
self.driver.create_consistencygroup_from_src(d.context, cg_obj, res = self.driver.create_consistencygroup_from_src(d.context, cg_obj,
[new_vol1], [new_vol1],
d.cgsnapshot, [snapshot1]) d.cgsnapshot,
[snapshot1])
self.assertEqual((None, None), res)
new_cg_obj = fake_cg.fake_consistencyobject_obj(d.context, id=5) new_cg_obj = fake_cg.fake_consistencyobject_obj(d.context, id=5)
snapset2_name = new_cg_obj.id snapset2_name = new_cg_obj.id

View File

@ -41,7 +41,6 @@ import six
from cinder import context from cinder import context
from cinder import exception from cinder import exception
from cinder.i18n import _, _LE, _LI, _LW from cinder.i18n import _, _LE, _LI, _LW
from cinder import objects
from cinder.objects import fields from cinder.objects import fields
from cinder import utils from cinder import utils
from cinder.volume import driver from cinder.volume import driver
@ -728,30 +727,14 @@ class XtremIOVolumeDriver(san.SanDriver):
'snapshot-set-name': self._get_cgsnap_name(cgsnapshot)} 'snapshot-set-name': self._get_cgsnap_name(cgsnapshot)}
self.client.req('snapshots', 'POST', data, ver='v2') self.client.req('snapshots', 'POST', data, ver='v2')
snapshots = objects.SnapshotList().get_all_for_cgsnapshot( return None, None
context, cgsnapshot['id'])
for snapshot in snapshots:
snapshot.status = 'available'
model_update = {'status': 'available'}
return model_update, snapshots
def delete_cgsnapshot(self, context, cgsnapshot, snapshots): def delete_cgsnapshot(self, context, cgsnapshot, snapshots):
"""Deletes a cgsnapshot.""" """Deletes a cgsnapshot."""
self.client.req('snapshot-sets', 'DELETE', self.client.req('snapshot-sets', 'DELETE',
name=self._get_cgsnap_name(cgsnapshot), ver='v2') name=self._get_cgsnap_name(cgsnapshot), ver='v2')
snapshots = objects.SnapshotList().get_all_for_cgsnapshot( return None, None
context, cgsnapshot['id'])
for snapshot in snapshots:
snapshot.status = 'deleted'
model_update = {'status': cgsnapshot.status}
return model_update, snapshots
def _get_ig(self, name): def _get_ig(self, name):
try: try: