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