Mercurial > hg > orthanc
annotate UnitTestsSources/MultiThreadingTests.cpp @ 2655:c196d76cb8fa jobs
serialization
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 05 Jun 2018 17:57:49 +0200 |
parents | d7815540bd81 |
children | a6d3e45eeff5 |
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" |
2143
fd5875662670
creation of namespace SystemToolbox
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2140
diff
changeset
|
41 #include "../Core/SystemToolbox.h" |
723 | 42 #include "../Core/Toolbox.h" |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
43 #include "../OrthancServer/DatabaseWrapper.h" |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
44 #include "../OrthancServer/ServerContext.h" |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
45 #include "../OrthancServer/ServerJobs/LuaJobManager.h" |
2655 | 46 #include "../OrthancServer/ServerJobs/OrthancJobUnserializer.h" |
47 | |
48 #include "../Core/JobsEngine/Operations/JobOperationValues.h" | |
49 #include "../Core/JobsEngine/Operations/NullOperationValue.h" | |
50 #include "../Core/JobsEngine/Operations/StringOperationValue.h" | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
51 #include "../OrthancServer/ServerJobs/Operations/DicomInstanceOperationValue.h" |
2655 | 52 |
53 #include "../Core/JobsEngine/Operations/LogJobOperation.h" | |
54 #include "../OrthancServer/ServerJobs/Operations/DeleteResourceOperation.h" | |
55 #include "../OrthancServer/ServerJobs/Operations/ModifyInstanceOperation.h" | |
56 #include "../OrthancServer/ServerJobs/Operations/StorePeerOperation.h" | |
57 #include "../OrthancServer/ServerJobs/Operations/StoreScuOperation.h" | |
58 #include "../OrthancServer/ServerJobs/Operations/SystemCallOperation.h" | |
59 | |
60 | |
723 | 61 |
62 using namespace Orthanc; | |
63 | |
64 namespace | |
65 { | |
2652 | 66 class DummyJob : public IJob |
67 { | |
68 private: | |
69 bool fails_; | |
70 unsigned int count_; | |
71 unsigned int steps_; | |
72 | |
73 public: | |
74 DummyJob() : | |
75 fails_(false), | |
76 count_(0), | |
77 steps_(4) | |
78 { | |
79 } | |
80 | |
81 explicit DummyJob(bool fails) : | |
82 fails_(fails), | |
83 count_(0), | |
84 steps_(4) | |
85 { | |
86 } | |
87 | |
88 virtual void Start() | |
89 { | |
90 } | |
91 | |
92 virtual void SignalResubmit() | |
93 { | |
94 } | |
95 | |
96 virtual JobStepResult ExecuteStep() | |
97 { | |
98 if (fails_) | |
99 { | |
100 return JobStepResult::Failure(ErrorCode_ParameterOutOfRange); | |
101 } | |
102 else if (count_ == steps_ - 1) | |
103 { | |
104 return JobStepResult::Success(); | |
105 } | |
106 else | |
107 { | |
108 count_++; | |
109 return JobStepResult::Continue(); | |
110 } | |
111 } | |
112 | |
113 virtual void ReleaseResources() | |
114 { | |
115 } | |
116 | |
117 virtual float GetProgress() | |
118 { | |
119 return static_cast<float>(count_) / static_cast<float>(steps_ - 1); | |
120 } | |
121 | |
122 virtual void GetJobType(std::string& type) | |
123 { | |
124 type = "DummyJob"; | |
125 } | |
126 | |
127 virtual void Serialize(Json::Value& value) | |
128 { | |
129 } | |
130 | |
131 virtual void GetPublicContent(Json::Value& value) | |
132 { | |
133 value["hello"] = "world"; | |
134 } | |
135 }; | |
136 | |
137 | |
138 class DummyInstancesJob : public SetOfInstancesJob | |
139 { | |
140 protected: | |
141 virtual bool HandleInstance(const std::string& instance) | |
142 { | |
2653 | 143 return true; |
2652 | 144 } |
145 | |
146 public: | |
147 DummyInstancesJob() | |
148 { | |
149 } | |
150 | |
151 DummyInstancesJob(const Json::Value& value) : | |
152 SetOfInstancesJob(value) | |
153 { | |
154 } | |
155 | |
156 virtual void ReleaseResources() | |
157 { | |
158 } | |
159 | |
160 virtual void GetJobType(std::string& s) | |
161 { | |
162 s = "DummyInstancesJob"; | |
163 } | |
164 }; | |
165 | |
166 | |
167 class DummyUnserializer : public GenericJobUnserializer | |
168 { | |
169 public: | |
170 virtual IJob* UnserializeJob(const Json::Value& value) | |
171 { | |
2655 | 172 if (ReadString(value, "Type") == "DummyInstancesJob") |
2652 | 173 { |
174 return new DummyInstancesJob(value); | |
175 } | |
176 else | |
177 { | |
178 return GenericJobUnserializer::UnserializeJob(value); | |
179 } | |
180 } | |
181 }; | |
182 | |
183 | |
1396
ac4efabeb80c
Migration of the orthanc-client as a separate project
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1304
diff
changeset
|
184 class DynamicInteger : public IDynamicObject |
723 | 185 { |
186 private: | |
187 int value_; | |
188 std::set<int>& target_; | |
189 | |
190 public: | |
191 DynamicInteger(int value, std::set<int>& target) : | |
192 value_(value), target_(target) | |
193 { | |
194 } | |
195 | |
196 int GetValue() const | |
197 { | |
198 return value_; | |
199 } | |
200 }; | |
201 } | |
202 | |
203 | |
204 TEST(MultiThreading, SharedMessageQueueBasic) | |
205 { | |
206 std::set<int> s; | |
207 | |
208 SharedMessageQueue q; | |
209 ASSERT_TRUE(q.WaitEmpty(0)); | |
210 q.Enqueue(new DynamicInteger(10, s)); | |
211 ASSERT_FALSE(q.WaitEmpty(1)); | |
212 q.Enqueue(new DynamicInteger(20, s)); | |
213 q.Enqueue(new DynamicInteger(30, s)); | |
214 q.Enqueue(new DynamicInteger(40, s)); | |
215 | |
216 std::auto_ptr<DynamicInteger> i; | |
217 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(10, i->GetValue()); | |
218 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(20, i->GetValue()); | |
219 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(30, i->GetValue()); | |
220 ASSERT_FALSE(q.WaitEmpty(1)); | |
221 i.reset(dynamic_cast<DynamicInteger*>(q.Dequeue(1))); ASSERT_EQ(40, i->GetValue()); | |
222 ASSERT_TRUE(q.WaitEmpty(0)); | |
223 ASSERT_EQ(NULL, q.Dequeue(1)); | |
224 } | |
225 | |
226 | |
227 TEST(MultiThreading, SharedMessageQueueClean) | |
228 { | |
229 std::set<int> s; | |
230 | |
231 try | |
232 { | |
233 SharedMessageQueue q; | |
234 q.Enqueue(new DynamicInteger(10, s)); | |
235 q.Enqueue(new DynamicInteger(20, s)); | |
1583
9ea3d082b064
got rid of custom exceptions
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1582
diff
changeset
|
236 throw OrthancException(ErrorCode_InternalError); |
723 | 237 } |
238 catch (OrthancException&) | |
239 { | |
240 } | |
241 } | |
242 | |
243 | |
769
3f946e5c3802
ReusableDicomUserConnection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
760
diff
changeset
|
244 |
3f946e5c3802
ReusableDicomUserConnection
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
760
diff
changeset
|
245 |
2652 | 246 static bool CheckState(JobsRegistry& registry, |
247 const std::string& id, | |
248 JobState state) | |
2557 | 249 { |
2652 | 250 JobState s; |
2558 | 251 if (registry.GetState(s, id)) |
2557 | 252 { |
253 return state == s; | |
254 } | |
255 else | |
256 { | |
257 return false; | |
258 } | |
259 } | |
260 | |
261 | |
2652 | 262 static bool CheckErrorCode(JobsRegistry& registry, |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
263 const std::string& id, |
2652 | 264 ErrorCode code) |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
265 { |
2652 | 266 JobInfo s; |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
267 if (registry.GetJobInfo(s, id)) |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
268 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
269 return code == s.GetStatus().GetErrorCode(); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
270 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
271 else |
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 false; |
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 } |
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 |
2558 | 278 TEST(JobsRegistry, Priority) |
2557 | 279 { |
2558 | 280 JobsRegistry registry; |
2557 | 281 |
282 std::string i1, i2, i3, i4; | |
2558 | 283 registry.Submit(i1, new DummyJob(), 10); |
284 registry.Submit(i2, new DummyJob(), 30); | |
285 registry.Submit(i3, new DummyJob(), 20); | |
286 registry.Submit(i4, new DummyJob(), 5); | |
2557 | 287 |
2558 | 288 registry.SetMaxCompletedJobs(2); |
2557 | 289 |
290 std::set<std::string> id; | |
2558 | 291 registry.ListJobs(id); |
2557 | 292 |
293 ASSERT_EQ(4u, id.size()); | |
294 ASSERT_TRUE(id.find(i1) != id.end()); | |
295 ASSERT_TRUE(id.find(i2) != id.end()); | |
296 ASSERT_TRUE(id.find(i3) != id.end()); | |
297 ASSERT_TRUE(id.find(i4) != id.end()); | |
298 | |
2652 | 299 ASSERT_TRUE(CheckState(registry, i2, JobState_Pending)); |
2557 | 300 |
301 { | |
2558 | 302 JobsRegistry::RunningJob job(registry, 0); |
2557 | 303 ASSERT_TRUE(job.IsValid()); |
304 ASSERT_EQ(30, job.GetPriority()); | |
305 ASSERT_EQ(i2, job.GetId()); | |
306 | |
2652 | 307 ASSERT_TRUE(CheckState(registry, i2, JobState_Running)); |
2557 | 308 } |
309 | |
2652 | 310 ASSERT_TRUE(CheckState(registry, i2, JobState_Failure)); |
311 ASSERT_TRUE(CheckState(registry, i3, JobState_Pending)); | |
2557 | 312 |
313 { | |
2558 | 314 JobsRegistry::RunningJob job(registry, 0); |
2557 | 315 ASSERT_TRUE(job.IsValid()); |
316 ASSERT_EQ(20, job.GetPriority()); | |
317 ASSERT_EQ(i3, job.GetId()); | |
318 | |
319 job.MarkSuccess(); | |
320 | |
2652 | 321 ASSERT_TRUE(CheckState(registry, i3, JobState_Running)); |
2557 | 322 } |
323 | |
2652 | 324 ASSERT_TRUE(CheckState(registry, i3, JobState_Success)); |
2557 | 325 |
326 { | |
2558 | 327 JobsRegistry::RunningJob job(registry, 0); |
2557 | 328 ASSERT_TRUE(job.IsValid()); |
329 ASSERT_EQ(10, job.GetPriority()); | |
330 ASSERT_EQ(i1, job.GetId()); | |
331 } | |
332 | |
333 { | |
2558 | 334 JobsRegistry::RunningJob job(registry, 0); |
2557 | 335 ASSERT_TRUE(job.IsValid()); |
336 ASSERT_EQ(5, job.GetPriority()); | |
337 ASSERT_EQ(i4, job.GetId()); | |
338 } | |
339 | |
340 { | |
2558 | 341 JobsRegistry::RunningJob job(registry, 1); |
2557 | 342 ASSERT_FALSE(job.IsValid()); |
343 } | |
344 | |
2652 | 345 JobState s; |
2558 | 346 ASSERT_TRUE(registry.GetState(s, i1)); |
347 ASSERT_FALSE(registry.GetState(s, i2)); // Removed because oldest | |
348 ASSERT_FALSE(registry.GetState(s, i3)); // Removed because second oldest | |
349 ASSERT_TRUE(registry.GetState(s, i4)); | |
2557 | 350 |
2558 | 351 registry.SetMaxCompletedJobs(1); // (*) |
352 ASSERT_FALSE(registry.GetState(s, i1)); // Just discarded by (*) | |
353 ASSERT_TRUE(registry.GetState(s, i4)); | |
2557 | 354 } |
355 | |
356 | |
2558 | 357 TEST(JobsRegistry, Simultaneous) |
2557 | 358 { |
2558 | 359 JobsRegistry registry; |
360 | |
361 std::string i1, i2; | |
362 registry.Submit(i1, new DummyJob(), 20); | |
363 registry.Submit(i2, new DummyJob(), 10); | |
364 | |
2652 | 365 ASSERT_TRUE(CheckState(registry, i1, JobState_Pending)); |
366 ASSERT_TRUE(CheckState(registry, i2, JobState_Pending)); | |
2558 | 367 |
368 { | |
369 JobsRegistry::RunningJob job1(registry, 0); | |
370 JobsRegistry::RunningJob job2(registry, 0); | |
371 | |
372 ASSERT_TRUE(job1.IsValid()); | |
373 ASSERT_TRUE(job2.IsValid()); | |
374 | |
375 job1.MarkFailure(); | |
376 job2.MarkSuccess(); | |
377 | |
2652 | 378 ASSERT_TRUE(CheckState(registry, i1, JobState_Running)); |
379 ASSERT_TRUE(CheckState(registry, i2, JobState_Running)); | |
2558 | 380 } |
381 | |
2652 | 382 ASSERT_TRUE(CheckState(registry, i1, JobState_Failure)); |
383 ASSERT_TRUE(CheckState(registry, i2, JobState_Success)); | |
2558 | 384 } |
385 | |
386 | |
387 TEST(JobsRegistry, Resubmit) | |
388 { | |
389 JobsRegistry registry; | |
2557 | 390 |
391 std::string id; | |
2558 | 392 registry.Submit(id, new DummyJob(), 10); |
2557 | 393 |
2652 | 394 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2557 | 395 |
2558 | 396 registry.Resubmit(id); |
2652 | 397 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2557 | 398 |
399 { | |
2558 | 400 JobsRegistry::RunningJob job(registry, 0); |
2557 | 401 ASSERT_TRUE(job.IsValid()); |
402 job.MarkFailure(); | |
403 | |
2652 | 404 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2557 | 405 |
2558 | 406 registry.Resubmit(id); |
2652 | 407 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2557 | 408 } |
409 | |
2652 | 410 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2557 | 411 |
2558 | 412 registry.Resubmit(id); |
2652 | 413 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2557 | 414 |
415 { | |
2558 | 416 JobsRegistry::RunningJob job(registry, 0); |
2557 | 417 ASSERT_TRUE(job.IsValid()); |
418 ASSERT_EQ(id, job.GetId()); | |
419 | |
420 job.MarkSuccess(); | |
2652 | 421 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 422 } |
423 | |
2652 | 424 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 425 |
426 registry.Resubmit(id); | |
2652 | 427 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 428 } |
429 | |
430 | |
431 TEST(JobsRegistry, Retry) | |
432 { | |
433 JobsRegistry registry; | |
434 | |
435 std::string id; | |
436 registry.Submit(id, new DummyJob(), 10); | |
437 | |
2652 | 438 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 439 |
440 { | |
441 JobsRegistry::RunningJob job(registry, 0); | |
442 ASSERT_TRUE(job.IsValid()); | |
443 job.MarkRetry(0); | |
444 | |
2652 | 445 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 446 } |
447 | |
2652 | 448 ASSERT_TRUE(CheckState(registry, id, JobState_Retry)); |
2558 | 449 |
450 registry.Resubmit(id); | |
2652 | 451 ASSERT_TRUE(CheckState(registry, id, JobState_Retry)); |
2558 | 452 |
453 registry.ScheduleRetries(); | |
2652 | 454 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 455 |
456 { | |
457 JobsRegistry::RunningJob job(registry, 0); | |
458 ASSERT_TRUE(job.IsValid()); | |
459 job.MarkSuccess(); | |
460 | |
2652 | 461 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2557 | 462 } |
463 | |
2652 | 464 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 465 } |
466 | |
467 | |
468 TEST(JobsRegistry, PausePending) | |
469 { | |
470 JobsRegistry registry; | |
471 | |
472 std::string id; | |
473 registry.Submit(id, new DummyJob(), 10); | |
474 | |
2652 | 475 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 476 |
477 registry.Pause(id); | |
2652 | 478 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 479 |
480 registry.Pause(id); | |
2652 | 481 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 482 |
483 registry.Resubmit(id); | |
2652 | 484 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 485 |
486 registry.Resume(id); | |
2652 | 487 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2557 | 488 } |
2558 | 489 |
490 | |
491 TEST(JobsRegistry, PauseRunning) | |
492 { | |
493 JobsRegistry registry; | |
494 | |
495 std::string id; | |
496 registry.Submit(id, new DummyJob(), 10); | |
497 | |
2652 | 498 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 499 |
500 { | |
501 JobsRegistry::RunningJob job(registry, 0); | |
502 ASSERT_TRUE(job.IsValid()); | |
503 | |
504 registry.Resubmit(id); | |
2562 | 505 job.MarkPause(); |
2652 | 506 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 507 } |
508 | |
2652 | 509 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 510 |
511 registry.Resubmit(id); | |
2652 | 512 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 513 |
514 registry.Resume(id); | |
2652 | 515 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 516 |
517 { | |
518 JobsRegistry::RunningJob job(registry, 0); | |
519 ASSERT_TRUE(job.IsValid()); | |
520 | |
521 job.MarkSuccess(); | |
2652 | 522 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 523 } |
524 | |
2652 | 525 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 526 } |
527 | |
528 | |
529 TEST(JobsRegistry, PauseRetry) | |
530 { | |
531 JobsRegistry registry; | |
532 | |
533 std::string id; | |
534 registry.Submit(id, new DummyJob(), 10); | |
535 | |
2652 | 536 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 537 |
538 { | |
539 JobsRegistry::RunningJob job(registry, 0); | |
540 ASSERT_TRUE(job.IsValid()); | |
541 | |
542 job.MarkRetry(0); | |
2652 | 543 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 544 } |
545 | |
2652 | 546 ASSERT_TRUE(CheckState(registry, id, JobState_Retry)); |
2558 | 547 |
548 registry.Pause(id); | |
2652 | 549 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
2558 | 550 |
551 registry.Resume(id); | |
2652 | 552 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2558 | 553 |
554 { | |
555 JobsRegistry::RunningJob job(registry, 0); | |
556 ASSERT_TRUE(job.IsValid()); | |
557 | |
558 job.MarkSuccess(); | |
2652 | 559 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2558 | 560 } |
561 | |
2652 | 562 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2558 | 563 } |
2565 | 564 |
565 | |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
566 TEST(JobsRegistry, Cancel) |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
567 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
568 JobsRegistry registry; |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
569 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
570 std::string id; |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
571 registry.Submit(id, new DummyJob(), 10); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
572 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
573 ASSERT_FALSE(registry.Cancel("nope")); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
574 |
2652 | 575 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
576 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
577 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
578 ASSERT_TRUE(registry.Cancel(id)); |
2652 | 579 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
580 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
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.Resubmit(id)); |
2652 | 587 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
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 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
591 JobsRegistry::RunningJob job(registry, 0); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
592 ASSERT_TRUE(job.IsValid()); |
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 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
595 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
596 job.MarkSuccess(); |
2652 | 597 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
598 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
599 |
2652 | 600 ASSERT_TRUE(CheckState(registry, id, JobState_Success)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
601 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
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 ASSERT_TRUE(registry.Cancel(id)); |
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 registry.Submit(id, new DummyJob(), 10); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
608 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
609 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
610 JobsRegistry::RunningJob job(registry, 0); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
611 ASSERT_TRUE(job.IsValid()); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
612 ASSERT_EQ(id, job.GetId()); |
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 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
2652 | 615 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
616 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
617 job.MarkCanceled(); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
618 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
619 |
2652 | 620 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
621 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
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 ASSERT_TRUE(registry.Resubmit(id)); |
2652 | 624 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
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.Pause(id)); |
2652 | 628 ASSERT_TRUE(CheckState(registry, id, JobState_Paused)); |
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.Cancel(id)); |
2652 | 632 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
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.Resubmit(id)); |
2652 | 636 ASSERT_TRUE(CheckState(registry, id, JobState_Pending)); |
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 { |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
640 JobsRegistry::RunningJob job(registry, 0); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
641 ASSERT_TRUE(job.IsValid()); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
642 ASSERT_EQ(id, job.GetId()); |
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 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
2652 | 645 ASSERT_TRUE(CheckState(registry, id, JobState_Running)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
646 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
647 job.MarkRetry(500); |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
648 } |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
649 |
2652 | 650 ASSERT_TRUE(CheckState(registry, id, JobState_Retry)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
651 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_Success)); |
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 ASSERT_TRUE(registry.Cancel(id)); |
2652 | 654 ASSERT_TRUE(CheckState(registry, id, JobState_Failure)); |
2581
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
655 ASSERT_TRUE(CheckErrorCode(registry, id, ErrorCode_CanceledJob)); |
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 |
8da2cffc2378
JobsRegistry::Cancel()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2580
diff
changeset
|
658 |
2570
2e879c796ec7
JobsRegistry::SubmitAndWait(), StoreScuJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2569
diff
changeset
|
659 |
2599 | 660 TEST(JobsEngine, SubmitAndWait) |
2565 | 661 { |
662 JobsEngine engine; | |
663 engine.SetWorkersCount(3); | |
664 engine.Start(); | |
665 | |
2599 | 666 ASSERT_TRUE(engine.GetRegistry().SubmitAndWait(new DummyJob(), rand() % 10)); |
667 ASSERT_FALSE(engine.GetRegistry().SubmitAndWait(new DummyJob(true), rand() % 10)); | |
668 | |
669 engine.Stop(); | |
670 } | |
671 | |
672 | |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
673 TEST(JobsEngine, DISABLED_SequenceOfOperationsJob) |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
674 { |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
675 JobsEngine engine; |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
676 engine.SetWorkersCount(3); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
677 engine.Start(); |
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 std::string id; |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
680 SequenceOfOperationsJob* job = NULL; |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
681 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
682 { |
2601 | 683 std::auto_ptr<SequenceOfOperationsJob> a(new SequenceOfOperationsJob); |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
684 job = a.get(); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
685 engine.GetRegistry().Submit(id, a.release(), 0); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
686 } |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
687 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
688 boost::this_thread::sleep(boost::posix_time::milliseconds(500)); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
689 |
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 SequenceOfOperationsJob::Lock lock(*job); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
692 size_t i = lock.AddOperation(new LogJobOperation); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
693 size_t j = lock.AddOperation(new LogJobOperation); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
694 size_t k = lock.AddOperation(new LogJobOperation); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
695 lock.AddInput(i, StringOperationValue("Hello")); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
696 lock.AddInput(i, StringOperationValue("World")); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
697 lock.Connect(i, j); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
698 lock.Connect(j, k); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
699 } |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
700 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
701 boost::this_thread::sleep(boost::posix_time::milliseconds(2000)); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
702 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
703 engine.Stop(); |
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 } |
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 |
2621
83ac5a05ce84
primitives for unserializing jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2610
diff
changeset
|
708 TEST(JobsEngine, DISABLED_Lua) |
2600
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 JobsEngine engine; |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
711 engine.SetWorkersCount(2); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
712 engine.Start(); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
713 |
2604
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
714 LuaJobManager lua; |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
715 lua.SetMaxOperationsPerJob(5); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
716 lua.SetTrailingOperationTimeout(200); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
717 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
718 for (size_t i = 0; i < 30; i++) |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
719 { |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
720 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
|
721 |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
722 LuaJobManager::Lock lock(lua, engine); |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
723 size_t a = lock.AddLogOperation(); |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
724 size_t b = lock.AddLogOperation(); |
2606
f2b9d3256060
SystemCallOperation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2604
diff
changeset
|
725 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
|
726 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
|
727 lock.AddNullInput(a); |
76ef12fa136c
fix race conditions if creating Lua jobs
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2603
diff
changeset
|
728 lock.Connect(a, b); |
2606
f2b9d3256060
SystemCallOperation
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2604
diff
changeset
|
729 lock.Connect(a, c); |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
730 } |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
731 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
732 boost::this_thread::sleep(boost::posix_time::milliseconds(2000)); |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
733 |
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
734 engine.Stop(); |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
735 } |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
736 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
737 |
2655 | 738 TEST(JobsSerialization, BadFileFormat) |
739 { | |
740 GenericJobUnserializer unserializer; | |
741 | |
742 Json::Value s; | |
743 | |
744 s = Json::objectValue; | |
745 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
746 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | |
747 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
748 | |
749 s = Json::arrayValue; | |
750 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
751 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | |
752 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
753 | |
754 s = "hello"; | |
755 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
756 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | |
757 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
758 | |
759 s = 42; | |
760 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
761 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); | |
762 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
763 } | |
764 | |
765 | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
766 TEST(JobsSerialization, GenericValues) |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
767 { |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
768 Json::Value s; |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
769 |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
770 { |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
771 NullOperationValue null; |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
772 null.Serialize(s); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
773 } |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
774 |
2655 | 775 GenericJobUnserializer unserializer; |
2652 | 776 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
777 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
2655 | 778 |
779 std::auto_ptr<JobOperationValue> value; | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
780 value.reset(unserializer.UnserializeValue(s)); |
2652 | 781 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
782 ASSERT_EQ(JobOperationValue::Type_Null, value->GetType()); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
783 |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
784 { |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
785 StringOperationValue str("Hello"); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
786 str.Serialize(s); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
787 } |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
788 |
2652 | 789 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
790 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
791 value.reset(unserializer.UnserializeValue(s)); |
2652 | 792 |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
793 ASSERT_EQ(JobOperationValue::Type_String, value->GetType()); |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
794 ASSERT_EQ("Hello", dynamic_cast<StringOperationValue&>(*value).GetContent()); |
2600
140a539b4eba
SequenceOfOperationsJob
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2599
diff
changeset
|
795 } |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
796 |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
797 |
2655 | 798 TEST(JobsSerialization, JobOperationValues) |
2652 | 799 { |
2655 | 800 Json::Value s; |
801 | |
802 { | |
803 JobOperationValues values; | |
804 values.Append(new NullOperationValue); | |
805 values.Append(new StringOperationValue("hello")); | |
806 values.Append(new StringOperationValue("world")); | |
807 values.Serialize(s); | |
808 } | |
809 | |
810 { | |
811 GenericJobUnserializer unserializer; | |
812 std::auto_ptr<JobOperationValues> values(JobOperationValues::Unserialize(unserializer, s)); | |
813 ASSERT_EQ(3u, values->GetSize()); | |
814 ASSERT_EQ(JobOperationValue::Type_Null, values->GetValue(0).GetType()); | |
815 ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(1).GetType()); | |
816 ASSERT_EQ(JobOperationValue::Type_String, values->GetValue(2).GetType()); | |
817 | |
818 ASSERT_EQ("hello", dynamic_cast<const StringOperationValue&>(values->GetValue(1)).GetContent()); | |
819 ASSERT_EQ("world", dynamic_cast<const StringOperationValue&>(values->GetValue(2)).GetContent()); | |
820 } | |
821 } | |
822 | |
823 | |
824 TEST(JobsSerialization, GenericOperations) | |
825 { | |
826 Json::Value s; | |
827 | |
828 { | |
829 LogJobOperation operation; | |
830 operation.Serialize(s); | |
831 } | |
832 | |
2652 | 833 DummyUnserializer unserializer; |
2655 | 834 ASSERT_THROW(unserializer.UnserializeJob(s), OrthancException); |
835 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
836 | |
837 { | |
838 std::auto_ptr<IJobOperation> operation; | |
839 operation.reset(unserializer.UnserializeOperation(s)); | |
2652 | 840 |
2655 | 841 } |
842 | |
843 { | |
844 | |
845 } | |
846 } | |
847 | |
848 | |
849 | |
850 TEST(JobsSerialization, GenericJobs) | |
851 { | |
2652 | 852 Json::Value s; |
853 | |
854 { | |
855 DummyInstancesJob job; | |
856 job.SetDescription("description"); | |
857 job.AddInstance("nope"); | |
858 job.AddInstance("ok"); | |
859 job.SetPermissive(true); | |
860 job.Serialize(s); | |
861 } | |
862 | |
2655 | 863 { |
864 DummyUnserializer unserializer; | |
865 ASSERT_THROW(unserializer.UnserializeValue(s), OrthancException); | |
866 ASSERT_THROW(unserializer.UnserializeOperation(s), OrthancException); | |
2652 | 867 |
2655 | 868 std::auto_ptr<IJob> job; |
869 job.reset(unserializer.UnserializeJob(s)); | |
870 ASSERT_EQ("description", dynamic_cast<DummyInstancesJob&>(*job).GetDescription()); | |
871 //ASSERT_EQ("nope", dynamic_cast<DummyInstancesJob&>(*job).GetInstance(0)); | |
872 } | |
2652 | 873 } |
874 | |
875 | |
2655 | 876 namespace |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
877 { |
2655 | 878 class OrthancJobsSerialization : public testing::Test |
879 { | |
880 private: | |
881 MemoryStorageArea storage_; | |
882 DatabaseWrapper db_; // The SQLite DB is in memory | |
883 std::auto_ptr<ServerContext> context_; | |
884 TimeoutDicomConnectionManager manager_; | |
885 | |
886 public: | |
887 OrthancJobsSerialization() | |
888 { | |
889 db_.Open(); | |
890 context_.reset(new ServerContext(db_, storage_)); | |
891 } | |
892 | |
893 virtual ~OrthancJobsSerialization() | |
894 { | |
895 context_->Stop(); | |
896 context_.reset(NULL); | |
897 db_.Close(); | |
898 } | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
899 |
2655 | 900 ServerContext& GetContext() |
901 { | |
902 return *context_; | |
903 } | |
904 | |
905 bool CreateInstance(std::string& id) | |
906 { | |
907 // Create a sample DICOM file | |
908 ParsedDicomFile dicom(true); | |
909 dicom.Replace(DICOM_TAG_PATIENT_NAME, std::string("JODOGNE"), | |
910 false, DicomReplaceMode_InsertIfAbsent); | |
911 | |
912 DicomInstanceToStore toStore; | |
913 toStore.SetParsedDicomFile(dicom); | |
914 | |
915 return (context_->Store(id, toStore) == StoreStatus_Success); | |
916 } | |
917 }; | |
918 } | |
919 | |
920 | |
921 TEST_F(OrthancJobsSerialization, Values) | |
922 { | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
923 std::string id; |
2655 | 924 ASSERT_TRUE(CreateInstance(id)); |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
925 |
2655 | 926 Json::Value s; |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
927 |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
928 { |
2655 | 929 DicomInstanceOperationValue instance(GetContext(), id); |
930 instance.Serialize(s); | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
931 } |
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
932 |
2655 | 933 OrthancJobUnserializer unserializer(GetContext()); |
934 | |
935 std::auto_ptr<JobOperationValue> value; | |
936 value.reset(unserializer.UnserializeValue(s)); | |
937 ASSERT_EQ(JobOperationValue::Type_DicomInstance, value->GetType()); | |
938 ASSERT_EQ(id, dynamic_cast<DicomInstanceOperationValue&>(*value).GetId()); | |
939 | |
940 { | |
941 std::string content; | |
942 dynamic_cast<DicomInstanceOperationValue&>(*value).ReadDicom(content); | |
943 | |
944 ParsedDicomFile dicom(content); | |
945 ASSERT_TRUE(dicom.GetTagValue(content, DICOM_TAG_PATIENT_NAME)); | |
946 ASSERT_EQ("JODOGNE", content); | |
947 } | |
2651
1da5a052c777
testing value serialization
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
2648
diff
changeset
|
948 } |
2655 | 949 |
950 | |
951 TEST_F(OrthancJobsSerialization, Operations) | |
952 { | |
953 std::string id; | |
954 ASSERT_TRUE(CreateInstance(id)); | |
955 | |
956 Json::Value s; | |
957 | |
958 { | |
959 DeleteResourceOperation operation(GetContext()); | |
960 operation.Serialize(s); | |
961 } | |
962 | |
963 OrthancJobUnserializer unserializer(GetContext()); | |
964 | |
965 std::auto_ptr<IJobOperation> operation; | |
966 operation.reset(unserializer.UnserializeOperation(s)); | |
967 } |