public void TrackingContextIsRestoredForSolicitResponseInboundMessageUnlessNegativeCacheDuration()
        {
            var transmitWorkId = Guid.NewGuid().ToString();

            var trackingContext = new TrackingContext {
                ProcessActivityId        = ActivityId.NewActivityId(),
                ProcessingStepActivityId = ActivityId.NewActivityId(),
                MessagingStepActivityId  = ActivityId.NewActivityId()
            };

            MessageMock.Setup(m => m.GetProperty(BtsProperties.IsSolicitResponse)).Returns(true);
            MessageMock.Setup(m => m.GetProperty(BtsProperties.InboundTransportLocation)).Returns("inbound-transport-location");
            MessageMock.Setup(m => m.GetProperty(BtsProperties.TransmitWorkId)).Returns(transmitWorkId);

            var sut = CreateActivityTracker();

            sut.TrackingContextCacheDuration = TimeSpan.FromSeconds(-1);

            sut.Execute(PipelineContextMock.Object, MessageMock.Object);

            CacheMock.VerifyAll();

            // verifies that TrackingContext fields have been restored in message.Context
            MessageMock.Verify(m => m.SetProperty(TrackingProperties.ProcessActivityId, trackingContext.ProcessActivityId), Times.Never());
            MessageMock.Verify(m => m.SetProperty(TrackingProperties.ProcessingStepActivityId, trackingContext.ProcessingStepActivityId), Times.Never());
            MessageMock.Verify(m => m.SetProperty(TrackingProperties.MessagingStepActivityId, trackingContext.MessagingStepActivityId), Times.Never());
        }
        public void TrackingContextIsCachedForSolicitResponseOutboundMessage()
        {
            var transmitWorkId = Guid.NewGuid().ToString();

            var trackingContext = new TrackingContext {
                ProcessActivityId        = ActivityId.NewActivityId(),
                ProcessingStepActivityId = ActivityId.NewActivityId(),
                MessagingStepActivityId  = ActivityId.NewActivityId()
            };

            MessageMock.Setup(m => m.GetProperty(BtsProperties.IsSolicitResponse)).Returns(true);
            MessageMock.Setup(m => m.GetProperty(BtsProperties.OutboundTransportLocation)).Returns("outbound-transport-location");
            MessageMock.Setup(m => m.GetProperty(BtsProperties.TransmitWorkId)).Returns(transmitWorkId);
            MessageMock.Setup(m => m.GetProperty(TrackingProperties.ProcessActivityId)).Returns(trackingContext.ProcessActivityId);
            MessageMock.Setup(m => m.GetProperty(TrackingProperties.ProcessingStepActivityId)).Returns(trackingContext.ProcessingStepActivityId);
            MessageMock.Setup(m => m.GetProperty(TrackingProperties.MessagingStepActivityId)).Returns(trackingContext.MessagingStepActivityId);

            CacheMock.Setup(c => c.Set(transmitWorkId, trackingContext, 60 + 1));

            var sut = CreateActivityTracker();

            sut.Execute(PipelineContextMock.Object, MessageMock.Object);

            CacheMock.VerifyAll();
        }
        public void TrackingContextIsNotPropagatedForOneWayPort()
        {
            var sut = CreateActivityTracker();

            sut.Execute(PipelineContextMock.Object, MessageMock.Object);

            CacheMock.VerifyAll();
        }
        public void TrackingContextIsNotPropagatedForRequestResponsePort()
        {
            MessageMock.Setup(m => m.GetProperty(BtsProperties.IsRequestResponse)).Returns(true);

            var sut = CreateActivityTracker();

            sut.Execute(PipelineContextMock.Object, MessageMock.Object);

            CacheMock.VerifyAll();
        }
        public void TrackingContextIsCachedForSolicitResponseOutboundMessageUnlessNegativeCacheDuration()
        {
            MessageMock.Setup(m => m.GetProperty(BtsProperties.IsSolicitResponse)).Returns(true);
            MessageMock.Setup(m => m.GetProperty(BtsProperties.OutboundTransportLocation)).Returns("outbound-transport-location");
            MessageMock.Setup(m => m.GetProperty(TrackingProperties.ProcessActivityId)).Returns(ActivityId.NewActivityId());

            var sut = CreateActivityTracker();

            sut.TrackingContextCacheDuration = TimeSpan.FromSeconds(-1);

            sut.Execute(PipelineContextMock.Object, MessageMock.Object);

            CacheMock.VerifyAll();
        }