public void MessageBodyIsTracked() { var message = new MessageMock(); message.Setup(m => m.GetProperty(BtsProperties.InboundTransportLocation)).Returns("inbound-transport-location"); var eventStream = new Mock <EventStream>(); var pipelineContext = new Mock <IPipelineContext> { DefaultValue = DefaultValue.Mock }; pipelineContext .Setup(pc => pc.GetEventStream()) .Returns(eventStream.Object); var sut = new MessagingStep(pipelineContext.Object, message.Object); using (var trackingStream = new TrackingStream(new MemoryStream(_content), new MessageBodyCaptureDescriptor("data", MessageBodyCaptureMode.Claimed))) { // TrackActivity is supposed to occur at stream's end trackingStream.Drain(); sut.TrackActivity(ActivityTrackingModes.Body, trackingStream); } eventStream.Verify( es => es.AddReference( MessagingStep.ActivityName, sut.ActivityId, MessageBodyCaptureMode.Claimed.ToString(), MessagingStep.MESSAGE_BODY_REFERENCE_NAME, It.IsAny <string>(), It.IsAny <string>()), Times.Once()); }
public void InboundSuccessfulPropertiesForSolicitResponsePortAreTracked() { var message = new MessageMock(); SetupCommonProperties(message); // no ReceiveLocationName on the inbound of a solicit-response port but a ReceivePortName message.Setup(m => m.GetProperty(BtsProperties.ReceivePortName)).Returns("receive-port-name"); message.Setup(m => m.GetProperty(BtsProperties.InboundTransportLocation)).Returns("inbound-transport-location"); message.Setup(m => m.GetProperty(BtsProperties.InboundTransportType)).Returns("inbound-transport-type"); var activityId = string.Empty; Dictionary <string, object> data = null; var eventStream = new Mock <EventStream>(); eventStream // ReSharper disable AccessToModifiedClosure .Setup(es => es.UpdateActivity(MessagingStep.ActivityName, It.Is <string>(id => id == activityId), It.IsAny <object[]>())) // ReSharper restore AccessToModifiedClosure .Callback <string, string, object[]>((n, id, d) => data = ToDictionary(d)) .Verifiable(); var pipelineContext = new Mock <IPipelineContext> { DefaultValue = DefaultValue.Mock }; pipelineContext.Setup(pc => pc.GetEventStream()).Returns(eventStream.Object); var sut = new MessagingStep(pipelineContext.Object, message.Object); activityId = sut.ActivityId; using (var trackingStream = new TrackingStream(new MemoryStream(_content))) { // TrackActivity is supposed to occur at stream's end trackingStream.Drain(); sut.TrackActivity(ActivityTrackingModes.Step, trackingStream); } eventStream.Verify(); var expectedData = new Dictionary <string, object> { { MessagingStep.MessageIDFieldName, _messageId.AsNormalizedActivityId() }, { MessagingStep.MessageTypeFieldName, "message-type" }, { MessagingStep.PortNameFieldName, "receive-port-name" }, { MessagingStep.TransportLocationFieldName, "inbound-transport-location" }, { MessagingStep.TransportTypeFieldName, "inbound-transport-type" }, { MessagingStep.StatusFieldName, TrackingStatus.Received }, { MessagingStep.MachineNameFieldName, Environment.MachineName }, { MessagingStep.TimeFieldName, sut.Time } } .Union(ExpectedCommonData, new LambdaComparer <KeyValuePair <string, object> >((kvp1, kvp2) => kvp1.Key == kvp2.Key)) .OrderBy(kvp => kvp.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); Assert.That(data, Is.EquivalentTo(expectedData)); }
public void OutboundSuccessfulPropertiesAreTrackedAtStreamExhaustion() { var message = new MessageMock(); SetupCommonProperties(message); SetupInboundSuccessfulProperties(message); SetupOutboundSuccessfulProperties(message); var activityId = string.Empty; Dictionary <string, object> data = null; var eventStream = new Mock <EventStream>(); eventStream // ReSharper disable AccessToModifiedClosure .Setup(es => es.UpdateActivity(MessagingStep.ActivityName, It.Is <string>(id => id == activityId), It.IsAny <object[]>())) // ReSharper restore AccessToModifiedClosure .Callback <string, string, object[]>((n, id, d) => data = ToDictionary(d)) .Verifiable(); var pipelineContext = new Mock <IPipelineContext> { DefaultValue = DefaultValue.Mock }; pipelineContext.Setup(pc => pc.GetEventStream()).Returns(eventStream.Object); var sut = new MessagingStep(pipelineContext.Object, message.Object); activityId = sut.ActivityId; using (var trackingStream = new TrackingStream(new MemoryStream(_content))) { // TrackActivity is supposed to occur at stream's end trackingStream.Drain(); sut.TrackActivity(ActivityTrackingModes.Step, trackingStream); } eventStream.Verify(); var expectedData = new Dictionary <string, object> { { MessagingStep.MessageIDFieldName, _messageId.AsNormalizedActivityId() }, { MessagingStep.PortNameFieldName, "send-port-name" }, { MessagingStep.TransportLocationFieldName, "outbound-transport-location" }, { MessagingStep.TransportTypeFieldName, "outbound-transport-type" }, { MessagingStep.StatusFieldName, TrackingStatus.Sent }, { MessagingStep.MachineNameFieldName, Environment.MachineName }, { MessagingStep.TimeFieldName, sut.Time } } .Union(ExpectedCommonData) .OrderBy(kvp => kvp.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); Assert.That(data, Is.EquivalentTo(expectedData)); Assert.That(sut.MessageType, Is.EqualTo("message-type")); }
public void OutboundFailedPropertiesAreTracked() { var message = new MessageMock(); SetupCommonProperties(message); SetupInboundSuccessfulProperties(message); SetupOutboundSuccessfulProperties(message); SetupCommonFailedProperties(message); message.Setup(m => m.GetProperty(ErrorReportProperties.SendPortName)).Returns("failed-send-port-name"); message.Setup(m => m.GetProperty(ErrorReportProperties.OutboundTransportLocation)).Returns("failed-outbound-transport-location"); var activityId = string.Empty; Dictionary <string, object> data = null; var eventStream = new Mock <EventStream>(); eventStream // ReSharper disable AccessToModifiedClosure .Setup(es => es.UpdateActivity(MessagingStep.ActivityName, It.Is <string>(id => id == activityId), It.IsAny <object[]>())) // ReSharper restore AccessToModifiedClosure .Callback <string, string, object[]>((n, id, d) => data = ToDictionary(d)) .Verifiable(); var pipelineContext = new Mock <IPipelineContext> { DefaultValue = DefaultValue.Mock }; pipelineContext.Setup(pc => pc.GetEventStream()).Returns(eventStream.Object); var sut = new MessagingStep(pipelineContext.Object, message.Object); activityId = sut.ActivityId; using (var trackingStream = new TrackingStream(new MemoryStream(_content))) { // TrackActivity is supposed to occur at stream's end trackingStream.Drain(); sut.TrackActivity(ActivityTrackingModes.Step, trackingStream); } eventStream.Verify(); var expectedData = new Dictionary <string, object> { { MessagingStep.TransportTypeFieldName, "outbound-transport-type" }, { MessagingStep.PortNameFieldName, "failed-send-port-name" }, { MessagingStep.TransportLocationFieldName, "failed-outbound-transport-location" } } .Union(ExpectedCommonFailedData, new LambdaComparer <KeyValuePair <string, object> >((kvp1, kvp2) => kvp1.Key == kvp2.Key)) .Union(ExpectedCommonData, new LambdaComparer <KeyValuePair <string, object> >((kvp1, kvp2) => kvp1.Key == kvp2.Key)) .OrderBy(kvp => kvp.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); Assert.That(data, Is.EquivalentTo(expectedData)); Assert.That(sut.MessageType, Is.EqualTo("failed-message-type")); }
public void MessageContextIsTracked() { var ns = BtsProperties.MessageType.Namespace; var name = BtsProperties.MessageType.Name; var message = new MessageMock(); message.Setup(m => m.GetProperty(BtsProperties.InboundTransportLocation)).Returns("inbound-transport-location"); message.Setup(m => m.Context.CountProperties).Returns(1); message.Setup(m => m.Context.ReadAt(0, out name, out ns)).Returns("message-type"); message.Setup(m => m.Context.IsPromoted(name, ns)).Returns(false); var eventStream = new Mock <EventStream>(); var pipelineContext = new Mock <IPipelineContext> { DefaultValue = DefaultValue.Mock }; pipelineContext.Setup(pc => pc.GetEventStream()).Returns(eventStream.Object); var sut = new MessagingStep(pipelineContext.Object, message.Object); using (var trackingStream = new TrackingStream(new MemoryStream(_content))) { // TrackActivity is supposed to occur at stream's end trackingStream.Drain(); sut.TrackActivity(ActivityTrackingModes.Context, trackingStream); } eventStream.Verify( es => es.AddReference( MessagingStep.ActivityName, sut.ActivityId, MessagingStep.MESSAGE_CONTEXT_REFERENCE_TYPE, MessagingStep.MESSAGE_CONTEXT_REFERENCE_NAME, It.IsAny <string>(), message.Object.Context.ToXml()), Times.Once()); }
public void ActivityIsCommittedAndEnded() { var eventStream = new Mock <EventStream>(); var pipelineContext = new Mock <IPipelineContext>(); pipelineContext.Setup(pc => pc.GetEventStream()).Returns(eventStream.Object); var message = new MessageMock(); message.Setup(m => m.GetProperty(BtsProperties.InboundTransportLocation)).Returns("inbound-transport-location"); var sut = new MessagingStep(pipelineContext.Object, message.Object); using (var trackingStream = new TrackingStream(new MemoryStream(_content))) { // TrackActivity is supposed to occur at stream's end trackingStream.Drain(); sut.TrackActivity(ActivityTrackingModes.Step, trackingStream); } eventStream.Verify(s => s.UpdateActivity(MessagingStep.ActivityName, sut.ActivityId, It.IsAny <object[]>()), Times.Once()); eventStream.Verify(s => s.Flush(), Times.Once()); eventStream.Verify(s => s.EndActivity(MessagingStep.ActivityName, sut.ActivityId), Times.Once()); }