Mercurial > hg > orthanc
annotate UnitTestsSources/MultiThreadingTests.cpp @ 2663:228e2783ce83 jobs
some jobs might not be serializable
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 07 Jun 2018 18:18:02 +0200 |
parents | 47d812308d63 |
children | a21b244efb37 |
rev | line source |
---|---|
827
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
1 /** |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
2 * Orthanc - A Lightweight, RESTful DICOM Store |
1900 | 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
1288
6e7e5ed91c2d
upgrade to year 2015
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1009
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
2447
878b59270859
upgrade to year 2018
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2382
diff
changeset
|
5 * Copyright (C) 2017-2018 Osimis S.A., Belgium |
827
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
6 * |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
8 * modify it under the terms of the GNU General Public License as |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
9 * published by the Free Software Foundation, either version 3 of the |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
10 * License, or (at your option) any later version. |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
11 * |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
12 * In addition, as a special exception, the copyright holders of this |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
13 * program give permission to link the code of its release with the |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
14 * OpenSSL project's "OpenSSL" library (or with modified versions of it |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
15 * that use the same license as the "OpenSSL" library), and distribute |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
16 * the linked executables. You must obey the GNU General Public License |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
17 * in all respects for all of the code used other than "OpenSSL". If you |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
18 * modify file(s) with this exception, you may extend this exception to |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
19 * your version of the file(s), but you are not obligated to do so. If |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
20 * you do not wish to do so, delete this exception statement from your |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
21 * version. If you delete this exception statement from all source files |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
22 * in the program, then also delete it here. |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
23 * |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
24 * This program is distributed in the hope that it will be useful, but |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
25 * WITHOUT ANY WARRANTY; without even the implied warranty of |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
27 * General Public License for more details. |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
28 * |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
29 * You should have received a copy of the GNU General Public License |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
30 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
31 **/ |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
32 |
3d6f9b7d0add
precompiled headers in unit tests
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
776
diff
changeset
|
33 |
831
84513f2ee1f3
pch for unit tests and server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
827
diff
changeset
|
34 #include "PrecompiledHeadersUnitTests.h" |
723 | 35 #include "gtest/gtest.h" |
36 | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
37 #include "../Core/FileStorage/MemoryStorageArea.h" |
2569 | 38 #include "../Core/JobsEngine/JobsEngine.h" |
2610
3ff4c50647ea
moving the old scheduler to the graveyard
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2606
diff
changeset
|
39 #include "../Core/MultiThreading/SharedMessageQueue.h" |
723 | 40 #include "../Core/OrthancException.h" |
2656
a6d3e45eeff5
SerializationToolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2655
diff
changeset
|
41 #include "../Core/SerializationToolbox.h" |
2143
fd5875662670
creation of namespace SystemToolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2140
diff
changeset
|
42 #include "../Core/SystemToolbox.h" |
723 | 43 #include "../Core/Toolbox.h" |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
44 #include "../OrthancServer/DatabaseWrapper.h" |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
45 #include "../OrthancServer/ServerContext.h" |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
46 #include "../OrthancServer/ServerJobs/LuaJobManager.h" |
2655 | 47 #include "../OrthancServer/ServerJobs/OrthancJobUnserializer.h" |
48 | |
49 #include "../Core/JobsEngine/Operations/JobOperationValues.h" | |
50 #include "../Core/JobsEngine/Operations/NullOperationValue.h" | |
51 #include "../Core/JobsEngine/Operations/StringOperationValue.h" | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
52 #include "../OrthancServer/ServerJobs/Operations/DicomInstanceOperationValue.h" |
2655 | 53 |
54 #include "../Core/JobsEngine/Operations/LogJobOperation.h" | |
55 #include "../OrthancServer/ServerJobs/Operations/DeleteResourceOperation.h" | |
56 #include "../OrthancServer/ServerJobs/Operations/ModifyInstanceOperation.h" | |
57 #include "../OrthancServer/ServerJobs/Operations/StorePeerOperation.h" | |
58 #include "../OrthancServer/ServerJobs/Operations/StoreScuOperation.h" | |
59 #include "../OrthancServer/ServerJobs/Operations/SystemCallOperation.h" | |
60 | |
2663
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
61 #include "../OrthancServer/ServerJobs/ArchiveJob.h" |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
62 |
2655 | 63 |
723 | 64 |
65 using namespace Orthanc; | |
66 | |
67 namespace | |
68 { | |
2652 | 69 class DummyJob : public IJob |
70 { | |
71 private: | |
72 bool fails_; | |
73 unsigned int count_; | |
74 unsigned int steps_; | |
75 | |
76 public: | |
77 DummyJob() : | |
78 fails_(false), | |
79 count_(0), | |
80 steps_(4) | |
81 { | |
82 } | |
83 | |
84 explicit DummyJob(bool fails) : | |
85 fails_(fails), | |
86 count_(0), | |
87 steps_(4) | |
88 { | |
89 } | |
90 | |
91 virtual void Start() | |
92 { | |
93 } | |
94 | |
95 virtual void SignalResubmit() | |
96 { | |
97 } | |
98 | |
99 virtual JobStepResult ExecuteStep() | |
100 { | |
101 if (fails_) | |
102 { | |
103 return JobStepResult::Failure(ErrorCode_ParameterOutOfRange); | |
104 } | |
105 else if (count_ == steps_ - 1) | |
106 { | |
107 return JobStepResult::Success(); | |
108 } | |
109 else | |
110 { | |
111 count_++; | |
112 return JobStepResult::Continue(); | |
113 } | |
114 } | |
115 | |
116 virtual void ReleaseResources() | |
117 { | |
118 } | |
119 | |
120 virtual float GetProgress() | |
121 { | |
122 return static_cast<float>(count_) / static_cast<float>(steps_ - 1); | |
123 } | |
124 | |
125 virtual void GetJobType(std::string& type) | |
126 { | |
127 type = "DummyJob"; | |
128 } | |
129 | |
2663
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
130 virtual bool Serialize(Json::Value& value) |
2652 | 131 { |
2663
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
132 return true; |
2652 | 133 } |
134 | |
135 virtual void GetPublicContent(Json::Value& value) | |
136 { | |
137 value["hello"] = "world"; | |
138 } | |
139 }; | |
140 | |
141 | |
142 class DummyInstancesJob : public SetOfInstancesJob | |
143 { | |
144 protected: | |
145 virtual bool HandleInstance(const std::string& instance) | |
146 { | |
2657
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
147 return (instance != "nope"); |
2652 | 148 } |
149 | |
150 public: | |
151 DummyInstancesJob() | |
152 { | |
153 } | |
154 | |
155 DummyInstancesJob(const Json::Value& value) : | |
156 SetOfInstancesJob(value) | |
157 { | |
158 } | |
159 | |
160 virtual void ReleaseResources() | |
161 { | |
162 } | |
163 | |
164 virtual void GetJobType(std::string& s) | |
165 { | |
166 s = "DummyInstancesJob"; | |
167 } | |
168 }; | |
169 | |
170 | |
171 class DummyUnserializer : public GenericJobUnserializer | |
172 { | |
173 public: | |
174 virtual IJob* UnserializeJob(const Json::Value& value) | |
175 { | |
2656
a6d3e45eeff5
SerializationToolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2655
diff
changeset
|
176 if (SerializationToolbox::ReadString(value, "Type") == "DummyInstancesJob") |
2652 | 177 { |
178 return new DummyInstancesJob(value); | |
179 } | |
180 else | |
181 { | |
182 return GenericJobUnserializer::UnserializeJob(value); | |
183 } | |
184 } | |
185 }; | |
186 | |
187 | |
1396
ac4efabeb80c
Migration of the orthanc-client as a separate project
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1304
diff
changeset
|
188 class DynamicInteger : public IDynamicObject |
723 | 189 { |
190 private: | |
191 int value_; | |
192 std::set<int>& target_; | |
193 | |
194 public: | |
195 DynamicInteger(int value, std::set<int>& target) : | |
196 value_(value), target_(target) | |
197 { | |
198 } | |
199 | |
200 int GetValue() const | |
201 { | |
202 return value_; | |
203 } | |
204 }; | |
205 } | |
206 | |
207 | |
208 TEST(MultiThreading, SharedMessageQueueBasic) | |
209 { | |
210 std::set<int> s; | |
211 | |
212 SharedMessageQueue q; | |
213 ASSERT_TRUE(q.WaitEmpty(0)); | |
214 q.Enqueue(new DynamicInteger(10, s)); | |
215 ASSERT_FALSE(q.WaitEmpty(1)); | |
216 q.Enqueue(new DynamicInteger(20, s)); | |
217 q.Enqueue(new DynamicInteger(30, s)); | |
218 q.Enqueue(new DynamicInteger(40, s)); | |
219 | |
220 std::auto_ptr<DynamicInteger> i; | |
221 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(10, i->GetValue()); | |
222 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(20, i->GetValue()); | |
223 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(30, i->GetValue()); | |
224 ASSERT_FALSE(q.WaitEmpty(1)); | |
225 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(40, i->GetValue()); | |
226 ASSERT_TRUE(q.WaitEmpty(0)); | |
227 ASSERT_EQ(NULL, q.Dequeue(1)); | |
228 } | |
229 | |
230 | |
231 TEST(MultiThreading, SharedMessageQueueClean) | |
232 { | |
233 std::set<int> s; | |
234 | |
235 try | |
236 { | |
237 SharedMessageQueue q; | |
238 q.Enqueue(new DynamicInteger(10, s)); | |
239 q.Enqueue(new DynamicInteger(20, s)); | |
1583
9ea3d082b064
got rid of custom exceptions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1582
diff
changeset
|
240 throw OrthancException(ErrorCode_InternalError); |
723 | 241 } |
242 catch (OrthancException&) | |
243 { | |
244 } | |
245 } | |
246 | |
247 | |
769
3f946e5c3802
ReusableDicomUserConnection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
760
diff
changeset
|
248 |
3f946e5c3802
ReusableDicomUserConnection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
760
diff
changeset
|
249 |
2652 | 250 static bool CheckState(JobsRegistry& registry, |
251 const std::string& id, | |
252 JobState state) | |
2557 | 253 { |
2652 | 254 JobState s; |
2558 | 255 if (registry.GetState(s, id)) |
2557 | 256 { |
257 return state == s; | |
258 } | |
259 else | |
260 { | |
261 return false; | |
262 } | |
263 } | |
264 | |
265 | |
2652 | 266 static bool CheckErrorCode(JobsRegistry& registry, |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
267 const std::string& id, |
2652 | 268 ErrorCode code) |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
269 { |
2652 | 270 JobInfo s; |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
271 if (registry.GetJobInfo(s, id)) |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
272 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
273 return code == s.GetStatus().GetErrorCode(); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
274 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
275 else |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
276 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
277 return false; |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
278 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
279 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
280 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
281 |
2558 | 282 TEST(JobsRegistry, Priority) |
2557 | 283 { |
2558 | 284 JobsRegistry registry; |
2557 | 285 |
286 std::string i1, i2, i3, i4; | |
2558 | 287 registry.Submit(i1, new DummyJob(), 10); |
288 registry.Submit(i2, new DummyJob(), 30); | |
289 registry.Submit(i3, new DummyJob(), 20); | |
290 registry.Submit(i4, new DummyJob(), 5); | |
2557 | 291 |
2558 | 292 registry.SetMaxCompletedJobs(2); |
2557 | 293 |
294 std::set<std::string> id; | |
2558 | 295 registry.ListJobs(id); |
2557 | 296 |
297 ASSERT_EQ(4u, id.size()); | |
298 ASSERT_TRUE(id.find(i1) != id.end()); | |
299 ASSERT_TRUE(id.find(i2) != id.end()); | |
300 ASSERT_TRUE(id.find(i3) != id.end()); | |
301 ASSERT_TRUE(id.find(i4) != id.end()); | |
302 | |
2652 | 303 ASSERT_TRUE(CheckState(registry, i2, JobState_Pending)); |
2557 | 304 |
305 { | |
2558 | 306 JobsRegistry::RunningJob job(registry, 0); |
2557 | 307 ASSERT_TRUE(job.IsValid()); |
308 ASSERT_EQ(30, job.GetPriority()); | |
309 ASSERT_EQ(i2, job.GetId()); | |
310 | |
2652 | 311 ASSERT_TRUE(CheckState(registry, i2, JobState_Running)); |
2557 | 312 } |
313 | |
2652 | 314 ASSERT_TRUE(CheckState(registry, i2, JobState_Failure)); |
315 ASSERT_TRUE(CheckState(registry, i3, JobState_Pending)); | |
2557 | 316 |
317 { | |
2558 | 318 JobsRegistry::RunningJob job(registry, 0); |
2557 | 319 ASSERT_TRUE(job.IsValid()); |
320 ASSERT_EQ(20, job.GetPriority()); | |
321 ASSERT_EQ(i3, job.GetId()); | |
322 | |
323 job.MarkSuccess(); | |
324 | |
2652 | 325 ASSERT_TRUE(CheckState(registry, i3, JobState_Running)); |
2557 | 326 } |
327 | |
2652 | 328 ASSERT_TRUE(CheckState(registry, i3, JobState_Success)); |
2557 | 329 |
330 { | |
2558 | 331 JobsRegistry::RunningJob job(registry, 0); |
2557 | 332 ASSERT_TRUE(job.IsValid()); |
333 ASSERT_EQ(10, job.GetPriority()); | |
334 ASSERT_EQ(i1, job.GetId()); | |
335 } | |
336 | |
337 { | |
2558 | 338 JobsRegistry::RunningJob job(registry, 0); |
2557 | 339 ASSERT_TRUE(job.IsValid()); |
340 ASSERT_EQ(5, job.GetPriority()); | |
341 ASSERT_EQ(i4, job.GetId()); | |
342 } | |
343 | |
344 { | |
2558 | 345 JobsRegistry::RunningJob job(registry, 1); |
2557 | 346 ASSERT_FALSE(job.IsValid()); |
347 } | |
348 | |
2652 | 349 JobState s; |
2558 | 350 ASSERT_TRUE(registry.GetState(s, i1)); |
351 ASSERT_FALSE(registry.GetState(s, i2)); // Removed because oldest | |
352 ASSERT_FALSE(registry.GetState(s, i3)); // Removed because second oldest | |
353 ASSERT_TRUE(registry.GetState(s, i4)); | |
2557 | 354 |
2558 | 355 registry.SetMaxCompletedJobs(1); // (*) |
356 ASSERT_FALSE(registry.GetState(s, i1)); // Just discarded by (*) | |
357 ASSERT_TRUE(registry.GetState(s, i4)); | |
2557 | 358 } |
359 | |
360 | |
2558 | 361 TEST(JobsRegistry, Simultaneous) |
2557 | 362 { |
2558 | 363 JobsRegistry registry; |
364 | |
365 std::string i1, i2; | |
366 registry.Submit(i1, new DummyJob(), 20); | |
367 registry.Submit(i2, new DummyJob(), 10); | |
368 | |
2652 | 369 ASSERT_TRUE(CheckState(registry, i1, JobState_Pending)); |
370 ASSERT_TRUE(CheckState(registry, i2, JobState_Pending)); | |
2558 | 371 |
372 { | |
373 JobsRegistry::RunningJob job1(registry, 0); | |
374 JobsRegistry::RunningJob job2(registry, 0); | |
375 | |
376 ASSERT_TRUE(job1.IsValid()); | |
377 ASSERT_TRUE(job2.IsValid()); | |
378 | |
379 job1.MarkFailure(); | |
380 job2.MarkSuccess(); | |
381 | |
2652 | 382 ASSERT_TRUE(CheckState(registry, i1, JobState_Running)); |
383 ASSERT_TRUE(CheckState(registry, i2, JobState_Running)); | |
2558 | 384 } |
385 | |
2652 | 386 ASSERT_TRUE(CheckState(registry, i1, JobState_Failure)); |
387 ASSERT_TRUE(CheckState(registry, i2, JobState_Success)); | |
2558 | 388 } |
389 | |
390 | |
391 TEST(JobsRegistry, Resubmit) | |
392 { | |
393 JobsRegistry registry; | |
2557 | 394 |
395 std::string id; | |
2558 | 396 registry.Submit(id, new DummyJob(), 10); |
2557 | 397 |
2652 | 398 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2557 | 399 |
2558 | 400 registry.Resubmit(id); |
2652 | 401 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2557 | 402 |
403 { | |
2558 | 404 JobsRegistry::RunningJob job(registry, 0); |
2557 | 405 ASSERT_TRUE(job.IsValid()); |
406 job.MarkFailure(); | |
407 | |
2652 | 408 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2557 | 409 |
2558 | 410 registry.Resubmit(id); |
2652 | 411 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2557 | 412 } |
413 | |
2652 | 414 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2557 | 415 |
2558 | 416 registry.Resubmit(id); |
2652 | 417 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2557 | 418 |
419 { | |
2558 | 420 JobsRegistry::RunningJob job(registry, 0); |
2557 | 421 ASSERT_TRUE(job.IsValid()); |
422 ASSERT_EQ(id, job.GetId()); | |
423 | |
424 job.MarkSuccess(); | |
2652 | 425 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 426 } |
427 | |
2652 | 428 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 429 |
430 registry.Resubmit(id); | |
2652 | 431 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 432 } |
433 | |
434 | |
435 TEST(JobsRegistry, Retry) | |
436 { | |
437 JobsRegistry registry; | |
438 | |
439 std::string id; | |
440 registry.Submit(id, new DummyJob(), 10); | |
441 | |
2652 | 442 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 443 |
444 { | |
445 JobsRegistry::RunningJob job(registry, 0); | |
446 ASSERT_TRUE(job.IsValid()); | |
447 job.MarkRetry(0); | |
448 | |
2652 | 449 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 450 } |
451 | |
2652 | 452 ASSERT_TRUE(CheckState(registry, id, JobState_Retry)); |
2558 | 453 |
454 registry.Resubmit(id); | |
2652 | 455 ASSERT_TRUE(CheckState(registry, id, JobState_Retry)); |
2558 | 456 |
457 registry.ScheduleRetries(); | |
2652 | 458 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 459 |
460 { | |
461 JobsRegistry::RunningJob job(registry, 0); | |
462 ASSERT_TRUE(job.IsValid()); | |
463 job.MarkSuccess(); | |
464 | |
2652 | 465 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2557 | 466 } |
467 | |
2652 | 468 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 469 } |
470 | |
471 | |
472 TEST(JobsRegistry, PausePending) | |
473 { | |
474 JobsRegistry registry; | |
475 | |
476 std::string id; | |
477 registry.Submit(id, new DummyJob(), 10); | |
478 | |
2652 | 479 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 480 |
481 registry.Pause(id); | |
2652 | 482 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 483 |
484 registry.Pause(id); | |
2652 | 485 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 486 |
487 registry.Resubmit(id); | |
2652 | 488 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 489 |
490 registry.Resume(id); | |
2652 | 491 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2557 | 492 } |
2558 | 493 |
494 | |
495 TEST(JobsRegistry, PauseRunning) | |
496 { | |
497 JobsRegistry registry; | |
498 | |
499 std::string id; | |
500 registry.Submit(id, new DummyJob(), 10); | |
501 | |
2652 | 502 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 503 |
504 { | |
505 JobsRegistry::RunningJob job(registry, 0); | |
506 ASSERT_TRUE(job.IsValid()); | |
507 | |
508 registry.Resubmit(id); | |
2562 | 509 job.MarkPause(); |
2652 | 510 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 511 } |
512 | |
2652 | 513 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 514 |
515 registry.Resubmit(id); | |
2652 | 516 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 517 |
518 registry.Resume(id); | |
2652 | 519 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 520 |
521 { | |
522 JobsRegistry::RunningJob job(registry, 0); | |
523 ASSERT_TRUE(job.IsValid()); | |
524 | |
525 job.MarkSuccess(); | |
2652 | 526 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 527 } |
528 | |
2652 | 529 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 530 } |
531 | |
532 | |
533 TEST(JobsRegistry, PauseRetry) | |
534 { | |
535 JobsRegistry registry; | |
536 | |
537 std::string id; | |
538 registry.Submit(id, new DummyJob(), 10); | |
539 | |
2652 | 540 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 541 |
542 { | |
543 JobsRegistry::RunningJob job(registry, 0); | |
544 ASSERT_TRUE(job.IsValid()); | |
545 | |
546 job.MarkRetry(0); | |
2652 | 547 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 548 } |
549 | |
2652 | 550 ASSERT_TRUE(CheckState(registry, id, JobState_Retry)); |
2558 | 551 |
552 registry.Pause(id); | |
2652 | 553 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 554 |
555 registry.Resume(id); | |
2652 | 556 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 557 |
558 { | |
559 JobsRegistry::RunningJob job(registry, 0); | |
560 ASSERT_TRUE(job.IsValid()); | |
561 | |
562 job.MarkSuccess(); | |
2652 | 563 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 564 } |
565 | |
2652 | 566 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 567 } |
2565 | 568 |
569 | |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
570 TEST(JobsRegistry, Cancel) |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
571 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
572 JobsRegistry registry; |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
573 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
574 std::string id; |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
575 registry.Submit(id, new DummyJob(), 10); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
576 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
577 ASSERT_FALSE(registry.Cancel("nope")); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
578 |
2652 | 579 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
580 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
581 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
582 ASSERT_TRUE(registry.Cancel(id)); |
2652 | 583 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
584 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
585 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
586 ASSERT_TRUE(registry.Cancel(id)); |
2652 | 587 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
588 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
589 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
590 ASSERT_TRUE(registry.Resubmit(id)); |
2652 | 591 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
592 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
593 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
594 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
595 JobsRegistry::RunningJob job(registry, 0); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
596 ASSERT_TRUE(job.IsValid()); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
597 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
598 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
599 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
600 job.MarkSuccess(); |
2652 | 601 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
602 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
603 |
2652 | 604 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
605 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
606 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
607 ASSERT_TRUE(registry.Cancel(id)); |
2652 | 608 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
609 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
610 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
611 registry.Submit(id, new DummyJob(), 10); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
612 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
613 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
614 JobsRegistry::RunningJob job(registry, 0); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
615 ASSERT_TRUE(job.IsValid()); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
616 ASSERT_EQ(id, job.GetId()); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
617 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
618 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
2652 | 619 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
620 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
621 job.MarkCanceled(); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
622 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
623 |
2652 | 624 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
625 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
626 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
627 ASSERT_TRUE(registry.Resubmit(id)); |
2652 | 628 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
629 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
630 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
631 ASSERT_TRUE(registry.Pause(id)); |
2652 | 632 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
633 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
634 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
635 ASSERT_TRUE(registry.Cancel(id)); |
2652 | 636 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
637 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
638 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
639 ASSERT_TRUE(registry.Resubmit(id)); |
2652 | 640 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
641 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
642 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
643 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
644 JobsRegistry::RunningJob job(registry, 0); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
645 ASSERT_TRUE(job.IsValid()); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
646 ASSERT_EQ(id, job.GetId()); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
647 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
648 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
2652 | 649 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
650 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
651 job.MarkRetry(500); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
652 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
653 |
2652 | 654 ASSERT_TRUE(CheckState(registry, id, JobState_Retry)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
655 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
656 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
657 ASSERT_TRUE(registry.Cancel(id)); |
2652 | 658 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
659 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
660 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
661 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
662 |
2570
2e879c796ec7
JobsRegistry::SubmitAndWait(), StoreScuJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2569
diff
changeset
|
663 |
2599 | 664 TEST(JobsEngine, SubmitAndWait) |
2565 | 665 { |
666 JobsEngine engine; | |
667 engine.SetWorkersCount(3); | |
668 engine.Start(); | |
669 | |
2599 | 670 ASSERT_TRUE(engine.GetRegistry().SubmitAndWait(new DummyJob(), rand() % 10)); |
671 ASSERT_FALSE(engine.GetRegistry().SubmitAndWait(new DummyJob(true), rand() % 10)); | |
672 | |
673 engine.Stop(); | |
674 } | |
675 | |
676 | |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
677 TEST(JobsEngine, DISABLED_SequenceOfOperationsJob) |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
678 { |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
679 JobsEngine engine; |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
680 engine.SetWorkersCount(3); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
681 engine.Start(); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
682 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
683 std::string id; |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
684 SequenceOfOperationsJob* job = NULL; |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
685 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
686 { |
2601 | 687 std::auto_ptr<SequenceOfOperationsJob> a(new SequenceOfOperationsJob); |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
688 job = a.get(); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
689 engine.GetRegistry().Submit(id, a.release(), 0); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
690 } |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
691 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
692 boost::this_thread::sleep(boost::posix_time::milliseconds(500)); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
693 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
694 { |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
695 SequenceOfOperationsJob::Lock lock(*job); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
696 size_t i = lock.AddOperation(new LogJobOperation); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
697 size_t j = lock.AddOperation(new LogJobOperation); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
698 size_t k = lock.AddOperation(new LogJobOperation); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
699 lock.AddInput(i, StringOperationValue("Hello")); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
700 lock.AddInput(i, StringOperationValue("World")); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
701 lock.Connect(i, j); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
702 lock.Connect(j, k); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
703 } |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
704 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
705 boost::this_thread::sleep(boost::posix_time::milliseconds(2000)); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
706 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
707 engine.Stop(); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
708 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
709 } |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
710 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
711 |
2621
83ac5a05ce84
primitives for unserializing jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2610
diff
changeset
|
712 TEST(JobsEngine, DISABLED_Lua) |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
713 { |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
714 JobsEngine engine; |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
715 engine.SetWorkersCount(2); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
716 engine.Start(); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
717 |
2604
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
718 LuaJobManager lua; |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
719 lua.SetMaxOperationsPerJob(5); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
720 lua.SetTrailingOperationTimeout(200); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
721 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
722 for (size_t i = 0; i < 30; i++) |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
723 { |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
724 boost::this_thread::sleep(boost::posix_time::milliseconds(150)); |
2604
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
725 |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
726 LuaJobManager::Lock lock(lua, engine); |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
727 size_t a = lock.AddLogOperation(); |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
728 size_t b = lock.AddLogOperation(); |
2606
f2b9d3256060
SystemCallOperation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2604
diff
changeset
|
729 size_t c = lock.AddSystemCallOperation("echo"); |
2604
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
730 lock.AddStringInput(a, boost::lexical_cast<std::string>(i)); |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
731 lock.AddNullInput(a); |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
732 lock.Connect(a, b); |
2606
f2b9d3256060
SystemCallOperation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2604
diff
changeset
|
733 lock.Connect(a, c); |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
734 } |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
735 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
736 boost::this_thread::sleep(boost::posix_time::milliseconds(2000)); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
737 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
738 engine.Stop(); |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
739 } |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
740 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
741 |
2655 | 742 TEST(JobsSerialization, BadFileFormat) |
743 { | |
744 GenericJobUnserializer unserializer; | |
745 | |
746 Json::Value s; | |
747 | |
748 s = Json::objectValue; | |
749 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
750 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | |
751 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
752 | |
753 s = Json::arrayValue; | |
754 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
755 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | |
756 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
757 | |
758 s = "hello"; | |
759 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
760 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | |
761 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
762 | |
763 s = 42; | |
764 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
765 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | |
766 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
767 } | |
768 | |
769 | |
2657
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
770 TEST(JobsSerialization, JobOperationValues) |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
771 { |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
772 Json::Value s; |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
773 |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
774 { |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
775 JobOperationValues values; |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
776 values.Append(new NullOperationValue); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
777 values.Append(new StringOperationValue("hello")); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
778 values.Append(new StringOperationValue("world")); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
779 values.Serialize(s); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
780 } |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
781 |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
782 { |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
783 GenericJobUnserializer unserializer; |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
784 std::auto_ptr<JobOperationValues> values(JobOperationValues::Unserialize(unserializer, s)); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
785 ASSERT_EQ(3u, values->GetSize()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
786 ASSERT_EQ(JobOperationValue::Type_Null, values->GetValue(0).GetType()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
787 ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(1).GetType()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
788 ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(2).GetType()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
789 |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
790 ASSERT_EQ("hello", dynamic_cast<const StringOperationValue&>(values->GetValue(1)).GetContent()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
791 ASSERT_EQ("world", dynamic_cast<const StringOperationValue&>(values->GetValue(2)).GetContent()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
792 } |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
793 } |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
794 |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
795 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
796 TEST(JobsSerialization, GenericValues) |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
797 { |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
798 Json::Value s; |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
799 |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
800 { |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
801 NullOperationValue null; |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
802 null.Serialize(s); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
803 } |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
804 |
2655 | 805 GenericJobUnserializer unserializer; |
2652 | 806 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
807 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
2655 | 808 |
809 std::auto_ptr<JobOperationValue> value; | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
810 value.reset(unserializer.UnserializeValue(s)); |
2652 | 811 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
812 ASSERT_EQ(JobOperationValue::Type_Null, value->GetType()); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
813 |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
814 { |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
815 StringOperationValue str("Hello"); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
816 str.Serialize(s); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
817 } |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
818 |
2652 | 819 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
820 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
821 value.reset(unserializer.UnserializeValue(s)); |
2652 | 822 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
823 ASSERT_EQ(JobOperationValue::Type_String, value->GetType()); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
824 ASSERT_EQ("Hello", dynamic_cast<StringOperationValue&>(*value).GetContent()); |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
825 } |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
826 |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
827 |
2655 | 828 TEST(JobsSerialization, GenericOperations) |
829 { | |
830 Json::Value s; | |
831 | |
832 { | |
833 LogJobOperation operation; | |
834 operation.Serialize(s); | |
835 } | |
836 | |
2652 | 837 DummyUnserializer unserializer; |
2655 | 838 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
839 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
840 | |
841 { | |
842 std::auto_ptr<IJobOperation> operation; | |
843 operation.reset(unserializer.UnserializeOperation(s)); | |
844 | |
2657
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
845 // Make sure that we have indeed unserialized a log operation |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
846 ASSERT_THROW(dynamic_cast<DeleteResourceOperation&>(*operation), std::bad_cast); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
847 dynamic_cast<LogJobOperation&>(*operation); |
2655 | 848 } |
849 } | |
850 | |
851 | |
852 TEST(JobsSerialization, GenericJobs) | |
853 { | |
2652 | 854 Json::Value s; |
855 | |
2658 | 856 // This tests SetOfInstancesJob |
857 | |
2652 | 858 { |
859 DummyInstancesJob job; | |
860 job.SetDescription("description"); | |
2657
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
861 job.AddInstance("hello"); |
2652 | 862 job.AddInstance("nope"); |
2657
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
863 job.AddInstance("world"); |
2652 | 864 job.SetPermissive(true); |
2657
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
865 ASSERT_THROW(job.ExecuteStep(), OrthancException); // Not started yet |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
866 job.Start(); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
867 job.ExecuteStep(); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
868 job.ExecuteStep(); |
2663
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
869 ASSERT_TRUE(job.Serialize(s)); |
2652 | 870 } |
871 | |
2655 | 872 { |
873 DummyUnserializer unserializer; | |
874 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
875 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
2652 | 876 |
2655 | 877 std::auto_ptr<IJob> job; |
878 job.reset(unserializer.UnserializeJob(s)); | |
2657
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
879 |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
880 const DummyInstancesJob& tmp = dynamic_cast<const DummyInstancesJob&>(*job); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
881 ASSERT_FALSE(tmp.IsStarted()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
882 ASSERT_TRUE(tmp.IsPermissive()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
883 ASSERT_EQ("description", tmp.GetDescription()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
884 ASSERT_EQ(3u, tmp.GetInstancesCount()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
885 ASSERT_EQ(2u, tmp.GetPosition()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
886 ASSERT_EQ(1u, tmp.GetFailedInstances().size()); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
887 ASSERT_EQ("hello", tmp.GetInstance(0)); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
888 ASSERT_EQ("nope", tmp.GetInstance(1)); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
889 ASSERT_EQ("world", tmp.GetInstance(2)); |
5eea2f11e8df
JobsSerialization.GenericJobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2656
diff
changeset
|
890 ASSERT_TRUE(tmp.IsFailedInstance("nope")); |
2655 | 891 } |
2658 | 892 |
893 // TODO : Test SequenceOfOperationsJob.h | |
894 } | |
895 | |
896 | |
2662
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
897 static bool IsSameTagValue(ParsedDicomFile& dicom1, |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
898 ParsedDicomFile& dicom2, |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
899 DicomTag tag) |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
900 { |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
901 std::string a, b; |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
902 return (dicom1.GetTagValue(a, tag) && |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
903 dicom2.GetTagValue(b, tag) && |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
904 (a == b)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
905 } |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
906 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
907 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
908 |
2660 | 909 TEST(JobsSerialization, DicomModification) |
910 { | |
2662
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
911 Json::Value s; |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
912 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
913 ParsedDicomFile source(true); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
914 source.Insert(DICOM_TAG_STUDY_DESCRIPTION, "Test 1", false); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
915 source.Insert(DICOM_TAG_SERIES_DESCRIPTION, "Test 2", false); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
916 source.Insert(DICOM_TAG_PATIENT_NAME, "Test 3", false); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
917 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
918 std::auto_ptr<ParsedDicomFile> modified(source.Clone(true)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
919 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
920 { |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
921 DicomModification modification; |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
922 modification.SetLevel(ResourceType_Series); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
923 modification.Clear(DICOM_TAG_STUDY_DESCRIPTION); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
924 modification.Remove(DICOM_TAG_SERIES_DESCRIPTION); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
925 modification.Replace(DICOM_TAG_PATIENT_NAME, "Test 4", true); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
926 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
927 modification.Apply(*modified); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
928 modification.Serialize(s); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
929 } |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
930 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
931 { |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
932 DicomModification modification(s); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
933 ASSERT_EQ(ResourceType_Series, modification.GetLevel()); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
934 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
935 std::auto_ptr<ParsedDicomFile> second(source.Clone(true)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
936 modification.Apply(*second); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
937 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
938 std::string s; |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
939 ASSERT_TRUE(second->GetTagValue(s, DICOM_TAG_STUDY_DESCRIPTION)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
940 ASSERT_TRUE(s.empty()); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
941 ASSERT_FALSE(second->GetTagValue(s, DICOM_TAG_SERIES_DESCRIPTION)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
942 ASSERT_TRUE(second->GetTagValue(s, DICOM_TAG_PATIENT_NAME)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
943 ASSERT_EQ("Test 4", s); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
944 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
945 ASSERT_TRUE(IsSameTagValue(source, *modified, DICOM_TAG_STUDY_INSTANCE_UID)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
946 ASSERT_TRUE(IsSameTagValue(source, *second, DICOM_TAG_STUDY_INSTANCE_UID)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
947 |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
948 ASSERT_FALSE(IsSameTagValue(source, *second, DICOM_TAG_SERIES_INSTANCE_UID)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
949 ASSERT_TRUE(IsSameTagValue(*modified, *second, DICOM_TAG_SERIES_INSTANCE_UID)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
950 } |
2660 | 951 } |
952 | |
953 | |
2658 | 954 TEST(JobsSerialization, Registry) |
955 { | |
956 // TODO : Test serialization of JobsRegistry | |
2652 | 957 } |
958 | |
959 | |
2655 | 960 namespace |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
961 { |
2655 | 962 class OrthancJobsSerialization : public testing::Test |
963 { | |
964 private: | |
965 MemoryStorageArea storage_; | |
966 DatabaseWrapper db_; // The SQLite DB is in memory | |
967 std::auto_ptr<ServerContext> context_; | |
968 TimeoutDicomConnectionManager manager_; | |
969 | |
970 public: | |
971 OrthancJobsSerialization() | |
972 { | |
973 db_.Open(); | |
974 context_.reset(new ServerContext(db_, storage_)); | |
975 } | |
976 | |
977 virtual ~OrthancJobsSerialization() | |
978 { | |
979 context_->Stop(); | |
980 context_.reset(NULL); | |
981 db_.Close(); | |
982 } | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
983 |
2655 | 984 ServerContext& GetContext() |
985 { | |
986 return *context_; | |
987 } | |
988 | |
989 bool CreateInstance(std::string& id) | |
990 { | |
991 // Create a sample DICOM file | |
992 ParsedDicomFile dicom(true); | |
993 dicom.Replace(DICOM_TAG_PATIENT_NAME, std::string("JODOGNE"), | |
994 false, DicomReplaceMode_InsertIfAbsent); | |
995 | |
996 DicomInstanceToStore toStore; | |
997 toStore.SetParsedDicomFile(dicom); | |
998 | |
999 return (context_->Store(id, toStore) == StoreStatus_Success); | |
1000 } | |
1001 }; | |
1002 } | |
1003 | |
1004 | |
1005 TEST_F(OrthancJobsSerialization, Values) | |
1006 { | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
1007 std::string id; |
2655 | 1008 ASSERT_TRUE(CreateInstance(id)); |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
1009 |
2655 | 1010 Json::Value s; |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
1011 |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
1012 { |
2655 | 1013 DicomInstanceOperationValue instance(GetContext(), id); |
1014 instance.Serialize(s); | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
1015 } |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
1016 |
2655 | 1017 OrthancJobUnserializer unserializer(GetContext()); |
1018 | |
1019 std::auto_ptr<JobOperationValue> value; | |
1020 value.reset(unserializer.UnserializeValue(s)); | |
1021 ASSERT_EQ(JobOperationValue::Type_DicomInstance, value->GetType()); | |
1022 ASSERT_EQ(id, dynamic_cast<DicomInstanceOperationValue&>(*value).GetId()); | |
1023 | |
1024 { | |
1025 std::string content; | |
1026 dynamic_cast<DicomInstanceOperationValue&>(*value).ReadDicom(content); | |
1027 | |
1028 ParsedDicomFile dicom(content); | |
1029 ASSERT_TRUE(dicom.GetTagValue(content, DICOM_TAG_PATIENT_NAME)); | |
1030 ASSERT_EQ("JODOGNE", content); | |
1031 } | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
1032 } |
2655 | 1033 |
1034 | |
1035 TEST_F(OrthancJobsSerialization, Operations) | |
1036 { | |
1037 std::string id; | |
1038 ASSERT_TRUE(CreateInstance(id)); | |
1039 | |
1040 Json::Value s; | |
1041 | |
2659 | 1042 // DeleteResourceOperation |
1043 | |
2655 | 1044 { |
1045 DeleteResourceOperation operation(GetContext()); | |
1046 operation.Serialize(s); | |
1047 } | |
1048 | |
2659 | 1049 OrthancJobUnserializer unserializer(GetContext()); |
2655 | 1050 std::auto_ptr<IJobOperation> operation; |
2659 | 1051 |
1052 { | |
1053 operation.reset(unserializer.UnserializeOperation(s)); | |
1054 | |
1055 ASSERT_THROW(dynamic_cast<LogJobOperation&>(*operation), std::bad_cast); | |
1056 dynamic_cast<DeleteResourceOperation&>(*operation); | |
1057 } | |
1058 | |
1059 // StorePeerOperation | |
1060 | |
1061 { | |
1062 WebServiceParameters peer; | |
1063 peer.SetUrl("http://localhost/"); | |
1064 peer.SetUsername("username"); | |
1065 peer.SetPassword("password"); | |
1066 peer.SetPkcs11Enabled(true); | |
1067 | |
1068 StorePeerOperation operation(peer); | |
1069 operation.Serialize(s); | |
1070 } | |
1071 | |
1072 { | |
1073 operation.reset(unserializer.UnserializeOperation(s)); | |
1074 | |
1075 const StorePeerOperation& tmp = dynamic_cast<StorePeerOperation&>(*operation); | |
1076 ASSERT_EQ("http://localhost/", tmp.GetPeer().GetUrl()); | |
1077 ASSERT_EQ("username", tmp.GetPeer().GetUsername()); | |
1078 ASSERT_EQ("password", tmp.GetPeer().GetPassword()); | |
1079 ASSERT_TRUE(tmp.GetPeer().IsPkcs11Enabled()); | |
1080 } | |
1081 | |
1082 // StoreScuOperation | |
2658 | 1083 |
2659 | 1084 { |
1085 RemoteModalityParameters modality; | |
1086 modality.SetApplicationEntityTitle("REMOTE"); | |
1087 modality.SetHost("192.168.1.1"); | |
1088 modality.SetPort(1000); | |
1089 modality.SetManufacturer(ModalityManufacturer_StoreScp); | |
1090 | |
1091 StoreScuOperation operation("TEST", modality); | |
1092 operation.Serialize(s); | |
1093 } | |
1094 | |
1095 { | |
1096 operation.reset(unserializer.UnserializeOperation(s)); | |
1097 | |
1098 const StoreScuOperation& tmp = dynamic_cast<StoreScuOperation&>(*operation); | |
1099 ASSERT_EQ("REMOTE", tmp.GetRemoteModality().GetApplicationEntityTitle()); | |
1100 ASSERT_EQ("192.168.1.1", tmp.GetRemoteModality().GetHost()); | |
1101 ASSERT_EQ(1000, tmp.GetRemoteModality().GetPort()); | |
1102 ASSERT_EQ(ModalityManufacturer_StoreScp, tmp.GetRemoteModality().GetManufacturer()); | |
1103 ASSERT_EQ("TEST", tmp.GetLocalAet()); | |
1104 } | |
2658 | 1105 |
2659 | 1106 // SystemCallOperation |
1107 | |
1108 { | |
1109 SystemCallOperation operation(std::string("echo")); | |
1110 operation.AddPreArgument("a"); | |
1111 operation.AddPreArgument("b"); | |
1112 operation.AddPostArgument("c"); | |
1113 operation.Serialize(s); | |
1114 } | |
2658 | 1115 |
2659 | 1116 { |
1117 operation.reset(unserializer.UnserializeOperation(s)); | |
1118 | |
1119 const SystemCallOperation& tmp = dynamic_cast<SystemCallOperation&>(*operation); | |
1120 ASSERT_EQ("echo", tmp.GetCommand()); | |
1121 ASSERT_EQ(2u, tmp.GetPreArgumentsCount()); | |
1122 ASSERT_EQ(1u, tmp.GetPostArgumentsCount()); | |
1123 ASSERT_EQ("a", tmp.GetPreArgument(0)); | |
1124 ASSERT_EQ("b", tmp.GetPreArgument(1)); | |
1125 ASSERT_EQ("c", tmp.GetPostArgument(0)); | |
1126 } | |
2658 | 1127 |
2662
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
1128 // ModifyInstanceOperation |
2659 | 1129 |
1130 { | |
1131 std::auto_ptr<DicomModification> modification(new DicomModification); | |
2662
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
1132 modification->SetupAnonymization(DicomVersion_2008); |
2659 | 1133 |
1134 ModifyInstanceOperation operation(GetContext(), RequestOrigin_Lua, modification.release()); | |
1135 operation.Serialize(s); | |
1136 } | |
1137 | |
1138 { | |
1139 operation.reset(unserializer.UnserializeOperation(s)); | |
1140 | |
1141 const ModifyInstanceOperation& tmp = dynamic_cast<ModifyInstanceOperation&>(*operation); | |
1142 ASSERT_EQ(RequestOrigin_Lua, tmp.GetRequestOrigin()); | |
2662
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
1143 ASSERT_TRUE(tmp.GetModification().IsRemoved(DICOM_TAG_STUDY_DESCRIPTION)); |
47d812308d63
serialization of DicomModification
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2660
diff
changeset
|
1144 } |
2655 | 1145 } |
2658 | 1146 |
1147 | |
1148 TEST_F(OrthancJobsSerialization, Jobs) | |
1149 { | |
2663
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1150 // ArchiveJob |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1151 |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1152 Json::Value s; |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1153 |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1154 { |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1155 boost::shared_ptr<TemporaryFile> tmp(new TemporaryFile); |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1156 ArchiveJob job(tmp, GetContext(), false, false); |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1157 ASSERT_FALSE(job.Serialize(s)); |
228e2783ce83
some jobs might not be serializable
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2662
diff
changeset
|
1158 } |
2658 | 1159 |
1160 // TODO : DicomModalityStoreJob | |
1161 | |
1162 // TODO : OrthancPeerStoreJob | |
1163 | |
1164 // TODO : ResourceModificationJob | |
1165 } |