コード例 #1
0
        public void PublishingSuccessfully()
        {
            const String messageId = "one-id";

            var          message     = NewMessage();
            const UInt64 deliveryTag = 0uL;
            var          model       = new Mock <IModel>();

            model.Setup(_ => _.NextPublishSeqNo).Returns(deliveryTag);
            var configuration = new EnvironmentConfiguration();
            var resolver      = new Mock <IMessageTypeResolver>();

            resolver.Setup(_ => _.Resolve <Foo>())
            .Returns(new MessageBinding(String.Empty,
                                        typeof(Foo).GetTypeInfo()));
            configuration.ResolveMessageTypeBy(resolver.Object);
            configuration.GeneratesMessageIdBy(StubNewId(messageId).Object);
            var channel = new OutboundChannelWrapper(model.Object,
                                                     configuration,
                                                     StubDateTimeProvider().Object,
                                                     null);
            var task = channel.PublishAsync(message,
                                            new Exchange("target_exchange", "direct"),
                                            String.Empty);

            channel.CallOnModelBasicAcks(new BasicAckEventArgs {
                DeliveryTag = deliveryTag
            });
            var result = Assert.IsType <SuccessfulPublishing>(task.Result);

            Assert.Equal(messageId, result.MessageId);
        }
コード例 #2
0
        public void NegativeAck()
        {
            var          message     = NewMessage();
            const UInt64 deliveryTag = 0uL;
            var          model       = new Mock <IModel>();

            model.Setup(_ => _.NextPublishSeqNo).Returns(deliveryTag);
            var configuration = new EnvironmentConfiguration();
            var resolver      = new Mock <IMessageTypeResolver>();

            resolver.Setup(_ => _.Resolve <Foo>())
            .Returns(new MessageBinding(String.Empty,
                                        typeof(Foo).GetTypeInfo()));
            configuration.ResolveMessageTypeBy(resolver.Object);
            var channel = new OutboundChannelWrapper(model.Object,
                                                     configuration,
                                                     StubDateTimeProvider().Object,
                                                     null);
            var task = channel.PublishAsync(message,
                                            new Exchange("target_exchange", "direct"),
                                            String.Empty);

            channel.CallOnModelBasicNacks(new BasicNackEventArgs {
                DeliveryTag = deliveryTag
            });
            var result = Assert.IsType <FailurePublishing>(task.Result);

            Assert.IsType <NegativeAcknowledgeException>(result.Exception);
        }
コード例 #3
0
        public void ModelShutdown()
        {
            var          message     = NewMessage();
            const UInt64 deliveryTag = 0uL;
            var          model       = new Mock <IModel>();

            model.Setup(_ => _.NextPublishSeqNo).Returns(deliveryTag);
            var fallbackHandled = false;
            var configuration   = new EnvironmentConfiguration();
            var resolver        = new Mock <IMessageTypeResolver>();

            resolver.Setup(_ => _.Resolve <Foo>())
            .Returns(new MessageBinding(String.Empty,
                                        typeof(Foo).GetTypeInfo()));
            configuration.ResolveMessageTypeBy(resolver.Object);
            var channel = new OutboundChannelWrapper(model.Object,
                                                     configuration,
                                                     StubDateTimeProvider().Object,
                                                     _ => { fallbackHandled = true; });
            var task = channel.PublishAsync(message,
                                            new Exchange("target_exchange", "direct"),
                                            String.Empty);

            channel.CallOnModelShutdown(new ShutdownEventArgs(ShutdownInitiator.Application, 3, "boom"));
            var result = Assert.IsType <FailurePublishing>(task.Result);

            Assert.IsType <MessageNotConfirmedException>(result.Exception);
            Assert.True(fallbackHandled);
        }