public void AssembleDataTableFromFolder() { var file1 = new FileInfo(Path.Combine(TestContext.CurrentContext.TestDirectory, "TestData/FileWithLotsOfTags.dcm")); var file2 = new FileInfo(Path.Combine(TestContext.CurrentContext.TestDirectory, "TestData/IM-0001-0013.dcm")); var controlFile = new FileInfo(Path.Combine(TestContext.CurrentContext.TestDirectory, "list.txt")); File.WriteAllText(controlFile.FullName, file1.FullName + Environment.NewLine + file2.FullName); var source = new DicomFileCollectionSource { FilenameField = "RelativeFileArchiveURI" }; source.PreInitialize(new FlatFileToLoadDicomFileWorklist(new FlatFileToLoad(controlFile)), new ThrowImmediatelyDataLoadEventListener()); var toMemory = new ToMemoryDataLoadEventListener(true); var result = source.GetChunk(toMemory, new GracefulCancellationToken()); Assert.AreEqual(1, result.Rows.Count); result = source.GetChunk(toMemory, new GracefulCancellationToken()); Assert.AreEqual(1, result.Rows.Count); Assert.AreEqual(null, source.GetChunk(toMemory, new GracefulCancellationToken())); }
public void TestPatientAgeTag() { string filename = Path.Combine(TestContext.CurrentContext.TestDirectory, "test.dcm"); var dataset = new DicomDataset(); dataset.Add(DicomTag.SOPInstanceUID, "123.123.123"); dataset.Add(DicomTag.SOPClassUID, "123.123.123"); dataset.Add(new DicomAgeString(DicomTag.PatientAge, "009Y")); var cSharpValue = DicomTypeTranslaterReader.GetCSharpValue(dataset, DicomTag.PatientAge); Assert.AreEqual("009Y", cSharpValue); var file = new DicomFile(dataset); file.Save(filename); var source = new DicomFileCollectionSource(); source.FilenameField = "Path"; source.PreInitialize(new ExplicitListDicomFileWorklist(new[] { filename }), new ThrowImmediatelyDataLoadEventListener()); var chunk = source.GetChunk(new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); Assert.AreEqual("009Y", chunk.Rows[0]["PatientAge"]); }
public void AssembleDataTableFromFileArchive() { var zip = Path.Combine(TestContext.CurrentContext.TestDirectory, "TestData.zip"); var dir = Path.Combine(TestContext.CurrentContext.TestDirectory, "TestData"); if (File.Exists(zip)) { File.Delete(zip); } ZipFile.CreateFromDirectory(dir, zip); var fileCount = Directory.GetFiles(dir, "*.dcm").Count(); var source = new DicomFileCollectionSource(); source.FilenameField = "RelativeFileArchiveURI"; source.PreInitialize(new FlatFileToLoadDicomFileWorklist(new FlatFileToLoad(new FileInfo(zip))), new ThrowImmediatelyDataLoadEventListener()); var toMemory = new ToMemoryDataLoadEventListener(true); var result = source.GetChunk(toMemory, new GracefulCancellationToken()); //processed every file once Assert.AreEqual(fileCount, toMemory.LastProgressRecieivedByTaskName.Single().Value.Progress.Value); Assert.Greater(result.Columns.Count, 0); }
public void AssembleDataTableFromFile() { var source = new DicomFileCollectionSource(); source.FilenameField = "RelativeFileArchiveURI"; var f = Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestData\IM-0001-0013.dcm"); source.PreInitialize(new FlatFileToLoadDicomFileWorklist(new FlatFileToLoad(new FileInfo(f))), new ThrowImmediatelyDataLoadEventListener()); var result = source.GetChunk(new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); Assert.AreEqual("IM00010013", result.TableName); Assert.Greater(result.Columns.Count, 0); Assert.IsNull(source.GetChunk(new ThrowImmediatelyDataLoadJob(), new GracefulCancellationToken())); }
public void Test_SingleFile(bool expressRelative) { var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer); var source = new DicomFileCollectionSource { FilenameField = "RelativeFileArchiveURI" }; if (expressRelative) { source.ArchiveRoot = TestContext.CurrentContext.TestDirectory; } var f = new FlatFileToLoad(new FileInfo(Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestData/IM-0001-0013.dcm"))); source.PreInitialize(new FlatFileToLoadDicomFileWorklist(f), new ThrowImmediatelyDataLoadEventListener()); var tbl = source.GetChunk(new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); var destination = new DataTableUploadDestination(); destination.PreInitialize(db, new ThrowImmediatelyDataLoadEventListener()); destination.AllowResizingColumnsAtUploadTime = true; destination.ProcessPipelineData(tbl, new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); destination.Dispose(new ThrowImmediatelyDataLoadEventListener(), null); var finalTable = db.ExpectTable(destination.TargetTableName); using (var dt = finalTable.GetDataTable()) { //should be 1 row in the final table Assert.AreEqual(1, dt.Rows.Count); //the path referenced should be the file read in relative/absolute format Assert.AreEqual(expressRelative ? "./TestData/IM-0001-0013.dcm": f.File.FullName.Replace('\\', '/') , dt.Rows[0]["RelativeFileArchiveURI"]); } Assert.IsTrue(finalTable.Exists()); finalTable.Drop(); }
public void PipelineTest() { var source = new DicomFileCollectionSource(); source.FilenameField = "RelativeFileArchiveURI"; var f = new FlatFileToLoad(new FileInfo(Path.Combine(TestContext.CurrentContext.TestDirectory, @"TestData\IM-0001-0013.dcm"))); source.PreInitialize(new FlatFileToLoadDicomFileWorklist(f), new ThrowImmediatelyDataLoadEventListener()); var tbl = source.GetChunk(new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); var destination = new DataTableUploadDestination(); destination.PreInitialize(DiscoveredDatabaseICanCreateRandomTablesIn, new ThrowImmediatelyDataLoadEventListener()); destination.AllowResizingColumnsAtUploadTime = true; destination.ProcessPipelineData(tbl, new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); destination.Dispose(new ThrowImmediatelyDataLoadEventListener(), null); var finalTable = DiscoveredDatabaseICanCreateRandomTablesIn.ExpectTable(destination.TargetTableName); Assert.IsTrue(finalTable.Exists()); finalTable.Drop(); }
public void Test_ZipFile(bool expressRelative) { //get a clean database to upload to var db = GetCleanedServer(DatabaseType.MicrosoftSQLServer); //create a folder in which to generate some dicoms var dirToLoad = new DirectoryInfo(Path.Combine(TestContext.CurrentContext.TestDirectory, nameof(Test_ZipFile))); if (dirToLoad.Exists) { dirToLoad.Delete(true); } dirToLoad.Create(); //generate some random dicoms var r = new Random(999); DicomDataGenerator generator = new DicomDataGenerator(r, dirToLoad, "CT") { MaximumImages = 5 }; var people = new PersonCollection(); people.GeneratePeople(1, r); generator.GenerateTestDataFile(people, new FileInfo("./inventory.csv"), 1); //This generates // Test_ZipFile // 2015 // 3 // 18 // 751140 2.25.166922918107154891877498685128076062226.dcm // 751140 2.25.179610809676265137473873365625829826423.dcm // 751140 2.25.201969634959506849065133495434871450465.dcm // 751140 2.25.237492679533001779093365416814254319890.dcm // 751140 2.25.316241631782653383510844072713132248731.dcm var yearDir = dirToLoad.GetDirectories().Single(); StringAssert.IsMatch("\\d{4}", yearDir.Name); //zip them up FileInfo zip = new FileInfo(Path.Combine(TestContext.CurrentContext.TestDirectory, nameof(Test_ZipFile) + ".zip")); Path.Combine(TestContext.CurrentContext.TestDirectory, nameof(Test_ZipFile) + ".zip"); if (zip.Exists) { zip.Delete(); } ZipFile.CreateFromDirectory(dirToLoad.FullName, zip.FullName); //tell the source to load the zip var f = new FlatFileToLoad(zip); var source = new DicomFileCollectionSource { FilenameField = "RelativeFileArchiveURI" }; if (expressRelative) { source.ArchiveRoot = TestContext.CurrentContext.TestDirectory; } source.PreInitialize(new FlatFileToLoadDicomFileWorklist(f), new ThrowImmediatelyDataLoadEventListener()); var tbl = source.GetChunk(new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); var destination = new DataTableUploadDestination(); destination.PreInitialize(db, new ThrowImmediatelyDataLoadEventListener()); destination.AllowResizingColumnsAtUploadTime = true; destination.ProcessPipelineData(tbl, new ThrowImmediatelyDataLoadEventListener(), new GracefulCancellationToken()); destination.Dispose(new ThrowImmediatelyDataLoadEventListener(), null); var finalTable = db.ExpectTable(destination.TargetTableName); using (var dt = finalTable.GetDataTable()) { //should be 5 rows in the final table (5 images) Assert.AreEqual(5, dt.Rows.Count); string pathInDbToDicomFile = (string)dt.Rows[0]["RelativeFileArchiveURI"]; //We expect either something like: // E:/RdmpDicom/Rdmp.Dicom.Tests/bin/Debug/netcoreapp2.2/Test_ZipFile.zip!2015/3/18/2.25.160787663560951826149226183314694084702.dcm // ./Test_ZipFile.zip!2015/3/18/2.25.105592977437473375573190160334447272386.dcm //the path referenced should be the file read in relative/absolute format StringAssert.IsMatch( expressRelative ? $@"./{zip.Name}![\d./]*.dcm": $@"{Regex.Escape(zip.FullName.Replace('\\','/'))}![\d./]*.dcm", pathInDbToDicomFile); StringAssert.Contains(yearDir.Name, pathInDbToDicomFile, "Expected zip file to have subdirectories and for them to be loaded correctly"); //confirm we can read that out again using (var pool = new ZipPool()) { var path = new AmbiguousFilePath(TestContext.CurrentContext.TestDirectory, pathInDbToDicomFile); Assert.IsNotNull(path.GetDataset(pool)); } } Assert.IsTrue(finalTable.Exists()); finalTable.Drop(); }