public void OneTimeSetUp()
 {
     _connectionId      = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2);
     _innerException    = new Exception("inner");
     _writeConcernError = new WriteConcernError(1, "writeConcernError", new BsonDocument("details", "writeConcernError"));
     _writeError        = new WriteError(ServerErrorCategory.Uncategorized, 1, "writeError", new BsonDocument("details", "writeError"));
 }
 private BulkWriteBatchResult CreateBatchResult(
     int?batchCount     = null,
     int?requestCount   = null,
     long?matchedCount  = null,
     long?deletedCount  = null,
     long?insertedCount = null,
     long?modifiedCount = null,
     IEnumerable <WriteRequest> processedRequests   = null,
     IEnumerable <WriteRequest> unprocessedRequests = null,
     IEnumerable <BulkWriteUpsert> upserts          = null,
     IEnumerable <BulkWriteError> writeErrors       = null,
     WriteConcernError writeConcernError            = null,
     IndexMap indexMap = null,
     Batch <WriteRequest> nextBatch = null)
 {
     return(new BulkWriteBatchResult(
                batchCount ?? 1,
                processedRequests ?? Enumerable.Empty <WriteRequest>(),
                unprocessedRequests ?? Enumerable.Empty <WriteRequest>(),
                matchedCount ?? 0,
                deletedCount ?? 0,
                insertedCount ?? 0,
                modifiedCount ?? 0,
                upserts ?? Enumerable.Empty <BulkWriteUpsert>(),
                writeErrors ?? Enumerable.Empty <BulkWriteError>(),
                writeConcernError,
                indexMap ?? IndexMap.IdentityMap,
                nextBatch));
 }
 // constructors
 public BulkWriteBatchResult(
     int batchCount,
     IEnumerable <WriteRequest> processedRequests,
     IEnumerable <WriteRequest> unprocessedRequests,
     long matchedCount,
     long deletedCount,
     long insertedCount,
     long?modifiedCount,
     IEnumerable <BulkWriteUpsert> upserts,
     IEnumerable <BulkWriteError> writeErrors,
     WriteConcernError writeConcernError,
     IndexMap indexMap,
     Batch <WriteRequest> nextBatch)
 {
     _batchCount          = batchCount;
     _matchedCount        = matchedCount;
     _deletedCount        = deletedCount;
     _insertedCount       = insertedCount;
     _modifiedCount       = modifiedCount;
     _indexMap            = indexMap;
     _nextBatch           = nextBatch;
     _processedRequests   = ToReadOnlyCollection(processedRequests);
     _writeErrors         = ToReadOnlyCollection(writeErrors);
     _unprocessedRequests = ToReadOnlyCollection(unprocessedRequests);
     _upserts             = ToReadOnlyCollection(upserts);
     _writeConcernError   = writeConcernError;
 }
 public void TestFixtureSetup()
 {
     _connectionId = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2);
     _innerException = new Exception("inner");
     _writeConcernError = new WriteConcernError(1, "writeConcernError", new BsonDocument("details", "writeConcernError"));
     _writeError = new WriteError(ServerErrorCategory.Uncategorized, 1, "writeError", new BsonDocument("details", "writeError"));
 }
 public void TestFixtureSetup()
 {
     _connectionId      = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2);
     _innerException    = new Exception("inner");
     _writeConcernError = new WriteConcernError(1, "writeConcernError", new BsonDocument("details", "writeConcernError"));
     _writeError        = new WriteError(1, "writeError", new BsonDocument("details", "writeError"));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="WriteException" /> class.
 /// </summary>
 /// <param name="writeError">The write error.</param>
 /// <param name="writeConcernError">The write concern error.</param>
 public WriteException(
     WriteError writeError,
     WriteConcernError writeConcernError)
     : base("A write operation resulted in an error.")
 {
     _writeError = writeError;
     _writeConcernError = writeConcernError;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="BulkWriteException"/> class.
 /// </summary>
 /// <param name="writeErrors">The write errors.</param>
 /// <param name="writeConcernError">The write concern error.</param>
 public BulkWriteException(
     IEnumerable<BulkWriteError> writeErrors,
     WriteConcernError writeConcernError)
     : base("A bulk write operation resulted in one or more errors.")
 {
     _writeErrors = writeErrors.ToList();
     _writeConcernError = writeConcernError;
 }
 public bool OneTimeSetup()
 {
     __connectionId      = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2);
     __innerException    = new Exception("inner");
     __writeConcernError = new WriteConcernError(1, null, "writeConcernError", new BsonDocument("details", "writeConcernError"), new[] { "RetryableWriteError" });
     __writeError        = new WriteError(ServerErrorCategory.Uncategorized, 1, "writeError", new BsonDocument("details", "writeError"));
     return(true);
 }
Exemplo n.º 9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MongoBulkWriteException" /> class.
 /// </summary>
 /// <param name="connectionId">The connection identifier.</param>
 /// <param name="writeErrors">The write errors.</param>
 /// <param name="writeConcernError">The write concern error.</param>
 public MongoBulkWriteException(
     ConnectionId connectionId,
     IEnumerable<BulkWriteError> writeErrors,
     WriteConcernError writeConcernError)
     : base(connectionId, message: FormatMessage(writeErrors, writeConcernError))
 {
     _writeErrors = writeErrors.ToList();
     _writeConcernError = writeConcernError;
 }
Exemplo n.º 10
0
        public void OneTimeSetUp()
        {
            _connectionId = new ConnectionId(new ServerId(new ClusterId(1), new DnsEndPoint("localhost", 27017)), 2);
            var processedRequests = new[] { new InsertOneModel <BsonDocument>(new BsonDocument("b", 1)) };
            var upserts           = new BulkWriteUpsert[0];

            _bulkWriteResult = new BulkWriteResult <BsonDocument> .Acknowledged(1, 1, 0, 0, 0, processedRequests, upserts);

            _writeConcernError   = new WriteConcernError(11, "funny", new BsonDocument("c", 1));
            _writeErrors         = new[] { new BulkWriteError(10, ServerErrorCategory.Uncategorized, 1, "blah", new BsonDocument("a", 1)) };
            _unprocessedRequests = new[] { new InsertOneModel <BsonDocument>(new BsonDocument("a", 1)) };
        }
Exemplo n.º 11
0
 // constructors
 /// <summary>
 /// Initializes a new instance of the <see cref="BulkWriteException" /> class.
 /// </summary>
 /// <param name="result">The result.</param>
 /// <param name="writeErrors">The write errors.</param>
 /// <param name="unprocessedRequests">The unprocessed requests.</param>
 /// <param name="writeConcernError">The write concern error.</param>
 public BulkWriteException(
     BulkWriteResult result,
     IReadOnlyList <BulkWriteError> writeErrors,
     WriteConcernError writeConcernError,
     IReadOnlyList <WriteRequest> unprocessedRequests)
     : base("A bulk write operation resulted in one or more errors.")
 {
     _result              = result;
     _writeErrors         = writeErrors;
     _writeConcernError   = writeConcernError;
     _unprocessedRequests = unprocessedRequests;
 }
        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 ToString_should_return_expected_result(
            int code,
            string codeName,
            string message,
            string detailsJson,
            string[] errorLabels,
            string expectedResult)
        {
            var details           = detailsJson == null ? null : BsonDocument.Parse(detailsJson);
            var writeConcernError = new WriteConcernError(code, codeName, message, details, errorLabels);

            var result = writeConcernError.ToString();

            result.Should().Be(expectedResult);
        }
Exemplo n.º 14
0
        public void Constructor_should_work()
        {
            var processedRequests   = new WriteRequest[0];
            var upserts             = new BulkWriteUpsert[0];
            var result              = new AcknowledgedBulkWriteResult(1, 2, 3, 4, 5, processedRequests, upserts);
            var writeErrors         = new BulkWriteError[0];
            var writeConcernError   = new WriteConcernError(1, "message", new BsonDocument("x", 1));
            var unprocessedRequests = new WriteRequest[0];
            var subject             = new BulkWriteException(result, writeErrors, writeConcernError, unprocessedRequests);

            subject.Result.Should().BeSameAs(result);
            subject.UnprocessedRequests.Should().BeSameAs(unprocessedRequests);
            subject.WriteConcernError.Should().BeSameAs(writeConcernError);
            subject.WriteErrors.Should().BeSameAs(writeErrors);
        }
        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 static methods
        public static BulkWriteBatchResult Create(
            BulkWriteResult result,
            BulkWriteException exception,
            IndexMap indexMap)
        {
            var  matchedCount  = 0L;
            var  deletedCount  = 0L;
            var  insertedCount = 0L;
            long?modifiedCount = null;
            var  upserts       = Enumerable.Empty <BulkWriteUpsert>();

            if (result.IsAcknowledged)
            {
                matchedCount  = result.MatchedCount;
                deletedCount  = result.DeletedCount;
                insertedCount = result.InsertedCount;
                modifiedCount = result.IsModifiedCountAvailable ? (long?)result.ModifiedCount : null;
                upserts       = result.Upserts;
            }

            var unprocessedRequests             = __noWriteRequests;
            var writeErrors                     = __noWriteErrors;
            WriteConcernError writeConcernError = null;

            if (exception != null)
            {
                unprocessedRequests = exception.UnprocessedRequests;
                writeErrors         = exception.WriteErrors;
                writeConcernError   = exception.WriteConcernError;
            }

            return(new BulkWriteBatchResult(
                       result.RequestCount,
                       result.ProcessedRequests,
                       unprocessedRequests,
                       matchedCount,
                       deletedCount,
                       insertedCount,
                       modifiedCount,
                       upserts,
                       writeErrors,
                       writeConcernError,
                       indexMap,
                       null));
        }
        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]);
        }
Exemplo n.º 18
0
        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 constructor_should_initialize_subject()
        {
            var code     = 1;
            var codeName = "47";
            var message  = "Error message";
            var details  = new BsonDocument
            {
                { "details", new BsonDocument() }
            };
            var errorLabels = new[] { "1", "2" };

            var subject = new WriteConcernError(code, codeName, message, details, errorLabels);

            subject.Code.Should().Be(code);
            subject.CodeName.Should().Be(codeName);
            subject.Message.Should().Be(message);
            subject.Details.Should().Be(details);
            subject.ErrorLabels.Should().BeEquivalentTo(errorLabels);
        }
Exemplo n.º 20
0
        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]);
        }
Exemplo n.º 21
0
        public void Serialization_should_drop_custom_fields()
        {
            var processedRequests   = new WriteRequest[0];
            var upserts             = new BulkWriteUpsert[0];
            var result              = new AcknowledgedBulkWriteResult(1, 2, 3, 4, 5, processedRequests, upserts);
            var writeErrors         = new BulkWriteError[0];
            var writeConcernError   = new WriteConcernError(1, "message", new BsonDocument("x", 1));
            var unprocessedRequests = new WriteRequest[0];
            var subject             = new BulkWriteException(result, writeErrors, writeConcernError, unprocessedRequests);

            var formatter = new BinaryFormatter();

            using (var stream = new MemoryStream())
            {
                formatter.Serialize(stream, subject);
                stream.Position = 0;
                var rehydrated = (BulkWriteException)formatter.Deserialize(stream);

                rehydrated.Result.Should().BeNull();
                rehydrated.UnprocessedRequests.Should().BeNull();
                rehydrated.WriteConcernError.Should().BeNull();
                rehydrated.WriteErrors.Should().BeNull();
            }
        }
        public static BulkWriteBatchResult Create(
            WriteRequest request,
            WriteConcernResult writeConcernResult,
            WriteConcernException writeConcernException,
            IndexMap indexMap)
        {
            var processedRequests   = new[] { request };
            var unprocessedRequests = Enumerable.Empty <WriteRequest>();
            var upsertId            = (writeConcernResult == null) ? null : writeConcernResult.Upserted;
            var upserts             = (upsertId == null) ? Enumerable.Empty <BulkWriteUpsert>() : new[] { new BulkWriteUpsert(0, upsertId) };
            var writeErrors         = __noWriteErrors;
            WriteConcernError    writeConcernError = null;
            Batch <WriteRequest> nextBatch         = null;

            if (writeConcernException != null)
            {
                var getLastErrorResponse = writeConcernResult.Response;
                if (IsGetLasterrorResponseAWriteConcernError(getLastErrorResponse))
                {
                    writeConcernError = CreateWriteConcernErrorFromGetLastErrorResponse(getLastErrorResponse);
                }
                else
                {
                    writeErrors = new[] { CreateWriteErrorFromGetLastErrorResponse(getLastErrorResponse) };
                }
            }

            var documentsAffected = (writeConcernResult == null) ? 0 : writeConcernResult.DocumentsAffected;

            if (request.RequestType == WriteRequestType.Insert && writeErrors.Count == 0)
            {
                documentsAffected = 1; // note: DocumentsAffected is 0 for inserts
            }

            var  matchedCount  = 0L;
            var  deletedCount  = 0L;
            var  insertedCount = 0L;
            long?modifiedCount = 0L;

            switch (request.RequestType)
            {
            case WriteRequestType.Delete:
                deletedCount = documentsAffected;
                break;

            case WriteRequestType.Insert:
                insertedCount = documentsAffected;
                break;

            case WriteRequestType.Update:
                matchedCount  = documentsAffected - upserts.Count();
                modifiedCount = null;     // getLasterror does not report this value
                break;
            }

            return(new BulkWriteBatchResult(
                       1, // batchCount
                       processedRequests,
                       unprocessedRequests,
                       matchedCount,
                       deletedCount,
                       insertedCount,
                       modifiedCount,
                       upserts,
                       writeErrors,
                       writeConcernError,
                       indexMap,
                       nextBatch));
        }
Exemplo n.º 23
0
        // private static methods
        private static string FormatMessage(IEnumerable<BulkWriteError> writeErrors, WriteConcernError writeConcernError)
        {
            var sb = new StringBuilder("A bulk write operation resulted in one or more errors.");
            if (writeErrors != null)
            {
                foreach (var writeError in writeErrors)
                {
                    sb.AppendLine().Append("  " + writeError.Message);
                }
            }
            if (writeConcernError != null)
            {
                sb.AppendLine().Append("  " + writeConcernError.Message);
            }

            return sb.ToString();
        }
        public static BulkWriteBatchResult Create(
            WriteRequest request,
            WriteConcernResult writeConcernResult,
            WriteConcernException writeConcernException,
            IndexMap indexMap)
        {
            var       processedRequests   = new[] { request };
            var       unprocessedRequests = Enumerable.Empty <WriteRequest>();
            BsonValue upsertId            = null;
            var       documentsAffected   = 0L;

            if (writeConcernResult != null)
            {
                upsertId          = writeConcernResult.Upserted;
                documentsAffected = writeConcernResult.DocumentsAffected;
                var updateRequest = request as UpdateRequest;

                if (upsertId == null &&
                    documentsAffected == 1 &&
                    updateRequest != null &&
                    updateRequest.IsUpsert.GetValueOrDefault(false) &&
                    !writeConcernResult.UpdatedExisting)
                {
                    // Get the _id field first from the Update document
                    // and then from the Query document.
                    upsertId =
                        updateRequest.Update.ToBsonDocument().GetValue("_id", null) ??
                        updateRequest.Query.ToBsonDocument().GetValue("_id", null);
                }
            }

            var upserts     = (upsertId == null) ? Enumerable.Empty <BulkWriteUpsert>() : new[] { new BulkWriteUpsert(0, upsertId) };
            var writeErrors = __noWriteErrors;
            WriteConcernError    writeConcernError = null;
            Batch <WriteRequest> nextBatch         = null;

            if (writeConcernException != null)
            {
                var getLastErrorResponse = writeConcernResult.Response;
                if (IsGetLasterrorResponseAWriteConcernError(getLastErrorResponse))
                {
                    writeConcernError = CreateWriteConcernErrorFromGetLastErrorResponse(getLastErrorResponse);
                }
                else
                {
                    writeErrors = new[] { CreateWriteErrorFromGetLastErrorResponse(getLastErrorResponse) };
                }
            }

            if (request.RequestType == WriteRequestType.Insert && writeErrors.Count == 0)
            {
                documentsAffected = 1; // note: DocumentsAffected is 0 for inserts
            }

            var  matchedCount  = 0L;
            var  deletedCount  = 0L;
            var  insertedCount = 0L;
            long?modifiedCount = 0L;

            switch (request.RequestType)
            {
            case WriteRequestType.Delete:
                deletedCount = documentsAffected;
                break;

            case WriteRequestType.Insert:
                insertedCount = documentsAffected;
                break;

            case WriteRequestType.Update:
                matchedCount  = documentsAffected - upserts.Count();
                modifiedCount = null;     // getLasterror does not report this value
                break;
            }

            return(new BulkWriteBatchResult(
                       1, // batchCount
                       processedRequests,
                       unprocessedRequests,
                       matchedCount,
                       deletedCount,
                       insertedCount,
                       modifiedCount,
                       upserts,
                       writeErrors,
                       writeConcernError,
                       indexMap,
                       nextBatch));
        }
Exemplo n.º 25
0
 /// <summary>
 /// Initializes a new instance of the MongoQueryException class (this overload supports deserialization).
 /// </summary>
 /// <param name="info">The SerializationInfo.</param>
 /// <param name="context">The StreamingContext.</param>
 public MongoBulkWriteException(SerializationInfo info, StreamingContext context)
     : base(info, context)
 {
     _writeConcernError = (WriteConcernError)info.GetValue("_writeConcernError", typeof(WriteConcernError));
     _writeErrors = (IReadOnlyList<BulkWriteError>)info.GetValue("_writeErrors", typeof(IReadOnlyList<BulkWriteError>));
 }