public void Test_BlankPatientIdentifier(Test testCase) { var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer); //the declaration of what the guid namer table should be var options = new IdentifierMapperOptions(); options.MappingConnectionString = db.Server.Builder.ConnectionString; var swapper = new SwapForFixedValueTester("meeee"); swapper.Setup(options); var consumer = new IdentifierMapperQueueConsumer(Mock.Of <IProducerModel>(), swapper); var msg = GetTestDicomFileMessage(testCase: testCase); string reason; Assert.False(consumer.SwapIdentifier(msg, out reason)); switch (testCase) { case Test.EmptyInPatientTag: Assert.AreEqual("PatientID was blank", reason); break; case Test.NoPatientTag: Assert.AreEqual("Dataset did not contain PatientID", reason); break; } }
public void TestIdentifierSwap(DatabaseType type) { var mappingDataTable = new DataTable("IdMap"); mappingDataTable.Columns.Add("priv"); mappingDataTable.Columns.Add("pub"); mappingDataTable.Rows.Add("010101", "020202"); var db = GetCleanedServer(type); var options = new IdentifierMapperOptions(); options.MappingConnectionString = db.Server.Builder.ConnectionString; options.MappingTableName = db.CreateTable("IdMap", mappingDataTable).GetFullyQualifiedName(); options.SwapColumnName = "priv"; options.ReplacementColumnName = "pub"; options.MappingDatabaseType = type; options.TimeoutInSeconds = 500; var swapper = new PreloadTableSwapper(); swapper.Setup(options); var consumer = new IdentifierMapperQueueConsumer(Mock.Of <IProducerModel>(), swapper); var msg = GetTestDicomFileMessage(); string reason; consumer.SwapIdentifier(msg, out reason); AssertDicomFileMessageHasPatientID(msg, "020202"); }
public IdentifierMapperHost(GlobalOptions options, ISwapIdentifiers swapper = null) : base(options) { _consumerOptions = options.IdentifierMapperOptions; FansiImplementations.Load(); if (swapper == null) { Logger.Info("Not passed a swapper, creating one of type " + options.IdentifierMapperOptions.SwapperType); _swapper = ObjectFactory.CreateInstance <ISwapIdentifiers>(options.IdentifierMapperOptions.SwapperType, typeof(ISwapIdentifiers).Assembly); } else { _swapper = swapper; } // If we want to use a Redis server to cache answers then wrap the mapper in a Redis caching swapper if (!string.IsNullOrWhiteSpace(options.IdentifierMapperOptions.RedisConnectionString)) { try { _swapper = new RedisSwapper(options.IdentifierMapperOptions.RedisConnectionString, _swapper); } catch (RedisConnectionException e) { // NOTE(rkm 2020-03-30) Log & throw! I hate this, but if we don't log here using NLog, then the exception will bubble-up // and only be printed to STDERR instead of to the log file and may be lost Logger.Error(e, "Could not connect to Redis"); throw; } } _swapper.Setup(_consumerOptions); Logger.Info($"Swapper of type {_swapper.GetType()} created"); // Batching now handled implicitly as backlog demands _producerModel = RabbitMqAdapter.SetupProducer(options.IdentifierMapperOptions.AnonImagesProducerOptions, isBatch: true); Consumer = new IdentifierMapperQueueConsumer(_producerModel, _swapper) { AllowRegexMatching = options.IdentifierMapperOptions.AllowRegexMatching }; // Add our event handler for control messages AddControlHandler(new IdentifierMapperControlMessageHandler(_swapper)); }
public void TestIdentifierSwap_NoCache(DatabaseType type, Test test) { var mappingDataTable = new DataTable("IdMap"); mappingDataTable.Columns.Add("priv"); mappingDataTable.Columns.Add("pub"); mappingDataTable.Rows.Add("010101", "020202"); mappingDataTable.Rows.Add("0101010101", "0202020202"); var db = GetCleanedServer(type); var options = new IdentifierMapperOptions(); options.MappingConnectionString = db.Server.Builder.ConnectionString; options.MappingTableName = db.CreateTable("IdMap", mappingDataTable).GetFullyQualifiedName(); options.SwapColumnName = "priv"; options.ReplacementColumnName = "pub"; options.MappingDatabaseType = type; options.TimeoutInSeconds = 500; var swapper = new TableLookupSwapper(); swapper.Setup(options); var consumer = new IdentifierMapperQueueConsumer(Mock.Of <IProducerModel>(), swapper); consumer.AllowRegexMatching = true; var msg = GetTestDicomFileMessage(test); string reason; consumer.SwapIdentifier(msg, out reason); if (test == Test.Normal) { AssertDicomFileMessageHasPatientID(msg, "020202"); } else if (test == Test.ProperlyFormatedChi) { AssertDicomFileMessageHasPatientID(msg, "0202020202"); } else { Assert.Fail("Wrong test case?"); } }
public void Test_NoMatchingIdentifierFound() { var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer); //the declaration of what the guid namer table should be var options = new IdentifierMapperOptions(); options.MappingConnectionString = db.Server.Builder.ConnectionString; //null here means it will never find any identifier var swapper = new SwapForFixedValueTester(null); swapper.Setup(options); var consumer = new IdentifierMapperQueueConsumer(Mock.Of <IProducerModel>(), swapper); var msg = GetTestDicomFileMessage(); string reason; Assert.False(consumer.SwapIdentifier(msg, out reason)); Assert.AreEqual("Swapper Microservices.IdentifierMapper.Tests.SwapForFixedValueTester returned null", reason); }
public void TestIdentifierSwapForGuid(DatabaseType dbType) { var db = GetCleanedServer(dbType); var mapTbl = db.ExpectTable("Map"); //the declaration of what the guid namer table should be var options = new IdentifierMapperOptions(); options.MappingConnectionString = db.Server.Builder.ConnectionString; options.MappingTableName = mapTbl.GetFullyQualifiedName(); options.SwapColumnName = "priv"; options.ReplacementColumnName = "pub"; options.MappingDatabaseType = dbType; var swapper = new ForGuidIdentifierSwapper(); swapper.Setup(options); swapper.Setup(options); swapper.Setup(options); //this isn't just for the lols, this will test both the 'create it mode' and the 'discover it mode' var consumer = new IdentifierMapperQueueConsumer(Mock.Of <IProducerModel>(), swapper); var msg = GetTestDicomFileMessage(); string reason; consumer.SwapIdentifier(msg, out reason); var newDs = DicomTypeTranslater.DeserializeJsonToDataset(msg.DicomDataset); var guidAllocated = newDs.GetValue <string>(DicomTag.PatientID, 0); var dt = mapTbl.GetDataTable(); Assert.AreEqual(1, dt.Rows.Count); //e.g. '841A2E3E-B7C9-410C-A5D1-816B95C0E806' Assert.AreEqual(36, guidAllocated.Length); }