comparison OrthancServer/UnitTestsSources/ServerIndexTests.cpp @ 4508:8f9090b137f1

Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 11 Feb 2021 11:00:05 +0100
parents b4c58795f3a8
children 5b929e6b3c36
comparison
equal deleted inserted replaced
4507:b4c58795f3a8 4508:8f9090b137f1
725 instance.SetValue(DICOM_TAG_SOP_INSTANCE_UID, "instance-" + id, false); 725 instance.SetValue(DICOM_TAG_SOP_INSTANCE_UID, "instance-" + id, false);
726 instance.SetValue(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.1", false); // CR image 726 instance.SetValue(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.1", false); // CR image
727 727
728 ParsedDicomFile dicom(instance, GetDefaultDicomEncoding(), false /* be strict */); 728 ParsedDicomFile dicom(instance, GetDefaultDicomEncoding(), false /* be strict */);
729 729
730 DicomInstanceToStore toStore; 730 std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromParsedDicomFile(dicom));
731 toStore.SetParsedDicomFile(dicom);
732 731
733 std::map<MetadataType, std::string> instanceMetadata; 732 std::map<MetadataType, std::string> instanceMetadata;
734 733
735 { 734 {
736 DicomMap summary; 735 DicomMap summary;
737 OrthancConfiguration::DefaultExtractDicomSummary(summary, toStore.GetParsedDicomFile()); 736 OrthancConfiguration::DefaultExtractDicomSummary(summary, toStore->GetParsedDicomFile());
738 737
739 DicomTransferSyntax transferSyntax; 738 DicomTransferSyntax transferSyntax;
740 bool hasTransferSyntax = dicom.LookupTransferSyntax(transferSyntax); 739 bool hasTransferSyntax = dicom.LookupTransferSyntax(transferSyntax);
741 ASSERT_EQ(StoreStatus_Success, index.Store( 740 ASSERT_EQ(StoreStatus_Success, index.Store(
742 instanceMetadata, summary, attachments, toStore.GetMetadata(), 741 instanceMetadata, summary, attachments, toStore->GetMetadata(),
743 toStore.GetOrigin(), false /* don't overwrite */, 742 toStore->GetOrigin(), false /* don't overwrite */,
744 hasTransferSyntax, transferSyntax, true /* pixel data offset */, 42)); 743 hasTransferSyntax, transferSyntax, true /* pixel data offset */, 42));
745 } 744 }
746 745
747 ASSERT_EQ(6u, instanceMetadata.size()); 746 ASSERT_EQ(6u, instanceMetadata.size());
748 ASSERT_TRUE(instanceMetadata.find(MetadataType_RemoteAet) != instanceMetadata.end()); 747 ASSERT_TRUE(instanceMetadata.find(MetadataType_RemoteAet) != instanceMetadata.end());
832 { 831 {
833 ParsedDicomFile dicom(instance, GetDefaultDicomEncoding(), false /* be strict */); 832 ParsedDicomFile dicom(instance, GetDefaultDicomEncoding(), false /* be strict */);
834 833
835 DicomInstanceHasher hasher(instance); 834 DicomInstanceHasher hasher(instance);
836 835
837 DicomInstanceToStore toStore; 836 std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromParsedDicomFile(dicom));
838 toStore.SetParsedDicomFile(dicom); 837 toStore->SetOrigin(DicomInstanceOrigin::FromPlugins());
839 toStore.SetOrigin(DicomInstanceOrigin::FromPlugins());
840 ASSERT_EQ(id, hasher.HashInstance()); 838 ASSERT_EQ(id, hasher.HashInstance());
841 839
842 std::string id2; 840 std::string id2;
843 ASSERT_EQ(StoreStatus_Success, context.Store(id2, toStore, StoreInstanceMode_Default)); 841 ASSERT_EQ(StoreStatus_Success, context.Store(id2, *toStore, StoreInstanceMode_Default));
844 ASSERT_EQ(id, id2); 842 ASSERT_EQ(id, id2);
845 } 843 }
846 844
847 FileInfo dicom1, json1; 845 FileInfo dicom1, json1;
848 ASSERT_TRUE(context.GetIndex().LookupAttachment(dicom1, id, FileContentType_Dicom)); 846 ASSERT_TRUE(context.GetIndex().LookupAttachment(dicom1, id, FileContentType_Dicom));
870 instance2.Assign(instance); 868 instance2.Assign(instance);
871 instance2.SetValue(DICOM_TAG_PATIENT_NAME, "overwritten", false); 869 instance2.SetValue(DICOM_TAG_PATIENT_NAME, "overwritten", false);
872 870
873 ParsedDicomFile dicom(instance2, GetDefaultDicomEncoding(), false /* be strict */); 871 ParsedDicomFile dicom(instance2, GetDefaultDicomEncoding(), false /* be strict */);
874 872
875 DicomInstanceToStore toStore; 873 std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromParsedDicomFile(dicom));
876 toStore.SetParsedDicomFile(dicom); 874 toStore->SetOrigin(DicomInstanceOrigin::FromPlugins());
877 toStore.SetOrigin(DicomInstanceOrigin::FromPlugins());
878 875
879 std::string id2; 876 std::string id2;
880 ASSERT_EQ(overwrite ? StoreStatus_Success : StoreStatus_AlreadyStored, 877 ASSERT_EQ(overwrite ? StoreStatus_Success : StoreStatus_AlreadyStored,
881 context.Store(id2, toStore, StoreInstanceMode_Default)); 878 context.Store(id2, *toStore, StoreInstanceMode_Default));
882 ASSERT_EQ(id, id2); 879 ASSERT_EQ(id, id2);
883 } 880 }
884 881
885 FileInfo dicom2, json2; 882 FileInfo dicom2, json2;
886 ASSERT_TRUE(context.GetIndex().LookupAttachment(dicom2, id, FileContentType_Dicom)); 883 ASSERT_TRUE(context.GetIndex().LookupAttachment(dicom2, id, FileContentType_Dicom));