test-rvm-001.cc

Go to the documentation of this file.
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 // #define ERR_OUT(e)
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                         // reporter.print_report();
00185                         reporter.file_report();
00186                         logger.clear();
00187 
00188                         // std::cerr << "vaulter.vault() == " << vaulter.vault() << std::endl;
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                         // std::cout << "dir = " << dir << std::endl;
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                         // assert(find(subdir.begin(), subdir.end(), "test-job.cc") != subdir.end());
00255                         assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
00256                         // assert(find(subdir.begin(), subdir.end(), "test-rconfig.cc") != subdir.end());
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                         // reporter.print_report();
00319                         reporter.file_report();
00320                         logger.clear();
00321 
00322                         // std::cerr << "vaulter.vault() == " << vaulter.vault() << std::endl;
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                         // std::cout << "dir = " << dir << std::endl;
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                         // assert(find(subdir.begin(), subdir.end(), "test-job.cc") != subdir.end());
00372                         assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
00373                         // assert(find(subdir.begin(), subdir.end(), "test-rconfig.cc") != subdir.end());
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                         // reporter.print_report();
00436                         reporter.file_report();
00437                         logger.clear();
00438 
00439                         // std::cerr << "vaulter.vault() == " << vaulter.vault() << std::endl;
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                         // std::cout << "dir = " << dir << std::endl;
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                         // assert(find(subdir.begin(), subdir.end(), "test-job.cc") != subdir.end());
00489                         assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
00490                         // assert(find(subdir.begin(), subdir.end(), "test-rconfig.cc") != subdir.end());
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                         // reporter.print_report();
00555                         reporter.file_report();
00556                         logger.clear();
00557 
00558                         // std::cerr << "vaulter.vault() == " << vaulter.vault() << std::endl;
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                         // std::cout << "dir = " << dir << std::endl;
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                                 // assert(find(subdir.begin(), subdir.end(), "test-job.cc") != subdir.end());
00653                                 assert(find(subdir.begin(), subdir.end(), "test-logger.cc") != subdir.end());
00654                                 // assert(find(subdir.begin(), subdir.end(), "test-rconfig.cc") != subdir.end());
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                         // TODO: Check output
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 

Generated on Fri Jun 23 16:46:31 2006 for rvm by  doxygen 1.4.2