7
#include <cppunit/extensions/HelperMacros.h>
9
#include <arc/DateTime.h>
10
#include <arc/FileLock.h>
12
#include <arc/XMLNode.h>
13
#include <arc/compute/Job.h>
14
#include <arc/compute/JobInformationStorage.h>
16
#define JISTEST_ASSERT(CONDITION, JISTYPE) \
17
CPPUNIT_ASSERT_MESSAGE("failed for JobInformationStorage" + JISTYPE, \
20
#define JISTEST_ASSERT_EQUAL(EXPECTED, ACTUAL, JISTYPE) \
21
CPPUNIT_ASSERT_EQUAL_MESSAGE("failed for JobInformationStorage" + JISTYPE, \
24
class JobInformationStorageTest
25
: public CppUnit::TestFixture {
27
CPPUNIT_TEST_SUITE(JobInformationStorageTest);
28
CPPUNIT_TEST(GeneralTest);
29
CPPUNIT_TEST(ReadJobsTest);
30
CPPUNIT_TEST_SUITE_END();
33
JobInformationStorageTest();
35
void tearDown() { remove("jobs.dat"); }
43
JobInformationStorageTest::JobInformationStorageTest() : xmlJob(Arc::XMLNode("<ComputingActivity>"
44
"<ServiceInformationURL>https://testbed-emi4.grid.upjs.sk:60000/arex</ServiceInformationURL>"
45
"<ServiceInformationInterfaceName>org.ogf.glue.emies.resourceinfo</ServiceInformationInterfaceName>"
46
"<JobStatusURL>https://testbed-emi4.grid.upjs.sk:60000/arex</JobStatusURL>"
47
"<JobStatusInterfaceName>org.ogf.glue.emies.activitymanagement</JobStatusInterfaceName>"
48
"<JobManagementURL>https://testbed-emi4.grid.upjs.sk:60000/arex</JobManagementURL>"
49
"<JobManagementInterfaceName>org.ogf.glue.emies.activitymanagement</JobManagementInterfaceName>"
50
"<JobID>https://testbed-emi4.grid.upjs.sk:60000/arex/HiqNDmAiivgnIfnhppWRvMapABFKDmABFKDmQhJKDmCBFKDmmdhHxm</JobID>"
51
"<IDFromEndpoint>HiqNDmAiivgnIfnhppWRvMapABFKDmABFKDmQhJKDmCBFKDmmdhHxm</IDFromEndpoint>"
52
"<StageInDir>https://testbed-emi4.grid.upjs.sk:60000/arex</StageInDir>"
53
"<StageOutDir>https://testbed-emi4.grid.upjs.sk:60000/arex</StageOutDir>"
54
"<SessionDir>https://testbed-emi4.grid.upjs.sk:60000/arex</SessionDir>"
55
"<Name>mc08.1050.J7</Name>"
57
"<LocalIDFromManager>345.ce01</LocalIDFromManager>"
58
"<JobDescription>nordugrid:xrsl</JobDescription>"
59
"<JobDescriptionDocument>&(executable=\"helloworld.sh\")(arguments=\"random.dat\")(inputfiles=(\"helloworld.sh\")(\"random.dat\"))(stdout=\"helloworld.out\")(join=\"yes\")</JobDescriptionDocument>"
60
"<State>bes:failed</State>"
61
"<State>nordugrid:FAILED</State>"
62
"<RestartState>bes:running</RestartState>"
63
"<RestartState>nordugrid:FINISHING</RestartState>"
64
"<ExitCode>0</ExitCode>"
65
"<ComputingManagerExitCode>0</ComputingManagerExitCode>"
66
"<Error>Uploading timed out</Error>"
67
"<Error>Failed stage-out</Error>"
68
"<WaitingPosition>0</WaitingPosition>"
69
"<UserDomain>vo:atlas</UserDomain>"
70
"<Owner>CONFIDENTIAL</Owner>"
71
"<LocalOwner>grid02</LocalOwner>"
72
"<RequestedTotalWallTime>5000</RequestedTotalWallTime>"
73
"<RequestedTotalCPUTime>20000</RequestedTotalCPUTime>"
74
"<RequestedSlots>4</RequestedSlots>"
75
"<RequestedApplicationEnvironment>ENV/JAVA/JRE-1.6.0</RequestedApplicationEnvironment>"
76
"<RequestedApplicationEnvironment>APPS/HEP/ATLAS-14.2.23.4</RequestedApplicationEnvironment>"
77
"<StdIn>input.dat</StdIn>"
78
"<StdOut>job.out</StdOut>"
79
"<StdErr>err.out</StdErr>"
80
"<LogDir>celog</LogDir>"
81
"<ExecutionNode>wn043</ExecutionNode>"
82
"<ExecutionNode>wn056</ExecutionNode>"
83
"<Queue>pbs-short</Queue>"
84
"<UsedTotalWallTime>2893</UsedTotalWallTime>"
85
"<UsedTotalCPUTime>12340</UsedTotalCPUTime>"
86
"<UsedMainMemory>4453</UsedMainMemory>"
87
"<LocalSubmissionTime>2008-04-21T10:04:36Z</LocalSubmissionTime>"
88
"<SubmissionTime>2008-04-21T10:05:12Z</SubmissionTime>"
89
"<ComputingManagerSubmissionTime>2008-04-20T06:05:12Z</ComputingManagerSubmissionTime>"
90
"<StartTime>2008-04-20T06:45:12Z</StartTime>"
91
"<ComputingManagerEndTime>2008-04-20T10:05:12Z</ComputingManagerEndTime>"
92
"<EndTime>2008-04-20T10:15:12Z</EndTime>"
93
"<WorkingAreaEraseTime>2008-04-24T10:05:12Z</WorkingAreaEraseTime>"
94
"<ProxyExpirationTime>2008-04-30T10:05:12Z</ProxyExpirationTime>"
95
"<SubmissionHost>pc4.niif.hu:3432</SubmissionHost>"
96
"<SubmissionClientName>nordugrid-arc-0.94</SubmissionClientName>"
97
"<OtherMessages>Cached input file is outdated; downloading again</OtherMessages>"
98
"<OtherMessages>User proxy has expired</OtherMessages>"
100
"<ActivityOldID>https://example-ce.com:443/arex/765234</ActivityOldID>"
101
"<ActivityOldID>https://helloworld-ce.com:12345/arex/543678</ActivityOldID>"
103
"<Source>helloworld.sh</Source>"
104
"<CheckSum>c0489bec6f7f4454d6cfe1b0a07ad5b8</CheckSum>"
107
"<Source>random.dat</Source>"
108
"<CheckSum>e52b14b10b967d9135c198fd11b9b8bc</CheckSum>"
111
"</ComputingActivity>")) {}
113
void JobInformationStorageTest::GeneralTest() {
114
Arc::JobInformationStorage* jis = NULL;
115
for (int i = 0; Arc::JobInformationStorage::AVAILABLE_TYPES[i].name != NULL; ++i) {
116
const std::string jisType = Arc::JobInformationStorage::AVAILABLE_TYPES[i].name;
117
jis = (Arc::JobInformationStorage::AVAILABLE_TYPES[i].instance)("jobs.dat");
118
JISTEST_ASSERT(jis != NULL, jisType);
119
JISTEST_ASSERT(jis->IsValid(), jisType);
121
std::list<Arc::Job> inJobs, outJobs;
123
inJobs.push_back(xmlJob);
124
inJobs.back().Name = "Job0";
125
inJobs.back().JobID = "https://ce00.niif.hu:60000/arex/job0";
126
inJobs.back().ServiceInformationURL = Arc::URL("https://info00.niif.hu:2135/aris");
127
inJobs.push_back(xmlJob);
128
inJobs.back().Name = "Job1";
129
inJobs.back().JobID = "https://ce01.niif.hu:60000/arex/job1";
130
inJobs.back().ServiceInformationURL = Arc::URL("https://info01.niif.hu:2135/aris");
131
inJobs.push_back(xmlJob);
132
inJobs.back().Name = "Job2";
133
inJobs.back().JobID = "https://ce01.niif.hu:60000/arex/job2";
134
inJobs.back().ServiceInformationURL = Arc::URL("https://info01.niif.hu:2135/aris");
135
inJobs.push_back(xmlJob);
136
inJobs.back().Name = "Job3";
137
inJobs.back().JobID = "https://ce01.niif.hu:60000/arex/job3";
138
inJobs.back().ServiceInformationURL = Arc::URL("https://info01.niif.hu:2135/aris");
139
inJobs.push_back(xmlJob);
140
inJobs.back().Name = "Other Job";
141
inJobs.back().JobID = "https://ce-other.niif.hu:60000/arex/other-job";
142
inJobs.back().ServiceInformationURL = Arc::URL("https://info-other.niif.hu:2135/aris");
144
// Write and read jobs.
145
JISTEST_ASSERT(jis->Clean(), jisType);
146
JISTEST_ASSERT(jis->Write(inJobs), jisType);
147
JISTEST_ASSERT(jis->ReadAll(outJobs), jisType);
148
JISTEST_ASSERT_EQUAL(5, (int)outJobs.size(), jisType);
150
std::set<std::string> jobNames;
151
jobNames.insert("Job0"); jobNames.insert("Job1"); jobNames.insert("Job2"); jobNames.insert("Job3"); jobNames.insert("Other Job");
152
for (std::list<Arc::Job>::const_iterator itJ = outJobs.begin();
153
itJ != outJobs.end(); ++itJ) {
154
CPPUNIT_ASSERT_EQUAL_MESSAGE("JobInformationStorage" + jisType + ": Job with name \"" + itJ->Name + "\" was unexpected" , 1, (int)jobNames.erase(itJ->Name));
159
std::set<std::string> prunedServices;
160
prunedServices.insert("info01.niif.hu");
161
prunedServices.insert("info02.niif.hu");
162
inJobs.push_back(xmlJob);
163
inJobs.back().Name = "Job4";
164
inJobs.back().JobID = "https://ce02.niif.hu:60000/arex/job4";
165
inJobs.back().ServiceInformationURL = Arc::URL("https://info02.niif.hu:2135/aris");
167
inJobs.push_back(xmlJob);
168
inJobs.back().Name = "Job2";
169
inJobs.back().JobID = "https://ce01.niif.hu:60000/arex/job2";
170
inJobs.back().ServiceInformationURL = Arc::URL("https://info01.niif.hu:2135/aris");
172
// Check that pointers to new jobs are added to the list, and that jobs on services specified to be pruned are removed.
173
std::list<const Arc::Job*> newJobs;
174
JISTEST_ASSERT(jis->Write(inJobs, prunedServices, newJobs), jisType);
175
JISTEST_ASSERT_EQUAL(1, (int)newJobs.size(), jisType);
176
JISTEST_ASSERT_EQUAL((std::string)"Job4", newJobs.front()->Name, jisType);
177
JISTEST_ASSERT_EQUAL((std::string)"https://ce02.niif.hu:60000/arex/job4", newJobs.front()->JobID, jisType);
178
JISTEST_ASSERT(jis->ReadAll(outJobs), jisType);
179
JISTEST_ASSERT_EQUAL(4, (int)outJobs.size(), jisType);
181
std::set<std::string> jobNames;
182
jobNames.insert("Job0"); jobNames.insert("Job2"); jobNames.insert("Job4"); jobNames.insert("Other Job");
183
for (std::list<Arc::Job>::const_iterator itJ = outJobs.begin();
184
itJ != outJobs.end(); ++itJ) {
185
CPPUNIT_ASSERT_EQUAL_MESSAGE("JobInformationStorage" + jisType + ": Job with name \"" + itJ->Name + "\" was unexpected" , 1, (int)jobNames.erase(itJ->Name));
189
// Check whether file is truncated.
190
JISTEST_ASSERT(jis->Clean(), jisType);
191
JISTEST_ASSERT(jis->Write(inJobs), jisType);
192
JISTEST_ASSERT(jis->ReadAll(outJobs), jisType);
193
JISTEST_ASSERT_EQUAL(2, (int)outJobs.size(), jisType);
194
if ("https://ce02.niif.hu:60000/arex/job4" == outJobs.front().JobID) {
195
JISTEST_ASSERT_EQUAL((std::string)"Job4", outJobs.front().Name, jisType);
197
JISTEST_ASSERT_EQUAL((std::string)"Job2", outJobs.back().Name, jisType);
198
JISTEST_ASSERT_EQUAL((std::string)"https://ce01.niif.hu:60000/arex/job2", outJobs.back().JobID, jisType);
200
else if ("https://ce01.niif.hu:60000/arex/job2" == outJobs.front().JobID) {
201
JISTEST_ASSERT_EQUAL((std::string)"Job2", outJobs.front().Name, jisType);
203
JISTEST_ASSERT_EQUAL((std::string)"Job4", outJobs.back().Name, jisType);
204
JISTEST_ASSERT_EQUAL((std::string)"https://ce02.niif.hu:60000/arex/job4", outJobs.back().JobID, jisType);
207
CPPUNIT_FAIL(( "JobInformationStorage" + jisType + "\n"
208
"- Expected: \"https://ce01.niif.hu:60000/arex/job2\" or \"https://ce02.niif.hu:60000/arex/job4\"\n"
209
"- Actual: \"" + outJobs.front().JobID + "\"").c_str());
212
inJobs.push_back(xmlJob);
213
inJobs.back().Name = "Job5";
214
inJobs.back().JobID = "https://ce01.niif.hu:60000/arex/job5";
216
inJobs.push_back(xmlJob);
217
inJobs.back().Name = "Job6";
218
inJobs.back().JobID = "https://ce01.niif.hu:60000/arex/job6";
220
inJobs.push_back(inJobs.back());
221
inJobs.back().Name = "Job6New";
223
// Duplicate jobs will be overwritten.
224
JISTEST_ASSERT(jis->Clean(), jisType);
225
JISTEST_ASSERT(jis->Write(inJobs), jisType);
226
JISTEST_ASSERT(jis->ReadAll(outJobs), jisType);
227
JISTEST_ASSERT_EQUAL(4, (int)outJobs.size(), jisType);
228
bool job6NewExists = false;
229
for (std::list<Arc::Job>::const_iterator itJob = outJobs.begin();
230
itJob != outJobs.end(); ++itJob) {
231
JISTEST_ASSERT(itJob->Name != "Job6", jisType);
232
if (itJob->Name == "Job6New") job6NewExists = true;
234
JISTEST_ASSERT(job6NewExists, jisType);
237
JISTEST_ASSERT(jis->Clean(), jisType);
239
JISTEST_ASSERT(jis->Write(inJobs, std::set<std::string>(), newJobs), jisType);
240
JISTEST_ASSERT_EQUAL(4, (int)newJobs.size(), jisType);
241
JISTEST_ASSERT(jis->ReadAll(outJobs), jisType);
242
JISTEST_ASSERT_EQUAL(4, (int)outJobs.size(), jisType);
243
job6NewExists = false;
244
for (std::list<Arc::Job>::const_iterator itJob = outJobs.begin();
245
itJob != outJobs.end(); ++itJob) {
246
JISTEST_ASSERT(itJob->Name != "Job6", jisType);
247
if (itJob->Name == "Job6New") job6NewExists = true;
249
JISTEST_ASSERT(job6NewExists, jisType);
253
// Adding more jobs to file.
254
JISTEST_ASSERT(jis->Clean(), jisType);
255
JISTEST_ASSERT(jis->Write(inJobs), jisType);
256
JISTEST_ASSERT(jis->ReadAll(outJobs), jisType);
257
JISTEST_ASSERT_EQUAL(4, (int)outJobs.size(), jisType);
259
std::list<std::string> toberemoved;
260
toberemoved.push_back("https://ce02.niif.hu:60000/arex/job4");
261
toberemoved.push_back("https://ce01.niif.hu:60000/arex/job5");
263
// Check whether jobs are removed correctly.
264
JISTEST_ASSERT(jis->Remove(toberemoved), jisType);
265
JISTEST_ASSERT(jis->ReadAll(outJobs), jisType);
266
JISTEST_ASSERT_EQUAL(2, (int)outJobs.size(), jisType);
267
JISTEST_ASSERT_EQUAL((std::string)"Job2", outJobs.front().Name, jisType);
268
JISTEST_ASSERT_EQUAL((std::string)"https://ce01.niif.hu:60000/arex/job2", outJobs.front().JobID, jisType);
269
JISTEST_ASSERT_EQUAL((std::string)"Job6", outJobs.back().Name, jisType);
270
JISTEST_ASSERT_EQUAL((std::string)"https://ce01.niif.hu:60000/arex/job6", outJobs.back().JobID, jisType);
277
void JobInformationStorageTest::ReadJobsTest() {
278
Arc::JobInformationStorage* jis = NULL;
279
for (int i = 0; Arc::JobInformationStorage::AVAILABLE_TYPES[i].name != NULL; ++i) {
280
const std::string jisType = Arc::JobInformationStorage::AVAILABLE_TYPES[i].name;
281
jis = (Arc::JobInformationStorage::AVAILABLE_TYPES[i].instance)("jobs.dat");
282
JISTEST_ASSERT(jis != NULL, jisType);
283
JISTEST_ASSERT(jis->IsValid(), jisType);
285
std::list<Arc::Job> inJobs, outJobs;
287
// Check if jobs are read when specified by the jobIdentifiers argument.
288
// Also check that the jobIdentifiers list is modified according to found jobs.
290
inJobs.push_back(Arc::Job());
291
inJobs.back().Name = "foo-job-1";
292
inJobs.back().JobID = "https://ce.grid.org/1234567890-foo-job-1";
293
inJobs.back().IDFromEndpoint = "1234567890-foo-job-1";
294
inJobs.back().ServiceInformationURL = Arc::URL("https://ce.grid.org/");
295
inJobs.back().ServiceInformationInterfaceName = "org.nordugrid.test";
296
inJobs.back().JobStatusURL = Arc::URL("https://ce.grid.org/");
297
inJobs.back().JobStatusInterfaceName = "org.nordugrid.test";
298
inJobs.back().JobManagementURL = Arc::URL("https://ce.grid.org/");
299
inJobs.back().JobManagementInterfaceName = "org.nordugrid.test";
301
inJobs.push_back(Arc::Job());
302
inJobs.back().Name = "foo-job-2";
303
inJobs.back().JobID = "https://ce.grid.org/1234567890-foo-job-2";
304
inJobs.back().IDFromEndpoint = "1234567890-foo-job-2";
305
inJobs.back().ServiceInformationURL = Arc::URL("https://ce.grid.org/");
306
inJobs.back().ServiceInformationInterfaceName = "org.nordugrid.test";
307
inJobs.back().JobStatusURL = Arc::URL("https://ce.grid.org/");
308
inJobs.back().JobStatusInterfaceName = "org.nordugrid.test";
309
inJobs.back().JobManagementURL = Arc::URL("https://ce.grid.org/");
310
inJobs.back().JobManagementInterfaceName = "org.nordugrid.test";
312
inJobs.push_back(Arc::Job());
313
inJobs.back().Name = "foo-job-2";
314
inJobs.back().JobID = "https://ce.grid.org/0987654321-foo-job-2";
315
inJobs.back().IDFromEndpoint = "0987654321-foo-job-2";
316
inJobs.back().ServiceInformationURL = Arc::URL("https://ce.grid.org/");
317
inJobs.back().ServiceInformationInterfaceName = "org.nordugrid.test";
318
inJobs.back().JobStatusURL = Arc::URL("https://ce.grid.org/");
319
inJobs.back().JobStatusInterfaceName = "org.nordugrid.test";
320
inJobs.back().JobManagementURL = Arc::URL("https://ce.grid.org/");
321
inJobs.back().JobManagementInterfaceName = "org.nordugrid.test";
323
inJobs.push_back(Arc::Job());
324
inJobs.back().Name = "foo-job-3";
325
inJobs.back().JobID = "https://ce.grid.org/1234567890-foo-job-3";
326
inJobs.back().IDFromEndpoint = "1234567890-foo-job-3";
327
inJobs.back().ServiceInformationURL = Arc::URL("https://ce.grid.org/");
328
inJobs.back().ServiceInformationInterfaceName = "org.nordugrid.test";
329
inJobs.back().JobStatusURL = Arc::URL("https://ce.grid.org/");
330
inJobs.back().JobStatusInterfaceName = "org.nordugrid.test";
331
inJobs.back().JobManagementURL = Arc::URL("https://ce.grid.org/");
332
inJobs.back().JobManagementInterfaceName = "org.nordugrid.test";
334
JISTEST_ASSERT(jis->Clean(), jisType);
335
JISTEST_ASSERT(jis->Write(inJobs), jisType);
337
std::list<std::string> jobIdentifiers;
338
jobIdentifiers.push_back("https://ce.grid.org/1234567890-foo-job-1");
339
// Having the same identifier twice should only result in one Job object being added to the list.
340
jobIdentifiers.push_back("https://ce.grid.org/1234567890-foo-job-1");
341
jobIdentifiers.push_back("foo-job-2");
342
jobIdentifiers.push_back("nonexistent-job");
344
JISTEST_ASSERT(jis->Read(outJobs, jobIdentifiers), jisType);
345
JISTEST_ASSERT_EQUAL(3, (int)outJobs.size(), jisType);
346
std::list<Arc::Job>::const_iterator itJ = outJobs.begin();
347
JISTEST_ASSERT_EQUAL((std::string)"foo-job-1", itJ->Name, jisType);
348
JISTEST_ASSERT_EQUAL((std::string)"https://ce.grid.org/1234567890-foo-job-1", itJ->JobID, jisType);
350
JISTEST_ASSERT_EQUAL((std::string)"foo-job-2", itJ->Name, jisType);
351
if ("https://ce.grid.org/1234567890-foo-job-2" == itJ->JobID) {
353
JISTEST_ASSERT_EQUAL((std::string)"foo-job-2", itJ->Name, jisType);
354
JISTEST_ASSERT_EQUAL((std::string)"https://ce.grid.org/0987654321-foo-job-2", itJ->JobID, jisType);
356
else if ("https://ce.grid.org/0987654321-foo-job-2" == itJ->JobID) {
358
JISTEST_ASSERT_EQUAL((std::string)"foo-job-2", itJ->Name, jisType);
359
JISTEST_ASSERT_EQUAL((std::string)"https://ce.grid.org/1234567890-foo-job-2", itJ->JobID, jisType);
362
CPPUNIT_FAIL(( "JobInformationStorage" + jisType + "\n"
363
"- Expected: \"https://ce.grid.org/1234567890-foo-job-2\" or \"https://ce.grid.org/0987654321-foo-job-2\"\n"
364
"- Actual: \"" + itJ->JobID + "\"").c_str());
367
JISTEST_ASSERT_EQUAL(1, (int)jobIdentifiers.size(), jisType);
368
JISTEST_ASSERT_EQUAL((std::string)"nonexistent-job", jobIdentifiers.front(), jisType);
371
// Check if jobs are read when specified by the endpoints argument.
372
// Also check if jobs are read when specified by the rejectEndpoints argument.
376
inJobs.push_back(Arc::Job());
377
inJobs.back().Name = "foo-job-1";
378
inJobs.back().JobID = "https://ce1.grid.org/1234567890-foo-job-1";
379
inJobs.back().IDFromEndpoint = "1234567890-foo-job-1";
380
inJobs.back().ServiceInformationURL = Arc::URL("https://ce1.grid.org/");
381
inJobs.back().ServiceInformationInterfaceName = "org.nordugrid.test";
382
inJobs.back().JobStatusURL = Arc::URL("https://ce1.grid.org/");
383
inJobs.back().JobStatusInterfaceName = "org.nordugrid.test";
384
inJobs.back().JobManagementURL = Arc::URL("https://ce1.grid.org/");
385
inJobs.back().JobManagementInterfaceName = "org.nordugrid.test";
387
inJobs.push_back(Arc::Job());
388
inJobs.back().Name = "foo-job-2";
389
inJobs.back().JobID = "https://ce2.grid.org/1234567890-foo-job-2";
390
inJobs.back().IDFromEndpoint = "1234567890-foo-job-2";
391
inJobs.back().ServiceInformationURL = Arc::URL("https://ce2.grid.org/");
392
inJobs.back().ServiceInformationInterfaceName = "org.nordugrid.test";
393
inJobs.back().JobStatusURL = Arc::URL("https://ce2.grid.org/");
394
inJobs.back().JobStatusInterfaceName = "org.nordugrid.test";
395
inJobs.back().JobManagementURL = Arc::URL("https://ce2.grid.org/");
396
inJobs.back().JobManagementInterfaceName = "org.nordugrid.test";
398
inJobs.push_back(Arc::Job());
399
inJobs.back().Name = "foo-job-3";
400
inJobs.back().JobID = "https://ce2.grid.org/1234567890-foo-job-3";
401
inJobs.back().IDFromEndpoint = "1234567890-foo-job-3";
402
inJobs.back().ServiceInformationURL = Arc::URL("https://ce2.grid.org/");
403
inJobs.back().ServiceInformationInterfaceName = "org.nordugrid.test";
404
inJobs.back().JobStatusURL = Arc::URL("https://ce2.grid.org/");
405
inJobs.back().JobStatusInterfaceName = "org.nordugrid.test";
406
inJobs.back().JobManagementURL = Arc::URL("https://ce2.grid.org/");
407
inJobs.back().JobManagementInterfaceName = "org.nordugrid.test";
409
inJobs.push_back(Arc::Job());
410
inJobs.back().Name = "foo-job-4";
411
inJobs.back().JobID = "https://ce3.grid.org/1234567890-foo-job-4";
412
inJobs.back().IDFromEndpoint = "1234567890-foo-job-4";
413
inJobs.back().ServiceInformationURL = Arc::URL("https://ce3.grid.org/");
414
inJobs.back().ServiceInformationInterfaceName = "org.nordugrid.test";
415
inJobs.back().JobStatusURL = Arc::URL("https://ce3.grid.org/");
416
inJobs.back().JobStatusInterfaceName = "org.nordugrid.test";
417
inJobs.back().JobManagementURL = Arc::URL("https://ce3.grid.org/");
418
inJobs.back().JobManagementInterfaceName = "org.nordugrid.test";
420
JISTEST_ASSERT(jis->Clean(), jisType);
421
JISTEST_ASSERT(jis->Write(inJobs), jisType);
423
std::list<std::string> jobIdentifiers, endpoints, rejectEndpoints;
424
endpoints.push_back("ce2.grid.org");
426
JISTEST_ASSERT(jis->Read(outJobs, jobIdentifiers, endpoints), jisType);
427
JISTEST_ASSERT_EQUAL(2, (int)outJobs.size(), jisType);
429
JISTEST_ASSERT_EQUAL((std::string)"foo-job-2", outJobs.front().Name, jisType);
430
JISTEST_ASSERT_EQUAL((std::string)"https://ce2.grid.org/1234567890-foo-job-2", outJobs.front().JobID, jisType);
431
JISTEST_ASSERT_EQUAL((std::string)"foo-job-3", outJobs.back().Name, jisType);
432
JISTEST_ASSERT_EQUAL((std::string)"https://ce2.grid.org/1234567890-foo-job-3", outJobs.back().JobID, jisType);
435
rejectEndpoints.push_back("ce2.grid.org");
437
JISTEST_ASSERT(jis->ReadAll(outJobs, rejectEndpoints), jisType);
438
JISTEST_ASSERT_EQUAL(2, (int)outJobs.size(), jisType);
440
JISTEST_ASSERT_EQUAL((std::string)"foo-job-1", outJobs.front().Name, jisType);
441
JISTEST_ASSERT_EQUAL((std::string)"https://ce1.grid.org/1234567890-foo-job-1", outJobs.front().JobID, jisType);
442
JISTEST_ASSERT_EQUAL((std::string)"foo-job-4", outJobs.back().Name, jisType);
443
JISTEST_ASSERT_EQUAL((std::string)"https://ce3.grid.org/1234567890-foo-job-4", outJobs.back().JobID, jisType);
451
CPPUNIT_TEST_SUITE_REGISTRATION(JobInformationStorageTest);