Exemple #1
0
 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)
Exemple #3
0
    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, '', '')