コード例 #1
0
        public async Task RunWorker_ShouldSendRetryableDocumentsIntoRetryChannel_ReplaceIsProcessedWithRetryableErrors_HasRetryChannel(int batchSize)
        {
            // Arrange
            var replacements = Enumerable.Range(0, batchSize).Select(_ => new BsonDocument
            {
                ["_id"]   = _fixture.Create <string>(),
                ["Value"] = _fixture.Create <string>()
            });
            var batch     = replacements.Select(d => new ReplaceOneModel <BsonDocument>(d.GetFilterBy("_id"), d)).ToList();
            var exception =
                new ReplaceManyException(
                    batch.Select((b, idx) =>
                                 new ReplaceErrorInfo(idx, WriteWorkerFactory.ErrorUpdateWithMoveToAnotherShard)).ToList(),
                    batch.Count);

            _destinationRepositoryMock.Setup(r => r.ReplaceManyAsync(batch, It.IsAny <CancellationToken>()))
            .Throws(exception);
            var retryChannel = Channel.CreateUnbounded <ReplaceOneModel <BsonDocument> >();

            // Act
            await WriteBatchAndCloseChannelAsync(_channel, batch);

            await _sut.RunWorker(retryChannel,
                                 new Mock <ILogger>().Object,
                                 CancellationToken.None);

            retryChannel.Writer.Complete();

            // Assert
            var actual = await ReadModelsFromChannelAsync(retryChannel);

            actual.Should().BeEquivalentTo(batch);
        }
コード例 #2
0
        public async Task RunWorker_ShouldReturnCountOfFailedDocumentsReplacements_ReplaceIsProcessedWithRetryableErrors_NullRetryChannel(int batchSize)
        {
            // Arrange
            var replacements = Enumerable.Range(0, batchSize).Select(_ => new BsonDocument
            {
                ["_id"]   = _fixture.Create <string>(),
                ["Value"] = _fixture.Create <string>()
            });
            var batch     = replacements.Select(d => new ReplaceOneModel <BsonDocument>(d.GetFilterBy("_id"), d)).ToList();
            var exception =
                new ReplaceManyException(
                    batch.Select((b, idx) =>
                                 new ReplaceErrorInfo(idx, WriteWorkerFactory.ErrorUpdateWithMoveToAnotherShard)).ToList(),
                    batch.Count);

            _destinationRepositoryMock.Setup(r => r.ReplaceManyAsync(batch, It.IsAny <CancellationToken>()))
            .Throws(exception);

            // Act
            await WriteBatchAndCloseChannelAsync(_channel, batch);

            var(successful, failed) = await _sut.RunWorker(null, new Mock <ILogger>().Object,
                                                           CancellationToken.None);

            // Assert
            failed.Should().Be(batchSize);
        }