Exemplo n.º 1
0
        public void TestLargeDocumentSplitOk()
        {
            GlobalOptions options = MongoDbPopulatorTestHelper.GetNewMongoDbPopulatorOptions();

            options.MongoDbPopulatorOptions.MongoDbFlushTime = int.MaxValue / 1000;

            var adapter   = new MongoDbAdapter("ImageProcessor", options.MongoDatabases.ExtractionStoreOptions, "largeDocumentTest");
            var processor = new ImageMessageProcessor(options.MongoDbPopulatorOptions, adapter, 2, null);
            var mockModel = Mock.Of <IModel>();

            processor.Model = mockModel;

            var dataset = new DicomDataset
            {
                new DicomUnlimitedText(DicomTag.SelectorUTValue, new string('x', 15 * 1024 * 1024))
            };

            var largeMessage = new DicomFileMessage
            {
                SeriesInstanceUID           = "",
                StudyInstanceUID            = "",
                SOPInstanceUID              = "",
                NationalPACSAccessionNumber = "",
                DicomFilePath = "",
                DicomDataset  = DicomTypeTranslater.SerializeDatasetToJson(dataset)
            };

            processor.AddToWriteQueue(largeMessage, new MessageHeader(), 1);
            processor.AddToWriteQueue(largeMessage, new MessageHeader(), 2);
        }
Exemplo n.º 2
0
        public void TestImageDocumentFormat()
        {
            GlobalOptions options = MongoDbPopulatorTestHelper.GetNewMongoDbPopulatorOptions();

            options.MongoDbPopulatorOptions.MongoDbFlushTime = int.MaxValue / 1000;

            string collectionName = MongoDbPopulatorTestHelper.GetCollectionNameForTest("TestImageDocumentFormat");
            var    testAdapter    = new MongoDbAdapter("TestImageDocumentFormat", options.MongoDatabases.DicomStoreOptions, collectionName);

            var callbackUsed = false;
            Action <Exception> exceptionCallback = (exception) => { callbackUsed = true; };

            var processor = new ImageMessageProcessor(options.MongoDbPopulatorOptions, testAdapter, 1, exceptionCallback)
            {
                Model = Mock.Of <IModel>()
            };

            var header = new MessageHeader();

            // Max queue size set to 1 so will immediately process this
            processor.AddToWriteQueue(_helper.TestImageMessage, header, 1);

            Assert.False(callbackUsed);
            Assert.True(processor.AckCount == 1);

            IMongoCollection <BsonDocument> imageCollection = _helper.TestDatabase.GetCollection <BsonDocument>(collectionName + "_SR");

            Assert.True(imageCollection.CountDocuments(new BsonDocument()) == 1);

            BsonDocument doc = imageCollection.FindAsync(FilterDefinition <BsonDocument> .Empty).Result.Single();

            Validate(_helper.TestImageMessage, header, doc);
        }
Exemplo n.º 3
0
        public void TestErrorHandling()
        {
            _helper.Globals.MongoDbPopulatorOptions.FailedWriteLimit = 1;

            var mockAdapter = new Mock <IMongoDbAdapter>();

            mockAdapter
            .Setup(x => x.WriteMany(It.IsAny <IList <BsonDocument> >(), It.IsAny <string>()))
            .Returns(WriteResult.Failure);

            var processor = new ImageMessageProcessor(_helper.Globals.MongoDbPopulatorOptions, mockAdapter.Object, 1, delegate { })
            {
                Model = Mock.Of <IModel>()
            };

            Assert.Throws <ApplicationException>(() => processor.AddToWriteQueue(_helper.TestImageMessage, new MessageHeader(), 1));
        }
Exemplo n.º 4
0
        public void TestLargeMessageNack()
        {
            GlobalOptions options = MongoDbPopulatorTestHelper.GetNewMongoDbPopulatorOptions();

            options.MongoDbPopulatorOptions.MongoDbFlushTime = int.MaxValue / 1000;

            var adapter   = new MongoDbAdapter("ImageProcessor", options.MongoDatabases.ExtractionStoreOptions, "largeDocumentTest");
            var processor = new ImageMessageProcessor(options.MongoDbPopulatorOptions, adapter, 1, null);
            var mockModel = Mock.Of <IModel>();

            processor.Model = mockModel;

            var dataset = new DicomDataset
            {
                new DicomUnlimitedText(DicomTag.SelectorUTValue, new string('x', 16 * 1024 * 1024))
            };

            string json = DicomTypeTranslater.SerializeDatasetToJson(dataset);

            var largeMessage = new DicomFileMessage
            {
                SeriesInstanceUID           = "",
                StudyInstanceUID            = "",
                SOPInstanceUID              = "",
                NationalPACSAccessionNumber = "",
                DicomFilePath = "",
                DicomDataset  = json
            };

            Assert.Throws <ApplicationException>(() => processor.AddToWriteQueue(largeMessage, new MessageHeader(), 1));

            dataset = new DicomDataset
            {
                // Should be ok, getting close to the threshold
                new DicomUnlimitedText(DicomTag.SelectorUTValue, new string('x', 15 * 1024 * 1024 + 512))
            };

            json = DicomTypeTranslater.SerializeDatasetToJson(dataset);
            largeMessage.DicomDataset = json;

            processor.AddToWriteQueue(largeMessage, new MessageHeader(), 2);
            Assert.True(processor.AckCount == 1);
        }
Exemplo n.º 5
0
        public void ImageProcessor_FailInModalityBatch_AcksWrittenDocuments()
        {
            _testOptions.MongoDbPopulatorOptions.FailedWriteLimit = 1;
            _testOptions.MongoDbPopulatorOptions.MongoDbFlushTime = int.MaxValue / 1000;

            var testModalities = new[] { "MR", "MR", "MR", "SR", "SR" };

            var testAdapter = new MongoTestAdapter();
            var processor   = new ImageMessageProcessor(_testOptions.MongoDbPopulatorOptions, testAdapter, testModalities.Length + 1, null);

            var mockModel = new Mock <IModel>();

            mockModel.Setup(x => x.BasicAck(It.Is <ulong>(y => y == ulong.MaxValue), It.IsAny <bool>()))
            .Callback(() => throw new Exception("BasicAck called with delivery tag for CT message"));

            processor.Model = mockModel.Object;

            var ds  = new DicomDataset();
            var msg = new DicomFileMessage
            {
                DicomFilePath = "",
                NationalPACSAccessionNumber = ""
            };

            for (var i = 0; i < testModalities.Length; ++i)
            {
                string modality = testModalities[i];
                ds.AddOrUpdate(DicomTag.Modality, modality);
                msg.DicomDataset = DicomTypeTranslater.SerializeDatasetToJson(ds);
                processor.AddToWriteQueue(msg, null, (ulong)i);
            }

            ds.AddOrUpdate(DicomTag.Modality, "CT");
            msg.DicomDataset = DicomTypeTranslater.SerializeDatasetToJson(ds);

            Assert.Throws <ApplicationException>(() => processor.AddToWriteQueue(msg, new MessageHeader(), ulong.MaxValue));
            Assert.AreEqual(5, processor.AckCount);
        }