Mercurial > hg > orthanc
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)); |