public void ShouldStoreErrorWithProperErrorStatus()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            fixture.Register(() => Store);
            fixture.Register <IHeaderParser>(() => new HeaderParser());
            var service = fixture.Create <StoreMessagesThatAreNotRetriesService>();

            //act
            var id = service.Store(rawMessage,
                                   new QueueSettings("test", new ApplicationConfiguration {
                ApplicationId = "test"
            }));

            //assert
            using (var session = Store.OpenSessionForDefaultTenant())
            {
                var doc = session.Load <MessageDocument>(id);
                doc.Should().NotBeNull("stored document should not be null");
                doc.AdditionalErrorStatus.Should().Be(AdditionalErrorStatus.Unresolved, "Additional error status should be Unresolved");
                doc.IsError.Should().BeTrue("IsError should be true");
                doc.CanRetry.Should().BeTrue("CanRetry should be true");
            }
        }
示例#2
0
        public void ShouldHaveProperErrorStatusAfterStoringAnAuditRetry()
        {
            //arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            fixture.Register(() => Store);
            fixture.Register <IHeaderParser>(() => new HeaderParser());
            var service = fixture.Create <StoreMessagesThatAreRetriesService>();
            var originalMessageStorageService = fixture.Create <StoreMessagesThatAreNotRetriesService>();
            var queueSettings = new QueueSettings("test", new ApplicationConfiguration {
                ApplicationId = "test"
            });

            var originalMessage = MessageTestHelpers.GetErrorMessage();
            var originalId      = originalMessageStorageService.Store(originalMessage, queueSettings);

            var rawMessage = MessageTestHelpers.GetAuditMessage();

            rawMessage.Headers.Add(Headers.Retry, originalId.ToString());

            //act
            var id = service.Store(rawMessage, queueSettings);

            //assert
            using (var session = Store.OpenSessionForDefaultTenant())
            {
                var doc = session.Load <MessageDocument>(id);
                doc.Should().NotBeNull("Document should exist");
                doc.AdditionalErrorStatus.Should().Be(AdditionalErrorStatus.Resolved, "additional error status should be resolved");
                doc.IsError.Should().BeTrue("IsError should be true");
                doc.CanRetry.Should().BeFalse("Can retry should be false");
            }
        }
        public void ShouldStoreErrorWithProperExpiration()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            fixture.Register(() => Store);
            fixture.Register <IHeaderParser>(() => new HeaderParser());
            var service = fixture.Create <StoreMessagesThatAreNotRetriesService>();

            int auditExpirationHours = 1;
            int errorExpirationHours = 2;

            DateTime expiresAfter  = DateTime.UtcNow.AddHours(errorExpirationHours).AddMinutes(-15);
            DateTime expiresBefore = DateTime.UtcNow.AddHours(errorExpirationHours).AddMinutes(15);

            //act
            var id = service.Store(rawMessage,
                                   new QueueSettings("test", new ApplicationConfiguration {
                ApplicationId = "test", DocumentExpirationInHours = auditExpirationHours, ErrorDocumentExpirationInHours = errorExpirationHours
            }));

            //assert
            using (var session = Store.OpenSessionForDefaultTenant())
            {
                var doc     = session.Load <MessageDocument>(id);
                var expires = DateTime.Parse(session.Advanced.GetMetadataFor(doc)["Raven-Expiration-Date"].ToString());
                expires.Should().BeAfter(expiresAfter, $"Should expire after around {errorExpirationHours} hours");
                expires.Should().BeBefore(expiresBefore, $"Should expire after around {errorExpirationHours} hours");
            }
        }
示例#4
0
        public void ShouldStoreAuditWithProperErrorStatusWhenOriginalDoesNotExist()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetAuditMessage();

            rawMessage.Headers.Add(Headers.Retry, "test");

            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            fixture.Register(() => Store);
            fixture.Register <IHeaderParser>(() => new HeaderParser());
            var service = fixture.Create <StoreMessagesThatAreRetriesService>();

            //act
            var id = service.Store(rawMessage,
                                   new QueueSettings("test", new ApplicationConfiguration {
                ApplicationId = "test"
            }));

            //assert
            using (var session = Store.OpenSessionForDefaultTenant())
            {
                var doc = session.Load <MessageDocument>(id);
                doc.Should().NotBeNull("Stored document should not be null");
                doc.AdditionalErrorStatus.Should().Be(AdditionalErrorStatus.IsRetry, "AdditionalErrorStatus should be IsRetry");
                doc.IsError.Should().BeFalse("IsError should be false");
                doc.CanRetry.Should().BeFalse("Can retry should be false");
            }
        }
        public void ShouldReturnAdditionalErrorStatusStringRetryPendingWhenItWorks()
        {
            //arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            fixture.Register(() => Store);
            fixture.Register <ICreateRetryMessagesFromOriginal>(() => new CreateRetryMessageFromOriginalService());
            var service = fixture.Create <RetryMessagesService>();

            var rawMessage     = MessageTestHelpers.GetErrorMessage();
            var originalMessge = new MessageDocument();

            new HeaderParser().AddHeaderInformation(rawMessage, originalMessge);
            using (var session = Store.OpenSessionForDefaultTenant())
            {
                session.Store(originalMessge);
                session.SaveChanges();
            }

            //act
            var result = service.Retry(new RetryMessageModel
            {
                RetryIds = new List <long> {
                    originalMessge.Id
                }
            });

            //assert
            using (var session = Store.OpenSessionForDefaultTenant())
            {
                var message = session.Load <MessageDocument>(originalMessge.Id);
                AssertRetriedMessageHeadersExcludingRetryIdSameAsOriginal(message, originalMessge);
            }
        }
示例#6
0
        public void ShouldNotStoreErrorRetryAsRootDocumentWhenOriginalDoesExist()
        {
            //arrange
            var fixture = new Fixture().Customize(new AutoMoqCustomization());

            fixture.Register(() => Store);
            fixture.Register <IHeaderParser>(() => new HeaderParser());
            var service = fixture.Create <StoreMessagesThatAreRetriesService>();
            var originalMessageStorageService = fixture.Create <StoreMessagesThatAreNotRetriesService>();
            var queueSettings = new QueueSettings("test", new ApplicationConfiguration {
                ApplicationId = "test"
            });

            var originalMessage = MessageTestHelpers.GetErrorMessage();
            var originalId      = originalMessageStorageService.Store(originalMessage, queueSettings);

            var rawMessage = MessageTestHelpers.GetErrorMessage();

            rawMessage.Headers.Add(Headers.Retry, originalId.ToString());

            //act
            var id = service.Store(rawMessage, queueSettings);

            //assert
            using (var session = Store.OpenSessionForDefaultTenant())
            {
                var doc = session.Load <MessageDocument>(id);
                doc.Should().NotBeNull("Document should exist");
                doc.Id.Should().Be(originalId, "the id of the original document should be returned");
            }
        }
示例#7
0
        public void ReturnsProperRetryDestinationFromErrorWhenUserSuppliedIsWhitespace()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            var destinationFinder = new DetermineRetryDestinationService();

            //act
            var destination = destinationFinder.GetRetryDestination(rawMessage, "\t\t");

            //assert
            destination.Should().Be("Autobahn.Configuration.Host");
        }
        public void ShouldSetTimeSentHeaderToTimeOfRetry()
        {
            //arrange
            var utcNow     = DateTime.UtcNow.AddSeconds(-1);
            var rawMessage = MessageTestHelpers.GetErrorMessage();
            var creator    = new CreateRetryMessageFromOriginalService();

            //act
            creator.PrepareMessageForRetry(rawMessage);

            //assert
            Helpers.ToUniversalDateTime(rawMessage.Headers[Headers.TimeSent]).Should().BeAfter(utcNow);
        }
示例#9
0
        public void HeaderParserHasNullSagaOnMessageNotInvolvingSaga()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.SagaInfo.Should().BeNull();
        }
示例#10
0
        public void HeaderParserGetsProperTimeSentFromError()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.TimeSent.Should().Be(DateTime.ParseExact("2014-12-31T16:54:57:747221Z", DateTimeFormat, CultureInfo.InvariantCulture).ToUniversalTime());
        }
        public void ShouldRemoveTimeoutHeaders()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            var creator = new CreateRetryMessageFromOriginalService();

            //act
            creator.PrepareMessageForRetry(rawMessage);

            //assert
            rawMessage.Headers.Where(x => x.Key.StartsWith("NServiceBus.Timeout")).Select(x => x.Key).Should().BeEmpty();
        }
示例#12
0
        public void HeaderParserGetsProperProcessingTimeFromError()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.ProcessingTime.Should().Be(TimeSpan.Zero);
        }
示例#13
0
        public void HeaderParserGetsProperContentTypeError()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.ContentType.Should().Be(ApplicationJsonContentType);
        }
示例#14
0
        public void HeaderParserGetsProperIsErrorFromError()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.IsError.Should().BeTrue();
        }
示例#15
0
        public void CanGetProperRetryDestinationFromError()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            var destinationFinder = new DetermineRetryDestinationService();

            //act
            var destination = destinationFinder.GetRetryDestination(rawMessage, null);

            //assert
            destination.Should().Be("Autobahn.Configuration.Host");
        }
示例#16
0
        public void HeaderParserGetsProperAdditionalErrorStatusFromError()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.AdditionalErrorStatus.Should().Be(AdditionalErrorStatus.Unresolved);
        }
示例#17
0
        public void HeaderParserGetsProperBusTechnologyFromError()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.BusTechnology.Should().Be("NServiceBus");
        }
示例#18
0
        public void ShouldCreateMessageStoreServiceForNonRetry()
        {
            //arrange
            var factory = new StoreMessagesFactory();

            var rawMessage = MessageTestHelpers.GetErrorMessage();

            //act
            var service = factory.MessageStorageServiceFor(rawMessage);

            //assert
            service.Should().BeOfType <StoreMessagesThatAreNotRetriesService>();
        }
        public void ShouldAddHeaderForTrackingTheRetry()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            var retryHeaderService = new AddRetryTrackingHeadersService();

            //act
            retryHeaderService.AddTrackingHeaders(rawMessage, 101);

            //assert
            rawMessage.Headers.Should()
            .Contain(new KeyValuePair <string, string>(Headers.Retry, "101"));
        }
示例#20
0
        public void CanRoundTripHeaders()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetAuditMessage();

            //act
            var publishData   = rawMessage.GetEelementsForRabbitPublish();
            var newRawMessage = new RawMessage(new BasicDeliverEventArgs("tag", 1, false, "exchange", "", new BasicProperties {
                Headers = publishData.Item2
            }, publishData.Item1));

            //assert
            newRawMessage.Headers.ShouldBeEquivalentTo(rawMessage.Headers);
        }
示例#21
0
        public void HeaderParserGetsProperHeadersFromError()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.Headers.ShouldBeEquivalentTo(new Dictionary <string, string>
            {
                { "NServiceBus.MessageId", "695742b4-58d0-4e3a-83a9-a4120116c48d" },
                { "NServiceBus.CorrelationId", "695742b4-58d0-4e3a-83a9-a4120116c48d" },
                { "NServiceBus.MessageIntent", "Send" },
                { "NServiceBus.Version", "5.0.3" },
                { "NServiceBus.TimeSent", "2014-12-31 16:54:57:747221 Z" },
                { "NServiceBus.ContentType", "application/json" },
                {
                    "NServiceBus.EnclosedMessageTypes",
                    "Autobahn.Configurations.Contracts.Commands.ValidateConfigurations, Autobahn.Configurations.Contracts, Version=1.1.12.0, Culture=neutral, PublicKeyToken=null"
                },
                { "NServiceBus.ConversationId", "d95771ad-eb89-46b3-b8b3-a4120116c48d" },
                { "NServiceBus.OriginatingMachine", "QA1-THD-WEB-1" },
                { "NServiceBus.OriginatingEndpoint", "Autobahn.Configuration.WebAPI" },
                { "NServiceBus.RabbitMQ.CallbackQueue", "Autobahn.Configuration.Host.QA1-APP-01" },
                { "NServiceBus.ReplyToAddress", "Autobahn.Configuration.WebAPI" },
                { "NServiceBus.ExceptionInfo.ExceptionType", "Raven.Abstractions.Exceptions.ConcurrencyException" },
                {
                    "NServiceBus.ExceptionInfo.Message",
                    "PUT attempted on : ConfigurationResponseDocuments/afecc831-34d4-47ca-b43b-56eb90d4e3b6 while it is being locked by another transaction"
                },
                { "NServiceBus.ExceptionInfo.Source", "Raven.Client.Lightweight" },
                {
                    "NServiceBus.ExceptionInfo.StackTrace",
                    "   at Raven.Client.Connection.ServerClient.DirectBatch(IEnumerable`1 commandDatas, OperationMetadata operationMetadata)\r\n   at Raven.Client.Connection.ServerClient.<>c__DisplayClass97.<Batch>b__96(OperationMetadata u)\r\n   at Raven.Client.Connection.ReplicationInformer.TryOperation[T](Func`2 operation, OperationMetadata operationMetadata, OperationMetadata primaryOperationMetadata, Boolean avoidThrowing, T& result, Boolean& wasTimeout)\r\n   at Raven.Client.Connection.ReplicationInformer.ExecuteWithReplication[T](String method, String primaryUrl, OperationCredentials primaryCredentials, Int32 currentRequest, Int32 currentReadStripingBase, Func`2 operation)\r\n   at Raven.Client.Connection.ServerClient.ExecuteWithReplication[T](String method, Func`2 operation)\r\n   at Raven.Client.Connection.ServerClient.Batch(IEnumerable`1 commandDatas)\r\n   at Raven.Client.Document.DocumentSession.SaveChanges()\r\n   at Autobahn.Configurations.Tasks.Handlers.NServiceBus.ValidateConfigurationsHandler.Handle(ValidateConfigurations message) in z:\\BuildAgent\\Work\\fdf076c7251fe009\\app\\Autobahn.Configurations.Tasks\\Handlers\\NServiceBus\\ValidateConfigurationsHandler.cs:line 74\r\n   at lambda_method(Closure , Object , Object )\r\n   at NServiceBus.Unicast.MessageHandlerRegistry.Invoke(Object handler, Object message, Dictionary`2 dictionary) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\MessageHandlerRegistry.cs:line 126\r\n   at NServiceBus.Unicast.MessageHandlerRegistry.InvokeHandle(Object handler, Object message) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\MessageHandlerRegistry.cs:line 84\r\n   at NServiceBus.LoadHandlersBehavior.<Invoke>b__1(Object handlerInstance, Object message) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Behaviors\\LoadHandlersBehavior.cs:line 41\r\n   at NServiceBus.InvokeHandlersBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Behaviors\\InvokeHandlersBehavior.cs:line 24\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.SetCurrentMessageBeingHandledBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Behaviors\\SetCurrentMessageBeingHandledBehavior.cs:line 17\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.LoadHandlersBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Behaviors\\LoadHandlersBehavior.cs:line 46\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.ApplyIncomingMessageMutatorsBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\MessageMutator\\ApplyIncomingMessageMutatorsBehavior.cs:line 23\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.ExecuteLogicalMessagesBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Messages\\ExecuteLogicalMessagesBehavior.cs:line 24\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.CallbackInvocationBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Behaviors\\CallbackInvocationBehavior.cs:line 23\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.DeserializeLogicalMessagesBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Messages\\DeserializeLogicalMessagesBehavior.cs:line 49\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.ApplyIncomingTransportMessageMutatorsBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\MessageMutator\\ApplyIncomingTransportMessageMutatorsBehavior.cs:line 20\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.SubscriptionReceiverBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Subscriptions\\MessageDrivenSubscriptions\\SubscriptionReceiverBehavior.cs:line 31\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.UnitOfWorkBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\UnitOfWork\\UnitOfWorkBehavior.cs:line 43\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.Transports.RabbitMQ.OpenPublishChannelBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\41ea81d808fdfd62\\src\\NServiceBus.RabbitMQ\\OpenPublishChannelBehavior.cs:line 19\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.ChildContainerBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Behaviors\\ChildContainerBehavior.cs:line 17\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.ProcessingStatisticsBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Monitoring\\ProcessingStatisticsBehavior.cs:line 23\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.AuditBehavior.Invoke(IncomingContext context, Action next) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Audit\\AuditBehavior.cs:line 20\r\n   at NServiceBus.BehaviorChain`1.Invoke() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\BehaviorChain.cs:line 39\r\n   at NServiceBus.Pipeline.PipelineExecutor.Execute[T](BehaviorChain`1 pipelineAction, T context) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\PipelineExecutor.cs:line 127\r\n   at NServiceBus.Pipeline.PipelineExecutor.InvokePipeline[TContext](IEnumerable`1 behaviors, TContext context) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\PipelineExecutor.cs:line 74\r\n   at NServiceBus.Pipeline.PipelineExecutor.InvokeReceivePhysicalMessagePipeline() in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Pipeline\\PipelineExecutor.cs:line 100\r\n   at NServiceBus.Unicast.UnicastBus.TransportMessageReceived(Object sender, TransportMessageReceivedEventArgs e) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\UnicastBus.cs:line 826\r\n   at NServiceBus.Unicast.Transport.TransportReceiver.OnTransportMessageReceived(TransportMessage msg) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Transport\\TransportReceiver.cs:line 410\r\n   at NServiceBus.Unicast.Transport.TransportReceiver.ProcessMessage(TransportMessage message) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Transport\\TransportReceiver.cs:line 343\r\n   at NServiceBus.Unicast.Transport.TransportReceiver.TryProcess(TransportMessage message) in c:\\BuildAgent\\work\\1b05a2fea6e4cd32\\src\\NServiceBus.Core\\Unicast\\Transport\\TransportReceiver.cs:line 227\r\n   at NServiceBus.Transports.RabbitMQ.RabbitMqDequeueStrategy.ConsumeMessages(Object state) in c:\\BuildAgent\\work\\41ea81d808fdfd62\\src\\NServiceBus.RabbitMQ\\RabbitMqDequeueStrategy.cs:line 186"
                },
                { "NServiceBus.FailedQ", "Autobahn.Configuration.Host@QA1-APP-01" },
                { "NServiceBus.TimeOfFailure", "2014-12-31 16:56:02:891973 Z" },
                { "NServiceBus.Retries.Timestamp", "2014-12-31 16:54:58:516940 Z" },
                { "NServiceBus.Timeout.RouteExpiredTimeoutTo", "Autobahn.Configuration.Host@QA1-APP-02" },
                { "NServiceBus.Timeout.Expire", "2014-12-31 16:56:01:204458 Z" },
                { "WinIdName", "" },
                { "$.diagnostics.hostid", "dd0264d6ebaaa79264f4875f0cd3cc9c" },
                { "$.diagnostics.hostdisplayname", "QA1-APP-01" },
                { "$.diagnostics.originating.hostid", "e2ee89227f61d89c49f32dec35116165" }
            });
        }
示例#22
0
        public void HeaderParserGetsProperNServiceSagaInfoFromAudit()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetAuditMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.SagaInfo.Should().NotBeNull();
            doc.SagaInfo.Class.Should().Be("Autobahn.Fulfillment.Tasks.Sagas.FulfillmentSaga");
            doc.SagaInfo.Key.Should().Be("3b654483-a8ea-470b-8c78-a4110184fa8c");
        }
示例#23
0
        public void ReturnsWholeQueueWhenDelimiterNotPresent()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            rawMessage.Headers["NServiceBus.FailedQ"] = "simpleQueue";

            var destinationFinder = new DetermineRetryDestinationService();

            //act
            var destination = destinationFinder.GetRetryDestination(rawMessage, null);

            //assert
            destination.Should().Be("simpleQueue");
        }
示例#24
0
        public void HeaderParserGetsProperAdditionalErrorStatusFromAuditThatIsRetry()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetAuditMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            doc.Headers.Add(Headers.Retry, "foo");

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.AdditionalErrorStatus.Should().Be(AdditionalErrorStatus.IsRetry);
        }
示例#25
0
        public void ReturnsNullIfFailedQHeaderNotPresent()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            rawMessage.Headers.Remove("NServiceBus.FailedQ");

            var destinationFinder = new DetermineRetryDestinationService();

            //act
            var destination = destinationFinder.GetRetryDestination(rawMessage, null);

            //assert
            destination.Should().BeNull();
        }
示例#26
0
        //test
        public void ReturnsUserSuppliedValueWhenNotNullOrWhitespace()
        {
            //arrange
            string userSupplied = "userQueue";
            var    rawMessage   = MessageTestHelpers.GetErrorMessage();

            rawMessage.Headers.Remove("NServiceBus.FailedQ");

            var destinationFinder = new DetermineRetryDestinationService();

            //act
            var destination = destinationFinder.GetRetryDestination(rawMessage, userSupplied);

            //assert
            destination.Should().Be(userSupplied);
        }
示例#27
0
        public void HeaderParserGetsProperNServiceBusMessageTypesError()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetErrorMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.MessageTypes.ShouldBeEquivalentTo(new List <TypeName>
            {
                new TypeName("Autobahn.Configurations.Contracts.Commands.ValidateConfigurations, Autobahn.Configurations.Contracts, Version=1.1.12.0, Culture=neutral, PublicKeyToken=null")
            });
        }
        public void ShouldNotRemoveOtherHeaders()
        {
            //arrange
            var rawMessage = MessageTestHelpers.GetErrorMessage();

            var creator = new CreateRetryMessageFromOriginalService();

            //act
            creator.PrepareMessageForRetry(rawMessage);

            //assert
            rawMessage.Headers.Select(x => x.Key).Should().BeEquivalentTo("NServiceBus.MessageId",
                                                                          "NServiceBus.CorrelationId", "NServiceBus.MessageIntent", "NServiceBus.Version",
                                                                          "NServiceBus.TimeSent", "NServiceBus.ContentType", "NServiceBus.EnclosedMessageTypes",
                                                                          "WinIdName", "NServiceBus.ConversationId", "NServiceBus.OriginatingMachine",
                                                                          "NServiceBus.OriginatingEndpoint",
                                                                          "NServiceBus.RabbitMQ.CallbackQueue", "NServiceBus.ReplyToAddress");
        }
示例#29
0
        public void HeaderParserGetsProperNServiceBusMessageTypesAudit()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetAuditMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.MessageTypes.ShouldBeEquivalentTo(new List <TypeName>
            {
                new TypeName("Autobahn.Fulfillment.Contracts.Ordering.NotifyOrderHasBeenCanceled, Autobahn.Fulfillment.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"),
                new TypeName("Autobahn.Fulfillment.Contracts.Ordering.INotifyOrderHasBeenCanceled, Autobahn.Fulfillment.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"),
                new TypeName("Veyron.Messages.Commands.ICommand, Veyron.Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
            });
        }
示例#30
0
        public void HeaderParserGetsProperHeadersFromAudit()
        {
            //arrange
            var rawMessage   = MessageTestHelpers.GetAuditMessage();
            var headerParser = new HeaderParser();
            var doc          = new MessageDocument();

            //act
            headerParser.AddHeaderInformation(rawMessage, doc);

            //assert
            doc.Headers.ShouldBeEquivalentTo(new Dictionary <string, string>
            {
                { "NServiceBus.MessageId", "33db72af-be36-4773-8c95-a41200279462" },
                { "NServiceBus.CorrelationId", "33db72af-be36-4773-8c95-a41200279462" },
                { "NServiceBus.MessageIntent", "Send" },
                { "NServiceBus.Version", "5.0.3" },
                { "NServiceBus.TimeSent", "2014-12-31 02:24:06:300190 Z" },
                { "NServiceBus.ContentType", "application/json" },
                {
                    "NServiceBus.EnclosedMessageTypes",
                    "Autobahn.Fulfillment.Contracts.Ordering.NotifyOrderHasBeenCanceled, Autobahn.Fulfillment.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null;Autobahn.Fulfillment.Contracts.Ordering.INotifyOrderHasBeenCanceled, Autobahn.Fulfillment.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null;Veyron.Messages.Commands.ICommand, Veyron.Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
                },
                { "NServiceBus.ConversationId", "84383232-6efc-4ca0-a304-a412002794da" },
                { "NServiceBus.OriginatingMachine", "QA-1-WEB-1" },
                { "NServiceBus.OriginatingEndpoint", "Ronaele.UI.Web" },
                { "NServiceBus.RabbitMQ.CallbackQueue", "Autobahn.Fulfillment.Host.QA-1-WEB-1" },
                { "NServiceBus.ReplyToAddress", "Ronaele.UI.Web" },
                {
                    "NServiceBus.InvokedSagas", "Autobahn.Fulfillment.Tasks.Sagas.FulfillmentSaga:3b654483-a8ea-470b-8c78-a4110184fa8c"
                },
                { "NServiceBus.ProcessingStarted", "2014-12-31 02:24:06:794413 Z" },
                { "NServiceBus.ProcessingEnded", "2014-12-31 02:24:07:074692 Z" },
                { "NServiceBus.ProcessingMachine", "QA-1-WEB-1" },
                { "NServiceBus.ProcessingEndpoint", "Autobahn.Fulfillment.Host" },
                { "NServiceBus.OriginatingAddress", "Ronaele.UI.Web@QA-1-WEB-1" },
                { "WinIdName", "GCC-DEV\\developer" },
                { "$.diagnostics.hostid", "0ba7c10aa289498b4d9d6936935f51f7" },
                { "$.diagnostics.hostdisplayname", "QA-1-WEB-1" },
                { "$.diagnostics.license.expired", "false" },
                { "$.diagnostics.originating.hostid", "6da45a72687753278b930fe38a91a4ad" }
            });
        }