Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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?");
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }