Mercurial > hg > orthanc
diff UnitTestsSources/MultiThreadingTests.cpp @ 3786:3801435e34a1 SylvainRouquette/fix-issue169-95b752c
integration Orthanc-1.6.0->SylvainRouquette
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 19 Mar 2020 11:48:30 +0100 |
parents | 763533d6dd67 56f2397f027a |
children |
line wrap: on
line diff
--- a/UnitTestsSources/MultiThreadingTests.cpp Wed Mar 18 08:59:06 2020 +0100 +++ b/UnitTestsSources/MultiThreadingTests.cpp Thu Mar 19 11:48:30 2020 +0100 @@ -2,7 +2,7 @@ * Orthanc - A Lightweight, RESTful DICOM Store * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics * Department, University Hospital of Liege, Belgium - * Copyright (C) 2017-2019 Osimis S.A., Belgium + * Copyright (C) 2017-2020 Osimis S.A., Belgium * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -34,6 +34,7 @@ #include "PrecompiledHeadersUnitTests.h" #include "gtest/gtest.h" +#include "../Core/Compatibility.h" #include "../Core/FileStorage/MemoryStorageArea.h" #include "../Core/JobsEngine/JobsEngine.h" #include "../Core/Logging.h" @@ -101,7 +102,7 @@ { } - virtual JobStepResult Step() ORTHANC_OVERRIDE + virtual JobStepResult Step(const std::string& jobId) ORTHANC_OVERRIDE { if (fails_) { @@ -272,7 +273,7 @@ q.Enqueue(new DynamicInteger(30, s)); q.Enqueue(new DynamicInteger(40, s)); - std::auto_ptr<DynamicInteger> i; + std::unique_ptr<DynamicInteger> i; i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(10, i->GetValue()); i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(20, i->GetValue()); i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(30, i->GetValue()); @@ -747,7 +748,7 @@ SequenceOfOperationsJob* job = NULL; { - std::auto_ptr<SequenceOfOperationsJob> a(new SequenceOfOperationsJob); + std::unique_ptr<SequenceOfOperationsJob> a(new SequenceOfOperationsJob); job = a.get(); engine.GetRegistry().Submit(id, a.release(), 0); } @@ -837,7 +838,7 @@ } else { - std::auto_ptr<IJob> unserialized(unserializer.UnserializeJob(a)); + std::unique_ptr<IJob> unserialized(unserializer.UnserializeJob(a)); Json::Value b = 43; if (unserialized->Serialize(b)) @@ -863,7 +864,7 @@ } else { - std::auto_ptr<SetOfInstancesJob> unserialized + std::unique_ptr<SetOfInstancesJob> unserialized (dynamic_cast<SetOfInstancesJob*>(unserializer.UnserializeJob(a))); Json::Value b = 43; @@ -889,7 +890,7 @@ Json::Value a = 42; operation.Serialize(a); - std::auto_ptr<IJobOperation> unserialized(unserializer.UnserializeOperation(a)); + std::unique_ptr<IJobOperation> unserialized(unserializer.UnserializeOperation(a)); Json::Value b = 43; unserialized->Serialize(b); @@ -904,7 +905,7 @@ Json::Value a = 42; value.Serialize(a); - std::auto_ptr<JobOperationValue> unserialized(unserializer.UnserializeValue(a)); + std::unique_ptr<JobOperationValue> unserialized(unserializer.UnserializeValue(a)); Json::Value b = 43; unserialized->Serialize(b); @@ -957,7 +958,7 @@ { GenericJobUnserializer unserializer; - std::auto_ptr<JobOperationValues> values(JobOperationValues::Unserialize(unserializer, s)); + std::unique_ptr<JobOperationValues> values(JobOperationValues::Unserialize(unserializer, s)); ASSERT_EQ(3u, values->GetSize()); ASSERT_EQ(JobOperationValue::Type_Null, values->GetValue(0).GetType()); ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(1).GetType()); @@ -984,7 +985,7 @@ ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); - std::auto_ptr<JobOperationValue> value; + std::unique_ptr<JobOperationValue> value; value.reset(unserializer.UnserializeValue(s)); ASSERT_EQ(JobOperationValue::Type_Null, value->GetType()); @@ -1021,7 +1022,7 @@ ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); { - std::auto_ptr<IJobOperation> operation; + std::unique_ptr<IJobOperation> operation; operation.reset(unserializer.UnserializeOperation(s)); // Make sure that we have indeed unserialized a log operation @@ -1045,12 +1046,12 @@ job.AddInstance("nope"); job.AddInstance("world"); job.SetPermissive(true); - ASSERT_THROW(job.Step(), OrthancException); // Not started yet + ASSERT_THROW(job.Step("jobId"), OrthancException); // Not started yet ASSERT_FALSE(job.HasTrailingStep()); ASSERT_FALSE(job.IsTrailingStepDone()); job.Start(); - ASSERT_EQ(JobStepCode_Continue, job.Step().GetCode()); - ASSERT_EQ(JobStepCode_Continue, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Continue, job.Step("jobId").GetCode()); + ASSERT_EQ(JobStepCode_Continue, job.Step("jobId").GetCode()); { DummyUnserializer unserializer; @@ -1065,7 +1066,7 @@ ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); - std::auto_ptr<IJob> job; + std::unique_ptr<IJob> job; job.reset(unserializer.UnserializeJob(s)); const DummyInstancesJob& tmp = dynamic_cast<const DummyInstancesJob&>(*job); @@ -1101,7 +1102,7 @@ lock.SetTrailingOperationTimeout(300); } - ASSERT_EQ(JobStepCode_Continue, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Continue, job.Step("jobId").GetCode()); { GenericJobUnserializer unserializer; @@ -1116,7 +1117,7 @@ ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); - std::auto_ptr<IJob> job; + std::unique_ptr<IJob> job; job.reset(unserializer.UnserializeJob(s)); std::string tmp; @@ -1143,11 +1144,11 @@ Json::Value s; ParsedDicomFile source(true); - source.Insert(DICOM_TAG_STUDY_DESCRIPTION, "Test 1", false); - source.Insert(DICOM_TAG_SERIES_DESCRIPTION, "Test 2", false); - source.Insert(DICOM_TAG_PATIENT_NAME, "Test 3", false); + source.Insert(DICOM_TAG_STUDY_DESCRIPTION, "Test 1", false, ""); + source.Insert(DICOM_TAG_SERIES_DESCRIPTION, "Test 2", false, ""); + source.Insert(DICOM_TAG_PATIENT_NAME, "Test 3", false, ""); - std::auto_ptr<ParsedDicomFile> modified(source.Clone(true)); + std::unique_ptr<ParsedDicomFile> modified(source.Clone(true)); { DicomModification modification; @@ -1166,7 +1167,7 @@ DicomModification modification(s); ASSERT_EQ(ResourceType_Series, modification.GetLevel()); - std::auto_ptr<ParsedDicomFile> second(source.Clone(true)); + std::unique_ptr<ParsedDicomFile> second(source.Clone(true)); modification.Apply(*second); std::string s; @@ -1282,7 +1283,7 @@ private: MemoryStorageArea storage_; SQLiteDatabaseWrapper db_; // The SQLite DB is in memory - std::auto_ptr<ServerContext> context_; + std::unique_ptr<ServerContext> context_; TimeoutDicomConnectionManager manager_; public: @@ -1310,7 +1311,7 @@ // Create a sample DICOM file ParsedDicomFile dicom(true); dicom.Replace(DICOM_TAG_PATIENT_NAME, std::string("JODOGNE"), - false, DicomReplaceMode_InsertIfAbsent); + false, DicomReplaceMode_InsertIfAbsent, ""); DicomInstanceToStore toStore; toStore.SetParsedDicomFile(dicom); @@ -1336,7 +1337,7 @@ instance.Serialize(s); } - std::auto_ptr<JobOperationValue> value; + std::unique_ptr<JobOperationValue> value; value.reset(unserializer.UnserializeValue(s)); ASSERT_EQ(JobOperationValue::Type_DicomInstance, value->GetType()); ASSERT_EQ(id, dynamic_cast<DicomInstanceOperationValue&>(*value).GetId()); @@ -1369,7 +1370,7 @@ operation.Serialize(s); } - std::auto_ptr<IJobOperation> operation; + std::unique_ptr<IJobOperation> operation; { operation.reset(unserializer.UnserializeOperation(s)); @@ -1411,7 +1412,9 @@ modality.SetHost("192.168.1.1"); modality.SetPortNumber(1000); modality.SetManufacturer(ModalityManufacturer_StoreScp); - modality.SetPreferredTransferSyntax("1.2.840.10008.1.2"); + ASSERT_EQ("1.2.840.10008.1.2", modality.GetPreferredTransferSyntax()); + modality.SetPreferredTransferSyntax("1.2.840.10008.1.2.1"); + ASSERT_EQ("1.2.840.10008.1.2.1", modality.GetPreferredTransferSyntax()); StoreScuOperation operation("TEST", modality); @@ -1457,7 +1460,7 @@ // ModifyInstanceOperation { - std::auto_ptr<DicomModification> modification(new DicomModification); + std::unique_ptr<DicomModification> modification(new DicomModification); modification->SetupAnonymization(DicomVersion_2008); ModifyInstanceOperation operation(GetContext(), RequestOrigin_Lua, modification.release()); @@ -1497,7 +1500,9 @@ modality.SetHost("192.168.1.1"); modality.SetPortNumber(1000); modality.SetManufacturer(ModalityManufacturer_StoreScp); - modality.SetPreferredTransferSyntax("1.2.840.10008.1.2"); + ASSERT_EQ("1.2.840.10008.1.2", modality.GetPreferredTransferSyntax()); + modality.SetPreferredTransferSyntax("1.2.840.10008.1.2.1"); + ASSERT_EQ("1.2.840.10008.1.2.1", modality.GetPreferredTransferSyntax()); DicomModalityStoreJob job(GetContext()); job.SetLocalAet("LOCAL"); @@ -1509,7 +1514,7 @@ } { - std::auto_ptr<IJob> job; + std::unique_ptr<IJob> job; job.reset(unserializer.UnserializeJob(s)); DicomModalityStoreJob& tmp = dynamic_cast<DicomModalityStoreJob&>(*job); @@ -1539,7 +1544,7 @@ } { - std::auto_ptr<IJob> job; + std::unique_ptr<IJob> job; job.reset(unserializer.UnserializeJob(s)); OrthancPeerStoreJob& tmp = dynamic_cast<OrthancPeerStoreJob&>(*job); @@ -1552,7 +1557,7 @@ // ResourceModificationJob { - std::auto_ptr<DicomModification> modification(new DicomModification); + std::unique_ptr<DicomModification> modification(new DicomModification); modification->SetupAnonymization(DicomVersion_2008); ResourceModificationJob job(GetContext()); @@ -1564,7 +1569,7 @@ } { - std::auto_ptr<IJob> job; + std::unique_ptr<IJob> job; job.reset(unserializer.UnserializeJob(s)); ResourceModificationJob& tmp = dynamic_cast<ResourceModificationJob&>(*job); @@ -1620,8 +1625,8 @@ job.AddTrailingStep(); job.Start(); - ASSERT_EQ(JobStepCode_Continue, job.Step().GetCode()); - ASSERT_EQ(JobStepCode_Success, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Continue, job.Step("jobId").GetCode()); + ASSERT_EQ(JobStepCode_Success, job.Step("jobId").GetCode()); study2 = job.GetTargetStudy(); ASSERT_FALSE(study2.empty()); @@ -1631,7 +1636,7 @@ } { - std::auto_ptr<IJob> job; + std::unique_ptr<IJob> job; job.reset(unserializer.UnserializeJob(s)); SplitStudyJob& tmp = dynamic_cast<SplitStudyJob&>(*job); @@ -1679,8 +1684,8 @@ job.AddTrailingStep(); job.Start(); - ASSERT_EQ(JobStepCode_Continue, job.Step().GetCode()); - ASSERT_EQ(JobStepCode_Success, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Continue, job.Step("jobId").GetCode()); + ASSERT_EQ(JobStepCode_Success, job.Step("jobId").GetCode()); ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); ASSERT_TRUE(job.Serialize(s)); @@ -1695,7 +1700,7 @@ } { - std::auto_ptr<IJob> job; + std::unique_ptr<IJob> job; job.reset(unserializer.UnserializeJob(s)); MergeStudyJob& tmp = dynamic_cast<MergeStudyJob&>(*job); @@ -1748,7 +1753,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_EQ(JobStepCode_Success, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Success, job.Step("jobId").GetCode()); ASSERT_EQ(1u, job.GetPosition()); ASSERT_FALSE(job.IsTrailingStepDone()); @@ -1757,7 +1762,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_THROW(job.Step(), OrthancException); + ASSERT_THROW(job.Step("jobId"), OrthancException); } { @@ -1779,7 +1784,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_EQ(JobStepCode_Continue, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Continue, job.Step("jobId").GetCode()); ASSERT_EQ(1u, job.GetPosition()); ASSERT_FALSE(job.IsTrailingStepDone()); @@ -1788,7 +1793,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_EQ(JobStepCode_Success, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Success, job.Step("jobId").GetCode()); ASSERT_EQ(2u, job.GetPosition()); ASSERT_FALSE(job.IsTrailingStepDone()); @@ -1797,7 +1802,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_THROW(job.Step(), OrthancException); + ASSERT_THROW(job.Step("jobId"), OrthancException); } { @@ -1820,7 +1825,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_EQ(JobStepCode_Success, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Success, job.Step("jobId").GetCode()); ASSERT_EQ(1u, job.GetPosition()); ASSERT_TRUE(job.IsTrailingStepDone()); @@ -1829,7 +1834,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_THROW(job.Step(), OrthancException); + ASSERT_THROW(job.Step("jobId"), OrthancException); } { @@ -1854,7 +1859,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_EQ(JobStepCode_Continue, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Continue, job.Step("jobId").GetCode()); ASSERT_EQ(1u, job.GetPosition()); ASSERT_FALSE(job.IsTrailingStepDone()); @@ -1863,7 +1868,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_EQ(JobStepCode_Success, job.Step().GetCode()); + ASSERT_EQ(JobStepCode_Success, job.Step("jobId").GetCode()); ASSERT_EQ(2u, job.GetPosition()); ASSERT_TRUE(job.IsTrailingStepDone()); @@ -1872,7 +1877,7 @@ ASSERT_TRUE(CheckIdempotentSetOfInstances(unserializer, job)); } - ASSERT_THROW(job.Step(), OrthancException); + ASSERT_THROW(job.Step("jobId"), OrthancException); } } @@ -1899,6 +1904,8 @@ ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_Get)); ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_Store)); ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_Move)); + ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_NAction)); + ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_NEventReport)); } s = Json::nullValue; @@ -1911,8 +1918,10 @@ modality.SetApplicationEntityTitle("HELLO"); modality.SetHost("world"); modality.SetPortNumber(45); - modality.SetManufacturer(ModalityManufacturer_Dcm4Chee); - modality.SetPreferredTransferSyntax("1.2.840.10008.1.2"); + modality.SetManufacturer(ModalityManufacturer_GenericNoWildcardInDates); + ASSERT_EQ("1.2.840.10008.1.2", modality.GetPreferredTransferSyntax()); + modality.SetPreferredTransferSyntax("1.2.840.10008.1.2.1"); + ASSERT_EQ("1.2.840.10008.1.2.1", modality.GetPreferredTransferSyntax()); modality.Serialize(s, true); ASSERT_EQ(Json::objectValue, s.type()); } @@ -1922,12 +1931,14 @@ ASSERT_EQ("HELLO", modality.GetApplicationEntityTitle()); ASSERT_EQ("world", modality.GetHost()); ASSERT_EQ(45u, modality.GetPortNumber()); - ASSERT_EQ(ModalityManufacturer_Dcm4Chee, modality.GetManufacturer()); + ASSERT_EQ(ModalityManufacturer_GenericNoWildcardInDates, modality.GetManufacturer()); ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_Echo)); ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_Find)); ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_Get)); ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_Store)); ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_Move)); + ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_NAction)); + ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_NEventReport)); } s["Port"] = "46"; @@ -1947,8 +1958,10 @@ operations.insert(DicomRequestType_Get); operations.insert(DicomRequestType_Move); operations.insert(DicomRequestType_Store); + operations.insert(DicomRequestType_NAction); + operations.insert(DicomRequestType_NEventReport); - ASSERT_EQ(5u, operations.size()); + ASSERT_EQ(7u, operations.size()); for (std::set<DicomRequestType>::const_iterator it = operations.begin(); it != operations.end(); ++it) @@ -1977,4 +1990,54 @@ } } } + + { + Json::Value s; + s["AllowStorageCommitment"] = false; + s["AET"] = "AET"; + s["Host"] = "host"; + s["Port"] = "104"; + + RemoteModalityParameters modality(s); + ASSERT_TRUE(modality.IsAdvancedFormatNeeded()); + ASSERT_EQ("AET", modality.GetApplicationEntityTitle()); + ASSERT_EQ("host", modality.GetHost()); + ASSERT_EQ(104u, modality.GetPortNumber()); + ASSERT_FALSE(modality.IsRequestAllowed(DicomRequestType_NAction)); + ASSERT_FALSE(modality.IsRequestAllowed(DicomRequestType_NEventReport)); + } + + { + Json::Value s; + s["AllowNAction"] = false; + s["AllowNEventReport"] = true; + s["AET"] = "AET"; + s["Host"] = "host"; + s["Port"] = "104"; + + RemoteModalityParameters modality(s); + ASSERT_TRUE(modality.IsAdvancedFormatNeeded()); + ASSERT_EQ("AET", modality.GetApplicationEntityTitle()); + ASSERT_EQ("host", modality.GetHost()); + ASSERT_EQ(104u, modality.GetPortNumber()); + ASSERT_FALSE(modality.IsRequestAllowed(DicomRequestType_NAction)); + ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_NEventReport)); + } + + { + Json::Value s; + s["AllowNAction"] = true; + s["AllowNEventReport"] = true; + s["AET"] = "AET"; + s["Host"] = "host"; + s["Port"] = "104"; + + RemoteModalityParameters modality(s); + ASSERT_FALSE(modality.IsAdvancedFormatNeeded()); + ASSERT_EQ("AET", modality.GetApplicationEntityTitle()); + ASSERT_EQ("host", modality.GetHost()); + ASSERT_EQ(104u, modality.GetPortNumber()); + ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_NAction)); + ASSERT_TRUE(modality.IsRequestAllowed(DicomRequestType_NEventReport)); + } }