comparison UnitTestsSources/MultiThreadingTests.cpp @ 3713:56f2397f027a storage-commitment

integration mainline->storage-commitment
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 02 Mar 2020 15:42:17 +0100
parents 898903022836 2a170a8f1faf
children 3801435e34a1 023b2a9f3aa1 8c96b20fb275
comparison
equal deleted inserted replaced
3711:14b363d972a8 3713:56f2397f027a
32 32
33 33
34 #include "PrecompiledHeadersUnitTests.h" 34 #include "PrecompiledHeadersUnitTests.h"
35 #include "gtest/gtest.h" 35 #include "gtest/gtest.h"
36 36
37 #include "../Core/Compatibility.h"
37 #include "../Core/FileStorage/MemoryStorageArea.h" 38 #include "../Core/FileStorage/MemoryStorageArea.h"
38 #include "../Core/JobsEngine/JobsEngine.h" 39 #include "../Core/JobsEngine/JobsEngine.h"
39 #include "../Core/Logging.h" 40 #include "../Core/Logging.h"
40 #include "../Core/MultiThreading/SharedMessageQueue.h" 41 #include "../Core/MultiThreading/SharedMessageQueue.h"
41 #include "../Core/OrthancException.h" 42 #include "../Core/OrthancException.h"
270 ASSERT_FALSE(q.WaitEmpty(1)); 271 ASSERT_FALSE(q.WaitEmpty(1));
271 q.Enqueue(new DynamicInteger(20, s)); 272 q.Enqueue(new DynamicInteger(20, s));
272 q.Enqueue(new DynamicInteger(30, s)); 273 q.Enqueue(new DynamicInteger(30, s));
273 q.Enqueue(new DynamicInteger(40, s)); 274 q.Enqueue(new DynamicInteger(40, s));
274 275
275 std::auto_ptr<DynamicInteger> i; 276 std::unique_ptr<DynamicInteger> i;
276 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(10, i->GetValue()); 277 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(10, i->GetValue());
277 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(20, i->GetValue()); 278 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(20, i->GetValue());
278 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(30, i->GetValue()); 279 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(30, i->GetValue());
279 ASSERT_FALSE(q.WaitEmpty(1)); 280 ASSERT_FALSE(q.WaitEmpty(1));
280 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(40, i->GetValue()); 281 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(40, i->GetValue());
745 746
746 std::string id; 747 std::string id;
747 SequenceOfOperationsJob* job = NULL; 748 SequenceOfOperationsJob* job = NULL;
748 749
749 { 750 {
750 std::auto_ptr<SequenceOfOperationsJob> a(new SequenceOfOperationsJob); 751 std::unique_ptr<SequenceOfOperationsJob> a(new SequenceOfOperationsJob);
751 job = a.get(); 752 job = a.get();
752 engine.GetRegistry().Submit(id, a.release(), 0); 753 engine.GetRegistry().Submit(id, a.release(), 0);
753 } 754 }
754 755
755 boost::this_thread::sleep(boost::posix_time::milliseconds(500)); 756 boost::this_thread::sleep(boost::posix_time::milliseconds(500));
835 { 836 {
836 return false; 837 return false;
837 } 838 }
838 else 839 else
839 { 840 {
840 std::auto_ptr<IJob> unserialized(unserializer.UnserializeJob(a)); 841 std::unique_ptr<IJob> unserialized(unserializer.UnserializeJob(a));
841 842
842 Json::Value b = 43; 843 Json::Value b = 43;
843 if (unserialized->Serialize(b)) 844 if (unserialized->Serialize(b))
844 { 845 {
845 return (CheckSameJson(a, b)); 846 return (CheckSameJson(a, b));
861 { 862 {
862 return false; 863 return false;
863 } 864 }
864 else 865 else
865 { 866 {
866 std::auto_ptr<SetOfInstancesJob> unserialized 867 std::unique_ptr<SetOfInstancesJob> unserialized
867 (dynamic_cast<SetOfInstancesJob*>(unserializer.UnserializeJob(a))); 868 (dynamic_cast<SetOfInstancesJob*>(unserializer.UnserializeJob(a)));
868 869
869 Json::Value b = 43; 870 Json::Value b = 43;
870 if (unserialized->Serialize(b)) 871 if (unserialized->Serialize(b))
871 { 872 {
887 IJobOperation& operation) 888 IJobOperation& operation)
888 { 889 {
889 Json::Value a = 42; 890 Json::Value a = 42;
890 operation.Serialize(a); 891 operation.Serialize(a);
891 892
892 std::auto_ptr<IJobOperation> unserialized(unserializer.UnserializeOperation(a)); 893 std::unique_ptr<IJobOperation> unserialized(unserializer.UnserializeOperation(a));
893 894
894 Json::Value b = 43; 895 Json::Value b = 43;
895 unserialized->Serialize(b); 896 unserialized->Serialize(b);
896 897
897 return CheckSameJson(a, b); 898 return CheckSameJson(a, b);
902 JobOperationValue& value) 903 JobOperationValue& value)
903 { 904 {
904 Json::Value a = 42; 905 Json::Value a = 42;
905 value.Serialize(a); 906 value.Serialize(a);
906 907
907 std::auto_ptr<JobOperationValue> unserialized(unserializer.UnserializeValue(a)); 908 std::unique_ptr<JobOperationValue> unserialized(unserializer.UnserializeValue(a));
908 909
909 Json::Value b = 43; 910 Json::Value b = 43;
910 unserialized->Serialize(b); 911 unserialized->Serialize(b);
911 912
912 return CheckSameJson(a, b); 913 return CheckSameJson(a, b);
955 values.Serialize(s); 956 values.Serialize(s);
956 } 957 }
957 958
958 { 959 {
959 GenericJobUnserializer unserializer; 960 GenericJobUnserializer unserializer;
960 std::auto_ptr<JobOperationValues> values(JobOperationValues::Unserialize(unserializer, s)); 961 std::unique_ptr<JobOperationValues> values(JobOperationValues::Unserialize(unserializer, s));
961 ASSERT_EQ(3u, values->GetSize()); 962 ASSERT_EQ(3u, values->GetSize());
962 ASSERT_EQ(JobOperationValue::Type_Null, values->GetValue(0).GetType()); 963 ASSERT_EQ(JobOperationValue::Type_Null, values->GetValue(0).GetType());
963 ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(1).GetType()); 964 ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(1).GetType());
964 ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(2).GetType()); 965 ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(2).GetType());
965 966
982 } 983 }
983 984
984 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); 985 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException);
985 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); 986 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException);
986 987
987 std::auto_ptr<JobOperationValue> value; 988 std::unique_ptr<JobOperationValue> value;
988 value.reset(unserializer.UnserializeValue(s)); 989 value.reset(unserializer.UnserializeValue(s));
989 990
990 ASSERT_EQ(JobOperationValue::Type_Null, value->GetType()); 991 ASSERT_EQ(JobOperationValue::Type_Null, value->GetType());
991 992
992 { 993 {
1019 1020
1020 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); 1021 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException);
1021 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); 1022 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException);
1022 1023
1023 { 1024 {
1024 std::auto_ptr<IJobOperation> operation; 1025 std::unique_ptr<IJobOperation> operation;
1025 operation.reset(unserializer.UnserializeOperation(s)); 1026 operation.reset(unserializer.UnserializeOperation(s));
1026 1027
1027 // Make sure that we have indeed unserialized a log operation 1028 // Make sure that we have indeed unserialized a log operation
1028 Json::Value dummy; 1029 Json::Value dummy;
1029 ASSERT_THROW(dynamic_cast<DeleteResourceOperation&>(*operation).Serialize(dummy), std::bad_cast); 1030 ASSERT_THROW(dynamic_cast<DeleteResourceOperation&>(*operation).Serialize(dummy), std::bad_cast);
1063 { 1064 {
1064 DummyUnserializer unserializer; 1065 DummyUnserializer unserializer;
1065 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); 1066 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException);
1066 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); 1067 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException);
1067 1068
1068 std::auto_ptr<IJob> job; 1069 std::unique_ptr<IJob> job;
1069 job.reset(unserializer.UnserializeJob(s)); 1070 job.reset(unserializer.UnserializeJob(s));
1070 1071
1071 const DummyInstancesJob& tmp = dynamic_cast<const DummyInstancesJob&>(*job); 1072 const DummyInstancesJob& tmp = dynamic_cast<const DummyInstancesJob&>(*job);
1072 ASSERT_FALSE(tmp.IsStarted()); 1073 ASSERT_FALSE(tmp.IsStarted());
1073 ASSERT_TRUE(tmp.IsPermissive()); 1074 ASSERT_TRUE(tmp.IsPermissive());
1114 { 1115 {
1115 GenericJobUnserializer unserializer; 1116 GenericJobUnserializer unserializer;
1116 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); 1117 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException);
1117 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); 1118 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException);
1118 1119
1119 std::auto_ptr<IJob> job; 1120 std::unique_ptr<IJob> job;
1120 job.reset(unserializer.UnserializeJob(s)); 1121 job.reset(unserializer.UnserializeJob(s));
1121 1122
1122 std::string tmp; 1123 std::string tmp;
1123 dynamic_cast<SequenceOfOperationsJob&>(*job).GetDescription(tmp); 1124 dynamic_cast<SequenceOfOperationsJob&>(*job).GetDescription(tmp);
1124 ASSERT_EQ("hello", tmp); 1125 ASSERT_EQ("hello", tmp);
1145 ParsedDicomFile source(true); 1146 ParsedDicomFile source(true);
1146 source.Insert(DICOM_TAG_STUDY_DESCRIPTION, "Test 1", false, ""); 1147 source.Insert(DICOM_TAG_STUDY_DESCRIPTION, "Test 1", false, "");
1147 source.Insert(DICOM_TAG_SERIES_DESCRIPTION, "Test 2", false, ""); 1148 source.Insert(DICOM_TAG_SERIES_DESCRIPTION, "Test 2", false, "");
1148 source.Insert(DICOM_TAG_PATIENT_NAME, "Test 3", false, ""); 1149 source.Insert(DICOM_TAG_PATIENT_NAME, "Test 3", false, "");
1149 1150
1150 std::auto_ptr<ParsedDicomFile> modified(source.Clone(true)); 1151 std::unique_ptr<ParsedDicomFile> modified(source.Clone(true));
1151 1152
1152 { 1153 {
1153 DicomModification modification; 1154 DicomModification modification;
1154 modification.SetLevel(ResourceType_Series); 1155 modification.SetLevel(ResourceType_Series);
1155 modification.Clear(DICOM_TAG_STUDY_DESCRIPTION); 1156 modification.Clear(DICOM_TAG_STUDY_DESCRIPTION);
1164 1165
1165 { 1166 {
1166 DicomModification modification(s); 1167 DicomModification modification(s);
1167 ASSERT_EQ(ResourceType_Series, modification.GetLevel()); 1168 ASSERT_EQ(ResourceType_Series, modification.GetLevel());
1168 1169
1169 std::auto_ptr<ParsedDicomFile> second(source.Clone(true)); 1170 std::unique_ptr<ParsedDicomFile> second(source.Clone(true));
1170 modification.Apply(*second); 1171 modification.Apply(*second);
1171 1172
1172 std::string s; 1173 std::string s;
1173 ASSERT_TRUE(second->GetTagValue(s, DICOM_TAG_STUDY_DESCRIPTION)); 1174 ASSERT_TRUE(second->GetTagValue(s, DICOM_TAG_STUDY_DESCRIPTION));
1174 ASSERT_TRUE(s.empty()); 1175 ASSERT_TRUE(s.empty());
1280 class OrthancJobsSerialization : public testing::Test 1281 class OrthancJobsSerialization : public testing::Test
1281 { 1282 {
1282 private: 1283 private:
1283 MemoryStorageArea storage_; 1284 MemoryStorageArea storage_;
1284 SQLiteDatabaseWrapper db_; // The SQLite DB is in memory 1285 SQLiteDatabaseWrapper db_; // The SQLite DB is in memory
1285 std::auto_ptr<ServerContext> context_; 1286 std::unique_ptr<ServerContext> context_;
1286 TimeoutDicomConnectionManager manager_; 1287 TimeoutDicomConnectionManager manager_;
1287 1288
1288 public: 1289 public:
1289 OrthancJobsSerialization() 1290 OrthancJobsSerialization()
1290 { 1291 {
1334 1335
1335 ASSERT_TRUE(CheckIdempotentSerialization(unserializer, instance)); 1336 ASSERT_TRUE(CheckIdempotentSerialization(unserializer, instance));
1336 instance.Serialize(s); 1337 instance.Serialize(s);
1337 } 1338 }
1338 1339
1339 std::auto_ptr<JobOperationValue> value; 1340 std::unique_ptr<JobOperationValue> value;
1340 value.reset(unserializer.UnserializeValue(s)); 1341 value.reset(unserializer.UnserializeValue(s));
1341 ASSERT_EQ(JobOperationValue::Type_DicomInstance, value->GetType()); 1342 ASSERT_EQ(JobOperationValue::Type_DicomInstance, value->GetType());
1342 ASSERT_EQ(id, dynamic_cast<DicomInstanceOperationValue&>(*value).GetId()); 1343 ASSERT_EQ(id, dynamic_cast<DicomInstanceOperationValue&>(*value).GetId());
1343 1344
1344 { 1345 {
1367 1368
1368 ASSERT_TRUE(CheckIdempotentSerialization(unserializer, operation)); 1369 ASSERT_TRUE(CheckIdempotentSerialization(unserializer, operation));
1369 operation.Serialize(s); 1370 operation.Serialize(s);
1370 } 1371 }
1371 1372
1372 std::auto_ptr<IJobOperation> operation; 1373 std::unique_ptr<IJobOperation> operation;
1373 1374
1374 { 1375 {
1375 operation.reset(unserializer.UnserializeOperation(s)); 1376 operation.reset(unserializer.UnserializeOperation(s));
1376 1377
1377 Json::Value dummy; 1378 Json::Value dummy;
1454 } 1455 }
1455 1456
1456 // ModifyInstanceOperation 1457 // ModifyInstanceOperation
1457 1458
1458 { 1459 {
1459 std::auto_ptr<DicomModification> modification(new DicomModification); 1460 std::unique_ptr<DicomModification> modification(new DicomModification);
1460 modification->SetupAnonymization(DicomVersion_2008); 1461 modification->SetupAnonymization(DicomVersion_2008);
1461 1462
1462 ModifyInstanceOperation operation(GetContext(), RequestOrigin_Lua, modification.release()); 1463 ModifyInstanceOperation operation(GetContext(), RequestOrigin_Lua, modification.release());
1463 1464
1464 ASSERT_TRUE(CheckIdempotentSerialization(unserializer, operation)); 1465 ASSERT_TRUE(CheckIdempotentSerialization(unserializer, operation));
1505 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); 1506 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job));
1506 ASSERT_TRUE(job.Serialize(s)); 1507 ASSERT_TRUE(job.Serialize(s));
1507 } 1508 }
1508 1509
1509 { 1510 {
1510 std::auto_ptr<IJob> job; 1511 std::unique_ptr<IJob> job;
1511 job.reset(unserializer.UnserializeJob(s)); 1512 job.reset(unserializer.UnserializeJob(s));
1512 1513
1513 DicomModalityStoreJob& tmp = dynamic_cast<DicomModalityStoreJob&>(*job); 1514 DicomModalityStoreJob& tmp = dynamic_cast<DicomModalityStoreJob&>(*job);
1514 ASSERT_EQ("LOCAL", tmp.GetLocalAet()); 1515 ASSERT_EQ("LOCAL", tmp.GetLocalAet());
1515 ASSERT_EQ("REMOTE", tmp.GetRemoteModality().GetApplicationEntityTitle()); 1516 ASSERT_EQ("REMOTE", tmp.GetRemoteModality().GetApplicationEntityTitle());
1535 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); 1536 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job));
1536 ASSERT_TRUE(job.Serialize(s)); 1537 ASSERT_TRUE(job.Serialize(s));
1537 } 1538 }
1538 1539
1539 { 1540 {
1540 std::auto_ptr<IJob> job; 1541 std::unique_ptr<IJob> job;
1541 job.reset(unserializer.UnserializeJob(s)); 1542 job.reset(unserializer.UnserializeJob(s));
1542 1543
1543 OrthancPeerStoreJob& tmp = dynamic_cast<OrthancPeerStoreJob&>(*job); 1544 OrthancPeerStoreJob& tmp = dynamic_cast<OrthancPeerStoreJob&>(*job);
1544 ASSERT_EQ("http://localhost/", tmp.GetPeer().GetUrl()); 1545 ASSERT_EQ("http://localhost/", tmp.GetPeer().GetUrl());
1545 ASSERT_EQ("username", tmp.GetPeer().GetUsername()); 1546 ASSERT_EQ("username", tmp.GetPeer().GetUsername());
1548 } 1549 }
1549 1550
1550 // ResourceModificationJob 1551 // ResourceModificationJob
1551 1552
1552 { 1553 {
1553 std::auto_ptr<DicomModification> modification(new DicomModification); 1554 std::unique_ptr<DicomModification> modification(new DicomModification);
1554 modification->SetupAnonymization(DicomVersion_2008); 1555 modification->SetupAnonymization(DicomVersion_2008);
1555 1556
1556 ResourceModificationJob job(GetContext()); 1557 ResourceModificationJob job(GetContext());
1557 job.SetModification(modification.release(), ResourceType_Patient, true); 1558 job.SetModification(modification.release(), ResourceType_Patient, true);
1558 job.SetOrigin(DicomInstanceOrigin::FromLua()); 1559 job.SetOrigin(DicomInstanceOrigin::FromLua());
1560 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); 1561 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job));
1561 ASSERT_TRUE(job.Serialize(s)); 1562 ASSERT_TRUE(job.Serialize(s));
1562 } 1563 }
1563 1564
1564 { 1565 {
1565 std::auto_ptr<IJob> job; 1566 std::unique_ptr<IJob> job;
1566 job.reset(unserializer.UnserializeJob(s)); 1567 job.reset(unserializer.UnserializeJob(s));
1567 1568
1568 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job); 1569 ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job);
1569 ASSERT_TRUE(tmp.IsAnonymization()); 1570 ASSERT_TRUE(tmp.IsAnonymization());
1570 ASSERT_EQ(RequestOrigin_Lua, tmp.GetOrigin().GetRequestOrigin()); 1571 ASSERT_EQ(RequestOrigin_Lua, tmp.GetOrigin().GetRequestOrigin());
1627 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); 1628 ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job));
1628 ASSERT_TRUE(job.Serialize(s)); 1629 ASSERT_TRUE(job.Serialize(s));
1629 } 1630 }
1630 1631
1631 { 1632 {
1632 std::auto_ptr<IJob> job; 1633 std::unique_ptr<IJob> job;
1633 job.reset(unserializer.UnserializeJob(s)); 1634 job.reset(unserializer.UnserializeJob(s));
1634 1635
1635 SplitStudyJob& tmp = dynamic_cast<SplitStudyJob&>(*job); 1636 SplitStudyJob& tmp = dynamic_cast<SplitStudyJob&>(*job);
1636 ASSERT_TRUE(tmp.IsKeepSource()); 1637 ASSERT_TRUE(tmp.IsKeepSource());
1637 ASSERT_EQ(study, tmp.GetSourceStudy()); 1638 ASSERT_EQ(study, tmp.GetSourceStudy());
1691 GetContext().GetIndex().GetAllUuids(tmp, ResourceType_Series); 1692 GetContext().GetIndex().GetAllUuids(tmp, ResourceType_Series);
1692 ASSERT_EQ(3u, tmp.size()); 1693 ASSERT_EQ(3u, tmp.size());
1693 } 1694 }
1694 1695
1695 { 1696 {
1696 std::auto_ptr<IJob> job; 1697 std::unique_ptr<IJob> job;
1697 job.reset(unserializer.UnserializeJob(s)); 1698 job.reset(unserializer.UnserializeJob(s));
1698 1699
1699 MergeStudyJob& tmp = dynamic_cast<MergeStudyJob&>(*job); 1700 MergeStudyJob& tmp = dynamic_cast<MergeStudyJob&>(*job);
1700 ASSERT_TRUE(tmp.IsKeepSource()); 1701 ASSERT_TRUE(tmp.IsKeepSource());
1701 ASSERT_EQ(study, tmp.GetTargetStudy()); 1702 ASSERT_EQ(study, tmp.GetTargetStudy());