00001 #include "config.h"
00002
00003 #ifdef HAVE_UNISTD_H
00004 #include <unistd.h>
00005 #endif
00006
00007 #include <iostream>
00008 #include <string>
00009 #include <fstream>
00010 #include <iomanip>
00011 #include <string>
00012 #include <cassert>
00013 #include <algorithm>
00014
00015 #include "asserts.h"
00016 #include "error.h"
00017 #include "fs.h"
00018 #include "rconfig.h"
00019 #include "logger.h"
00020 #include "vaulter.h"
00021 #include "archiver.h"
00022 #include "cataloger.h"
00023 #include "reporter.h"
00024 #include "test-fs-cwd.h"
00025
00026 #define ERR_OUT(e) std::cerr << e
00027
00028
00029 bool make_dir(const std::string& path)
00030 {
00031 bool thrown;
00032 bool value;
00033
00034 thrown = false;
00035 try {
00036 mk_dir(path);
00037 }
00038 catch(...) {
00039 thrown = true;
00040 }
00041
00042 value = (thrown == false);
00043
00044 return(value);
00045 }
00046
00047 void setup(void)
00048 {
00049 std::ofstream out;
00050
00051 assert(make_dir("./test-rvm.dir"));
00052 assert(make_dir("./test-rvm.dir/vault-1"));
00053 assert(make_dir("./test-rvm.dir/vault-2"));
00054 assert(make_dir("./test-rvm.dir/vault-3"));
00055 assert(make_dir("./test-rvm.dir/log.dir"));
00056 assert(make_dir("./test-rvm.dir/catalog.dir"));
00057
00058 out.open("./test-rvm.dir/file-1.conf");
00059 assert(out.is_open());
00060 out << "link-catalog-dir ./test-rvm.dir/catalog.dir" << std::endl;
00061 out << "log-dir ./test-rvm.dir/log.dir" << std::endl;
00062 out << "rsync-local-path " << LOCAL_RSYNC << std::endl;
00063 out << "rsync-parallel 1" << std::endl;
00064 out << "timestamp-resolution second" << std::endl;
00065 out << "vault ./test-rvm.dir/vault-*" << std::endl;
00066 out << "vault-overflow-behavior quit" << std::endl;
00067 out << "vault-overflow-blocks 0" << std::endl;
00068 out << "vault-overflow-inodes 0" << std::endl;
00069 out << "vault-selection-behavior round-robin" << std::endl;
00070 out << "<job>" << std::endl;
00071 out << " jobname test-job" << std::endl;
00072 out << " archive-path jobname/permutation" << std::endl;
00073 out << " path " << check_cwd << "/" << std::endl;
00074 out << " rsync-connection-type local" << std::endl;
00075 out << " rsync-hardlink true" << std::endl;
00076 out << " <rsync-options>" << std::endl;
00077 out << " -a -v --progress --stats" << std::endl;
00078 out << " --exclude '/.svn/'" << std::endl;
00079 out << " --exclude '/.deps/'" << std::endl;
00080 out << " --exclude '/autom4te.cache/'" << std::endl;
00081 out << " --exclude '/test-rvm.dir/'" << std::endl;
00082 out << " </rsync-options>" << std::endl;
00083 out << " rsync-retry-count 3" << std::endl;
00084 out << "</job>" << std::endl;
00085 out.close();
00086 }
00087
00088 void cleanup(void)
00089 {
00090 assert(system("rm -fr ./test-rvm.dir") == 0);
00091 }
00092
00093 bool test_inodes(
00094 const std::string& path1,
00095 const std::string& path2,
00096 const std::string& file
00097 )
00098 {
00099 estring p1, p2;
00100 filestatus f1, f2;
00101 bool r;
00102
00103 p1 = path1;
00104 p1 += "/";
00105 p1 += file;
00106 p1 = reform_path(p1);
00107 f1.path(p1);
00108
00109 p2 = path2;
00110 p2 += "/";
00111 p2 += file;
00112 p2 = reform_path(p2);
00113 f2.path(p2);
00114
00115 r = (f1.inode() == f2.inode());
00116
00117 return(r);
00118 }
00119
00120 void test_rvm(void)
00121 {
00122 std::string local_rsync;
00123 estring adir[4];
00124 int adirc = 0;
00125
00126 local_rsync = LOCAL_RSYNC;
00127 if (local_rsync.size() == 0) {
00128 char *text[] = {
00129 "",
00130 "NOTICE: Skipping this test",
00131 "",
00132 "This test cannot be run because no local rsync binary was found during",
00133 "configuration. This also means that RVM will be compiled with no",
00134 "default value for the rsync-local-path command.",
00135 "",
00136 "To change this, run the configure script with --with-rsync=<path>,",
00137 "where <path> is the absolute path to the rsync binary.",
00138 "",
00139 0
00140 };
00141 int c;
00142
00143 for (c = 0; text[c] != 0; ++c) {
00144 std::cerr << text[c] << std::endl;
00145 }
00146 return;
00147 }
00148
00149 {
00150 char *argv[256] = { 0 };
00151 int argc = 0;
00152 bool thrown = false;
00153 subdirectory subdir;
00154 estring dir;
00155
00156 argv[argc++] = "<program>";
00157 argv[argc++] = "--archive";
00158
00159 cataloger.clear();
00160 archiver.clear();
00161 reporter.clear();
00162 vaulter.clear();
00163 logger.clear();
00164 config.clear();
00165
00166 config.default_file("./test-rvm.dir/file-1.conf");
00167 try {
00168 timer t;
00169
00170 t.start();
00171
00172 config.init(argc, argv);
00173 logger.init();
00174 vaulter.init();
00175 reporter.init();
00176 archiver.init();
00177 archiver.archive();
00178 cataloger.init();
00179 cataloger.catalog();
00180
00181 t.stop();
00182 reporter.set_total_time(t);
00183
00184
00185 reporter.file_report();
00186 logger.clear();
00187
00188
00189 assert(vaulter.vault() == "./test-rvm.dir/vault-1");
00190
00191 dir = vaulter.vault();
00192 dir += "/";
00193 dir += config.timestamp().str();
00194 dir += "/";
00195 dir += config.jobs()[0].generate_archive_path(check_cwd);
00196 adir[adirc++] = dir;
00197
00198
00199
00200 assert(
00201 exists(
00202 config.log_dir()
00203 + static_cast<std::string>("/")
00204 + config.timestamp().str()
00205 + static_cast<std::string>(".log")
00206 )
00207 );
00208 assert(
00209 exists(
00210 config.log_dir()
00211 + static_cast<std::string>("/")
00212 + config.timestamp().str()
00213 + static_cast<std::string>(".report")
00214 )
00215 );
00216
00217 subdir.path(dir);
00218 assert(find(subdir.begin(), subdir.end(), "AUTHORS") != subdir.end());
00219 assert(find(subdir.begin(), subdir.end(), "COPYING") != subdir.end());
00220 assert(find(subdir.begin(), subdir.end(), "INSTALL") != subdir.end());
00221 assert(find(subdir.begin(), subdir.end(), "Makefile") != subdir.end());
00222 assert(find(subdir.begin(), subdir.end(), "Makefile.in") != subdir.end());
00223 assert(find(subdir.begin(), subdir.end(), "README") != subdir.end());
00224 assert(find(subdir.begin(), subdir.end(), "archiver.cc") != subdir.end());
00225 assert(find(subdir.begin(), subdir.end(), "archiver.h") != subdir.end());
00226 assert(find(subdir.begin(), subdir.end(), "config.h") != subdir.end());
00227 assert(find(subdir.begin(), subdir.end(), "config.h.in") != subdir.end());
00228 assert(find(subdir.begin(), subdir.end(), "configure") != subdir.end());
00229 assert(find(subdir.begin(), subdir.end(), "error.cc") != subdir.end());
00230 assert(find(subdir.begin(), subdir.end(), "error.h") != subdir.end());
00231 assert(find(subdir.begin(), subdir.end(), "estring.cc") != subdir.end());
00232 assert(find(subdir.begin(), subdir.end(), "estring.h") != subdir.end());
00233 assert(find(subdir.begin(), subdir.end(), "exec.cc") != subdir.end());
00234 assert(find(subdir.begin(), subdir.end(), "exec.h") != subdir.end());
00235 assert(find(subdir.begin(), subdir.end(), "fs.cc") != subdir.end());
00236 assert(find(subdir.begin(), subdir.end(), "fs.h") != subdir.end());
00237 assert(find(subdir.begin(), subdir.end(), "help.cc") != subdir.end());
00238 assert(find(subdir.begin(), subdir.end(), "help.h") != subdir.end());
00239 assert(find(subdir.begin(), subdir.end(), "logger.cc") != subdir.end());
00240 assert(find(subdir.begin(), subdir.end(), "logger.h") != subdir.end());
00241 assert(find(subdir.begin(), subdir.end(), "make-test-fs-cc") != subdir.end());
00242 assert(find(subdir.begin(), subdir.end(), "rconfig.cc") != subdir.end());
00243 assert(find(subdir.begin(), subdir.end(), "rconfig.h") != subdir.end());
00244 assert(find(subdir.begin(), subdir.end(), "rmath.h") != subdir.end());
00245 assert(find(subdir.begin(), subdir.end(), "rvm.cc") != subdir.end());
00246 assert(find(subdir.begin(), subdir.end(), "rvm.1") != subdir.end());
00247 assert(find(subdir.begin(), subdir.end(), "rvm.1.in") != subdir.end());
00248 assert(find(subdir.begin(), subdir.end(), "test-rvm-001.cc") != subdir.end());
00249 assert(find(subdir.begin(), subdir.end(), "test-error.cc") != subdir.end());
00250 assert(find(subdir.begin(), subdir.end(), "test-estring.cc") != subdir.end());
00251 assert(find(subdir.begin(), subdir.end(), "test-exec.cc") != subdir.end());
00252 assert(find(subdir.begin(), subdir.end(), "test-fs-cwd.cc") != subdir.end());
00253 assert(find(subdir.begin(), subdir.end(), "test-fs.cc") != subdir.end());
00254
00255 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
00256
00257 assert(find(subdir.begin(), subdir.end(), "test-rmath.cc") != subdir.end());
00258 assert(find(subdir.begin(), subdir.end(), "test-strfmt.cc") != subdir.end());
00259 assert(find(subdir.begin(), subdir.end(), "test-timer.cc") != subdir.end());
00260 assert(find(subdir.begin(), subdir.end(), "test-tstamp.cc") != subdir.end());
00261 assert(find(subdir.begin(), subdir.end(), "test-types.cc") != subdir.end());
00262 assert(find(subdir.begin(), subdir.end(), "timer.cc") != subdir.end());
00263 assert(find(subdir.begin(), subdir.end(), "timer.h") != subdir.end());
00264 assert(find(subdir.begin(), subdir.end(), "tstamp.cc") != subdir.end());
00265 assert(find(subdir.begin(), subdir.end(), "tstamp.h") != subdir.end());
00266 assert(find(subdir.begin(), subdir.end(), "types.h") != subdir.end());
00267 assert(find(subdir.begin(), subdir.end(), "vaulter.cc") != subdir.end());
00268 assert(find(subdir.begin(), subdir.end(), "vaulter.h") != subdir.end());
00269 }
00270 catch(error e) {
00271 ERR_OUT(e);
00272 thrown = true;
00273 }
00274 catch(...) {
00275 ERR_OUT(err_unknown);
00276 assert(0);
00277 }
00278 assert(!thrown);
00279 }
00280
00281 sleep(2);
00282
00283 {
00284 char *argv[256] = { 0 };
00285 int argc = 0;
00286 bool thrown = false;
00287 subdirectory subdir;
00288 estring dir;
00289
00290 argv[argc++] = "<program>";
00291 argv[argc++] = "--archive";
00292
00293 cataloger.clear();
00294 archiver.clear();
00295 reporter.clear();
00296 vaulter.clear();
00297 logger.clear();
00298 config.clear();
00299
00300 config.default_file("./test-rvm.dir/file-1.conf");
00301 try {
00302 timer t;
00303
00304 t.start();
00305
00306 config.init(argc, argv);
00307 logger.init();
00308 vaulter.init();
00309 reporter.init();
00310 archiver.init();
00311 archiver.archive();
00312 cataloger.init();
00313 cataloger.catalog();
00314
00315 t.stop();
00316 reporter.set_total_time(t);
00317
00318
00319 reporter.file_report();
00320 logger.clear();
00321
00322
00323 assert(vaulter.vault() == "./test-rvm.dir/vault-2");
00324
00325 dir = vaulter.vault();
00326 dir += "/";
00327 dir += config.timestamp().str();
00328 dir += "/";
00329 dir += config.jobs()[0].generate_archive_path(check_cwd);
00330 adir[adirc++] = dir;
00331
00332
00333
00334 subdir.path(dir);
00335 assert(find(subdir.begin(), subdir.end(), "AUTHORS") != subdir.end());
00336 assert(find(subdir.begin(), subdir.end(), "COPYING") != subdir.end());
00337 assert(find(subdir.begin(), subdir.end(), "INSTALL") != subdir.end());
00338 assert(find(subdir.begin(), subdir.end(), "Makefile") != subdir.end());
00339 assert(find(subdir.begin(), subdir.end(), "Makefile.in") != subdir.end());
00340 assert(find(subdir.begin(), subdir.end(), "README") != subdir.end());
00341 assert(find(subdir.begin(), subdir.end(), "archiver.cc") != subdir.end());
00342 assert(find(subdir.begin(), subdir.end(), "archiver.h") != subdir.end());
00343 assert(find(subdir.begin(), subdir.end(), "config.h") != subdir.end());
00344 assert(find(subdir.begin(), subdir.end(), "config.h.in") != subdir.end());
00345 assert(find(subdir.begin(), subdir.end(), "configure") != subdir.end());
00346 assert(find(subdir.begin(), subdir.end(), "error.cc") != subdir.end());
00347 assert(find(subdir.begin(), subdir.end(), "error.h") != subdir.end());
00348 assert(find(subdir.begin(), subdir.end(), "estring.cc") != subdir.end());
00349 assert(find(subdir.begin(), subdir.end(), "estring.h") != subdir.end());
00350 assert(find(subdir.begin(), subdir.end(), "exec.cc") != subdir.end());
00351 assert(find(subdir.begin(), subdir.end(), "exec.h") != subdir.end());
00352 assert(find(subdir.begin(), subdir.end(), "fs.cc") != subdir.end());
00353 assert(find(subdir.begin(), subdir.end(), "fs.h") != subdir.end());
00354 assert(find(subdir.begin(), subdir.end(), "help.cc") != subdir.end());
00355 assert(find(subdir.begin(), subdir.end(), "help.h") != subdir.end());
00356 assert(find(subdir.begin(), subdir.end(), "logger.cc") != subdir.end());
00357 assert(find(subdir.begin(), subdir.end(), "logger.h") != subdir.end());
00358 assert(find(subdir.begin(), subdir.end(), "make-test-fs-cc") != subdir.end());
00359 assert(find(subdir.begin(), subdir.end(), "rconfig.cc") != subdir.end());
00360 assert(find(subdir.begin(), subdir.end(), "rconfig.h") != subdir.end());
00361 assert(find(subdir.begin(), subdir.end(), "rmath.h") != subdir.end());
00362 assert(find(subdir.begin(), subdir.end(), "rvm.cc") != subdir.end());
00363 assert(find(subdir.begin(), subdir.end(), "rvm.1") != subdir.end());
00364 assert(find(subdir.begin(), subdir.end(), "rvm.1.in") != subdir.end());
00365 assert(find(subdir.begin(), subdir.end(), "test-rvm-001.cc") != subdir.end());
00366 assert(find(subdir.begin(), subdir.end(), "test-error.cc") != subdir.end());
00367 assert(find(subdir.begin(), subdir.end(), "test-estring.cc") != subdir.end());
00368 assert(find(subdir.begin(), subdir.end(), "test-exec.cc") != subdir.end());
00369 assert(find(subdir.begin(), subdir.end(), "test-fs-cwd.cc") != subdir.end());
00370 assert(find(subdir.begin(), subdir.end(), "test-fs.cc") != subdir.end());
00371
00372 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
00373
00374 assert(find(subdir.begin(), subdir.end(), "test-rmath.cc") != subdir.end());
00375 assert(find(subdir.begin(), subdir.end(), "test-strfmt.cc") != subdir.end());
00376 assert(find(subdir.begin(), subdir.end(), "test-timer.cc") != subdir.end());
00377 assert(find(subdir.begin(), subdir.end(), "test-tstamp.cc") != subdir.end());
00378 assert(find(subdir.begin(), subdir.end(), "test-types.cc") != subdir.end());
00379 assert(find(subdir.begin(), subdir.end(), "timer.cc") != subdir.end());
00380 assert(find(subdir.begin(), subdir.end(), "timer.h") != subdir.end());
00381 assert(find(subdir.begin(), subdir.end(), "tstamp.cc") != subdir.end());
00382 assert(find(subdir.begin(), subdir.end(), "tstamp.h") != subdir.end());
00383 assert(find(subdir.begin(), subdir.end(), "types.h") != subdir.end());
00384 assert(find(subdir.begin(), subdir.end(), "vaulter.cc") != subdir.end());
00385 assert(find(subdir.begin(), subdir.end(), "vaulter.h") != subdir.end());
00386 }
00387 catch(error e) {
00388 ERR_OUT(e);
00389 thrown = true;
00390 }
00391 catch(...) {
00392 ERR_OUT(err_unknown);
00393 assert(0);
00394 }
00395 assert(!thrown);
00396 }
00397
00398 sleep(2);
00399
00400 {
00401 char *argv[256] = { 0 };
00402 int argc = 0;
00403 bool thrown = false;
00404 subdirectory subdir;
00405 estring dir;
00406
00407 argv[argc++] = "<program>";
00408 argv[argc++] = "--archive";
00409
00410 cataloger.clear();
00411 archiver.clear();
00412 reporter.clear();
00413 vaulter.clear();
00414 logger.clear();
00415 config.clear();
00416
00417 config.default_file("./test-rvm.dir/file-1.conf");
00418 try {
00419 timer t;
00420
00421 t.start();
00422
00423 config.init(argc, argv);
00424 logger.init();
00425 vaulter.init();
00426 reporter.init();
00427 archiver.init();
00428 archiver.archive();
00429 cataloger.init();
00430 cataloger.catalog();
00431
00432 t.stop();
00433 reporter.set_total_time(t);
00434
00435
00436 reporter.file_report();
00437 logger.clear();
00438
00439
00440 assert(vaulter.vault() == "./test-rvm.dir/vault-3");
00441
00442 dir = vaulter.vault();
00443 dir += "/";
00444 dir += config.timestamp().str();
00445 dir += "/";
00446 dir += config.jobs()[0].generate_archive_path(check_cwd);
00447 adir[adirc++] = dir;
00448
00449
00450
00451 subdir.path(dir);
00452 assert(find(subdir.begin(), subdir.end(), "AUTHORS") != subdir.end());
00453 assert(find(subdir.begin(), subdir.end(), "COPYING") != subdir.end());
00454 assert(find(subdir.begin(), subdir.end(), "INSTALL") != subdir.end());
00455 assert(find(subdir.begin(), subdir.end(), "Makefile") != subdir.end());
00456 assert(find(subdir.begin(), subdir.end(), "Makefile.in") != subdir.end());
00457 assert(find(subdir.begin(), subdir.end(), "README") != subdir.end());
00458 assert(find(subdir.begin(), subdir.end(), "archiver.cc") != subdir.end());
00459 assert(find(subdir.begin(), subdir.end(), "archiver.h") != subdir.end());
00460 assert(find(subdir.begin(), subdir.end(), "config.h") != subdir.end());
00461 assert(find(subdir.begin(), subdir.end(), "config.h.in") != subdir.end());
00462 assert(find(subdir.begin(), subdir.end(), "configure") != subdir.end());
00463 assert(find(subdir.begin(), subdir.end(), "error.cc") != subdir.end());
00464 assert(find(subdir.begin(), subdir.end(), "error.h") != subdir.end());
00465 assert(find(subdir.begin(), subdir.end(), "estring.cc") != subdir.end());
00466 assert(find(subdir.begin(), subdir.end(), "estring.h") != subdir.end());
00467 assert(find(subdir.begin(), subdir.end(), "exec.cc") != subdir.end());
00468 assert(find(subdir.begin(), subdir.end(), "exec.h") != subdir.end());
00469 assert(find(subdir.begin(), subdir.end(), "fs.cc") != subdir.end());
00470 assert(find(subdir.begin(), subdir.end(), "fs.h") != subdir.end());
00471 assert(find(subdir.begin(), subdir.end(), "help.cc") != subdir.end());
00472 assert(find(subdir.begin(), subdir.end(), "help.h") != subdir.end());
00473 assert(find(subdir.begin(), subdir.end(), "logger.cc") != subdir.end());
00474 assert(find(subdir.begin(), subdir.end(), "logger.h") != subdir.end());
00475 assert(find(subdir.begin(), subdir.end(), "make-test-fs-cc") != subdir.end());
00476 assert(find(subdir.begin(), subdir.end(), "rconfig.cc") != subdir.end());
00477 assert(find(subdir.begin(), subdir.end(), "rconfig.h") != subdir.end());
00478 assert(find(subdir.begin(), subdir.end(), "rmath.h") != subdir.end());
00479 assert(find(subdir.begin(), subdir.end(), "rvm.cc") != subdir.end());
00480 assert(find(subdir.begin(), subdir.end(), "rvm.1") != subdir.end());
00481 assert(find(subdir.begin(), subdir.end(), "rvm.1.in") != subdir.end());
00482 assert(find(subdir.begin(), subdir.end(), "test-rvm-001.cc") != subdir.end());
00483 assert(find(subdir.begin(), subdir.end(), "test-error.cc") != subdir.end());
00484 assert(find(subdir.begin(), subdir.end(), "test-estring.cc") != subdir.end());
00485 assert(find(subdir.begin(), subdir.end(), "test-exec.cc") != subdir.end());
00486 assert(find(subdir.begin(), subdir.end(), "test-fs-cwd.cc") != subdir.end());
00487 assert(find(subdir.begin(), subdir.end(), "test-fs.cc") != subdir.end());
00488
00489 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
00490
00491 assert(find(subdir.begin(), subdir.end(), "test-rmath.cc") != subdir.end());
00492 assert(find(subdir.begin(), subdir.end(), "test-strfmt.cc") != subdir.end());
00493 assert(find(subdir.begin(), subdir.end(), "test-timer.cc") != subdir.end());
00494 assert(find(subdir.begin(), subdir.end(), "test-tstamp.cc") != subdir.end());
00495 assert(find(subdir.begin(), subdir.end(), "test-types.cc") != subdir.end());
00496 assert(find(subdir.begin(), subdir.end(), "timer.cc") != subdir.end());
00497 assert(find(subdir.begin(), subdir.end(), "timer.h") != subdir.end());
00498 assert(find(subdir.begin(), subdir.end(), "tstamp.cc") != subdir.end());
00499 assert(find(subdir.begin(), subdir.end(), "tstamp.h") != subdir.end());
00500 assert(find(subdir.begin(), subdir.end(), "types.h") != subdir.end());
00501 assert(find(subdir.begin(), subdir.end(), "vaulter.cc") != subdir.end());
00502 assert(find(subdir.begin(), subdir.end(), "vaulter.h") != subdir.end());
00503 }
00504 catch(error e) {
00505 ERR_OUT(e);
00506 thrown = true;
00507 }
00508 catch(...) {
00509 ERR_OUT(err_unknown);
00510 assert(0);
00511 }
00512 assert(!thrown);
00513 }
00514
00515 sleep(2);
00516
00517 {
00518 char *argv[256] = { 0 };
00519 int argc = 0;
00520 bool thrown = false;
00521 subdirectory subdir;
00522 estring dir;
00523
00524 argv[argc++] = "<program>";
00525 argv[argc++] = "--archive";
00526
00527 cataloger.clear();
00528 archiver.clear();
00529 reporter.clear();
00530 vaulter.clear();
00531 logger.clear();
00532 config.clear();
00533
00534 config.default_file("./test-rvm.dir/file-1.conf");
00535 try {
00536 timer t;
00537
00538 t.start();
00539
00540 config.init(argc, argv);
00541 logger.init();
00542 vaulter.init();
00543 reporter.init();
00544 archiver.init();
00545 archiver.archive();
00546 estring path;
00547 filestatus fstat1, fstat2;
00548 cataloger.init();
00549 cataloger.catalog();
00550
00551 t.stop();
00552 reporter.set_total_time(t);
00553
00554
00555 reporter.file_report();
00556 logger.clear();
00557
00558
00559 assert(vaulter.vault() == "./test-rvm.dir/vault-1");
00560
00561 dir = vaulter.vault();
00562 dir += "/";
00563 dir += config.timestamp().str();
00564 dir += "/";
00565 dir += config.jobs()[0].generate_archive_path(check_cwd);
00566 adir[adirc++] = dir;
00567
00568
00569
00570 subdir.path(dir);
00571 if (subdir.size() == 0) {
00572 std::string filename;
00573 std::string line;
00574 std::ifstream in;
00575 bool found_usage_error = false;
00576 char line_cstr[2048] = { 0 };
00577 int c;
00578
00579 filename = "./test-rvm.dir/log.dir/";
00580 filename += config.timestamp().str();
00581 filename += ".log";
00582 in.open(filename.c_str());
00583 assert(in.is_open());
00584 while (in.getline(line_cstr,2048)) {
00585 line = line_cstr;
00586 if (line.find("Rsync exit code: [1]") != std::string::npos)
00587 found_usage_error = true;
00588 for (c = 0; c < 2048; line_cstr[c++] = 0);
00589 }
00590 in.close();
00591
00592 if (found_usage_error) {
00593 std::cerr
00594 << "*** NOTICE: One test has failed, the test that uses rsync with"
00595 << std::endl
00596 << " the --hard-links and --link-dest command line"
00597 << std::endl
00598 << " options. Rsync reported a syntax or usage error,"
00599 << std::endl
00600 << " which may indicate that this version of rsync is"
00601 << std::endl
00602 << " old enough to not have these options."
00603 << std::endl
00604 << std::endl
00605 << " In order to be able to hard-link files that have"
00606 << std::endl
00607 << " not changed from one archive to the next, you"
00608 << std::endl
00609 << " will have to upgrade rsync."
00610 << std::endl
00611 ;
00612 }
00613 assert(found_usage_error);
00614 }
00615 else {
00616 assert(find(subdir.begin(), subdir.end(), "AUTHORS") != subdir.end());
00617 assert(find(subdir.begin(), subdir.end(), "COPYING") != subdir.end());
00618 assert(find(subdir.begin(), subdir.end(), "INSTALL") != subdir.end());
00619 assert(find(subdir.begin(), subdir.end(), "Makefile") != subdir.end());
00620 assert(find(subdir.begin(), subdir.end(), "Makefile.in") != subdir.end());
00621 assert(find(subdir.begin(), subdir.end(), "README") != subdir.end());
00622 assert(find(subdir.begin(), subdir.end(), "archiver.cc") != subdir.end());
00623 assert(find(subdir.begin(), subdir.end(), "archiver.h") != subdir.end());
00624 assert(find(subdir.begin(), subdir.end(), "config.h") != subdir.end());
00625 assert(find(subdir.begin(), subdir.end(), "config.h.in") != subdir.end());
00626 assert(find(subdir.begin(), subdir.end(), "configure") != subdir.end());
00627 assert(find(subdir.begin(), subdir.end(), "error.cc") != subdir.end());
00628 assert(find(subdir.begin(), subdir.end(), "error.h") != subdir.end());
00629 assert(find(subdir.begin(), subdir.end(), "estring.cc") != subdir.end());
00630 assert(find(subdir.begin(), subdir.end(), "estring.h") != subdir.end());
00631 assert(find(subdir.begin(), subdir.end(), "exec.cc") != subdir.end());
00632 assert(find(subdir.begin(), subdir.end(), "exec.h") != subdir.end());
00633 assert(find(subdir.begin(), subdir.end(), "fs.cc") != subdir.end());
00634 assert(find(subdir.begin(), subdir.end(), "fs.h") != subdir.end());
00635 assert(find(subdir.begin(), subdir.end(), "help.cc") != subdir.end());
00636 assert(find(subdir.begin(), subdir.end(), "help.h") != subdir.end());
00637 assert(find(subdir.begin(), subdir.end(), "logger.cc") != subdir.end());
00638 assert(find(subdir.begin(), subdir.end(), "logger.h") != subdir.end());
00639 assert(find(subdir.begin(), subdir.end(), "make-test-fs-cc") != subdir.end());
00640 assert(find(subdir.begin(), subdir.end(), "rconfig.cc") != subdir.end());
00641 assert(find(subdir.begin(), subdir.end(), "rconfig.h") != subdir.end());
00642 assert(find(subdir.begin(), subdir.end(), "rmath.h") != subdir.end());
00643 assert(find(subdir.begin(), subdir.end(), "rvm.cc") != subdir.end());
00644 assert(find(subdir.begin(), subdir.end(), "rvm.1") != subdir.end());
00645 assert(find(subdir.begin(), subdir.end(), "rvm.1.in") != subdir.end());
00646 assert(find(subdir.begin(), subdir.end(), "test-rvm-001.cc") != subdir.end());
00647 assert(find(subdir.begin(), subdir.end(), "test-error.cc") != subdir.end());
00648 assert(find(subdir.begin(), subdir.end(), "test-estring.cc") != subdir.end());
00649 assert(find(subdir.begin(), subdir.end(), "test-exec.cc") != subdir.end());
00650 assert(find(subdir.begin(), subdir.end(), "test-fs-cwd.cc") != subdir.end());
00651 assert(find(subdir.begin(), subdir.end(), "test-fs.cc") != subdir.end());
00652
00653 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
00654
00655 assert(find(subdir.begin(), subdir.end(), "test-rmath.cc") != subdir.end());
00656 assert(find(subdir.begin(), subdir.end(), "test-strfmt.cc") != subdir.end());
00657 assert(find(subdir.begin(), subdir.end(), "test-timer.cc") != subdir.end());
00658 assert(find(subdir.begin(), subdir.end(), "test-tstamp.cc") != subdir.end());
00659 assert(find(subdir.begin(), subdir.end(), "test-types.cc") != subdir.end());
00660 assert(find(subdir.begin(), subdir.end(), "timer.cc") != subdir.end());
00661 assert(find(subdir.begin(), subdir.end(), "timer.h") != subdir.end());
00662 assert(find(subdir.begin(), subdir.end(), "tstamp.cc") != subdir.end());
00663 assert(find(subdir.begin(), subdir.end(), "tstamp.h") != subdir.end());
00664 assert(find(subdir.begin(), subdir.end(), "types.h") != subdir.end());
00665 assert(find(subdir.begin(), subdir.end(), "vaulter.cc") != subdir.end());
00666 assert(find(subdir.begin(), subdir.end(), "vaulter.h") != subdir.end());
00667
00668 assert(test_inodes(adir[0], adir[3], "AUTHORS"));
00669 }
00670
00671
00672 assert(
00673 exists(
00674 static_cast<std::string>("./test-rvm.dir/catalog.dir/")
00675 + config.timestamp().str()
00676 )
00677 );
00678 }
00679 catch(error e) {
00680 ERR_OUT(e);
00681 thrown = true;
00682 }
00683 catch(...) {
00684 ERR_OUT(err_unknown);
00685 assert(0);
00686 }
00687 assert(!thrown);
00688 }
00689 }
00690
00691 int main(int argc, char *argv[])
00692 {
00693 cleanup();
00694 setup();
00695 try {
00696 test_rvm();
00697 }
00698 catch(error e) {
00699 std::cerr << e;
00700 assert(0);
00701 }
00702 catch(...) {
00703 std::cerr << err_unknown;
00704 assert(0);
00705 }
00706 cleanup();
00707 return(0);
00708 }
00709