Exemplo n.º 1
0
        public void AddPartToPartitionedBatch()
        {
            BatchAdapter.CreatePartMessage(_envelopeSpecName, "partition-z").DropToFolder(DropFolders.INPUT_FOLDER, "part.xml.part");

            var process = TrackingRepository.SingleProcess(
                p => p.Name == Factory.Areas.Batch.Processes.Aggregate &&
                p.BeginTime > StartTime &&
                p.Value3 == "partition-z");

            process.SingleMessagingStep(
                s => s.Name == BizTalkFactoryApplication.ReceiveLocation <UnitTestBatchAddPartReceiveLocation>().Name &&
                s.MessageType == new SchemaMetadata <Any>().MessageType &&
                s.Status == TrackingStatus.Received &&
                _envelopeSpecName.StartsWith(s.Value1, StringComparison.Ordinal) &&
                s.Value3 == "partition-z");
            var addPartMessage = process.SingleMessagingStep(
                s => s.Name == BizTalkFactoryApplication.SendPort <BatchAddPartSendPort>().Name &&
                s.MessageType == new SchemaMetadata <Any>().MessageType &&
                s.Status == TrackingStatus.Sent &&
                _envelopeSpecName.StartsWith(s.Value1, StringComparison.Ordinal) &&
                s.Value3 == "partition-z");

            var part = BatchAdapter.Parts.Single();

            Assert.That(part.MessagingStepActivityId, Is.EqualTo(addPartMessage.ActivityID));
            Assert.That(part.Partition, Is.EqualTo("partition-z"));
        }
Exemplo n.º 2
0
        public void TrackBatchReleasedOnPolling()
        {
            BatchAdapter.CreatePartMessage(_envelopeSpecName, "partition-z").DropToFolder(DropFolders.INPUT_FOLDER, "part.xml.part");
            var process = TrackingRepository.SingleProcess(
                p => p.Name == Factory.Areas.Batch.Processes.Aggregate &&
                p.BeginTime > StartTime);
            var addPartMessage1 = process.SingleMessagingStep(
                s => s.Name == BizTalkFactoryApplication.SendPort <BatchAddPartSendPort>().Name &&
                s.MessageType == new SchemaMetadata <Any>().MessageType &&
                s.Status == TrackingStatus.Sent &&
                _envelopeSpecName.StartsWith(s.Value1) &&
                s.Value3 == "partition-z");

            BatchAdapter.CreatePartMessage(_envelopeSpecName, "partition-z").DropToFolder(DropFolders.INPUT_FOLDER, "part.xml.part");
            process = TrackingRepository.SingleProcess(
                p => p.Name == Factory.Areas.Batch.Processes.Aggregate
                // ReSharper disable once AccessToModifiedClosure
                && p.BeginTime > process.EndTime);
            var addPartMessage2 = process.SingleMessagingStep(
                s => s.Name == BizTalkFactoryApplication.SendPort <BatchAddPartSendPort>().Name &&
                s.MessageType == new SchemaMetadata <Any>().MessageType &&
                s.Status == TrackingStatus.Sent &&
                _envelopeSpecName.StartsWith(s.Value1) &&
                s.Value3 == "partition-z");

            BatchAdapter.CreatePartMessage(_envelopeSpecName, "partition-z").DropToFolder(DropFolders.INPUT_FOLDER, "part.xml.part");
            process = TrackingRepository.SingleProcess(
                p => p.Name == Factory.Areas.Batch.Processes.Aggregate
                // ReSharper disable once AccessToModifiedClosure
                && p.BeginTime > process.EndTime);
            var addPartMessage3 = process.SingleMessagingStep(
                s => s.Name == BizTalkFactoryApplication.SendPort <BatchAddPartSendPort>().Name &&
                s.MessageType == new SchemaMetadata <Any>().MessageType &&
                s.Status == TrackingStatus.Sent &&
                _envelopeSpecName.StartsWith(s.Value1) &&
                s.Value3 == "partition-z");

            BatchReleasePort.Enable();

            // batch controlled release process
            process = TrackingRepository.SingleProcess(
                p => p.Name == Factory.Areas.Batch.Processes.Release &&
                p.BeginTime > StartTime &&
                p.Status == TrackingStatus.Completed);
            // 1st part
            process.SingleMessagingStep(s => s.ActivityID == addPartMessage1.ActivityID);
            // 2nd part
            process.SingleMessagingStep(s => s.ActivityID == addPartMessage2.ActivityID);
            // 3rd part
            process.SingleMessagingStep(s => s.ActivityID == addPartMessage3.ActivityID);
            // batch content
            var releaseProcessBatchMessagingStep = process.SingleMessagingStep(
                s => s.Name == BizTalkFactoryApplication.ReceiveLocation <BatchReceiveLocation>().Name
                // TODO && s.MessageType == new SchemaMetadata<BatchContent>().MessageType
                && s.Status == TrackingStatus.Received);

            // batch content handling process
            process = TrackingRepository.SingleProcess(
                p => p.Name == Default.Processes.Unidentified &&
                p.BeginTime > StartTime &&
                p.Status == TrackingStatus.Completed &&
                _envelopeSpecName.StartsWith(p.Value1) &&
                p.Value3 == "partition-z");
            var handlingProcessBatchMessagingStep = process.SingleMessagingStep(
                s => s.Name == BizTalkFactoryApplication.ReceiveLocation <BatchReceiveLocation>().Name
                // TODO && s.MessageType == new SchemaMetadata<BatchContent>().MessageType
                && s.Status == TrackingStatus.Received);

            Assert.That(releaseProcessBatchMessagingStep.ActivityID, Is.EqualTo(handlingProcessBatchMessagingStep.ActivityID));

            // a part is linked to both its aggregate and release processes
            Assert.That(addPartMessage1.Processes.Count(), Is.EqualTo(2));
            Assert.That(addPartMessage1.Processes.SingleOrDefault(p => p.Name == Factory.Areas.Batch.Processes.Aggregate), Is.Not.Null);
            Assert.That(addPartMessage1.Processes.SingleOrDefault(p => p.Name == Factory.Areas.Batch.Processes.Release), Is.Not.Null);

            // a batch is linked to both its release and handling processes
            Assert.That(releaseProcessBatchMessagingStep.Processes.Count(), Is.EqualTo(2));
            Assert.That(releaseProcessBatchMessagingStep.Processes.SingleOrDefault(p => p.Name == Factory.Areas.Batch.Processes.Release), Is.Not.Null);
            Assert.That(releaseProcessBatchMessagingStep.Processes.SingleOrDefault(p => p.Name == Default.Processes.Unidentified), Is.Not.Null);
        }