rvm  1.11
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
test-rvm-001.cc
Go to the documentation of this file.
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 
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 
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 
89 void cleanup(void)
90 {
91  assert(system("rm -fr ./test-rvm.dir") == 0);
92 }
93 
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 
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();
184 
185  // reporter.print_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(...) {
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();
318 
319  // reporter.print_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(...) {
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();
435 
436  // reporter.print_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(...) {
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();
554 
555  // reporter.print_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(...) {
686  assert(0);
687  }
688  assert(!thrown);
689  }
690 }
691 
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 
void init(int argc, char const *argv[])
Initialize the configuration manager from rvm's command line options.
Definition: rconfig.cc:1218
bool test_inodes(const std::string &path1, const std::string &path2, const std::string &file)
Definition: test-rvm-001.cc:94
std::string reform_path(const std::string &a_path)
Reformat a path to remove double slashes.
Definition: fs.cc:205
void mk_dir(const std::string &a_path)
Create a directory.
Definition: fs.cc:599
void clear(void)
Clear the vault manager.
Definition: vaulter.cc:30
log_manager logger
The global log manager.
Definition: logger.cc:138
void path(const std::string a_path)
Retrieve information about a pathname.
Definition: fs.cc:824
void init(void)
Initialize the vault manager.
Definition: vaulter.cc:40
An extended string class.
Definition: estring.h:52
void clear(void)
Clear the archive manager and clear the job list.
Definition: archiver.cc:1067
void catalog(void)
Create or update the catalog.
Definition: cataloger.cc:77
void clear(void)
Reset the catalog manager.
Definition: cataloger.cc:30
void default_file(const std::string &a_path)
Set the default configuration filename.
Definition: rconfig.cc:1484
const class timestamp & timestamp(void) const
Return the timestamp of this instance of rvm.
Definition: rconfig.cc:1505
const std::string & log_dir(void) const
Return the log-dir path.
Definition: rconfig.cc:1523
const inode_type inode(void) const
Return the file inode.
Definition: fs.cc:952
#define LOCAL_RSYNC
Definition: config.h:151
archive_manager archiver
The global archive manager.
Definition: archiver.cc:1536
#define err_unknown
Definition: error.h:114
void set_total_time(const timer &a_class)
Report the overall RVM time.
Definition: reporter.cc:960
void clear(void)
Reset configuration to default settings.
Definition: rconfig.cc:1171
void clear(void)
Clear all values.
Definition: reporter.cc:952
report_manager reporter
The global report manager.
Definition: reporter.cc:1124
bool exists(const std::string &a_path)
Return true if the file or directory exists.
Definition: fs.cc:385
void file_report(void)
Save report to a file.
Definition: reporter.cc:998
void start(void)
Start (or restart) the timer.
Definition: timer.cc:137
An error class.
Definition: error.h:72
catalog_manager cataloger
The global catalog manager.
Definition: cataloger.cc:135
const type & path(const std::string a_path, const std::string a_filter="*")
Return a vector of strings of a list of files in a subdirectory.
Definition: fs.cc:1361
const std::string vault(void) const
Return the path to the selected vault.
Definition: vaulter.cc:291
int main(int argc, char const *argv[])
void clear(void)
Clear the log manager.
Definition: logger.cc:32
void init(void)
Initialize the log manager.
Definition: logger.cc:42
configuration_manager config
The global configuration manager instance.
Definition: rconfig.cc:3364
Retrieve information about a file or directory.
Definition: fs.h:122
void init(void)
Initialize the catalog manager.
Definition: cataloger.cc:36
#define ERR_OUT(e)
Definition: test-rvm-001.cc:26
void init(void)
Initialize the archive manager.
Definition: archiver.cc:1078
void cleanup(void)
Definition: test-rvm-001.cc:89
const jobs_type & jobs(void) const
Return a list of jobs.
Definition: rconfig.cc:1667
const std::string str(void) const
Generate a string.
Definition: tstamp.cc:387
void archive(void)
Archive jobs.
Definition: archiver.cc:1235
bool make_dir(const std::string &path)
Definition: test-rvm-001.cc:29
const char * check_cwd
void stop(void)
Stop the timer.
Definition: timer.cc:143
Retrieve a list of files in a subdirectory that match a given wildcard filename.
Definition: fs.h:273
void test_rvm(void)
void init(void)
Initialize.
Definition: reporter.cc:937
void setup(void)
Definition: test-rvm-001.cc:47
Used as a stopwatch.
Definition: timer.h:29
vault_manager vaulter
The global vault manager.
Definition: vaulter.cc:772