def test_replace_connector_id_already_exist(self, mock_notify, mock_upd): connector_id = 'test-connector-id-123' mock_upd.side_effect = \ exception.VolumeConnectorTypeAndIdAlreadyExists( type=None, connector_id=connector_id) response = self.patch_json('/volume/connectors/%s' % self.connector.uuid, [{ 'path': '/connector_id', 'value': connector_id, 'op': 'replace' }], expect_errors=True, headers=self.headers) self.assertEqual('application/json', response.content_type) self.assertEqual(http_client.CONFLICT, response.status_code) self.assertTrue(response.json['error_message']) self.assertTrue(mock_upd.called) kargs = mock_upd.call_args[0][1] self.assertEqual(connector_id, kargs.connector_id) mock_notify.assert_has_calls([ mock.call(mock.ANY, mock.ANY, 'update', obj_fields.NotificationLevel.INFO, obj_fields.NotificationStatus.START, node_uuid=self.node.uuid), mock.call(mock.ANY, mock.ANY, 'update', obj_fields.NotificationLevel.ERROR, obj_fields.NotificationStatus.ERROR, node_uuid=self.node.uuid) ])
def create_volume_connector(self, connector_info): if 'uuid' not in connector_info: connector_info['uuid'] = uuidutils.generate_uuid() connector = models.VolumeConnector() connector.update(connector_info) with _session_for_write() as session: try: session.add(connector) session.flush() except db_exc.DBDuplicateEntry as exc: if 'type' in exc.columns: raise exception.VolumeConnectorTypeAndIdAlreadyExists( type=connector_info['type'], connector_id=connector_info['connector_id']) raise exception.VolumeConnectorAlreadyExists( uuid=connector_info['uuid']) return connector
def update_volume_connector(self, ident, connector_info): if 'uuid' in connector_info: msg = _("Cannot overwrite UUID for an existing Volume Connector.") raise exception.InvalidParameterValue(err=msg) try: with _session_for_write() as session: query = model_query(models.VolumeConnector) query = add_identity_filter(query, ident) ref = query.one() orig_type = ref['type'] orig_connector_id = ref['connector_id'] ref.update(connector_info) session.flush() except db_exc.DBDuplicateEntry: raise exception.VolumeConnectorTypeAndIdAlreadyExists( type=connector_info.get('type', orig_type), connector_id=connector_info.get('connector_id', orig_connector_id)) except NoResultFound: raise exception.VolumeConnectorNotFound(connector=ident) return ref