public async Task GivenMessage_WhenFail_ShouldThrowAndNotPublish()
        {
            var batchMock     = new Mock <IBasicPublishBatch>();
            var messageMock   = new Mock <IPublisherMessage>();
            var publisherMock = new Mock <IPublisher>();

            _channelMock.Setup(x => x.CreateBasicPublishBatch())
            .Returns(batchMock.Object)
            .Verifiable();
            _channelMock.Setup(x => x.ConfirmSelect())
            .Verifiable();

            messageMock.SetupGet(x => x.Routing)
            .Throws <Exception>()
            .Verifiable();
            messageMock.Setup(x => x.AddHeader("LastException", It.IsAny <string>()))
            .Verifiable();

            var batching = new PublisherMessageBatching(publisherMock.Object, messageMock.Object);

            await _publisher.Awaiting(x => x.PublishAsync(batching, CancellationToken.None))
            .Should().ThrowAsync <PublishingException>();

            batchMock.Verify(x => x.Publish(), Times.Never());
            _channelMock.Verify(
                x => x.WaitForConfirms(It.IsAny <TimeSpan>()),
                Times.Never());
            _channelMock.VerifyAll();

            messageMock.VerifyAll();
            batchMock.Verify(x => x.Publish(), Times.Never());
            batchMock.VerifyAll();
        }
        public async Task GivenMessage_WhenCancellationRequested_ShouldSkipMessage()
        {
            var batchMock     = new Mock <IBasicPublishBatch>();
            var messageMock   = new Mock <IPublisherMessage>();
            var publisherMock = new Mock <IPublisher>();

            _channelMock.Setup(x => x.CreateBasicPublishBatch())
            .Returns(batchMock.Object)
            .Verifiable();
            _channelMock.Setup(x => x.ConfirmSelect())
            .Verifiable();

            var cancellationTokenSource = new CancellationTokenSource();

            messageMock.SetupGet(x => x.CancellationToken)
            .Returns(cancellationTokenSource.Token)
            .Verifiable();

            cancellationTokenSource.Cancel();

            var batching = new PublisherMessageBatching(publisherMock.Object, messageMock.Object);

            await _publisher.PublishAsync(batching, CancellationToken.None);

            _channelMock.Verify(
                x => x.WaitForConfirms(It.IsAny <TimeSpan>()),
                Times.Never());
            _channelMock.VerifyAll();

            messageMock.VerifyAll();
            batchMock.Verify(x => x.Publish(), Times.Never());
            batchMock.VerifyAll();
        }
        public async Task GivenMessage_WhenIsEmpty_ShouldReturn()
        {
            var publisher = new Mock <IPublisher>();
            var batching  = new PublisherMessageBatching(publisher.Object);

            await _publisher.PublishAsync(batching, CancellationToken.None);

            _connectionMock.Verify(x => x.CreateModel(), Times.Never());
        }
예제 #4
0
        public void GivenBatching_ShouldInstantiate()
        {
            var publisherMock = new Mock <IPublisher>();
            var messageMock   = new Mock <IPublisherMessage>();
            var timespan      = TimeSpan.FromSeconds(5);

            var batching = new PublisherMessageBatching(publisherMock.Object, new[] { messageMock.Object }, timespan);

            batching.Should().NotBeNull();
            batching.Publisher.Should().Be(publisherMock.Object);
            batching.PublishingTimeout.Should().Be(timespan);
        }
예제 #5
0
        public async Task GivenBatching_WhenPublish_ShouldPublish()
        {
            var publisherMock     = new Mock <IPublisher>();
            var messageMock       = new Mock <IPublisherMessage>();
            var cancellationToken = new CancellationToken();

            publisherMock.Setup(x => x.PublishAsync(It.IsAny <IPublisherMessageBatching>(), cancellationToken))
            .Verifiable();

            var batching = new PublisherMessageBatching(publisherMock.Object, messageMock.Object);

            await batching.PublishAsync(cancellationToken);

            publisherMock.VerifyAll();
        }
        public async Task GivenMessage_WhenRabbitLibraryThrow_ShouldThrow()
        {
            var          basicPropertiesMock = new Mock <IBasicProperties>();
            var          batchMock           = new Mock <IBasicPublishBatch>();
            var          routingMock         = new Mock <IRouting>();
            var          messageMock         = new Mock <IPublisherMessage>();
            var          bytes         = Array.Empty <byte>();
            const string exchange      = "exchange";
            const string routingKey    = "exchange";
            var          headersMock   = new Mock <IDictionary <string, object> >();
            var          publisherMock = new Mock <IPublisher>();

            _channelMock.Setup(x => x.CreateBasicPublishBatch())
            .Returns(batchMock.Object)
            .Verifiable();
            _channelMock.Setup(x => x.CreateBasicProperties())
            .Returns(basicPropertiesMock.Object)
            .Verifiable();
            _channelMock.Setup(x => x.ConfirmSelect())
            .Verifiable();

            routingMock.SetupGet(x => x.ExchangeName).Returns(exchange).Verifiable();
            routingMock.SetupGet(x => x.RoutingKey).Returns(routingKey).Verifiable();
            messageMock.SetupGet(x => x.Routing)
            .Returns(routingMock.Object)
            .Verifiable();
            messageMock.Setup(x => x.CancellationToken)
            .Returns(CancellationToken.None)
            .Verifiable();
            messageMock.Setup(x => x.Serialize())
            .Returns(bytes)
            .Verifiable();
            messageMock.Setup(x => x.GetHeaders())
            .Returns(headersMock.Object)
            .Verifiable();


            batchMock.Setup(x =>
#pragma warning disable 618
                            // New Add method is an extension and can not be overriden
                            x.Add(
#pragma warning restore 618
                                exchange,
                                routingKey,
                                false,
                                basicPropertiesMock.Object,
                                bytes))
            .Verifiable();
            batchMock.Setup(x => x.Publish())
            .Throws <Exception>()
            .Verifiable();

            var batching = new PublisherMessageBatching(publisherMock.Object, messageMock.Object);

            await _publisher.Awaiting(x => x.PublishAsync(batching, CancellationToken.None))
            .Should().ThrowAsync <PublishingException>();

            _channelMock.VerifyAll();
            messageMock.VerifyAll();
            batchMock.VerifyAll();
        }
        public async Task GivenMessage_ShouldNotCreateConnectionTwice()
        {
            var          basicPropertiesMock = new Mock <IBasicProperties>();
            var          batchMock           = new Mock <IBasicPublishBatch>();
            var          routingMock         = new Mock <IRouting>();
            var          messageMock         = new Mock <IPublisherMessage>();
            var          publisherMock       = new Mock <IPublisher>();
            var          bytes         = Array.Empty <byte>();
            const string exchange      = "exchange";
            const string routingKey    = "exchange";
            const string correlationId = "correlationId";
            var          headersMock   = new Mock <IDictionary <string, object> >();

            _channelMock.Setup(x => x.CreateBasicPublishBatch())
            .Returns(batchMock.Object)
            .Verifiable();
            _channelMock.Setup(x => x.CreateBasicProperties())
            .Returns(basicPropertiesMock.Object)
            .Verifiable();
            _channelMock.Setup(x => x.ConfirmSelect())
            .Verifiable();
            _channelMock.Setup(x => x.WaitForConfirms(It.IsAny <TimeSpan>()))
            .Returns(true)
            .Verifiable();

            routingMock.SetupGet(x => x.ExchangeName).Returns(exchange).Verifiable();
            routingMock.SetupGet(x => x.RoutingKey).Returns(routingKey).Verifiable();
            messageMock.SetupGet(x => x.Routing)
            .Returns(routingMock.Object)
            .Verifiable();
            messageMock.Setup(x => x.CancellationToken)
            .Returns(CancellationToken.None)
            .Verifiable();
            messageMock.Setup(x => x.Serialize())
            .Returns(bytes)
            .Verifiable();
            messageMock.Setup(x => x.GetHeaders())
            .Returns(headersMock.Object)
            .Verifiable();
            messageMock.SetupGet(x => x.CorrelationId)
            .Returns(correlationId)
            .Verifiable();


            batchMock.Setup(x =>
#pragma warning disable 618
                            // New Add method is an extension and can not be overriden
                            x.Add(
#pragma warning restore 618
                                exchange,
                                routingKey,
                                false,
                                basicPropertiesMock.Object,
                                bytes))
            .Verifiable();
            batchMock.Setup(x => x.Publish())
            .Verifiable();

            var batching = new PublisherMessageBatching(publisherMock.Object, messageMock.Object);

            await _publisher.PublishAsync(batching, CancellationToken.None);

            await _publisher.PublishAsync(batching, CancellationToken.None);

            _channelMock.VerifyAll();
            messageMock.VerifyAll();
            batchMock.VerifyAll();
            _connectionMock.Verify(x => x.CreateModel(), Times.Exactly(2));
        }