Merge "Forbidden to revert volume to a different size snapshot"
This commit is contained in:
commit
71235144f9
@ -190,6 +190,12 @@ class VolumeController(volumes_v2.VolumeController):
|
|||||||
"the latest one of volume %(v_id)s.")
|
"the latest one of volume %(v_id)s.")
|
||||||
raise exc.HTTPBadRequest(explanation=msg % {'s_id': snapshot_id,
|
raise exc.HTTPBadRequest(explanation=msg % {'s_id': snapshot_id,
|
||||||
'v_id': volume.id})
|
'v_id': volume.id})
|
||||||
|
if volume.size != l_snap.volume_size:
|
||||||
|
msg = _("Can't revert volume %(v_id)s to its latest snapshot "
|
||||||
|
"%(s_id)s. The volume size must be equal to the snapshot "
|
||||||
|
"size.")
|
||||||
|
raise exc.HTTPBadRequest(explanation=msg % {'s_id': snapshot_id,
|
||||||
|
'v_id': volume.id})
|
||||||
try:
|
try:
|
||||||
msg = 'Reverting volume %(v_id)s to snapshot %(s_id)s.'
|
msg = 'Reverting volume %(v_id)s to snapshot %(s_id)s.'
|
||||||
LOG.info(msg, {'v_id': volume.id,
|
LOG.info(msg, {'v_id': volume.id,
|
||||||
|
@ -786,20 +786,22 @@ class VolumeApiTest(test.TestCase):
|
|||||||
else:
|
else:
|
||||||
self.assertNotIn('provider_id', res_dict['volume'])
|
self.assertNotIn('provider_id', res_dict['volume'])
|
||||||
|
|
||||||
def _fake_create_volume(self):
|
def _fake_create_volume(self, size=1):
|
||||||
vol = {
|
vol = {
|
||||||
'display_name': 'fake_volume1',
|
'display_name': 'fake_volume1',
|
||||||
'status': 'available'
|
'status': 'available',
|
||||||
|
'size': size
|
||||||
}
|
}
|
||||||
volume = objects.Volume(context=self.ctxt, **vol)
|
volume = objects.Volume(context=self.ctxt, **vol)
|
||||||
volume.create()
|
volume.create()
|
||||||
return volume
|
return volume
|
||||||
|
|
||||||
def _fake_create_snapshot(self, volume_id):
|
def _fake_create_snapshot(self, volume_id, volume_size=1):
|
||||||
snap = {
|
snap = {
|
||||||
'display_name': 'fake_snapshot1',
|
'display_name': 'fake_snapshot1',
|
||||||
'status': 'available',
|
'status': 'available',
|
||||||
'volume_id': volume_id
|
'volume_id': volume_id,
|
||||||
|
'volume_size': volume_size
|
||||||
}
|
}
|
||||||
snapshot = objects.Snapshot(context=self.ctxt, **snap)
|
snapshot = objects.Snapshot(context=self.ctxt, **snap)
|
||||||
snapshot.create()
|
snapshot.create()
|
||||||
@ -870,6 +872,24 @@ class VolumeApiTest(test.TestCase):
|
|||||||
req, fake_volume['id'], {'revert': {'snapshot_id':
|
req, fake_volume['id'], {'revert': {'snapshot_id':
|
||||||
fake_snapshot['id']}})
|
fake_snapshot['id']}})
|
||||||
|
|
||||||
|
@mock.patch.object(objects.Volume, 'get_latest_snapshot')
|
||||||
|
@mock.patch.object(volume_api.API, 'get_volume')
|
||||||
|
def test_volume_revert_with_not_equal_size(self, mock_volume,
|
||||||
|
mock_latest):
|
||||||
|
fake_volume = self._fake_create_volume(size=2)
|
||||||
|
fake_snapshot = self._fake_create_snapshot(fake_volume['id'],
|
||||||
|
volume_size=1)
|
||||||
|
mock_volume.return_value = fake_volume
|
||||||
|
mock_latest.return_value = fake_snapshot
|
||||||
|
req = fakes.HTTPRequest.blank('/v3/volumes/%s/revert'
|
||||||
|
% fake_volume['id'])
|
||||||
|
req.headers = mv.get_mv_header(mv.VOLUME_REVERT)
|
||||||
|
req.api_version_request = mv.get_api_version(
|
||||||
|
mv.VOLUME_REVERT)
|
||||||
|
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.revert,
|
||||||
|
req, fake_volume['id'],
|
||||||
|
{'revert': {'snapshot_id': fake_snapshot['id']}})
|
||||||
|
|
||||||
def test_view_get_attachments(self):
|
def test_view_get_attachments(self):
|
||||||
fake_volume = self._fake_create_volume()
|
fake_volume = self._fake_create_volume()
|
||||||
fake_volume['attach_status'] = fields.VolumeAttachStatus.ATTACHING
|
fake_volume['attach_status'] = fields.VolumeAttachStatus.ATTACHING
|
||||||
|
Loading…
x
Reference in New Issue
Block a user