Mercurial > hg > orthanc
comparison UnitTestsSources/ServerIndexTests.cpp @ 3036:8fd203510d8b db-changes
moving LookupIdentifierQuery to the graveyard
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 19 Dec 2018 16:27:07 +0100 |
parents | 8336204d95dc |
children | ce272138f15e |
comparison
equal
deleted
inserted
replaced
3034:54e422fe31ce | 3036:8fd203510d8b |
---|---|
36 | 36 |
37 #include "../Core/FileStorage/FilesystemStorage.h" | 37 #include "../Core/FileStorage/FilesystemStorage.h" |
38 #include "../Core/FileStorage/MemoryStorageArea.h" | 38 #include "../Core/FileStorage/MemoryStorageArea.h" |
39 #include "../Core/Logging.h" | 39 #include "../Core/Logging.h" |
40 #include "../OrthancServer/SQLiteDatabaseWrapper.h" | 40 #include "../OrthancServer/SQLiteDatabaseWrapper.h" |
41 #include "../OrthancServer/Search/LookupIdentifierQuery.h" | |
42 #include "../OrthancServer/ServerContext.h" | 41 #include "../OrthancServer/ServerContext.h" |
43 #include "../OrthancServer/ServerIndex.h" | |
44 #include "../OrthancServer/ServerToolbox.h" | 42 #include "../OrthancServer/ServerToolbox.h" |
45 | 43 |
46 #include <ctype.h> | 44 #include <ctype.h> |
47 #include <algorithm> | 45 #include <algorithm> |
48 | 46 |
249 throw OrthancException(ErrorCode_InternalError); | 247 throw OrthancException(ErrorCode_InternalError); |
250 } | 248 } |
251 } | 249 } |
252 | 250 |
253 | 251 |
254 void DoLookup(std::list<std::string>& result, | 252 void DoLookupIdentifier(std::vector<std::string>& result, |
255 ResourceType level, | 253 ResourceType level, |
256 const DicomTag& tag, | 254 const DicomTag& tag, |
257 const std::string& value) | 255 ConstraintType type, |
258 { | 256 const std::string& value) |
259 LookupIdentifierQuery query(level); | 257 { |
260 query.AddConstraint(tag, IdentifierConstraintType_Equal, value); | 258 assert(ServerToolbox::IsIdentifier(tag, level)); |
261 query.Apply(result, *index_); | 259 |
262 } | 260 DicomTagConstraint c(tag, type, value, true, true); |
263 | 261 |
262 std::vector<DatabaseConstraint> lookup; | |
263 lookup.push_back(DatabaseConstraint(c, level, DicomTagType_Identifier)); | |
264 | |
265 index_->ApplyLookupResources(result, NULL, lookup, level, 0 /* no limit */); | |
266 } | |
267 | |
268 | |
269 void DoLookupIdentifier2(std::vector<std::string>& result, | |
270 ResourceType level, | |
271 const DicomTag& tag, | |
272 ConstraintType type1, | |
273 const std::string& value1, | |
274 ConstraintType type2, | |
275 const std::string& value2) | |
276 { | |
277 assert(ServerToolbox::IsIdentifier(tag, level)); | |
278 | |
279 DicomTagConstraint c1(tag, type1, value1, true, true); | |
280 DicomTagConstraint c2(tag, type2, value2, true, true); | |
281 | |
282 std::vector<DatabaseConstraint> lookup; | |
283 lookup.push_back(DatabaseConstraint(c1, level, DicomTagType_Identifier)); | |
284 lookup.push_back(DatabaseConstraint(c2, level, DicomTagType_Identifier)); | |
285 | |
286 index_->ApplyLookupResources(result, NULL, lookup, level, 0 /* no limit */); | |
287 } | |
264 }; | 288 }; |
265 } | 289 } |
266 | 290 |
267 | 291 |
268 INSTANTIATE_TEST_CASE_P(DatabaseWrapperName, | 292 INSTANTIATE_TEST_CASE_P(DatabaseWrapperName, |
714 index_->SetIdentifierTag(a[0], DICOM_TAG_STUDY_INSTANCE_UID, "0"); | 738 index_->SetIdentifierTag(a[0], DICOM_TAG_STUDY_INSTANCE_UID, "0"); |
715 index_->SetIdentifierTag(a[1], DICOM_TAG_STUDY_INSTANCE_UID, "1"); | 739 index_->SetIdentifierTag(a[1], DICOM_TAG_STUDY_INSTANCE_UID, "1"); |
716 index_->SetIdentifierTag(a[2], DICOM_TAG_STUDY_INSTANCE_UID, "0"); | 740 index_->SetIdentifierTag(a[2], DICOM_TAG_STUDY_INSTANCE_UID, "0"); |
717 index_->SetIdentifierTag(a[3], DICOM_TAG_SERIES_INSTANCE_UID, "0"); | 741 index_->SetIdentifierTag(a[3], DICOM_TAG_SERIES_INSTANCE_UID, "0"); |
718 | 742 |
719 std::list<std::string> s; | 743 std::vector<std::string> s; |
720 | 744 |
721 DoLookup(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, "0"); | 745 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_Equal, "0"); |
722 ASSERT_EQ(2u, s.size()); | 746 ASSERT_EQ(2u, s.size()); |
723 ASSERT_TRUE(std::find(s.begin(), s.end(), "a") != s.end()); | 747 ASSERT_TRUE(std::find(s.begin(), s.end(), "a") != s.end()); |
724 ASSERT_TRUE(std::find(s.begin(), s.end(), "c") != s.end()); | 748 ASSERT_TRUE(std::find(s.begin(), s.end(), "c") != s.end()); |
725 | 749 |
726 DoLookup(s, ResourceType_Series, DICOM_TAG_SERIES_INSTANCE_UID, "0"); | 750 DoLookupIdentifier(s, ResourceType_Series, DICOM_TAG_SERIES_INSTANCE_UID, ConstraintType_Equal, "0"); |
727 ASSERT_EQ(1u, s.size()); | 751 ASSERT_EQ(1u, s.size()); |
728 ASSERT_TRUE(std::find(s.begin(), s.end(), "d") != s.end()); | 752 ASSERT_TRUE(std::find(s.begin(), s.end(), "d") != s.end()); |
729 | 753 |
730 DoLookup(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, "1"); | 754 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_Equal, "1"); |
731 ASSERT_EQ(1u, s.size()); | 755 ASSERT_EQ(1u, s.size()); |
732 ASSERT_TRUE(std::find(s.begin(), s.end(), "b") != s.end()); | 756 ASSERT_TRUE(std::find(s.begin(), s.end(), "b") != s.end()); |
733 | 757 |
734 DoLookup(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, "1"); | 758 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_Equal, "1"); |
735 ASSERT_EQ(1u, s.size()); | 759 ASSERT_EQ(1u, s.size()); |
736 ASSERT_TRUE(std::find(s.begin(), s.end(), "b") != s.end()); | 760 ASSERT_TRUE(std::find(s.begin(), s.end(), "b") != s.end()); |
737 | 761 |
738 DoLookup(s, ResourceType_Series, DICOM_TAG_SERIES_INSTANCE_UID, "1"); | 762 DoLookupIdentifier(s, ResourceType_Series, DICOM_TAG_SERIES_INSTANCE_UID, ConstraintType_Equal, "1"); |
739 ASSERT_EQ(0u, s.size()); | 763 ASSERT_EQ(0u, s.size()); |
740 | 764 |
741 { | 765 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_GreaterOrEqual, "0"); |
742 LookupIdentifierQuery query(ResourceType_Study); | 766 ASSERT_EQ(3u, s.size()); |
743 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "0"); | 767 |
744 query.Apply(s, *index_); | 768 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_GreaterOrEqual, "1"); |
745 ASSERT_EQ(3u, s.size()); | 769 ASSERT_EQ(1u, s.size()); |
746 } | 770 |
747 | 771 DoLookupIdentifier(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, ConstraintType_GreaterOrEqual, "2"); |
748 { | 772 ASSERT_EQ(0u, s.size()); |
749 LookupIdentifierQuery query(ResourceType_Study); | 773 |
750 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "0"); | 774 DoLookupIdentifier2(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, |
751 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_SmallerOrEqual, "0"); | 775 ConstraintType_GreaterOrEqual, "0", ConstraintType_SmallerOrEqual, "0"); |
752 query.Apply(s, *index_); | 776 ASSERT_EQ(2u, s.size()); |
753 ASSERT_EQ(2u, s.size()); | 777 |
754 } | 778 DoLookupIdentifier2(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, |
755 | 779 ConstraintType_GreaterOrEqual, "1", ConstraintType_SmallerOrEqual, "1"); |
756 { | 780 ASSERT_EQ(1u, s.size()); |
757 LookupIdentifierQuery query(ResourceType_Study); | 781 |
758 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "1"); | 782 DoLookupIdentifier2(s, ResourceType_Study, DICOM_TAG_STUDY_INSTANCE_UID, |
759 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_SmallerOrEqual, "1"); | 783 ConstraintType_GreaterOrEqual, "0", ConstraintType_SmallerOrEqual, "1"); |
760 query.Apply(s, *index_); | 784 ASSERT_EQ(3u, s.size()); |
761 ASSERT_EQ(1u, s.size()); | |
762 } | |
763 | |
764 { | |
765 LookupIdentifierQuery query(ResourceType_Study); | |
766 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "1"); | |
767 query.Apply(s, *index_); | |
768 ASSERT_EQ(1u, s.size()); | |
769 } | |
770 | |
771 { | |
772 LookupIdentifierQuery query(ResourceType_Study); | |
773 query.AddConstraint(DICOM_TAG_STUDY_INSTANCE_UID, IdentifierConstraintType_GreaterOrEqual, "2"); | |
774 query.Apply(s, *index_); | |
775 ASSERT_EQ(0u, s.size()); | |
776 } | |
777 } | 785 } |
778 | 786 |
779 | 787 |
780 | 788 |
781 TEST(ServerIndex, AttachmentRecycling) | 789 TEST(ServerIndex, AttachmentRecycling) |
856 context.Stop(); | 864 context.Stop(); |
857 db.Close(); | 865 db.Close(); |
858 } | 866 } |
859 | 867 |
860 | 868 |
861 TEST(LookupIdentifierQuery, NormalizeIdentifier) | 869 TEST(ServerIndex, NormalizeIdentifier) |
862 { | 870 { |
863 ASSERT_EQ("H^L.LO", ServerToolbox::NormalizeIdentifier(" Hé^l.LO %_ ")); | 871 ASSERT_EQ("H^L.LO", ServerToolbox::NormalizeIdentifier(" Hé^l.LO %_ ")); |
864 ASSERT_EQ("1.2.840.113619.2.176.2025", ServerToolbox::NormalizeIdentifier(" 1.2.840.113619.2.176.2025 ")); | 872 ASSERT_EQ("1.2.840.113619.2.176.2025", ServerToolbox::NormalizeIdentifier(" 1.2.840.113619.2.176.2025 ")); |
865 } | 873 } |
866 | 874 |