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();
            }
        }
Beispiel #3
0
        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();
            }
        }
Beispiel #6
0
        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();
            }
        }
Beispiel #8
0
        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.");
            }
        }