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 }