public void constructor_should_initialize_subject() { var subject = new MongoWriteException(_connectionId, _writeError, _writeConcernError, _innerException); subject.ConnectionId.Should().Be(_connectionId); subject.InnerException.Should().Be(_innerException); subject.Message.Should().Be("A write operation resulted in an error." + Environment.NewLine + " writeError" + Environment.NewLine + " writeConcernError"); subject.WriteConcernError.Should().Be(_writeConcernError); subject.WriteError.Should().Be(_writeError); }
/// <summary> /// Handles a mongo write exception that was thrown when attempting to create an entity. /// </summary> /// <param name="exception">The exception.</param> /// <param name="request">The request.</param> protected override void HandleOnCreate(MongoWriteException exception, CreateBreakfastItemRequest request) { if (exception.WriteError.Category == ServerErrorCategory.DuplicateKey) { throw BadRequestException.Duplicate <BreakfastItem>(x => x.Name, request.Name, exception); } }
private void HandleWriteException <T>(MongoWriteException ex) { if (ex.WriteError.Category == ServerErrorCategory.DuplicateKey) { throw new DuplicateKeyException($"Error adding item of type {nameof(T)}", typeof(T), ex); } throw new OperationFailedException("Operation was not completed.", ex); }
public void constructor_should_initialize_subject() { var subject = new MongoWriteException(__connectionId, __writeError, __writeConcernError, __innerException); subject.ConnectionId.Should().Be(__connectionId); subject.InnerException.Should().Be(__innerException); subject.Message.Should().Be("A write operation resulted in an error." + Environment.NewLine + " writeError" + Environment.NewLine + " writeConcernError"); subject.WriteConcernError.Should().Be(__writeConcernError); subject.WriteError.Should().Be(__writeError); }
public static bool IsUniqueViolation(this MongoWriteException exception) { var result = false; if (exception != null && exception.WriteError != null) { result = exception.WriteError.Code.Equals(MongoUniqueViolationCode); } return(result); }
public void ShouldReturnFalseIfPassedNullMongoWriteException() { // Arrange MongoWriteException exception = null; // Act var result = exception.IsUniqueViolation(); // Assert result.Should().BeFalse(); }
public void constructor_should_initialize_subject() { var subject = new MongoWriteException(__connectionId, __writeError, __writeConcernError, __innerException); subject.ConnectionId.Should().Be(__connectionId); subject.ErrorLabels.Should().BeEquivalentTo(__writeConcernError.ErrorLabels); subject.InnerException.Should().Be(__innerException); subject.Message.Should().Be("A write operation resulted in an error. WriteError: { Category : \"Uncategorized\", Code : 1, Message : \"writeError\", Details : \"{ \"details\" : \"writeError\" }\" }. WriteConcernError: { Code : \"1\", Message : \"writeConcernError\", Details : \"{ \"details\" : \"writeConcernError\" }\", ErrorLabels : [ \"RetryableWriteError\" ] }."); subject.WriteConcernError.Should().Be(__writeConcernError); subject.WriteError.Should().Be(__writeError); }
public void Setup() { IdentityResourceDataAccessMock = new Mock <IIdentityResourceDataAccess>(); IdentityResourceService = new IdentityResourceService(IdentityResourceDataAccessMock.Object); var connectionId = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2); var writeConcernErrorConstructor = typeof(WriteError).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic)[0]; var writeError = (WriteError)writeConcernErrorConstructor.Invoke(new object[] { ServerErrorCategory.DuplicateKey, 11000, "writeError", new BsonDocument("details", "writeError") }); MongoWriteException = new MongoWriteException(connectionId, writeError, null, null); }
static MockMongoCollection() { var connectionId = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2); var innerException = new Exception("inner"); var ctor = typeof(WriteConcernError).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic)[0]; var writeConcernError = (WriteConcernError)ctor.Invoke(new object[] { 1, "writeConcernError", new BsonDocument("details", "writeConcernError") }); ctor = typeof(WriteError).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic)[0]; var writeError = (WriteError)ctor.Invoke(new object[] { ServerErrorCategory.Uncategorized, 1, "writeError", new BsonDocument("details", "writeError") }); __writeException = new MongoWriteException(connectionId, writeError, writeConcernError, innerException); }
public void Setup() { ApiScopeDataAccessMock = new Mock <IApiScopeDataAccess>(); ApiScopeService = new ApiScopeService(ApiScopeDataAccessMock.Object); ExpressionItsAny = It.IsAny <Expression <Func <ApiScopeData, bool> > >(); var connectionId = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2); var writeConcernErrorConstructor = typeof(WriteError).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic)[0]; var writeError = (WriteError)writeConcernErrorConstructor.Invoke(new object[] { ServerErrorCategory.DuplicateKey, 11000, "writeError", new BsonDocument("details", "writeError") }); MongoWriteException = new MongoWriteException(connectionId, writeError, null, null); }
public override void OnException(ExceptionContext context) { string message = ""; #if DEBUG message = context.Exception.Message; #else message = "Ocurrió un error al procesar la solicitud"; #endif GenericResponse <object> response = new GenericResponse <object>() { IsSuccessful = false }; if (context.Exception is MongoDbConnectionException) { response.Message = message; response.StatusCode = (int)HttpStatusCode.Conflict; } else if (context.Exception is MongoWriteException) { MongoWriteException mdbException = context.Exception as MongoWriteException; response.Message = message; if (mdbException.WriteError.Category == ServerErrorCategory.DuplicateKey) { string messageField = mdbException.WriteError.Message; int indexPesosSign = messageField.IndexOf("{"); string campo = messageField.Substring(indexPesosSign, (messageField.Length - indexPesosSign)); int indexUnderLine = campo.IndexOf(":"); campo = campo.Substring(1, indexUnderLine - 1).Trim(); response.Message = $"No se puede duplicar el valor para '{campo}'"; response.StatusCode = (int)HttpStatusCode.Conflict; } } else if (context.Exception is MongoAuthenticationException) { response.Message = "No hay acceso al servidor BD solicitado"; response.StatusCode = (int)HttpStatusCode.Conflict; } else if (context.Exception is Exception) { response.Message = message; response.StatusCode = (int)HttpStatusCode.InternalServerError; } ObjectResult objectResult = new ObjectResult(response); objectResult.StatusCode = response.StatusCode; context.Result = objectResult; }
public void ShouldReturnFalseIfPassedMongoWriteExceptionWithWriteErrorAsNull() { // Arrange var connectionId = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2); WriteError writeError = null; WriteConcernError writeConcernError = null; Exception innerException = new InvalidOperationException(); var exception = new MongoWriteException(connectionId, writeError, writeConcernError, innerException); // Act var result = exception.IsUniqueViolation(); // Assert result.Should().BeFalse(); }
public void ShouldReturnTrueIfPassedMongoWriteExceptionWithWriteError() { // Arrange var connectionId = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2); var innerException = new Exception("inner"); WriteConcernError writeConcernError = null; var ctor = typeof(WriteError).GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic)[0]; var writeError = (WriteError)ctor.Invoke(new object[] { ServerErrorCategory.Uncategorized, MongoUniqueViolationCode, "writeError", new BsonDocument("details", "writeError") }); var exception = new MongoWriteException(connectionId, writeError, writeConcernError, innerException); // Act var result = exception.IsUniqueViolation(); // Assert result.Should().BeTrue(); }
public void Serialization_should_work() { var subject = new MongoWriteException(_connectionId, _writeError, _writeConcernError, _innerException); var formatter = new BinaryFormatter(); using (var stream = new MemoryStream()) { formatter.Serialize(stream, subject); stream.Position = 0; var rehydrated = (MongoWriteException)formatter.Deserialize(stream); rehydrated.ConnectionId.Should().Be(subject.ConnectionId); rehydrated.InnerException.Message.Should().Be(subject.InnerException.Message); // Exception does not override Equals rehydrated.Message.Should().Be(subject.Message); rehydrated.WriteConcernError.Should().BeUsing(subject.WriteConcernError, EqualityComparerRegistry.Default); rehydrated.WriteError.Should().BeUsing(subject.WriteError, EqualityComparerRegistry.Default); } }
public void FromBulkWriteException_should_return_expected_result() { var processedRequests = new[] { new InsertOneModel <BsonDocument>(new BsonDocument("_id", 1)) }; var upserts = new List <BulkWriteUpsert>(); var bulkWriteResult = new BulkWriteResult <BsonDocument> .Acknowledged(1, 1, 0, 0, 0, processedRequests, upserts); var writeErrors = new[] { new BulkWriteError(1, ServerErrorCategory.Uncategorized, 2, "message", new BsonDocument("details", 1)) }; var writeConcernError = new WriteConcernError(1, "message", new BsonDocument("details", 1)); var unprocessedRequests = new List <WriteModel <BsonDocument> >(); var bulkWriteException = new MongoBulkWriteException <BsonDocument>(__connectionId, bulkWriteResult, writeErrors, writeConcernError, unprocessedRequests); var result = MongoWriteException.FromBulkWriteException(bulkWriteException); result.ConnectionId.Should().Be(__connectionId); result.InnerException.Should().BeSameAs(bulkWriteException); result.Message.Should().Be("A write operation resulted in an error." + Environment.NewLine + " message" + Environment.NewLine + " message"); result.WriteConcernError.Should().Be(writeConcernError); result.WriteError.Should().Be(writeErrors[0]); }
public void Serialization_should_work() { var subject = new MongoWriteException(__connectionId, __writeError, __writeConcernError, __innerException); var formatter = new BinaryFormatter(); using (var stream = new MemoryStream()) { formatter.Serialize(stream, subject); stream.Position = 0; var rehydrated = (MongoWriteException)formatter.Deserialize(stream); rehydrated.ConnectionId.Should().Be(subject.ConnectionId); rehydrated.InnerException.Message.Should().Be(subject.InnerException.Message); // Exception does not override Equals rehydrated.Message.Should().Be(subject.Message); rehydrated.WriteConcernError.Should().BeUsing(subject.WriteConcernError, EqualityComparerRegistry.Default); rehydrated.WriteError.Should().BeUsing(subject.WriteError, EqualityComparerRegistry.Default); } }
public void FromBulkWriteException_should_return_expected_result() { var processedRequests = new[] { new InsertOneModel <BsonDocument>(new BsonDocument("_id", 1)) }; var upserts = new List <BulkWriteUpsert>(); var bulkWriteResult = new BulkWriteResult <BsonDocument> .Acknowledged(1, 1, 0, 0, 0, processedRequests, upserts); var writeErrors = new[] { new BulkWriteError(1, ServerErrorCategory.Uncategorized, 2, "message", new BsonDocument("details", 1)) }; var writeConcernError = new WriteConcernError(1, null, "message", new BsonDocument("details", 1), new[] { "RetryableWriteError" }); var unprocessedRequests = new List <WriteModel <BsonDocument> >(); var bulkWriteException = new MongoBulkWriteException <BsonDocument>(__connectionId, bulkWriteResult, writeErrors, writeConcernError, unprocessedRequests); var result = MongoWriteException.FromBulkWriteException(bulkWriteException); result.ConnectionId.Should().Be(__connectionId); result.ErrorLabels.Should().BeEquivalentTo(writeConcernError.ErrorLabels); result.InnerException.Should().BeSameAs(bulkWriteException); result.Message.Should().Be("A write operation resulted in an error. WriteError: { Category : \"Uncategorized\", Code : 2, Message : \"message\", Details : \"{ \"details\" : 1 }\" }. WriteConcernError: { Code : \"1\", Message : \"message\", Details : \"{ \"details\" : 1 }\", ErrorLabels : [ \"RetryableWriteError\" ] }."); result.WriteConcernError.Should().Be(writeConcernError); result.WriteError.Should().Be(writeErrors[0]); }
public static bool IsDuplicateKeyException(this MongoWriteException ex) { return(ex.WriteError != null && ex.WriteError.Code == 11000); }
public static bool MeansDuplicateKey(this MongoWriteException e) => e.Message.Contains("E11000 duplicate key error");
/// <summary> /// Handles a mongo write exception that was thrown when attempting to create an entity. /// </summary> /// <param name="exception">The exception.</param> /// <param name="request">The request.</param> protected virtual void HandleOnCreate(MongoWriteException exception, TCreateRequest request) { }