def handle_errors(self, response, key, object_type): if response.status_code == 400: error = response.json() err_msg = error.get('message') if err_msg.endswith(OBJ_NOT_FOUND_ERR): LOG.warning(_LW("object %(key)s of " "type %(typ)s not found, %(err_msg)s"), {'key': key, 'typ': object_type, 'err_msg': err_msg, }) raise exception.NotFound() elif err_msg == VOL_NOT_UNIQUE_ERR: LOG.error(_LE("can't create 2 volumes with the same name, %s"), err_msg) msg = (_('Volume by this name already exists')) raise exception.VolumeBackendAPIException(data=msg) elif err_msg == VOL_OBJ_NOT_FOUND_ERR: LOG.error(_LE("Can't find volume to map %(key)s, %(msg)s"), {'key': key, 'msg': err_msg, }) raise exception.VolumeNotFound(volume_id=key) elif ALREADY_MAPPED_ERR in err_msg: raise exception.XtremIOAlreadyMappedError() elif err_msg == SYSTEM_BUSY: raise exception.XtremIOArrayBusy() elif err_msg in (TOO_MANY_OBJECTS, TOO_MANY_SNAPSHOTS_PER_VOL): raise exception.XtremIOSnapshotsLimitExceeded() msg = _('Bad response from XMS, %s') % response.text LOG.error(msg) raise exception.VolumeBackendAPIException(message=msg)
def test_clone_volume_exceed_array_limit(self, create_snap, req): create_snap.side_effect = exception.XtremIOSnapshotsLimitExceeded() req.side_effect = xms_request self.driver.db = mock.Mock() (self.driver.db.image_volume_cache_get_by_volume_id.return_value ) = mock.MagicMock() self.driver.create_volume(self.data.test_volume) xms_data['volumes'][1]['num-of-dest-snaps'] = 50 self.assertRaises(exception.CinderException, self.driver.create_cloned_volume, self.data.test_clone, self.data.test_volume)
def test_clone_volume(self, req): req.side_effect = xms_request self.driver.db = mock.Mock() (self.driver.db. image_volume_cache_get_by_volume_id.return_value) = mock.MagicMock() self.driver.create_volume(self.data.test_volume) vol = xms_data['volumes'][1] vol['num-of-dest-snaps'] = 200 self.assertRaises(exception.CinderException, self.driver.create_cloned_volume, self.data.test_clone, self.data.test_volume) vol['num-of-dest-snaps'] = 50 self.driver.create_cloned_volume(self.data.test_clone, self.data.test_volume) self.driver.delete_volume(self.data.test_clone) self.driver.delete_volume(self.data.test_volume) mock.patch.object(self.driver.client, 'create_snapshot', mock.Mock(side_effect= exception.XtremIOSnapshotsLimitExceeded())) self.assertRaises(exception.CinderException, self.driver.create_cloned_volume, self.data.test_clone, self.data.test_volume) response = mock.MagicMock() response.status_code = 400 response.json.return_value = { "message": "too_many_snapshots_per_vol", "error_code": 400 } self.assertRaises(exception.XtremIOSnapshotsLimitExceeded, self.driver.client.handle_errors, response, '', '') response.json.return_value = { "message": "too_many_objs", "error_code": 400 } self.assertRaises(exception.XtremIOSnapshotsLimitExceeded, self.driver.client.handle_errors, response, '', '')