public void CaptureMessageBodyWithEmptyStreamWillHaveMessageUnclaimed() { using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) .Returns(Path.GetTempPath()); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckOutDirectory))) .Returns(@"\\server\share"); var trackingStreamMock = new Mock <TrackingStream>(new MemoryStream()) { CallBase = true }; ClaimStore.Instance.SetupMessageBodyCapture(trackingStreamMock.Object, ActivityTrackingModes.Body, null); trackingStreamMock.Verify( ts => ts.SetupCapture(It.Is <MessageBodyCaptureDescriptor>(cd => cd.CaptureMode == MessageBodyCaptureMode.Claimed)), Times.Never()); trackingStreamMock.Verify( ts => ts.SetupCapture(It.Is <MessageBodyCaptureDescriptor>(cd => cd.CaptureMode == MessageBodyCaptureMode.Unclaimed)), Times.Once()); trackingStreamMock.Verify( ts => ts.SetupCapture(It.Is <MessageBodyCaptureDescriptor>(cd => cd.CaptureMode == MessageBodyCaptureMode.Claimed), It.IsAny <System.IO.Stream>()), Times.Never()); } }
public void CaptureMessageBody() { var trackingStream = new TrackingStream(TextStreamDummy.Create(1024 * 1024)); var messageMock = new Unit.Message.Mock <IBaseMessage> { DefaultValue = DefaultValue.Mock }; messageMock.Object.BodyPart.Data = trackingStream; using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) .Returns(Path.GetTempPath()); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckOutDirectory))) .Returns(@"\\server\share"); ClaimStore.Instance.SetupMessageBodyCapture(trackingStream, ActivityTrackingModes.Body, null); messageMock.Object.BodyPart.Data.Drain(); // payload is claimed to disk and file extension is .trk var captureDescriptor = trackingStream.CaptureDescriptor; captureDescriptor.CaptureMode.Should().Be(MessageBodyCaptureMode.Claimed); captureDescriptor.Data.Should().StartWith(DateTime.Today.ToString(@"yyyyMMdd\\")); File.Exists(Path.Combine(Path.GetTempPath(), captureDescriptor.Data.Replace("\\", "") + ".trk")).Should().BeTrue(); } }
public void CaptureMessageBodyWithEmptyStreamWillHaveMessageUnclaimed() { using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(BizTalkFactorySettings.APPLICATION_NAME, BizTalkFactorySettings.CLAIM_STORE_CHECK_IN_DIRECTORY_PROPERTY_NAME)) .Returns(Path.GetTempPath()); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(BizTalkFactorySettings.APPLICATION_NAME, BizTalkFactorySettings.CLAIM_STORE_CHECK_OUT_DIRECTORY_PROPERTY_NAME)) .Returns(@"\\server\share"); var trackingStreamMock = new Mock <TrackingStream>(new MemoryStream()) { CallBase = true }; ClaimStore.Instance.SetupMessageBodyCapture(trackingStreamMock.Object, ActivityTrackingModes.Body, null); trackingStreamMock.Verify( ts => ts.SetupCapture(It.Is <MessageBodyCaptureDescriptor>(cd => cd.CaptureMode == MessageBodyCaptureMode.Claimed)), Times.Never()); trackingStreamMock.Verify( ts => ts.SetupCapture(It.Is <MessageBodyCaptureDescriptor>(cd => cd.CaptureMode == MessageBodyCaptureMode.Unclaimed)), Times.Once()); trackingStreamMock.Verify( ts => ts.SetupCapture(It.Is <MessageBodyCaptureDescriptor>(cd => cd.CaptureMode == MessageBodyCaptureMode.Claimed), It.IsAny <System.IO.Stream>()), Times.Never()); } }
public void RequiresCheckInAndOutIsTrue() { using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) .Returns(Path.GetTempPath()); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckOutDirectory))) .Returns(@"\\server\share"); ClaimStore.RequiresCheckInAndOut.Should().BeTrue(); } }
public void RequiresCheckInAndOutIsCaseInsensitive() { using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) .Returns(Path.GetTempPath().ToUpper()); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckOutDirectory))) .Returns(Path.GetTempPath().ToLower()); ClaimStore.RequiresCheckInAndOut.Should().BeFalse(); } }
public void RequiresCheckInAndOutIsTrue() { using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(BizTalkFactorySettings.APPLICATION_NAME, BizTalkFactorySettings.CLAIM_STORE_CHECK_IN_DIRECTORY_PROPERTY_NAME)) .Returns(Path.GetTempPath()); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(BizTalkFactorySettings.APPLICATION_NAME, BizTalkFactorySettings.CLAIM_STORE_CHECK_OUT_DIRECTORY_PROPERTY_NAME)) .Returns(@"\\server\share"); ClaimStore.RequiresCheckInAndOut.Should().BeTrue(); } }
public void RequiresCheckInAndOutIsTrailingBackslashInsensitive() { using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) // makes sure there is one trailing '\' .Returns(Path.GetTempPath().ToUpper().TrimEnd('\\') + '\\'); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckOutDirectory))) // makes sure there is no trailing '\' .Returns(Path.GetTempPath().ToLower().TrimEnd('\\')); ClaimStore.RequiresCheckInAndOut.Should().BeFalse(); } }
public void RequiresCheckInAndOutIsTrailingBackslashInsensitive() { using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(BizTalkFactorySettings.APPLICATION_NAME, BizTalkFactorySettings.CLAIM_STORE_CHECK_IN_DIRECTORY_PROPERTY_NAME)) // makes sure there is one trailing '\' .Returns(Path.GetTempPath().ToUpper().TrimEnd('\\') + '\\'); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(BizTalkFactorySettings.APPLICATION_NAME, BizTalkFactorySettings.CLAIM_STORE_CHECK_OUT_DIRECTORY_PROPERTY_NAME)) // makes sure there is no trailing '\' .Returns(Path.GetTempPath().ToLower().TrimEnd('\\')); ClaimStore.RequiresCheckInAndOut.Should().BeFalse(); } }
public void ClaimMessageBody() { using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) .Returns(Path.GetTempPath()); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckOutDirectory))) .Returns(@"\\server\share"); using (var contentStream = TextStreamDummy.Create(1024 * 1024)) using (var trackingStream = new TrackingStream(contentStream)) { MessageMock.Object.BodyPart.Data = trackingStream; ClaimStore.Instance.SetupMessageBodyCapture(trackingStream, ActivityTrackingModes.Claim, null); ClaimStore.Instance.Claim(MessageMock.Object, ResourceTrackerMock.Object); // message's actual body stream has been exhausted (i.e. saved to disk) contentStream.Position.Should().Be(contentStream.Length); // message's body stream is replaced by a token message using (var reader = new StreamReader(MessageMock.Object.BodyPart.Data)) { reader.ReadToEnd().Should().Be(ClaimFactory.CreateCheckIn(trackingStream.CaptureDescriptor.Data).OuterXml); } // MessageType of token message is promoted in message context var schemaMetadata = SchemaMetadata.For <Claim.CheckIn>(); MessageMock.Verify(m => m.Promote(BtsProperties.MessageType, schemaMetadata.MessageType), Times.Once()); MessageMock.Verify(m => m.Promote(BtsProperties.SchemaStrongName, schemaMetadata.DocumentSpec.DocSpecStrongName), Times.Once()); // payload is claimed to disk and file extension is .chk var captureDescriptor = trackingStream.CaptureDescriptor; captureDescriptor.CaptureMode.Should().Be(MessageBodyCaptureMode.Claimed); captureDescriptor.Data.Should().StartWith(DateTime.Today.ToString(@"yyyyMMdd\\")); File.Exists(Path.Combine(Path.GetTempPath(), captureDescriptor.Data.Replace("\\", "") + ".chk")).Should().BeTrue(); } } }
public void RedeemClaimToken() { const string content = "dummy"; const string url = "cca95baa39ab4e25a3c54971ea170911"; using (var file = File.CreateText(Path.Combine(Path.GetTempPath(), url))) { file.Write(content); } using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) .Returns(Path.GetTempPath()); configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckOutDirectory))) .Returns(Path.GetTempPath()); using (var tokenStream = ClaimFactory.CreateCheck(url).AsStream()) { MessageMock.Object.BodyPart.Data = tokenStream; ClaimStore.Instance.Redeem(MessageMock.Object, ResourceTrackerMock.Object); MessageMock.Object.BodyPart.Data.Should().BeOfType <TrackingStream>(); var captureDescriptor = ((TrackingStream)MessageMock.Object.BodyPart.Data).CaptureDescriptor; captureDescriptor.CaptureMode.Should().Be(MessageBodyCaptureMode.Claimed); // previously captured payload is reused and not captured/claimed anew captureDescriptor.Data.Should().Be(url); } using (var reader = new StreamReader(MessageMock.Object.BodyPart.Data)) { reader.ReadToEnd().Should().Be(content); } } }
public void CaptureMessageBodyWillHaveMessageClaimedButSsoApplicationDoesNotExist() { Skip.IfNot(BizTalkServerGroup.IsConfigured); var actualSsoConfigurationReader = SsoConfigurationReader.Instance; // setup a mock callback to ensure that, even if the BizTalk.Factory SSO store is deployed, the call will look for an SSO store that does not exist using (var configurationReaderMockInjectionScope = new SsoConfigurationReaderMockInjectionScope()) { configurationReaderMockInjectionScope.Mock .Setup(ssr => ssr.Read(ClaimStoreSsoSettings.AFFILIATE_APPLICATION_NAME, nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) .Callback(() => actualSsoConfigurationReader.Read("NONEXISTENT_APPLICATION", nameof(ClaimStoreSsoSettings.ClaimStoreCheckInDirectory))) .Returns(Path.GetTempPath()); var trackingStreamMock = new Mock <TrackingStream>(TextStreamDummy.Create(1024 * 1024)) { CallBase = true }; Invoking(() => ClaimStore.Instance.SetupMessageBodyCapture(trackingStreamMock.Object, ActivityTrackingModes.Claim, null)) .Should().Throw <InvalidOperationException>() .WithMessage("AffiliateApplication 'NONEXISTENT_APPLICATION' does not exist."); } }