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); }
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); }
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)); }
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); }
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); }