コード例 #1
0
        public void InvokeAsync_SpecialExceptionIsThrown_ExceptionShouldBePropogated(Type exceptionType)
        {
            //prepare
            var    originalSubscriptionMock = new Mock <ISubscription>();
            var    publisherMock            = new Mock <IPublisher>();
            string message = "justMessage";

            originalSubscriptionMock.Setup(x => x.InvokeAsync(message)).Returns <string>(
                (msg) =>
            {
                return(Task.FromException((Exception)Activator.CreateInstance(exceptionType)));
            });

            //act
            DeadLetterSubscriptionWrapper actor = new DeadLetterSubscriptionWrapper(originalSubscriptionMock.Object, publisherMock.Object, null);
            Func <Task> f = async() =>
            {
                await actor.InvokeAsync(message);
            };

            //check
            f.ShouldThrow <Exception>();
            originalSubscriptionMock.Verify(x => x.NotifyAboutDeadLetterAsync(It.IsAny <string>(), It.IsAny <Exception>()), Times.Never);
            publisherMock.Verify(x => x.PublishDirectEventAsync(It.IsAny <IntegrationEvent <DeadLetterEventDescriptor <JObject> > >(),
                                                                It.IsAny <string>(), It.IsAny <bool>()), Times.Never);
        }
コード例 #2
0
        public async Task InvokeAsync_NonSpecialExceptionIsThrown_OriginalMessageShouldBeSentToTheDeadLetterQueue()
        {
            //prepare
            var    originalSubscriptionMock      = new Mock <ISubscription>();
            var    publisherMock                 = new Mock <IPublisher>();
            string subscriberDeadLetterQueueName = "deadletter.subscriber";
            var    argumentException             = new ArgumentException();

            originalSubscriptionMock.Setup(x => x.InvokeAsync(_serializedMessage)).Returns <string>(
                (msg) =>
            {
                return(Task.FromException(argumentException));
            });

            //act
            DeadLetterSubscriptionWrapper actor = new DeadLetterSubscriptionWrapper(originalSubscriptionMock.Object,
                                                                                    publisherMock.Object, subscriberDeadLetterQueueName);

            await actor.InvokeAsync(_serializedMessage);

            //check
            originalSubscriptionMock.Verify(x => x.NotifyAboutDeadLetterAsync(It.IsAny <string>(), It.IsAny <Exception>()), Times.Never);
            IntegrationEvent <DeadLetterEventDescriptor <JObject> > integrationEvent =
                JsonConvert.DeserializeObject <IntegrationEvent <DeadLetterEventDescriptor <JObject> > >(_serializedMessage);

            publisherMock.Verify(x => x.PublishDirectEventAsync(It.Is <IntegrationEvent <DeadLetterEventDescriptor <JObject> > >(actualevent => actualevent.CorrelationId == integrationEvent.CorrelationId),
                                                                subscriberDeadLetterQueueName, true), Times.Once);
        }
コード例 #3
0
        public void Subscribe_SubscriptionAreProvided_EventTypesAreChangedAndSubscriptionAreWrapped()
        {
            //prepare
            var subscriberMock = new Mock <ISubscriber>();
            var modelNamingConventionControllerMock = new Mock <IModelNamingConventionController>();
            var publisherMock = new Mock <IPublisher>();
            var targetSubscriberDeadLetterQueueName = "deadletter.subscriber";

            IDictionary <string, ISubscription> originalSubscriptions = new Dictionary <string, ISubscription>();
            var activityCreatedSubscription = new Mock <ISubscription>();
            var bookingCreatedSubscription  = new Mock <ISubscription>();
            var activityCreatedEventType    = "activity.created";
            var bookingCreatedEventType     = "booking.created";

            originalSubscriptions.Add(activityCreatedEventType, activityCreatedSubscription.Object);
            originalSubscriptions.Add(bookingCreatedEventType, bookingCreatedSubscription.Object);

            IDictionary <string, ISubscription> actualSubscriptions = null;

            subscriberMock.Setup(x => x.Subscribe(It.IsAny <IDictionary <string, ISubscription> >()))
            .Callback <IDictionary <string, ISubscription> >(
                (subscriptions) => { actualSubscriptions = subscriptions; });

            modelNamingConventionControllerMock.Setup(x => x.GetDeadLetterQueueMessageEventType(It.IsAny <string>()))
            .Returns <string> (
                (eventType) =>
            {
                return(string.Concat("deadletter.", eventType));
            });


            //act
            DefaultDeadLetterSubscriber defaultDeadLetterSubscriber = new DefaultDeadLetterSubscriber(subscriberMock.Object,
                                                                                                      modelNamingConventionControllerMock.Object, publisherMock.Object, targetSubscriberDeadLetterQueueName);

            defaultDeadLetterSubscriber.Subscribe(originalSubscriptions);


            //check
            foreach (var originalSubscription in originalSubscriptions)
            {
                DeadLetterSubscriptionWrapper wrapper =
                    (DeadLetterSubscriptionWrapper)actualSubscriptions[string.Concat("deadletter.", originalSubscription.Key)];
                wrapper.Should().NotBeNull();
            }
        }
コード例 #4
0
        public async Task NotifyAboutDeadLetterAsync_DecoratorMethod_OriginalSubscriptionNotifyIsCalled()
        {
            //prepare
            var       originalSubscriptionMock = new Mock <ISubscription>();
            var       publisherMock            = new Mock <IPublisher>();
            Exception argException             = new ArgumentException();
            string    message = "justMessage";

            //Act
            DeadLetterSubscriptionWrapper actor = new DeadLetterSubscriptionWrapper(originalSubscriptionMock.Object, publisherMock.Object, null);
            await actor.NotifyAboutDeadLetterAsync(message, argException);

            //check
            originalSubscriptionMock.Verify(x => x.NotifyAboutDeadLetterAsync(message, argException), Times.Once);
            publisherMock.Verify(x => x.PublishDirectEventAsync(It.IsAny <IntegrationEvent <DeadLetterEventDescriptor <JObject> > >(),
                                                                It.IsAny <string>(), It.IsAny <bool>()), Times.Never);
        }