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 OneTimeSetUp() { TestLogger.Setup(); _helper = new MongoDbPopulatorTestHelper(); _helper.SetupSuite(); }
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 TestSeriesDocumentFormat() { GlobalOptions options = MongoDbPopulatorTestHelper.GetNewMongoDbPopulatorOptions(); options.MongoDbPopulatorOptions.MongoDbFlushTime = int.MaxValue; string collectionName = MongoDbPopulatorTestHelper.GetCollectionNameForTest("TestSeriesDocumentFormat"); var testAdapter = new MongoDbAdapter("TestSeriesDocumentFormat", options.MongoDatabases.DicomStoreOptions, collectionName); var callbackUsed = false; Action <Exception> exceptionCallback = (exception) => { callbackUsed = true; }; var processor = new SeriesMessageProcessor(options.MongoDbPopulatorOptions, testAdapter, 1, exceptionCallback) { Model = Mock.Of <IModel>() }; // Max queue size set to 1 so will immediately process this processor.AddToWriteQueue(_helper.TestSeriesMessage, new MessageHeader(), 1); Assert.False(callbackUsed); Assert.True(processor.AckCount == 1); IMongoCollection <BsonDocument> collection = _helper.TestDatabase.GetCollection <BsonDocument>(collectionName); Assert.True(collection.CountDocuments(new BsonDocument()) == 1); BsonDocument document = collection.Find(_ => true).ToList()[0]; Validate(_helper.TestSeriesMessage, document); }
public void TestMissingMongoConnectionOnStartup() { GlobalOptions options = MongoDbPopulatorTestHelper.GetNewMongoDbPopulatorOptions(); options.MongoDatabases.DicomStoreOptions.Port = 12345; // ReSharper disable once ObjectCreationAsStatement Assert.Throws <ArgumentException>(() => new MongoDbPopulatorMessageConsumer <DicomFileMessage>(options.MongoDatabases.DicomStoreOptions, options.MongoDbPopulatorOptions, null)); }
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 TestBasicWrite() { string collectionName = MongoDbPopulatorTestHelper.GetCollectionNameForTest("TestBasicWrite"); var adapter = new MongoDbAdapter("TestApplication", _helper.Globals.MongoDatabases.DicomStoreOptions, collectionName); var testDoc = new BsonDocument { { "hello", "world" } }; WriteResult result = adapter.WriteMany(new List <BsonDocument> { testDoc }); Assert.True(result == WriteResult.Success); Assert.True(_helper.TestDatabase.GetCollection <BsonDocument>(collectionName) .CountDocuments(new BsonDocument()) == 1); BsonDocument doc = _helper.TestDatabase.GetCollection <BsonDocument>(collectionName).Find(_ => true).ToList()[0]; Assert.True(doc.Equals(testDoc)); var toWrite = new List <BsonDocument>(); for (var i = 0; i < 99; i++) { toWrite.Add(new BsonDocument { { "hello", i } }); } result = adapter.WriteMany(toWrite); Assert.True(result == WriteResult.Success); Assert.True(_helper.TestDatabase.GetCollection <BsonDocument>(collectionName) .CountDocuments(new BsonDocument()) == 100); }
public void TestPopulatorBasic(int nMessages) { // Arrange string currentCollectionName = MongoDbPopulatorTestHelper.GetCollectionNameForTest(string.Format("TestPopulatorBasic({0})", nMessages)); _helper.Globals.MongoDbPopulatorOptions.SeriesCollection = currentCollectionName; var tester = new MicroserviceTester(_helper.Globals.RabbitOptions, _helper.Globals.MongoDbPopulatorOptions.SeriesQueueConsumerOptions, _helper.Globals.MongoDbPopulatorOptions.ImageQueueConsumerOptions); var host = new MongoDbPopulatorHost(_helper.Globals); host.Start(); using (var timeline = new TestTimeline(tester)) { var ds = new DicomDataset { new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3.4") }; var message = new SeriesMessage { NationalPACSAccessionNumber = "NationalPACSAccessionNumber-test", DirectoryPath = "DirectoryPath-test", StudyInstanceUID = "StudyInstanceUID-test", SeriesInstanceUID = "SeriesInstanceUID-test", ImagesInSeries = 123, DicomDataset = DicomTypeTranslater.SerializeDatasetToJson(ds) }; // Act for (var i = 0; i < nMessages; i++) { timeline.SendMessage(_helper.Globals.MongoDbPopulatorOptions.SeriesQueueConsumerOptions, message); } timeline.StartTimeline(); var timeout = 30000; const int stepSize = 500; if (Debugger.IsAttached) { timeout = int.MaxValue; } var nWritten = 0L; while (nWritten < nMessages && timeout > 0) { nWritten = _helper.TestDatabase.GetCollection <BsonDocument>(currentCollectionName).CountDocuments(new BsonDocument()); Thread.Sleep(stepSize); timeout -= stepSize; } // Assert if (timeout <= 0) { Assert.Fail("Failed to process expected number of messages within the timeout"); } host.Stop("Test end"); tester.Shutdown(); } }
public void SetUp() { _helper = new MongoDbPopulatorTestHelper(); _helper.SetupSuite(); }