26 #define ERR_OUT(e) std::cerr << e
42 value = (thrown ==
false);
52 assert(
make_dir(
"./test-rvm.dir/vault"));
53 assert(
make_dir(
"./test-rvm.dir/log.dir"));
54 assert(
make_dir(
"./test-rvm.dir/catalog.dir"));
56 out.open(
"./test-rvm.dir/file.conf");
57 assert(out.is_open());
58 out <<
"link-catalog-dir ./test-rvm.dir/catalog.dir" << std::endl;
59 out <<
"log-dir ./test-rvm.dir/log.dir" << std::endl;
60 out <<
"logging-level rsync" << std::endl;
61 out <<
"rsync-local-path " <<
LOCAL_RSYNC << std::endl;
62 out <<
"rsync-parallel 1" << std::endl;
63 out <<
"timestamp-resolution second" << std::endl;
64 out <<
"vault ./test-rvm.dir/vault" << std::endl;
65 out <<
"vault-overflow-behavior quit" << std::endl;
66 out <<
"vault-overflow-blocks 0" << std::endl;
67 out <<
"vault-overflow-inodes 0" << std::endl;
68 out <<
"vault-selection-behavior round-robin" << std::endl;
69 out <<
"<job>" << std::endl;
70 out <<
" jobname test-job" << std::endl;
71 out <<
" archive-path jobname/permutation" << std::endl;
72 out <<
" path " <<
check_cwd <<
"/" << std::endl;
73 out <<
" rsync-connection-type local" << std::endl;
74 out <<
" rsync-hardlink true" << std::endl;
75 out <<
" rsync-multi-hardlink true" << std::endl;
76 out <<
" <rsync-options>" << std::endl;
77 out <<
" -a -v --progress --stats" << std::endl;
78 out <<
" --exclude '/.svn/'" << std::endl;
79 out <<
" --exclude '/.deps/'" << std::endl;
80 out <<
" --exclude '/autom4te.cache/'" << std::endl;
81 out <<
" --exclude '/test-rvm.dir/'" << std::endl;
82 out <<
" </rsync-options>" << std::endl;
83 out <<
" rsync-retry-count 3" << std::endl;
84 out <<
"</job>" << std::endl;
90 assert(system(
"rm -fr ./test-rvm.dir") == 0);
94 const std::string& path1,
95 const std::string& path2,
96 const std::string& file
122 std::string local_rsync;
127 if (local_rsync.size() == 0) {
128 char const * text[] = {
130 "NOTICE: Skipping this test",
132 "This test cannot be run because no local rsync binary was found during",
133 "configuration. This also means that RVM will be compiled with no",
134 "default value for the rsync-local-path command.",
136 "To change this, run the configure script with --with-rsync=<path>,",
137 "where <path> is the absolute path to the rsync binary.",
143 for (c = 0; text[c] != 0; ++c) {
144 std::cerr << text[c] << std::endl;
150 char const * argv[256] = { 0 };
156 argv[argc++] =
"<program>";
157 argv[argc++] =
"--archive";
205 +
static_cast<std::string
>(
"/")
207 +
static_cast<std::string
>(
".log")
213 +
static_cast<std::string
>(
"/")
215 +
static_cast<std::string
>(
".report")
220 assert(find(subdir.begin(), subdir.end(),
"AUTHORS") != subdir.end());
221 assert(find(subdir.begin(), subdir.end(),
"COPYING") != subdir.end());
222 assert(find(subdir.begin(), subdir.end(),
"INSTALL") != subdir.end());
223 assert(find(subdir.begin(), subdir.end(),
"Makefile") != subdir.end());
224 assert(find(subdir.begin(), subdir.end(),
"Makefile.in") != subdir.end());
225 assert(find(subdir.begin(), subdir.end(),
"README") != subdir.end());
226 assert(find(subdir.begin(), subdir.end(),
"archiver.cc") != subdir.end());
227 assert(find(subdir.begin(), subdir.end(),
"archiver.h") != subdir.end());
228 assert(find(subdir.begin(), subdir.end(),
"config.h") != subdir.end());
229 assert(find(subdir.begin(), subdir.end(),
"config.h.in") != subdir.end());
230 assert(find(subdir.begin(), subdir.end(),
"configure") != subdir.end());
231 assert(find(subdir.begin(), subdir.end(),
"error.cc") != subdir.end());
232 assert(find(subdir.begin(), subdir.end(),
"error.h") != subdir.end());
233 assert(find(subdir.begin(), subdir.end(),
"estring.cc") != subdir.end());
234 assert(find(subdir.begin(), subdir.end(),
"estring.h") != subdir.end());
235 assert(find(subdir.begin(), subdir.end(),
"exec.cc") != subdir.end());
236 assert(find(subdir.begin(), subdir.end(),
"exec.h") != subdir.end());
237 assert(find(subdir.begin(), subdir.end(),
"fs.cc") != subdir.end());
238 assert(find(subdir.begin(), subdir.end(),
"fs.h") != subdir.end());
239 assert(find(subdir.begin(), subdir.end(),
"help.cc") != subdir.end());
240 assert(find(subdir.begin(), subdir.end(),
"help.h") != subdir.end());
241 assert(find(subdir.begin(), subdir.end(),
"logger.cc") != subdir.end());
242 assert(find(subdir.begin(), subdir.end(),
"logger.h") != subdir.end());
243 assert(find(subdir.begin(), subdir.end(),
"make-test-fs-cc") != subdir.end());
244 assert(find(subdir.begin(), subdir.end(),
"rconfig.cc") != subdir.end());
245 assert(find(subdir.begin(), subdir.end(),
"rconfig.h") != subdir.end());
246 assert(find(subdir.begin(), subdir.end(),
"rmath.h") != subdir.end());
247 assert(find(subdir.begin(), subdir.end(),
"rvm.cc") != subdir.end());
248 assert(find(subdir.begin(), subdir.end(),
"rvm.1") != subdir.end());
249 assert(find(subdir.begin(), subdir.end(),
"rvm.1.in") != subdir.end());
250 assert(find(subdir.begin(), subdir.end(),
"test-rvm-001.cc") != subdir.end());
251 assert(find(subdir.begin(), subdir.end(),
"test-error.cc") != subdir.end());
252 assert(find(subdir.begin(), subdir.end(),
"test-estring.cc") != subdir.end());
253 assert(find(subdir.begin(), subdir.end(),
"test-exec.cc") != subdir.end());
254 assert(find(subdir.begin(), subdir.end(),
"test-fs-cwd.cc") != subdir.end());
255 assert(find(subdir.begin(), subdir.end(),
"test-fs.cc") != subdir.end());
257 assert(find(subdir.begin(), subdir.end(),
"test-logger.cc") != subdir.end());
259 assert(find(subdir.begin(), subdir.end(),
"test-rmath.cc") != subdir.end());
260 assert(find(subdir.begin(), subdir.end(),
"test-strfmt.cc") != subdir.end());
261 assert(find(subdir.begin(), subdir.end(),
"test-timer.cc") != subdir.end());
262 assert(find(subdir.begin(), subdir.end(),
"test-tstamp.cc") != subdir.end());
263 assert(find(subdir.begin(), subdir.end(),
"test-types.cc") != subdir.end());
264 assert(find(subdir.begin(), subdir.end(),
"timer.cc") != subdir.end());
265 assert(find(subdir.begin(), subdir.end(),
"timer.h") != subdir.end());
266 assert(find(subdir.begin(), subdir.end(),
"tstamp.cc") != subdir.end());
267 assert(find(subdir.begin(), subdir.end(),
"tstamp.h") != subdir.end());
268 assert(find(subdir.begin(), subdir.end(),
"types.h") != subdir.end());
269 assert(find(subdir.begin(), subdir.end(),
"vaulter.cc") != subdir.end());
270 assert(find(subdir.begin(), subdir.end(),
"vaulter.h") != subdir.end());
286 char const * argv[256] = { 0 };
292 argv[argc++] =
"<program>";
293 argv[argc++] =
"--archive";
341 if (subdir.size() == 0) {
342 std::string filename;
345 bool found_usage_error =
false;
346 char line_cstr[2048] = { 0 };
349 filename =
"./test-rvm.dir/log.dir/";
352 in.open(filename.c_str());
353 assert(in.is_open());
354 while (in.getline(line_cstr,2048)) {
356 if (line.find(
"Rsync exit code: [1]") != std::string::npos)
357 found_usage_error =
true;
358 for (c = 0; c < 2048; line_cstr[c++] = 0);
362 if (found_usage_error) {
364 <<
"*** NOTICE: One test has failed, the test that uses rsync with"
366 <<
" the --hard-links and --link-dest command line"
368 <<
" options. Rsync reported a syntax or usage error,"
370 <<
" which may indicate that this version of rsync is"
372 <<
" old enough to not have these options."
375 <<
" In order to be able to hard-link files that have"
377 <<
" not changed from one archive to the next, you"
379 <<
" will have to upgrade rsync."
383 assert(found_usage_error);
386 assert(find(subdir.begin(), subdir.end(),
"AUTHORS") != subdir.end());
387 assert(find(subdir.begin(), subdir.end(),
"COPYING") != subdir.end());
388 assert(find(subdir.begin(), subdir.end(),
"INSTALL") != subdir.end());
389 assert(find(subdir.begin(), subdir.end(),
"Makefile") != subdir.end());
390 assert(find(subdir.begin(), subdir.end(),
"Makefile.in") != subdir.end());
391 assert(find(subdir.begin(), subdir.end(),
"README") != subdir.end());
392 assert(find(subdir.begin(), subdir.end(),
"archiver.cc") != subdir.end());
393 assert(find(subdir.begin(), subdir.end(),
"archiver.h") != subdir.end());
394 assert(find(subdir.begin(), subdir.end(),
"config.h") != subdir.end());
395 assert(find(subdir.begin(), subdir.end(),
"config.h.in") != subdir.end());
396 assert(find(subdir.begin(), subdir.end(),
"configure") != subdir.end());
397 assert(find(subdir.begin(), subdir.end(),
"error.cc") != subdir.end());
398 assert(find(subdir.begin(), subdir.end(),
"error.h") != subdir.end());
399 assert(find(subdir.begin(), subdir.end(),
"estring.cc") != subdir.end());
400 assert(find(subdir.begin(), subdir.end(),
"estring.h") != subdir.end());
401 assert(find(subdir.begin(), subdir.end(),
"exec.cc") != subdir.end());
402 assert(find(subdir.begin(), subdir.end(),
"exec.h") != subdir.end());
403 assert(find(subdir.begin(), subdir.end(),
"fs.cc") != subdir.end());
404 assert(find(subdir.begin(), subdir.end(),
"fs.h") != subdir.end());
405 assert(find(subdir.begin(), subdir.end(),
"help.cc") != subdir.end());
406 assert(find(subdir.begin(), subdir.end(),
"help.h") != subdir.end());
407 assert(find(subdir.begin(), subdir.end(),
"logger.cc") != subdir.end());
408 assert(find(subdir.begin(), subdir.end(),
"logger.h") != subdir.end());
409 assert(find(subdir.begin(), subdir.end(),
"make-test-fs-cc") != subdir.end());
410 assert(find(subdir.begin(), subdir.end(),
"rconfig.cc") != subdir.end());
411 assert(find(subdir.begin(), subdir.end(),
"rconfig.h") != subdir.end());
412 assert(find(subdir.begin(), subdir.end(),
"rmath.h") != subdir.end());
413 assert(find(subdir.begin(), subdir.end(),
"rvm.cc") != subdir.end());
414 assert(find(subdir.begin(), subdir.end(),
"rvm.1") != subdir.end());
415 assert(find(subdir.begin(), subdir.end(),
"rvm.1.in") != subdir.end());
416 assert(find(subdir.begin(), subdir.end(),
"test-rvm-001.cc") != subdir.end());
417 assert(find(subdir.begin(), subdir.end(),
"test-error.cc") != subdir.end());
418 assert(find(subdir.begin(), subdir.end(),
"test-estring.cc") != subdir.end());
419 assert(find(subdir.begin(), subdir.end(),
"test-exec.cc") != subdir.end());
420 assert(find(subdir.begin(), subdir.end(),
"test-fs-cwd.cc") != subdir.end());
421 assert(find(subdir.begin(), subdir.end(),
"test-fs.cc") != subdir.end());
423 assert(find(subdir.begin(), subdir.end(),
"test-logger.cc") != subdir.end());
425 assert(find(subdir.begin(), subdir.end(),
"test-rmath.cc") != subdir.end());
426 assert(find(subdir.begin(), subdir.end(),
"test-strfmt.cc") != subdir.end());
427 assert(find(subdir.begin(), subdir.end(),
"test-timer.cc") != subdir.end());
428 assert(find(subdir.begin(), subdir.end(),
"test-tstamp.cc") != subdir.end());
429 assert(find(subdir.begin(), subdir.end(),
"test-types.cc") != subdir.end());
430 assert(find(subdir.begin(), subdir.end(),
"timer.cc") != subdir.end());
431 assert(find(subdir.begin(), subdir.end(),
"timer.h") != subdir.end());
432 assert(find(subdir.begin(), subdir.end(),
"tstamp.cc") != subdir.end());
433 assert(find(subdir.begin(), subdir.end(),
"tstamp.h") != subdir.end());
434 assert(find(subdir.begin(), subdir.end(),
"types.h") != subdir.end());
435 assert(find(subdir.begin(), subdir.end(),
"vaulter.cc") != subdir.end());
436 assert(find(subdir.begin(), subdir.end(),
"vaulter.h") != subdir.end());
444 static_cast<std::string>(
"./test-rvm.dir/catalog.dir/")
463 char const * argv[256] = { 0 };
469 argv[argc++] =
"<program>";
470 argv[argc++] =
"--archive";
480 file = adir[1].c_str();
483 unlink(file.c_str());
524 if (subdir.size() == 0) {
525 std::string filename;
528 bool found_usage_error =
false;
529 char line_cstr[2048] = { 0 };
532 filename =
"./test-rvm.dir/log.dir/";
535 in.open(filename.c_str());
536 assert(in.is_open());
537 while (in.getline(line_cstr,2048)) {
539 if (line.find(
"Rsync exit code: [1]") != std::string::npos)
540 found_usage_error =
true;
541 for (c = 0; c < 2048; line_cstr[c++] = 0);
545 if (found_usage_error) {
547 <<
"*** NOTICE: One test has failed, the test that uses rsync with"
549 <<
" the --hard-links and --link-dest command line"
551 <<
" options. Rsync reported a syntax or usage error,"
553 <<
" which may indicate that this version of rsync is"
555 <<
" old enough to not have these options."
558 <<
" In order to be able to hard-link files that have"
560 <<
" not changed from one archive to the next, you"
562 <<
" will have to upgrade rsync."
566 assert(found_usage_error);
569 assert(find(subdir.begin(), subdir.end(),
"AUTHORS") != subdir.end());
570 assert(find(subdir.begin(), subdir.end(),
"COPYING") != subdir.end());
571 assert(find(subdir.begin(), subdir.end(),
"INSTALL") != subdir.end());
572 assert(find(subdir.begin(), subdir.end(),
"Makefile") != subdir.end());
573 assert(find(subdir.begin(), subdir.end(),
"Makefile.in") != subdir.end());
574 assert(find(subdir.begin(), subdir.end(),
"README") != subdir.end());
575 assert(find(subdir.begin(), subdir.end(),
"archiver.cc") != subdir.end());
576 assert(find(subdir.begin(), subdir.end(),
"archiver.h") != subdir.end());
577 assert(find(subdir.begin(), subdir.end(),
"config.h") != subdir.end());
578 assert(find(subdir.begin(), subdir.end(),
"config.h.in") != subdir.end());
579 assert(find(subdir.begin(), subdir.end(),
"configure") != subdir.end());
580 assert(find(subdir.begin(), subdir.end(),
"error.cc") != subdir.end());
581 assert(find(subdir.begin(), subdir.end(),
"error.h") != subdir.end());
582 assert(find(subdir.begin(), subdir.end(),
"estring.cc") != subdir.end());
583 assert(find(subdir.begin(), subdir.end(),
"estring.h") != subdir.end());
584 assert(find(subdir.begin(), subdir.end(),
"exec.cc") != subdir.end());
585 assert(find(subdir.begin(), subdir.end(),
"exec.h") != subdir.end());
586 assert(find(subdir.begin(), subdir.end(),
"fs.cc") != subdir.end());
587 assert(find(subdir.begin(), subdir.end(),
"fs.h") != subdir.end());
588 assert(find(subdir.begin(), subdir.end(),
"help.cc") != subdir.end());
589 assert(find(subdir.begin(), subdir.end(),
"help.h") != subdir.end());
590 assert(find(subdir.begin(), subdir.end(),
"logger.cc") != subdir.end());
591 assert(find(subdir.begin(), subdir.end(),
"logger.h") != subdir.end());
592 assert(find(subdir.begin(), subdir.end(),
"make-test-fs-cc") != subdir.end());
593 assert(find(subdir.begin(), subdir.end(),
"rconfig.cc") != subdir.end());
594 assert(find(subdir.begin(), subdir.end(),
"rconfig.h") != subdir.end());
595 assert(find(subdir.begin(), subdir.end(),
"rmath.h") != subdir.end());
596 assert(find(subdir.begin(), subdir.end(),
"rvm.cc") != subdir.end());
597 assert(find(subdir.begin(), subdir.end(),
"rvm.1") != subdir.end());
598 assert(find(subdir.begin(), subdir.end(),
"rvm.1.in") != subdir.end());
599 assert(find(subdir.begin(), subdir.end(),
"test-rvm-001.cc") != subdir.end());
600 assert(find(subdir.begin(), subdir.end(),
"test-error.cc") != subdir.end());
601 assert(find(subdir.begin(), subdir.end(),
"test-estring.cc") != subdir.end());
602 assert(find(subdir.begin(), subdir.end(),
"test-exec.cc") != subdir.end());
603 assert(find(subdir.begin(), subdir.end(),
"test-fs-cwd.cc") != subdir.end());
604 assert(find(subdir.begin(), subdir.end(),
"test-fs.cc") != subdir.end());
606 assert(find(subdir.begin(), subdir.end(),
"test-logger.cc") != subdir.end());
608 assert(find(subdir.begin(), subdir.end(),
"test-rmath.cc") != subdir.end());
609 assert(find(subdir.begin(), subdir.end(),
"test-strfmt.cc") != subdir.end());
610 assert(find(subdir.begin(), subdir.end(),
"test-timer.cc") != subdir.end());
611 assert(find(subdir.begin(), subdir.end(),
"test-tstamp.cc") != subdir.end());
612 assert(find(subdir.begin(), subdir.end(),
"test-types.cc") != subdir.end());
613 assert(find(subdir.begin(), subdir.end(),
"timer.cc") != subdir.end());
614 assert(find(subdir.begin(), subdir.end(),
"timer.h") != subdir.end());
615 assert(find(subdir.begin(), subdir.end(),
"tstamp.cc") != subdir.end());
616 assert(find(subdir.begin(), subdir.end(),
"tstamp.h") != subdir.end());
617 assert(find(subdir.begin(), subdir.end(),
"types.h") != subdir.end());
618 assert(find(subdir.begin(), subdir.end(),
"vaulter.cc") != subdir.end());
619 assert(find(subdir.begin(), subdir.end(),
"vaulter.h") != subdir.end());
629 static_cast<std::string>(
"./test-rvm.dir/catalog.dir/")
646 int main(
int argc,
char const * argv[])
void init(int argc, char const *argv[])
Initialize the configuration manager from rvm's command line options.
std::string reform_path(const std::string &a_path)
Reformat a path to remove double slashes.
void mk_dir(const std::string &a_path)
Create a directory.
void clear(void)
Clear the vault manager.
log_manager logger
The global log manager.
void path(const std::string a_path)
Retrieve information about a pathname.
bool test_inodes(const std::string &path1, const std::string &path2, const std::string &file)
void init(void)
Initialize the vault manager.
An extended string class.
void clear(void)
Clear the archive manager and clear the job list.
void catalog(void)
Create or update the catalog.
void clear(void)
Reset the catalog manager.
void default_file(const std::string &a_path)
Set the default configuration filename.
const class timestamp & timestamp(void) const
Return the timestamp of this instance of rvm.
const std::string & log_dir(void) const
Return the log-dir path.
const inode_type inode(void) const
Return the file inode.
archive_manager archiver
The global archive manager.
void set_total_time(const timer &a_class)
Report the overall RVM time.
void clear(void)
Reset configuration to default settings.
void clear(void)
Clear all values.
report_manager reporter
The global report manager.
bool exists(const std::string &a_path)
Return true if the file or directory exists.
void file_report(void)
Save report to a file.
void start(void)
Start (or restart) the timer.
catalog_manager cataloger
The global catalog manager.
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.
const std::string vault(void) const
Return the path to the selected vault.
int main(int argc, char const *argv[])
void clear(void)
Clear the log manager.
void init(void)
Initialize the log manager.
configuration_manager config
The global configuration manager instance.
Retrieve information about a file or directory.
void init(void)
Initialize the catalog manager.
void init(void)
Initialize the archive manager.
const jobs_type & jobs(void) const
Return a list of jobs.
const std::string str(void) const
Generate a string.
void archive(void)
Archive jobs.
bool make_dir(const std::string &path)
void stop(void)
Stop the timer.
Retrieve a list of files in a subdirectory that match a given wildcard filename.
void init(void)
Initialize.
vault_manager vaulter
The global vault manager.