comparison OrthancServer/UnitTestsSources/ServerJobsTests.cpp @ 4693:45bce660ce3a

added routes for bulk anonymization/modification
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 16 Jun 2021 16:44:04 +0200
parents 2e850edf03d6
children f0038043fb97 7826ac059c31
comparison
equal deleted inserted replaced
4692:e68edf92e5cc 4693:45bce660ce3a
817 817
818 // ResourceModificationJob 818 // ResourceModificationJob
819 819
820 { 820 {
821 std::unique_ptr<DicomModification> modification(new DicomModification); 821 std::unique_ptr<DicomModification> modification(new DicomModification);
822 modification->SetupAnonymization(DicomVersion_2008); 822 modification->SetupAnonymization(DicomVersion_2008);
823 modification->SetLevel(ResourceType_Series);
823 824
824 ResourceModificationJob job(GetContext()); 825 ResourceModificationJob job(GetContext());
825 job.SetModification(modification.release(), ResourceType_Patient, true); 826 ASSERT_THROW(job.IsSingleResourceModification(), OrthancException);
827 job.SetSingleResourceModification(modification.release(), ResourceType_Patient, true);
826 job.SetOrigin(DicomInstanceOrigin::FromLua()); 828 job.SetOrigin(DicomInstanceOrigin::FromLua());
829 ASSERT_TRUE(job.IsAnonymization());
830 ASSERT_TRUE(job.IsSingleResourceModification());
831 ASSERT_EQ(ResourceType_Patient, job.GetOutputLevel());
827 832
828 job.AddTrailingStep(); // Necessary since 1.7.0 833 job.AddTrailingStep(); // Necessary since 1.7.0
829 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); 834 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job));
830 ASSERT_TRUE(job.Serialize(s)); 835 ASSERT_TRUE(job.Serialize(s));
831 } 836 }
838 ASSERT_TRUE(tmp.IsAnonymization()); 843 ASSERT_TRUE(tmp.IsAnonymization());
839 ASSERT_FALSE(tmp.IsTranscode()); 844 ASSERT_FALSE(tmp.IsTranscode());
840 ASSERT_THROW(tmp.GetTransferSyntax(), OrthancException); 845 ASSERT_THROW(tmp.GetTransferSyntax(), OrthancException);
841 ASSERT_EQ(RequestOrigin_Lua, tmp.GetOrigin().GetRequestOrigin()); 846 ASSERT_EQ(RequestOrigin_Lua, tmp.GetOrigin().GetRequestOrigin());
842 ASSERT_TRUE(tmp.GetModification().IsRemoved(DICOM_TAG_STUDY_DESCRIPTION)); 847 ASSERT_TRUE(tmp.GetModification().IsRemoved(DICOM_TAG_STUDY_DESCRIPTION));
848 ASSERT_TRUE(tmp.IsSingleResourceModification());
849 ASSERT_EQ(ResourceType_Patient, tmp.GetOutputLevel());
850 ASSERT_EQ(ResourceType_Series, tmp.GetModification().GetLevel());
851 }
852
853 {
854 // Backward compatibility with Orthanc 1.9.3
855 ASSERT_TRUE(s.isMember("OutputLevel"));
856 ASSERT_TRUE(s.isMember("IsSingleResource"));
857 s.removeMember("OutputLevel");
858 s.removeMember("IsSingleResource");
859
860 std::unique_ptr<IJob> job;
861 job.reset(unserializer.UnserializeJob(s));
862
863 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job);
864 ASSERT_TRUE(tmp.IsSingleResourceModification());
865 ASSERT_EQ(ResourceType_Series, tmp.GetOutputLevel()); // old, incorrect behavior
866 ASSERT_EQ(ResourceType_Series, tmp.GetModification().GetLevel());
843 } 867 }
844 868
845 { 869 {
846 ResourceModificationJob job(GetContext()); 870 ResourceModificationJob job(GetContext());
847 ASSERT_THROW(job.SetTranscode("nope"), OrthancException); 871 ASSERT_THROW(job.SetTranscode("nope"), OrthancException);
848 job.SetTranscode(DicomTransferSyntax_JPEGProcess1); 872 job.SetTranscode(DicomTransferSyntax_JPEGProcess1);
873 job.SetSingleResourceModification(new DicomModification, ResourceType_Study, false);
849 874
850 job.AddTrailingStep(); // Necessary since 1.7.0 875 job.AddTrailingStep(); // Necessary since 1.7.0
851 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); 876 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job));
852 ASSERT_TRUE(job.Serialize(s)); 877 ASSERT_TRUE(job.Serialize(s));
853 } 878 }
859 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job); 884 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job);
860 ASSERT_FALSE(tmp.IsAnonymization()); 885 ASSERT_FALSE(tmp.IsAnonymization());
861 ASSERT_TRUE(tmp.IsTranscode()); 886 ASSERT_TRUE(tmp.IsTranscode());
862 ASSERT_EQ(DicomTransferSyntax_JPEGProcess1, tmp.GetTransferSyntax()); 887 ASSERT_EQ(DicomTransferSyntax_JPEGProcess1, tmp.GetTransferSyntax());
863 ASSERT_EQ(RequestOrigin_Unknown, tmp.GetOrigin().GetRequestOrigin()); 888 ASSERT_EQ(RequestOrigin_Unknown, tmp.GetOrigin().GetRequestOrigin());
889 ASSERT_TRUE(tmp.IsSingleResourceModification());
890 ASSERT_EQ(ResourceType_Study, tmp.GetOutputLevel());
891 ASSERT_EQ(ResourceType_Instance, tmp.GetModification().GetLevel());
892 }
893
894 {
895 ResourceModificationJob job(GetContext());
896 job.SetMultipleResourcesModification(new DicomModification, true);
897 job.AddInstance("toto");
898 job.AddInstance("tutu");
899 job.AddTrailingStep(); // Necessary since 1.7.0
900 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job));
901 ASSERT_TRUE(job.Serialize(s));
902 }
903
904 {
905 std::unique_ptr<IJob> job;
906 job.reset(unserializer.UnserializeJob(s));
907
908 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job);
909
910 std::set<std::string> instances;
911 for (size_t i = 0; i < tmp.GetInstancesCount(); i++)
912 {
913 instances.insert(tmp.GetInstance(i));
914 }
915
916 ASSERT_EQ(2u, instances.size());
917 ASSERT_TRUE(instances.find("toto") != instances.end());
918 ASSERT_TRUE(instances.find("tutu") != instances.end());
919
920 ASSERT_TRUE(tmp.IsAnonymization());
921 ASSERT_FALSE(tmp.IsSingleResourceModification());
922 ASSERT_THROW(tmp.GetOutputLevel(), OrthancException);
923 ASSERT_EQ(ResourceType_Instance, tmp.GetModification().GetLevel());
924 }
925
926 {
927 // Test behavior on broken serialization
928 ASSERT_FALSE(s.isMember("OutputLevel"));
929 ASSERT_TRUE(s.isMember("IsSingleResource"));
930 s.removeMember("IsSingleResource");
931
932 {
933 std::unique_ptr<IJob> job;
934 job.reset(unserializer.UnserializeJob(s));
935
936 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job);
937 ASSERT_TRUE(tmp.IsAnonymization());
938 ASSERT_TRUE(tmp.IsSingleResourceModification());
939 ASSERT_EQ(ResourceType_Patient, tmp.GetOutputLevel());
940 ASSERT_EQ(ResourceType_Instance, tmp.GetModification().GetLevel());
941 }
942
943 s["Modification"]["Level"] = "Series";
944
945 {
946 std::unique_ptr<IJob> job;
947 job.reset(unserializer.UnserializeJob(s));
948
949 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job);
950 ASSERT_TRUE(tmp.IsAnonymization());
951 ASSERT_TRUE(tmp.IsSingleResourceModification());
952 ASSERT_EQ(ResourceType_Series, tmp.GetOutputLevel());
953 ASSERT_EQ(ResourceType_Series, tmp.GetModification().GetLevel());
954 }
864 } 955 }
865 956
866 // SplitStudyJob 957 // SplitStudyJob
867 958
868 std::string instance; 959 std::string instance;