Mercurial > hg > orthanc
comparison UnitTestsSources/MultiThreadingTests.cpp @ 2665:389d050a2e66 jobs
fix deadlock, speed up unit tests
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 08 Jun 2018 13:51:31 +0200 |
parents | a21b244efb37 |
children | 2540ac79ab6c |
comparison
equal
deleted
inserted
replaced
2664:a21b244efb37 | 2665:389d050a2e66 |
---|---|
664 | 664 |
665 | 665 |
666 TEST(JobsEngine, SubmitAndWait) | 666 TEST(JobsEngine, SubmitAndWait) |
667 { | 667 { |
668 JobsEngine engine; | 668 JobsEngine engine; |
669 engine.SetThreadSleep(10); | |
669 engine.SetWorkersCount(3); | 670 engine.SetWorkersCount(3); |
670 engine.Start(); | 671 engine.Start(); |
671 | 672 |
672 ASSERT_TRUE(engine.GetRegistry().SubmitAndWait(new DummyJob(), rand() % 10)); | 673 ASSERT_TRUE(engine.GetRegistry().SubmitAndWait(new DummyJob(), rand() % 10)); |
673 ASSERT_FALSE(engine.GetRegistry().SubmitAndWait(new DummyJob(true), rand() % 10)); | 674 ASSERT_FALSE(engine.GetRegistry().SubmitAndWait(new DummyJob(true), rand() % 10)); |
677 | 678 |
678 | 679 |
679 TEST(JobsEngine, DISABLED_SequenceOfOperationsJob) | 680 TEST(JobsEngine, DISABLED_SequenceOfOperationsJob) |
680 { | 681 { |
681 JobsEngine engine; | 682 JobsEngine engine; |
683 engine.SetThreadSleep(10); | |
682 engine.SetWorkersCount(3); | 684 engine.SetWorkersCount(3); |
683 engine.Start(); | 685 engine.Start(); |
684 | 686 |
685 std::string id; | 687 std::string id; |
686 SequenceOfOperationsJob* job = NULL; | 688 SequenceOfOperationsJob* job = NULL; |
712 | 714 |
713 | 715 |
714 TEST(JobsEngine, DISABLED_Lua) | 716 TEST(JobsEngine, DISABLED_Lua) |
715 { | 717 { |
716 JobsEngine engine; | 718 JobsEngine engine; |
719 engine.SetThreadSleep(10); | |
717 engine.SetWorkersCount(2); | 720 engine.SetWorkersCount(2); |
718 engine.Start(); | 721 engine.Start(); |
719 | 722 |
720 LuaJobManager lua; | 723 LuaJobManager lua; |
721 lua.SetMaxOperationsPerJob(5); | 724 lua.SetMaxOperationsPerJob(5); |
776 { | 779 { |
777 JobOperationValues values; | 780 JobOperationValues values; |
778 values.Append(new NullOperationValue); | 781 values.Append(new NullOperationValue); |
779 values.Append(new StringOperationValue("hello")); | 782 values.Append(new StringOperationValue("hello")); |
780 values.Append(new StringOperationValue("world")); | 783 values.Append(new StringOperationValue("world")); |
784 | |
785 s = 42; | |
781 values.Serialize(s); | 786 values.Serialize(s); |
782 } | 787 } |
783 | 788 |
784 { | 789 { |
785 GenericJobUnserializer unserializer; | 790 GenericJobUnserializer unserializer; |
799 { | 804 { |
800 Json::Value s; | 805 Json::Value s; |
801 | 806 |
802 { | 807 { |
803 NullOperationValue null; | 808 NullOperationValue null; |
809 | |
810 s = 42; | |
804 null.Serialize(s); | 811 null.Serialize(s); |
805 } | 812 } |
806 | 813 |
807 GenericJobUnserializer unserializer; | 814 GenericJobUnserializer unserializer; |
808 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | 815 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
813 | 820 |
814 ASSERT_EQ(JobOperationValue::Type_Null, value->GetType()); | 821 ASSERT_EQ(JobOperationValue::Type_Null, value->GetType()); |
815 | 822 |
816 { | 823 { |
817 StringOperationValue str("Hello"); | 824 StringOperationValue str("Hello"); |
825 | |
826 s = 42; | |
818 str.Serialize(s); | 827 str.Serialize(s); |
819 } | 828 } |
820 | 829 |
821 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | 830 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
822 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | 831 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); |
831 { | 840 { |
832 Json::Value s; | 841 Json::Value s; |
833 | 842 |
834 { | 843 { |
835 LogJobOperation operation; | 844 LogJobOperation operation; |
845 | |
846 s = 42; | |
836 operation.Serialize(s); | 847 operation.Serialize(s); |
837 } | 848 } |
838 | 849 |
839 DummyUnserializer unserializer; | 850 DummyUnserializer unserializer; |
840 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | 851 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
866 job.SetPermissive(true); | 877 job.SetPermissive(true); |
867 ASSERT_THROW(job.ExecuteStep(), OrthancException); // Not started yet | 878 ASSERT_THROW(job.ExecuteStep(), OrthancException); // Not started yet |
868 job.Start(); | 879 job.Start(); |
869 job.ExecuteStep(); | 880 job.ExecuteStep(); |
870 job.ExecuteStep(); | 881 job.ExecuteStep(); |
882 | |
883 s = 42; | |
871 ASSERT_TRUE(job.Serialize(s)); | 884 ASSERT_TRUE(job.Serialize(s)); |
872 } | 885 } |
873 | 886 |
874 { | 887 { |
875 DummyUnserializer unserializer; | 888 DummyUnserializer unserializer; |
889 ASSERT_EQ("hello", tmp.GetInstance(0)); | 902 ASSERT_EQ("hello", tmp.GetInstance(0)); |
890 ASSERT_EQ("nope", tmp.GetInstance(1)); | 903 ASSERT_EQ("nope", tmp.GetInstance(1)); |
891 ASSERT_EQ("world", tmp.GetInstance(2)); | 904 ASSERT_EQ("world", tmp.GetInstance(2)); |
892 ASSERT_TRUE(tmp.IsFailedInstance("nope")); | 905 ASSERT_TRUE(tmp.IsFailedInstance("nope")); |
893 } | 906 } |
894 | |
895 // TODO : Test SequenceOfOperationsJob.h | |
896 } | 907 } |
897 | 908 |
898 | 909 |
899 static bool IsSameTagValue(ParsedDicomFile& dicom1, | 910 static bool IsSameTagValue(ParsedDicomFile& dicom1, |
900 ParsedDicomFile& dicom2, | 911 ParsedDicomFile& dicom2, |
925 modification.Clear(DICOM_TAG_STUDY_DESCRIPTION); | 936 modification.Clear(DICOM_TAG_STUDY_DESCRIPTION); |
926 modification.Remove(DICOM_TAG_SERIES_DESCRIPTION); | 937 modification.Remove(DICOM_TAG_SERIES_DESCRIPTION); |
927 modification.Replace(DICOM_TAG_PATIENT_NAME, "Test 4", true); | 938 modification.Replace(DICOM_TAG_PATIENT_NAME, "Test 4", true); |
928 | 939 |
929 modification.Apply(*modified); | 940 modification.Apply(*modified); |
941 | |
942 s = 42; | |
930 modification.Serialize(s); | 943 modification.Serialize(s); |
931 } | 944 } |
932 | 945 |
933 { | 946 { |
934 DicomModification modification(s); | 947 DicomModification modification(s); |
957 { | 970 { |
958 Json::Value s; | 971 Json::Value s; |
959 | 972 |
960 { | 973 { |
961 DicomInstanceOrigin origin; | 974 DicomInstanceOrigin origin; |
975 | |
976 s = 42; | |
962 origin.Serialize(s); | 977 origin.Serialize(s); |
963 } | 978 } |
964 | 979 |
965 { | 980 { |
966 DicomInstanceOrigin origin(s); | 981 DicomInstanceOrigin origin(s); |
971 ASSERT_THROW(origin.GetHttpUsername(), OrthancException); | 986 ASSERT_THROW(origin.GetHttpUsername(), OrthancException); |
972 } | 987 } |
973 | 988 |
974 { | 989 { |
975 DicomInstanceOrigin origin(DicomInstanceOrigin::FromDicomProtocol("host", "aet", "called")); | 990 DicomInstanceOrigin origin(DicomInstanceOrigin::FromDicomProtocol("host", "aet", "called")); |
991 | |
992 s = 42; | |
976 origin.Serialize(s); | 993 origin.Serialize(s); |
977 } | 994 } |
978 | 995 |
979 { | 996 { |
980 DicomInstanceOrigin origin(s); | 997 DicomInstanceOrigin origin(s); |
985 ASSERT_THROW(origin.GetHttpUsername(), OrthancException); | 1002 ASSERT_THROW(origin.GetHttpUsername(), OrthancException); |
986 } | 1003 } |
987 | 1004 |
988 { | 1005 { |
989 DicomInstanceOrigin origin(DicomInstanceOrigin::FromHttp("host", "username")); | 1006 DicomInstanceOrigin origin(DicomInstanceOrigin::FromHttp("host", "username")); |
1007 | |
1008 s = 42; | |
990 origin.Serialize(s); | 1009 origin.Serialize(s); |
991 } | 1010 } |
992 | 1011 |
993 { | 1012 { |
994 DicomInstanceOrigin origin(s); | 1013 DicomInstanceOrigin origin(s); |
999 ASSERT_EQ("username", origin.GetHttpUsername()); | 1018 ASSERT_EQ("username", origin.GetHttpUsername()); |
1000 } | 1019 } |
1001 | 1020 |
1002 { | 1021 { |
1003 DicomInstanceOrigin origin(DicomInstanceOrigin::FromLua()); | 1022 DicomInstanceOrigin origin(DicomInstanceOrigin::FromLua()); |
1023 | |
1024 s = 42; | |
1004 origin.Serialize(s); | 1025 origin.Serialize(s); |
1005 } | 1026 } |
1006 | 1027 |
1007 { | 1028 { |
1008 DicomInstanceOrigin origin(s); | 1029 DicomInstanceOrigin origin(s); |
1009 ASSERT_EQ(RequestOrigin_Lua, origin.GetRequestOrigin()); | 1030 ASSERT_EQ(RequestOrigin_Lua, origin.GetRequestOrigin()); |
1010 } | 1031 } |
1011 | 1032 |
1012 { | 1033 { |
1013 DicomInstanceOrigin origin(DicomInstanceOrigin::FromPlugins()); | 1034 DicomInstanceOrigin origin(DicomInstanceOrigin::FromPlugins()); |
1035 | |
1036 s = 42; | |
1014 origin.Serialize(s); | 1037 origin.Serialize(s); |
1015 } | 1038 } |
1016 | 1039 |
1017 { | 1040 { |
1018 DicomInstanceOrigin origin(s); | 1041 DicomInstanceOrigin origin(s); |
1039 | 1062 |
1040 public: | 1063 public: |
1041 OrthancJobsSerialization() | 1064 OrthancJobsSerialization() |
1042 { | 1065 { |
1043 db_.Open(); | 1066 db_.Open(); |
1044 context_.reset(new ServerContext(db_, storage_)); | 1067 context_.reset(new ServerContext(db_, storage_, true /* running unit tests */)); |
1045 } | 1068 } |
1046 | 1069 |
1047 virtual ~OrthancJobsSerialization() | 1070 virtual ~OrthancJobsSerialization() |
1048 { | 1071 { |
1049 context_->Stop(); | 1072 context_->Stop(); |
1079 | 1102 |
1080 Json::Value s; | 1103 Json::Value s; |
1081 | 1104 |
1082 { | 1105 { |
1083 DicomInstanceOperationValue instance(GetContext(), id); | 1106 DicomInstanceOperationValue instance(GetContext(), id); |
1107 | |
1108 s = 42; | |
1084 instance.Serialize(s); | 1109 instance.Serialize(s); |
1085 } | 1110 } |
1086 | 1111 |
1087 OrthancJobUnserializer unserializer(GetContext()); | 1112 OrthancJobUnserializer unserializer(GetContext()); |
1088 | 1113 |
1111 | 1136 |
1112 // DeleteResourceOperation | 1137 // DeleteResourceOperation |
1113 | 1138 |
1114 { | 1139 { |
1115 DeleteResourceOperation operation(GetContext()); | 1140 DeleteResourceOperation operation(GetContext()); |
1141 | |
1142 s = 42; | |
1116 operation.Serialize(s); | 1143 operation.Serialize(s); |
1117 } | 1144 } |
1118 | 1145 |
1119 OrthancJobUnserializer unserializer(GetContext()); | 1146 OrthancJobUnserializer unserializer(GetContext()); |
1120 std::auto_ptr<IJobOperation> operation; | 1147 std::auto_ptr<IJobOperation> operation; |
1134 peer.SetUsername("username"); | 1161 peer.SetUsername("username"); |
1135 peer.SetPassword("password"); | 1162 peer.SetPassword("password"); |
1136 peer.SetPkcs11Enabled(true); | 1163 peer.SetPkcs11Enabled(true); |
1137 | 1164 |
1138 StorePeerOperation operation(peer); | 1165 StorePeerOperation operation(peer); |
1166 | |
1167 s = 42; | |
1139 operation.Serialize(s); | 1168 operation.Serialize(s); |
1140 } | 1169 } |
1141 | 1170 |
1142 { | 1171 { |
1143 operation.reset(unserializer.UnserializeOperation(s)); | 1172 operation.reset(unserializer.UnserializeOperation(s)); |
1157 modality.SetHost("192.168.1.1"); | 1186 modality.SetHost("192.168.1.1"); |
1158 modality.SetPort(1000); | 1187 modality.SetPort(1000); |
1159 modality.SetManufacturer(ModalityManufacturer_StoreScp); | 1188 modality.SetManufacturer(ModalityManufacturer_StoreScp); |
1160 | 1189 |
1161 StoreScuOperation operation("TEST", modality); | 1190 StoreScuOperation operation("TEST", modality); |
1191 | |
1192 s = 42; | |
1162 operation.Serialize(s); | 1193 operation.Serialize(s); |
1163 } | 1194 } |
1164 | 1195 |
1165 { | 1196 { |
1166 operation.reset(unserializer.UnserializeOperation(s)); | 1197 operation.reset(unserializer.UnserializeOperation(s)); |
1178 { | 1209 { |
1179 SystemCallOperation operation(std::string("echo")); | 1210 SystemCallOperation operation(std::string("echo")); |
1180 operation.AddPreArgument("a"); | 1211 operation.AddPreArgument("a"); |
1181 operation.AddPreArgument("b"); | 1212 operation.AddPreArgument("b"); |
1182 operation.AddPostArgument("c"); | 1213 operation.AddPostArgument("c"); |
1214 | |
1215 s = 42; | |
1183 operation.Serialize(s); | 1216 operation.Serialize(s); |
1184 } | 1217 } |
1185 | 1218 |
1186 { | 1219 { |
1187 operation.reset(unserializer.UnserializeOperation(s)); | 1220 operation.reset(unserializer.UnserializeOperation(s)); |
1200 { | 1233 { |
1201 std::auto_ptr<DicomModification> modification(new DicomModification); | 1234 std::auto_ptr<DicomModification> modification(new DicomModification); |
1202 modification->SetupAnonymization(DicomVersion_2008); | 1235 modification->SetupAnonymization(DicomVersion_2008); |
1203 | 1236 |
1204 ModifyInstanceOperation operation(GetContext(), RequestOrigin_Lua, modification.release()); | 1237 ModifyInstanceOperation operation(GetContext(), RequestOrigin_Lua, modification.release()); |
1238 | |
1239 s = 42; | |
1205 operation.Serialize(s); | 1240 operation.Serialize(s); |
1206 } | 1241 } |
1207 | 1242 |
1208 { | 1243 { |
1209 operation.reset(unserializer.UnserializeOperation(s)); | 1244 operation.reset(unserializer.UnserializeOperation(s)); |
1238 | 1273 |
1239 DicomModalityStoreJob job(GetContext()); | 1274 DicomModalityStoreJob job(GetContext()); |
1240 job.SetLocalAet("LOCAL"); | 1275 job.SetLocalAet("LOCAL"); |
1241 job.SetRemoteModality(modality); | 1276 job.SetRemoteModality(modality); |
1242 job.SetMoveOriginator("MOVESCU", 42); | 1277 job.SetMoveOriginator("MOVESCU", 42); |
1243 | 1278 |
1279 s = 42; | |
1244 ASSERT_TRUE(job.Serialize(s)); | 1280 ASSERT_TRUE(job.Serialize(s)); |
1245 } | 1281 } |
1246 | 1282 |
1247 OrthancJobUnserializer unserializer(GetContext()); | 1283 OrthancJobUnserializer unserializer(GetContext()); |
1248 | 1284 |
1271 peer.SetPkcs11Enabled(true); | 1307 peer.SetPkcs11Enabled(true); |
1272 | 1308 |
1273 OrthancPeerStoreJob job(GetContext()); | 1309 OrthancPeerStoreJob job(GetContext()); |
1274 job.SetPeer(peer); | 1310 job.SetPeer(peer); |
1275 | 1311 |
1312 s = 42; | |
1276 ASSERT_TRUE(job.Serialize(s)); | 1313 ASSERT_TRUE(job.Serialize(s)); |
1277 } | 1314 } |
1278 | 1315 |
1279 { | 1316 { |
1280 std::auto_ptr<IJob> job; | 1317 std::auto_ptr<IJob> job; |
1295 | 1332 |
1296 ResourceModificationJob job(GetContext()); | 1333 ResourceModificationJob job(GetContext()); |
1297 job.SetModification(modification.release(), true); | 1334 job.SetModification(modification.release(), true); |
1298 job.SetOrigin(DicomInstanceOrigin::FromLua()); | 1335 job.SetOrigin(DicomInstanceOrigin::FromLua()); |
1299 | 1336 |
1337 s = 42; | |
1300 ASSERT_TRUE(job.Serialize(s)); | 1338 ASSERT_TRUE(job.Serialize(s)); |
1301 } | 1339 } |
1302 | 1340 |
1303 { | 1341 { |
1304 std::auto_ptr<IJob> job; | 1342 std::auto_ptr<IJob> job; |
1307 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job); | 1345 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job); |
1308 ASSERT_TRUE(tmp.IsAnonymization()); | 1346 ASSERT_TRUE(tmp.IsAnonymization()); |
1309 ASSERT_EQ(RequestOrigin_Lua, tmp.GetOrigin().GetRequestOrigin()); | 1347 ASSERT_EQ(RequestOrigin_Lua, tmp.GetOrigin().GetRequestOrigin()); |
1310 ASSERT_TRUE(tmp.GetModification().IsRemoved(DICOM_TAG_STUDY_DESCRIPTION)); | 1348 ASSERT_TRUE(tmp.GetModification().IsRemoved(DICOM_TAG_STUDY_DESCRIPTION)); |
1311 } | 1349 } |
1312 } | 1350 |
1351 // SequenceOfOperationsJob.h | |
1352 | |
1353 { | |
1354 SequenceOfOperationsJob job; | |
1355 | |
1356 s = 42; | |
1357 ASSERT_TRUE(job.Serialize(s)); | |
1358 } | |
1359 | |
1360 std::cout << s; | |
1361 } |