1 #include "config.h"
2
3 #ifdef HAVE_UNISTD_H
4 #include <unistd.h>
5 #endif
6
7 #include <iostream>
8 #include <string>
9 #include <fstream>
10 #include <iomanip>
11 #include <string>
12 #include <cassert>
13 #include <algorithm>
14
15 #include "asserts.h"
16 #include "error.h"
17 #include "fs.h"
18 #include "rconfig.h"
19 #include "logger.h"
20 #include "vaulter.h"
21 #include "archiver.h"
22 #include "cataloger.h"
23 #include "reporter.h"
24 #include "test-fs-cwd.h"
25
26 #define ERR_OUT(e) std::cerr << e
27 // #define ERR_OUT(e)
28
make_dir(const std::string & path)29 bool make_dir(const std::string& path)
30 {
31 bool thrown;
32 bool value;
33
34 thrown = false;
35 try {
36 mk_dir(path);
37 }
38 catch(...) {
39 thrown = true;
40 }
41
42 value = (thrown == false);
43
44 return(value);
45 }
46
setup(void)47 void setup(void)
48 {
49 std::ofstream out;
50
51 assert(make_dir("./test-rvm.dir"));
52 assert(make_dir("./test-rvm.dir/vault-1"));
53 assert(make_dir("./test-rvm.dir/vault-2"));
54 assert(make_dir("./test-rvm.dir/vault-3"));
55 assert(make_dir("./test-rvm.dir/log.dir"));
56 assert(make_dir("./test-rvm.dir/catalog.dir"));
57
58 out.open("./test-rvm.dir/file-1.conf");
59 assert(out.is_open());
60 out << "link-catalog-dir ./test-rvm.dir/catalog.dir" << std::endl;
61 out << "log-dir ./test-rvm.dir/log.dir" << std::endl;
62 out << "logging-level rsync" << std::endl;
63 out << "rsync-local-path " << LOCAL_RSYNC << std::endl;
64 out << "rsync-parallel 1" << std::endl;
65 out << "timestamp-resolution second" << std::endl;
66 out << "vault ./test-rvm.dir/vault-*" << std::endl;
67 out << "vault-overflow-behavior quit" << std::endl;
68 out << "vault-overflow-blocks 0" << std::endl;
69 out << "vault-overflow-inodes 0" << std::endl;
70 out << "vault-selection-behavior round-robin" << std::endl;
71 out << "<job>" << std::endl;
72 out << " jobname test-job" << std::endl;
73 out << " archive-path jobname/permutation" << std::endl;
74 out << " path " << check_cwd << "/" << std::endl;
75 out << " rsync-connection-type local" << std::endl;
76 out << " rsync-hardlink true" << std::endl;
77 out << " <rsync-options>" << std::endl;
78 out << " -a -v --progress --stats" << std::endl;
79 out << " --exclude '/.svn/'" << std::endl;
80 out << " --exclude '/.deps/'" << std::endl;
81 out << " --exclude '/autom4te.cache/'" << std::endl;
82 out << " --exclude '/test-rvm.dir/'" << std::endl;
83 out << " </rsync-options>" << std::endl;
84 out << " rsync-retry-count 3" << std::endl;
85 out << "</job>" << std::endl;
86 out.close();
87 }
88
cleanup(void)89 void cleanup(void)
90 {
91 assert(system("rm -fr ./test-rvm.dir") == 0);
92 }
93
test_inodes(const std::string & path1,const std::string & path2,const std::string & file)94 bool test_inodes(
95 const std::string& path1,
96 const std::string& path2,
97 const std::string& file
98 )
99 {
100 estring p1, p2;
101 filestatus f1, f2;
102 bool r;
103
104 p1 = path1;
105 p1 += "/";
106 p1 += file;
107 p1 = reform_path(p1);
108 f1.path(p1);
109
110 p2 = path2;
111 p2 += "/";
112 p2 += file;
113 p2 = reform_path(p2);
114 f2.path(p2);
115
116 r = (f1.inode() == f2.inode());
117
118 return(r);
119 }
120
test_rvm(void)121 void test_rvm(void)
122 {
123 std::string local_rsync;
124 estring adir[4];
125 int adirc = 0;
126
127 local_rsync = LOCAL_RSYNC;
128 if (local_rsync.size() == 0) {
129 char const * text[] = {
130 "",
131 "NOTICE: Skipping this test",
132 "",
133 "This test cannot be run because no local rsync binary was found during",
134 "configuration. This also means that RVM will be compiled with no",
135 "default value for the rsync-local-path command.",
136 "",
137 "To change this, run the configure script with --with-rsync=<path>,",
138 "where <path> is the absolute path to the rsync binary.",
139 "",
140 0
141 };
142 int c;
143
144 for (c = 0; text[c] != 0; ++c) {
145 std::cerr << text[c] << std::endl;
146 }
147 return;
148 }
149
150 {
151 char const * argv[256] = { 0 };
152 int argc = 0;
153 bool thrown = false;
154 subdirectory subdir;
155 estring dir;
156
157 argv[argc++] = "<program>";
158 argv[argc++] = "--archive";
159
160 cataloger.clear();
161 archiver.clear();
162 reporter.clear();
163 vaulter.clear();
164 logger.clear();
165 config.clear();
166
167 config.default_file("./test-rvm.dir/file-1.conf");
168 try {
169 timer t;
170
171 t.start();
172
173 config.init(argc, argv);
174 logger.init();
175 vaulter.init();
176 reporter.init();
177 archiver.init();
178 archiver.archive();
179 cataloger.init();
180 cataloger.catalog();
181
182 t.stop();
183 reporter.set_total_time(t);
184
185 // reporter.print_report();
186 reporter.file_report();
187 logger.clear();
188
189 // std::cerr << "vaulter.vault() == " << vaulter.vault() << std::endl;
190 assert(vaulter.vault() == "./test-rvm.dir/vault-1");
191
192 dir = vaulter.vault();
193 dir += "/";
194 dir += config.timestamp().str();
195 dir += "/";
196 dir += config.jobs()[0].generate_archive_path(check_cwd);
197 adir[adirc++] = dir;
198
199 // std::cout << "dir = " << dir << std::endl;
200
201 assert(
202 exists(
203 config.log_dir()
204 + static_cast<std::string>("/")
205 + config.timestamp().str()
206 + static_cast<std::string>(".log")
207 )
208 );
209 assert(
210 exists(
211 config.log_dir()
212 + static_cast<std::string>("/")
213 + config.timestamp().str()
214 + static_cast<std::string>(".report")
215 )
216 );
217
218 subdir.path(dir);
219 assert(find(subdir.begin(), subdir.end(), "AUTHORS") != subdir.end());
220 assert(find(subdir.begin(), subdir.end(), "COPYING") != subdir.end());
221 assert(find(subdir.begin(), subdir.end(), "INSTALL") != subdir.end());
222 assert(find(subdir.begin(), subdir.end(), "Makefile") != subdir.end());
223 assert(find(subdir.begin(), subdir.end(), "Makefile.in") != subdir.end());
224 assert(find(subdir.begin(), subdir.end(), "README") != subdir.end());
225 assert(find(subdir.begin(), subdir.end(), "archiver.cc") != subdir.end());
226 assert(find(subdir.begin(), subdir.end(), "archiver.h") != subdir.end());
227 assert(find(subdir.begin(), subdir.end(), "config.h") != subdir.end());
228 assert(find(subdir.begin(), subdir.end(), "config.h.in") != subdir.end());
229 assert(find(subdir.begin(), subdir.end(), "configure") != subdir.end());
230 assert(find(subdir.begin(), subdir.end(), "error.cc") != subdir.end());
231 assert(find(subdir.begin(), subdir.end(), "error.h") != subdir.end());
232 assert(find(subdir.begin(), subdir.end(), "estring.cc") != subdir.end());
233 assert(find(subdir.begin(), subdir.end(), "estring.h") != subdir.end());
234 assert(find(subdir.begin(), subdir.end(), "exec.cc") != subdir.end());
235 assert(find(subdir.begin(), subdir.end(), "exec.h") != subdir.end());
236 assert(find(subdir.begin(), subdir.end(), "fs.cc") != subdir.end());
237 assert(find(subdir.begin(), subdir.end(), "fs.h") != subdir.end());
238 assert(find(subdir.begin(), subdir.end(), "help.cc") != subdir.end());
239 assert(find(subdir.begin(), subdir.end(), "help.h") != subdir.end());
240 assert(find(subdir.begin(), subdir.end(), "logger.cc") != subdir.end());
241 assert(find(subdir.begin(), subdir.end(), "logger.h") != subdir.end());
242 assert(find(subdir.begin(), subdir.end(), "make-test-fs-cc") != subdir.end());
243 assert(find(subdir.begin(), subdir.end(), "rconfig.cc") != subdir.end());
244 assert(find(subdir.begin(), subdir.end(), "rconfig.h") != subdir.end());
245 assert(find(subdir.begin(), subdir.end(), "rmath.h") != subdir.end());
246 assert(find(subdir.begin(), subdir.end(), "rvm.cc") != subdir.end());
247 assert(find(subdir.begin(), subdir.end(), "rvm.1") != subdir.end());
248 assert(find(subdir.begin(), subdir.end(), "rvm.1.in") != subdir.end());
249 assert(find(subdir.begin(), subdir.end(), "test-rvm-001.cc") != subdir.end());
250 assert(find(subdir.begin(), subdir.end(), "test-error.cc") != subdir.end());
251 assert(find(subdir.begin(), subdir.end(), "test-estring.cc") != subdir.end());
252 assert(find(subdir.begin(), subdir.end(), "test-exec.cc") != subdir.end());
253 assert(find(subdir.begin(), subdir.end(), "test-fs-cwd.cc") != subdir.end());
254 assert(find(subdir.begin(), subdir.end(), "test-fs.cc") != subdir.end());
255 // assert(find(subdir.begin(), subdir.end(), "test-job.cc") != subdir.end());
256 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
257 // assert(find(subdir.begin(), subdir.end(), "test-rconfig.cc") != subdir.end());
258 assert(find(subdir.begin(), subdir.end(), "test-rmath.cc") != subdir.end());
259 assert(find(subdir.begin(), subdir.end(), "test-strfmt.cc") != subdir.end());
260 assert(find(subdir.begin(), subdir.end(), "test-timer.cc") != subdir.end());
261 assert(find(subdir.begin(), subdir.end(), "test-tstamp.cc") != subdir.end());
262 assert(find(subdir.begin(), subdir.end(), "test-types.cc") != subdir.end());
263 assert(find(subdir.begin(), subdir.end(), "timer.cc") != subdir.end());
264 assert(find(subdir.begin(), subdir.end(), "timer.h") != subdir.end());
265 assert(find(subdir.begin(), subdir.end(), "tstamp.cc") != subdir.end());
266 assert(find(subdir.begin(), subdir.end(), "tstamp.h") != subdir.end());
267 assert(find(subdir.begin(), subdir.end(), "types.h") != subdir.end());
268 assert(find(subdir.begin(), subdir.end(), "vaulter.cc") != subdir.end());
269 assert(find(subdir.begin(), subdir.end(), "vaulter.h") != subdir.end());
270 }
271 catch(error e) {
272 ERR_OUT(e);
273 thrown = true;
274 }
275 catch(...) {
276 ERR_OUT(err_unknown);
277 assert(0);
278 }
279 assert(!thrown);
280 }
281
282 sleep(2);
283
284 {
285 char const * argv[256] = { 0 };
286 int argc = 0;
287 bool thrown = false;
288 subdirectory subdir;
289 estring dir;
290
291 argv[argc++] = "<program>";
292 argv[argc++] = "--archive";
293
294 cataloger.clear();
295 archiver.clear();
296 reporter.clear();
297 vaulter.clear();
298 logger.clear();
299 config.clear();
300
301 config.default_file("./test-rvm.dir/file-1.conf");
302 try {
303 timer t;
304
305 t.start();
306
307 config.init(argc, argv);
308 logger.init();
309 vaulter.init();
310 reporter.init();
311 archiver.init();
312 archiver.archive();
313 cataloger.init();
314 cataloger.catalog();
315
316 t.stop();
317 reporter.set_total_time(t);
318
319 // reporter.print_report();
320 reporter.file_report();
321 logger.clear();
322
323 // std::cerr << "vaulter.vault() == " << vaulter.vault() << std::endl;
324 assert(vaulter.vault() == "./test-rvm.dir/vault-2");
325
326 dir = vaulter.vault();
327 dir += "/";
328 dir += config.timestamp().str();
329 dir += "/";
330 dir += config.jobs()[0].generate_archive_path(check_cwd);
331 adir[adirc++] = dir;
332
333 // std::cout << "dir = " << dir << std::endl;
334
335 subdir.path(dir);
336 assert(find(subdir.begin(), subdir.end(), "AUTHORS") != subdir.end());
337 assert(find(subdir.begin(), subdir.end(), "COPYING") != subdir.end());
338 assert(find(subdir.begin(), subdir.end(), "INSTALL") != subdir.end());
339 assert(find(subdir.begin(), subdir.end(), "Makefile") != subdir.end());
340 assert(find(subdir.begin(), subdir.end(), "Makefile.in") != subdir.end());
341 assert(find(subdir.begin(), subdir.end(), "README") != subdir.end());
342 assert(find(subdir.begin(), subdir.end(), "archiver.cc") != subdir.end());
343 assert(find(subdir.begin(), subdir.end(), "archiver.h") != subdir.end());
344 assert(find(subdir.begin(), subdir.end(), "config.h") != subdir.end());
345 assert(find(subdir.begin(), subdir.end(), "config.h.in") != subdir.end());
346 assert(find(subdir.begin(), subdir.end(), "configure") != subdir.end());
347 assert(find(subdir.begin(), subdir.end(), "error.cc") != subdir.end());
348 assert(find(subdir.begin(), subdir.end(), "error.h") != subdir.end());
349 assert(find(subdir.begin(), subdir.end(), "estring.cc") != subdir.end());
350 assert(find(subdir.begin(), subdir.end(), "estring.h") != subdir.end());
351 assert(find(subdir.begin(), subdir.end(), "exec.cc") != subdir.end());
352 assert(find(subdir.begin(), subdir.end(), "exec.h") != subdir.end());
353 assert(find(subdir.begin(), subdir.end(), "fs.cc") != subdir.end());
354 assert(find(subdir.begin(), subdir.end(), "fs.h") != subdir.end());
355 assert(find(subdir.begin(), subdir.end(), "help.cc") != subdir.end());
356 assert(find(subdir.begin(), subdir.end(), "help.h") != subdir.end());
357 assert(find(subdir.begin(), subdir.end(), "logger.cc") != subdir.end());
358 assert(find(subdir.begin(), subdir.end(), "logger.h") != subdir.end());
359 assert(find(subdir.begin(), subdir.end(), "make-test-fs-cc") != subdir.end());
360 assert(find(subdir.begin(), subdir.end(), "rconfig.cc") != subdir.end());
361 assert(find(subdir.begin(), subdir.end(), "rconfig.h") != subdir.end());
362 assert(find(subdir.begin(), subdir.end(), "rmath.h") != subdir.end());
363 assert(find(subdir.begin(), subdir.end(), "rvm.cc") != subdir.end());
364 assert(find(subdir.begin(), subdir.end(), "rvm.1") != subdir.end());
365 assert(find(subdir.begin(), subdir.end(), "rvm.1.in") != subdir.end());
366 assert(find(subdir.begin(), subdir.end(), "test-rvm-001.cc") != subdir.end());
367 assert(find(subdir.begin(), subdir.end(), "test-error.cc") != subdir.end());
368 assert(find(subdir.begin(), subdir.end(), "test-estring.cc") != subdir.end());
369 assert(find(subdir.begin(), subdir.end(), "test-exec.cc") != subdir.end());
370 assert(find(subdir.begin(), subdir.end(), "test-fs-cwd.cc") != subdir.end());
371 assert(find(subdir.begin(), subdir.end(), "test-fs.cc") != subdir.end());
372 // assert(find(subdir.begin(), subdir.end(), "test-job.cc") != subdir.end());
373 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
374 // assert(find(subdir.begin(), subdir.end(), "test-rconfig.cc") != subdir.end());
375 assert(find(subdir.begin(), subdir.end(), "test-rmath.cc") != subdir.end());
376 assert(find(subdir.begin(), subdir.end(), "test-strfmt.cc") != subdir.end());
377 assert(find(subdir.begin(), subdir.end(), "test-timer.cc") != subdir.end());
378 assert(find(subdir.begin(), subdir.end(), "test-tstamp.cc") != subdir.end());
379 assert(find(subdir.begin(), subdir.end(), "test-types.cc") != subdir.end());
380 assert(find(subdir.begin(), subdir.end(), "timer.cc") != subdir.end());
381 assert(find(subdir.begin(), subdir.end(), "timer.h") != subdir.end());
382 assert(find(subdir.begin(), subdir.end(), "tstamp.cc") != subdir.end());
383 assert(find(subdir.begin(), subdir.end(), "tstamp.h") != subdir.end());
384 assert(find(subdir.begin(), subdir.end(), "types.h") != subdir.end());
385 assert(find(subdir.begin(), subdir.end(), "vaulter.cc") != subdir.end());
386 assert(find(subdir.begin(), subdir.end(), "vaulter.h") != subdir.end());
387 }
388 catch(error e) {
389 ERR_OUT(e);
390 thrown = true;
391 }
392 catch(...) {
393 ERR_OUT(err_unknown);
394 assert(0);
395 }
396 assert(!thrown);
397 }
398
399 sleep(2);
400
401 {
402 char const * argv[256] = { 0 };
403 int argc = 0;
404 bool thrown = false;
405 subdirectory subdir;
406 estring dir;
407
408 argv[argc++] = "<program>";
409 argv[argc++] = "--archive";
410
411 cataloger.clear();
412 archiver.clear();
413 reporter.clear();
414 vaulter.clear();
415 logger.clear();
416 config.clear();
417
418 config.default_file("./test-rvm.dir/file-1.conf");
419 try {
420 timer t;
421
422 t.start();
423
424 config.init(argc, argv);
425 logger.init();
426 vaulter.init();
427 reporter.init();
428 archiver.init();
429 archiver.archive();
430 cataloger.init();
431 cataloger.catalog();
432
433 t.stop();
434 reporter.set_total_time(t);
435
436 // reporter.print_report();
437 reporter.file_report();
438 logger.clear();
439
440 // std::cerr << "vaulter.vault() == " << vaulter.vault() << std::endl;
441 assert(vaulter.vault() == "./test-rvm.dir/vault-3");
442
443 dir = vaulter.vault();
444 dir += "/";
445 dir += config.timestamp().str();
446 dir += "/";
447 dir += config.jobs()[0].generate_archive_path(check_cwd);
448 adir[adirc++] = dir;
449
450 // std::cout << "dir = " << dir << std::endl;
451
452 subdir.path(dir);
453 assert(find(subdir.begin(), subdir.end(), "AUTHORS") != subdir.end());
454 assert(find(subdir.begin(), subdir.end(), "COPYING") != subdir.end());
455 assert(find(subdir.begin(), subdir.end(), "INSTALL") != subdir.end());
456 assert(find(subdir.begin(), subdir.end(), "Makefile") != subdir.end());
457 assert(find(subdir.begin(), subdir.end(), "Makefile.in") != subdir.end());
458 assert(find(subdir.begin(), subdir.end(), "README") != subdir.end());
459 assert(find(subdir.begin(), subdir.end(), "archiver.cc") != subdir.end());
460 assert(find(subdir.begin(), subdir.end(), "archiver.h") != subdir.end());
461 assert(find(subdir.begin(), subdir.end(), "config.h") != subdir.end());
462 assert(find(subdir.begin(), subdir.end(), "config.h.in") != subdir.end());
463 assert(find(subdir.begin(), subdir.end(), "configure") != subdir.end());
464 assert(find(subdir.begin(), subdir.end(), "error.cc") != subdir.end());
465 assert(find(subdir.begin(), subdir.end(), "error.h") != subdir.end());
466 assert(find(subdir.begin(), subdir.end(), "estring.cc") != subdir.end());
467 assert(find(subdir.begin(), subdir.end(), "estring.h") != subdir.end());
468 assert(find(subdir.begin(), subdir.end(), "exec.cc") != subdir.end());
469 assert(find(subdir.begin(), subdir.end(), "exec.h") != subdir.end());
470 assert(find(subdir.begin(), subdir.end(), "fs.cc") != subdir.end());
471 assert(find(subdir.begin(), subdir.end(), "fs.h") != subdir.end());
472 assert(find(subdir.begin(), subdir.end(), "help.cc") != subdir.end());
473 assert(find(subdir.begin(), subdir.end(), "help.h") != subdir.end());
474 assert(find(subdir.begin(), subdir.end(), "logger.cc") != subdir.end());
475 assert(find(subdir.begin(), subdir.end(), "logger.h") != subdir.end());
476 assert(find(subdir.begin(), subdir.end(), "make-test-fs-cc") != subdir.end());
477 assert(find(subdir.begin(), subdir.end(), "rconfig.cc") != subdir.end());
478 assert(find(subdir.begin(), subdir.end(), "rconfig.h") != subdir.end());
479 assert(find(subdir.begin(), subdir.end(), "rmath.h") != subdir.end());
480 assert(find(subdir.begin(), subdir.end(), "rvm.cc") != subdir.end());
481 assert(find(subdir.begin(), subdir.end(), "rvm.1") != subdir.end());
482 assert(find(subdir.begin(), subdir.end(), "rvm.1.in") != subdir.end());
483 assert(find(subdir.begin(), subdir.end(), "test-rvm-001.cc") != subdir.end());
484 assert(find(subdir.begin(), subdir.end(), "test-error.cc") != subdir.end());
485 assert(find(subdir.begin(), subdir.end(), "test-estring.cc") != subdir.end());
486 assert(find(subdir.begin(), subdir.end(), "test-exec.cc") != subdir.end());
487 assert(find(subdir.begin(), subdir.end(), "test-fs-cwd.cc") != subdir.end());
488 assert(find(subdir.begin(), subdir.end(), "test-fs.cc") != subdir.end());
489 // assert(find(subdir.begin(), subdir.end(), "test-job.cc") != subdir.end());
490 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
491 // assert(find(subdir.begin(), subdir.end(), "test-rconfig.cc") != subdir.end());
492 assert(find(subdir.begin(), subdir.end(), "test-rmath.cc") != subdir.end());
493 assert(find(subdir.begin(), subdir.end(), "test-strfmt.cc") != subdir.end());
494 assert(find(subdir.begin(), subdir.end(), "test-timer.cc") != subdir.end());
495 assert(find(subdir.begin(), subdir.end(), "test-tstamp.cc") != subdir.end());
496 assert(find(subdir.begin(), subdir.end(), "test-types.cc") != subdir.end());
497 assert(find(subdir.begin(), subdir.end(), "timer.cc") != subdir.end());
498 assert(find(subdir.begin(), subdir.end(), "timer.h") != subdir.end());
499 assert(find(subdir.begin(), subdir.end(), "tstamp.cc") != subdir.end());
500 assert(find(subdir.begin(), subdir.end(), "tstamp.h") != subdir.end());
501 assert(find(subdir.begin(), subdir.end(), "types.h") != subdir.end());
502 assert(find(subdir.begin(), subdir.end(), "vaulter.cc") != subdir.end());
503 assert(find(subdir.begin(), subdir.end(), "vaulter.h") != subdir.end());
504 }
505 catch(error e) {
506 ERR_OUT(e);
507 thrown = true;
508 }
509 catch(...) {
510 ERR_OUT(err_unknown);
511 assert(0);
512 }
513 assert(!thrown);
514 }
515
516 sleep(2);
517
518 {
519 char const * argv[256] = { 0 };
520 int argc = 0;
521 bool thrown = false;
522 subdirectory subdir;
523 estring dir;
524
525 argv[argc++] = "<program>";
526 argv[argc++] = "--archive";
527
528 cataloger.clear();
529 archiver.clear();
530 reporter.clear();
531 vaulter.clear();
532 logger.clear();
533 config.clear();
534
535 config.default_file("./test-rvm.dir/file-1.conf");
536 try {
537 timer t;
538
539 t.start();
540
541 config.init(argc, argv);
542 logger.init();
543 vaulter.init();
544 reporter.init();
545 archiver.init();
546 archiver.archive();
547 estring path;
548 filestatus fstat1, fstat2;
549 cataloger.init();
550 cataloger.catalog();
551
552 t.stop();
553 reporter.set_total_time(t);
554
555 // reporter.print_report();
556 reporter.file_report();
557 logger.clear();
558
559 // std::cerr << "vaulter.vault() == " << vaulter.vault() << std::endl;
560 assert(vaulter.vault() == "./test-rvm.dir/vault-1");
561
562 dir = vaulter.vault();
563 dir += "/";
564 dir += config.timestamp().str();
565 dir += "/";
566 dir += config.jobs()[0].generate_archive_path(check_cwd);
567 adir[adirc++] = dir;
568
569 // std::cout << "dir = " << dir << std::endl;
570
571 subdir.path(dir);
572 if (subdir.size() == 0) {
573 std::string filename;
574 std::string line;
575 std::ifstream in;
576 bool found_usage_error = false;
577 char line_cstr[2048] = { 0 };
578 int c;
579
580 filename = "./test-rvm.dir/log.dir/";
581 filename += config.timestamp().str();
582 filename += ".log";
583 in.open(filename.c_str());
584 assert(in.is_open());
585 while (in.getline(line_cstr,2048)) {
586 line = line_cstr;
587 if (line.find("Rsync exit code: [1]") != std::string::npos)
588 found_usage_error = true;
589 for (c = 0; c < 2048; line_cstr[c++] = 0);
590 }
591 in.close();
592
593 if (found_usage_error) {
594 std::cerr
595 << "*** NOTICE: One test has failed, the test that uses rsync with"
596 << std::endl
597 << " the --hard-links and --link-dest command line"
598 << std::endl
599 << " options. Rsync reported a syntax or usage error,"
600 << std::endl
601 << " which may indicate that this version of rsync is"
602 << std::endl
603 << " old enough to not have these options."
604 << std::endl
605 << std::endl
606 << " In order to be able to hard-link files that have"
607 << std::endl
608 << " not changed from one archive to the next, you"
609 << std::endl
610 << " will have to upgrade rsync."
611 << std::endl
612 ;
613 }
614 assert(found_usage_error);
615 }
616 else {
617 assert(find(subdir.begin(), subdir.end(), "AUTHORS") != subdir.end());
618 assert(find(subdir.begin(), subdir.end(), "COPYING") != subdir.end());
619 assert(find(subdir.begin(), subdir.end(), "INSTALL") != subdir.end());
620 assert(find(subdir.begin(), subdir.end(), "Makefile") != subdir.end());
621 assert(find(subdir.begin(), subdir.end(), "Makefile.in") != subdir.end());
622 assert(find(subdir.begin(), subdir.end(), "README") != subdir.end());
623 assert(find(subdir.begin(), subdir.end(), "archiver.cc") != subdir.end());
624 assert(find(subdir.begin(), subdir.end(), "archiver.h") != subdir.end());
625 assert(find(subdir.begin(), subdir.end(), "config.h") != subdir.end());
626 assert(find(subdir.begin(), subdir.end(), "config.h.in") != subdir.end());
627 assert(find(subdir.begin(), subdir.end(), "configure") != subdir.end());
628 assert(find(subdir.begin(), subdir.end(), "error.cc") != subdir.end());
629 assert(find(subdir.begin(), subdir.end(), "error.h") != subdir.end());
630 assert(find(subdir.begin(), subdir.end(), "estring.cc") != subdir.end());
631 assert(find(subdir.begin(), subdir.end(), "estring.h") != subdir.end());
632 assert(find(subdir.begin(), subdir.end(), "exec.cc") != subdir.end());
633 assert(find(subdir.begin(), subdir.end(), "exec.h") != subdir.end());
634 assert(find(subdir.begin(), subdir.end(), "fs.cc") != subdir.end());
635 assert(find(subdir.begin(), subdir.end(), "fs.h") != subdir.end());
636 assert(find(subdir.begin(), subdir.end(), "help.cc") != subdir.end());
637 assert(find(subdir.begin(), subdir.end(), "help.h") != subdir.end());
638 assert(find(subdir.begin(), subdir.end(), "logger.cc") != subdir.end());
639 assert(find(subdir.begin(), subdir.end(), "logger.h") != subdir.end());
640 assert(find(subdir.begin(), subdir.end(), "make-test-fs-cc") != subdir.end());
641 assert(find(subdir.begin(), subdir.end(), "rconfig.cc") != subdir.end());
642 assert(find(subdir.begin(), subdir.end(), "rconfig.h") != subdir.end());
643 assert(find(subdir.begin(), subdir.end(), "rmath.h") != subdir.end());
644 assert(find(subdir.begin(), subdir.end(), "rvm.cc") != subdir.end());
645 assert(find(subdir.begin(), subdir.end(), "rvm.1") != subdir.end());
646 assert(find(subdir.begin(), subdir.end(), "rvm.1.in") != subdir.end());
647 assert(find(subdir.begin(), subdir.end(), "test-rvm-001.cc") != subdir.end());
648 assert(find(subdir.begin(), subdir.end(), "test-error.cc") != subdir.end());
649 assert(find(subdir.begin(), subdir.end(), "test-estring.cc") != subdir.end());
650 assert(find(subdir.begin(), subdir.end(), "test-exec.cc") != subdir.end());
651 assert(find(subdir.begin(), subdir.end(), "test-fs-cwd.cc") != subdir.end());
652 assert(find(subdir.begin(), subdir.end(), "test-fs.cc") != subdir.end());
653 // assert(find(subdir.begin(), subdir.end(), "test-job.cc") != subdir.end());
654 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
655 // assert(find(subdir.begin(), subdir.end(), "test-rconfig.cc") != subdir.end());
656 assert(find(subdir.begin(), subdir.end(), "test-rmath.cc") != subdir.end());
657 assert(find(subdir.begin(), subdir.end(), "test-strfmt.cc") != subdir.end());
658 assert(find(subdir.begin(), subdir.end(), "test-timer.cc") != subdir.end());
659 assert(find(subdir.begin(), subdir.end(), "test-tstamp.cc") != subdir.end());
660 assert(find(subdir.begin(), subdir.end(), "test-types.cc") != subdir.end());
661 assert(find(subdir.begin(), subdir.end(), "timer.cc") != subdir.end());
662 assert(find(subdir.begin(), subdir.end(), "timer.h") != subdir.end());
663 assert(find(subdir.begin(), subdir.end(), "tstamp.cc") != subdir.end());
664 assert(find(subdir.begin(), subdir.end(), "tstamp.h") != subdir.end());
665 assert(find(subdir.begin(), subdir.end(), "types.h") != subdir.end());
666 assert(find(subdir.begin(), subdir.end(), "vaulter.cc") != subdir.end());
667 assert(find(subdir.begin(), subdir.end(), "vaulter.h") != subdir.end());
668
669 assert(test_inodes(adir[0], adir[3], "AUTHORS"));
670 }
671
672 // TODO: Check output
673 assert(
674 exists(
675 static_cast<std::string>("./test-rvm.dir/catalog.dir/")
676 + config.timestamp().str()
677 )
678 );
679 }
680 catch(error e) {
681 ERR_OUT(e);
682 thrown = true;
683 }
684 catch(...) {
685 ERR_OUT(err_unknown);
686 assert(0);
687 }
688 assert(!thrown);
689 }
690 }
691
main(int argc,char const * argv[])692 int main(int argc, char const * argv[])
693 {
694 cleanup();
695 setup();
696 try {
697 test_rvm();
698 }
699 catch(error e) {
700 std::cerr << e;
701 assert(0);
702 }
703 catch(...) {
704 std::cerr << err_unknown;
705 assert(0);
706 }
707 cleanup();
708 return(0);
709 }
710
711