test-fs.cc

Go to the documentation of this file.
00001 #include "config.h"
00002 
00003 #include <iostream>
00004 #include <fstream>
00005 #include <cstdio>
00006 #include <cassert>
00007 
00008 #include "asserts.h"
00009 #include "error.h"
00010 #include "fs.h"
00011 
00012 #include "test-fs-cwd.h"
00013 
00014 #define TRY_COMMAND(code) \
00015         thrown = false; \
00016         try { \
00017                 code; \
00018         } \
00019         catch(...) { \
00020                 thrown = true; \
00021         }
00022 
00023 void create_file(const std::string& pathname, uint32 size)
00024 {
00025         FILE *out = 0;
00026         char alpha[] = 
00027                 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
00028         int alpha_len = strlen(alpha);
00029         uint32 count;
00030 
00031         out = fopen(pathname.c_str(), "wb");
00032         if (out == 0) {
00033                 std::string es;
00034 
00035                 es = "Could not open file \"";
00036                 es += pathname;
00037                 es += "\"";
00038 
00039                 throw(ERROR(0,es));
00040         }
00041         for (count = 0; count < size; count++) {
00042                 if (fputc(alpha[count % alpha_len], out) == EOF) {
00043                         std::string es;
00044 
00045                         es = "Write error on file \"";
00046                         es += pathname;
00047                         es += "\"";
00048 
00049                         throw(ERROR(0,es));
00050                 }
00051         }
00052         if (fclose(out) != 0) {
00053                 std::string es;
00054 
00055                 es = "Close error on file \"";
00056                 es += pathname;
00057                 es += "\"";
00058 
00059                 throw(ERROR(0,es));
00060         }
00061 }
00062 
00063 void cleanup(void)
00064 {
00065         int r = 0;
00066         
00067         r = system("rm -fr ./test-fs.dir");
00068         assert(r == 0);
00069 }
00070 
00071 void test_cwd(void)
00072 {
00073         assert(cwd() == check_cwd);
00074 }
00075 
00076 void test_reform_path(void)
00077 {
00078         assert(reform_path("") == "");
00079         assert(reform_path("/") == "/");
00080         assert(reform_path("//") == "/");
00081         assert(reform_path("//var") == "/var");
00082         assert(reform_path("/var") == "/var");
00083         assert(reform_path("/var/rvm") == "/var/rvm");
00084         assert(reform_path("/var/rvm//") == "/var/rvm/");
00085         assert(reform_path("//var//rvm/////") == "/var/rvm/");
00086 }
00087 
00088 void test_permute_path(void)
00089 {
00090         assert(permute_path("") == "root");
00091         assert(permute_path("/") == "root");
00092         assert(permute_path("//") == "root");
00093         assert(permute_path("//var") == "var");
00094         assert(permute_path("/var") == "var");
00095         assert(permute_path("/var/rvm") == "var-rvm");
00096         assert(permute_path("/var/rvm//") == "var-rvm");
00097         assert(permute_path("//var//rvm/////") == "var-rvm");
00098 }
00099 
00100 void test_exists(void)
00101 {
00102         assert(exists("./ChangeLog"));
00103         assert(exists("./INSTALL"));
00104         assert(!exists("./lkjsdflkjsdf.h"));
00105 }
00106 
00107 void test_readable(void)
00108 {
00109         assert(readable("./ChangeLog"));
00110         assert(readable("./INSTALL"));
00111 }
00112 
00113 void test_writable(void)
00114 {
00115         assert(writable("./ChangeLog"));
00116         assert(writable("./INSTALL"));
00117 }
00118 
00119 void test_executable(void)
00120 {
00121         assert(!exists("./test-fs") || executable("./test-fs"));
00122         assert(!exists("./test-fs.exe") || executable("./test-fs.exe"));
00123 }
00124 
00125 void test_mk_dir(void)
00126 {
00127         bool thrown;
00128 
00129         assert(!exists("./test-fs.dir"));
00130         TRY_COMMAND(mk_dir("./test-fs.dir"));
00131         assert(!thrown);
00132         assert(exists("./test-fs.dir"));
00133 }
00134 
00135 void test_rm_dir(void)
00136 {
00137         bool thrown;
00138 
00139         assert(exists("./test-fs.dir"));
00140         TRY_COMMAND(rm_dir("./test-fs.dir"));
00141         assert(!thrown);
00142         assert(!exists("./test-fs.dir"));
00143 }
00144 
00145 void test_rm_file(void)
00146 {
00147         bool thrown;
00148 
00149         if (!exists("./test-fs.dir"))
00150                 mk_dir("./test-fs.dir");
00151         create_file("./test-fs.dir/file", 1024);
00152         assert(exists("./test-fs.dir/file"));
00153         TRY_COMMAND(rm_file("./test-fs.dir/file"));
00154         assert(!thrown);
00155         assert(!exists("./test-fs.dir/file"));
00156         TRY_COMMAND(rm_file("./test-fs.dir"));
00157         assert(thrown);
00158         TRY_COMMAND(rm_dir("./test-fs.dir"));
00159         assert(!thrown);
00160         assert(!exists("./test-fs.dir"));
00161 }
00162 
00163 void test_mk_dirhier(void)
00164 {
00165         bool thrown;
00166 
00167         assert(!exists("./test-fs.dir"));
00168         TRY_COMMAND(mk_dirhier("./test-fs.dir/etc/rvm"));
00169         assert(!thrown);
00170         assert(exists("./test-fs.dir"));
00171         assert(exists("./test-fs.dir/etc"));
00172         assert(exists("./test-fs.dir/etc/rvm"));
00173         TRY_COMMAND(mk_dirhier("./test-fs.dir/var/rvm"));
00174         assert(!thrown);
00175         assert(exists("./test-fs.dir"));
00176         assert(exists("./test-fs.dir/var"));
00177         assert(exists("./test-fs.dir/var/rvm"));
00178 }
00179 
00180 void test_filestatus(void)
00181 {
00182         bool thrown;
00183         filestatus f;
00184 
00185         assert(exists("./test-fs.dir"));
00186         assert(exists("./test-fs.dir/etc"));
00187         assert(exists("./test-fs.dir/etc/rvm"));
00188         assert(exists("./test-fs.dir/var"));
00189         assert(exists("./test-fs.dir/var/rvm"));
00190         create_file("./test-fs.dir/file1",1024);
00191         create_file("./test-fs.dir/file2",234);
00192         create_file("./test-fs.dir/etc/file1",988);
00193         create_file("./test-fs.dir/etc/rvm/file1",333);
00194         create_file("./test-fs.dir/var/rvm/file1",4484);
00195 
00196         TRY_COMMAND(f.path("./test-fs.dir"));
00197         assert(!thrown);
00198 #ifdef S_ISDIR
00199         assert(f.is_directory());
00200 #endif
00201 
00202         TRY_COMMAND(f.path("./test-fs.dir/file1"));
00203         assert(!thrown);
00204 #ifdef S_ISREG
00205         assert(f.is_regular_file());
00206 #endif
00207         assert(f.size() == 1024);
00208 
00209         TRY_COMMAND(f.path("./test-fs.dir/var/rvm/file1"));
00210         assert(!thrown);
00211 #ifdef S_ISREG
00212         assert(f.is_regular_file());
00213 #endif
00214         assert(f.size() == 4484);
00215 }
00216 
00217 void test_mk_symlink(void)
00218 {
00219         bool thrown;
00220         filestatus f;
00221 
00222         assert(exists("./test-fs.dir/file2"));
00223         TRY_COMMAND(mk_symlink("file2", "./test-fs.dir/link-file2"));
00224         assert(!thrown);
00225         assert(exists("./test-fs.dir/link-file2"));
00226         TRY_COMMAND(f.path("./test-fs.dir/link-file2"));
00227         assert(!thrown);
00228 #ifdef S_ISLNK
00229         assert(f.is_link());
00230         assert(f.link() == "file2");
00231 #endif
00232 }
00233 
00234 void test_mk_relative_symlink(void)
00235 {
00236         bool thrown;
00237         filestatus f;
00238 
00239         assert(exists("./test-fs.dir/etc/rvm"));
00240         assert(exists("./test-fs.dir/file1"));
00241         assert(exists("./test-fs.dir/var/rvm"));
00242         TRY_COMMAND(
00243                 mk_relative_symlink("./test-fs.dir/file1","./test-fs.dir/link-file1"));
00244         assert(!thrown);
00245         assert(exists("./test-fs.dir/link-file1"));
00246         TRY_COMMAND(f.path("./test-fs.dir/link-file1"));
00247         assert(!thrown);
00248 #ifdef S_ISLNK
00249         assert(f.is_link());
00250         assert(f.link() == "file1");
00251 #endif
00252         TRY_COMMAND(
00253                 mk_relative_symlink("./test-fs.dir/file1",
00254                         "./test-fs.dir/etc/rvm/link-file1"));
00255         assert(!thrown);
00256         assert(exists("./test-fs.dir/etc/rvm/link-file1"));
00257         TRY_COMMAND(f.path("./test-fs.dir/etc/rvm/link-file1"));
00258         assert(!thrown);
00259 #ifdef S_ISLNK
00260         assert(f.is_link());
00261         assert(f.link() == "../../file1");
00262 #endif
00263         TRY_COMMAND(
00264                 mk_relative_symlink("./test-fs.dir/var/rvm/file1",
00265                         "./test-fs.dir/etc/rvm/link-rvm-file1"));
00266         assert(!thrown);
00267         assert(exists("./test-fs.dir/etc/rvm/link-rvm-file1"));
00268         TRY_COMMAND(f.path("./test-fs.dir/etc/rvm/link-rvm-file1"));
00269 #ifdef S_INLNK
00270         assert(f.is_link());
00271         assert(f.link() == "../../var/rvm/file1");
00272 #endif
00273 }
00274 
00275 const subdirectory test_subdirectory_sub(void)
00276 {
00277         subdirectory subdir;
00278 
00279         subdir.path("./test-fs.dir/etc/rvm","l*1");
00280         return(subdir);
00281 }
00282 
00283 void test_subdirectory(void)
00284 {
00285         bool thrown;
00286         subdirectory subdir;
00287         subdirectory subdir2;
00288         subdirectory subdir3;
00289 
00290         TRY_COMMAND(subdir.path("./test-fs.dir"));
00291         assert(!thrown);
00292         assert(subdir.size() == 6);
00293         assert(subdir[0] == "etc");
00294         assert(subdir[1] == "file1");
00295         assert(subdir[2] == "file2");
00296         assert(subdir[3] == "link-file1");
00297         assert(subdir[4] == "link-file2");
00298         assert(subdir[5] == "var");
00299 
00300         TRY_COMMAND(subdir.path("./test-fs.dir","l*"));
00301         assert(!thrown);
00302         assert(subdir.size() == 2);
00303         assert(subdir[0] == "link-file1");
00304         assert(subdir[1] == "link-file2");
00305 
00306         TRY_COMMAND(subdir.path("./test-fs.dir/etc/rvm","l*1"));
00307         assert(!thrown);
00308         assert(subdir.size() == 2);
00309         assert(subdir[0] == "link-file1");
00310         assert(subdir[1] == "link-rvm-file1");
00311 
00312         TRY_COMMAND(subdir2 = subdir);
00313         assert(!thrown);
00314         assert(subdir2.size() == 2);
00315         assert(subdir2[0] == "link-file1");
00316         assert(subdir2[1] == "link-rvm-file1");
00317 
00318         TRY_COMMAND(subdir3 = test_subdirectory_sub());
00319         assert(!thrown);
00320         assert(subdir3.size() == 2);
00321         assert(subdir3[0] == "link-file1");
00322         assert(subdir3[1] == "link-rvm-file1");
00323 }
00324 
00325 void test_directory(void)
00326 {
00327         bool thrown;
00328         directory dir;
00329 
00330         TRY_COMMAND(dir.path("./test-fs.dir"));
00331         assert(!thrown);
00332         assert(dir.size() == 1);
00333         assert(dir[0] == "./test-fs.dir");
00334         
00335         TRY_COMMAND(dir.path("./test-fs.dir/*"));
00336         assert(!thrown);
00337         assert(dir.size() == 6);
00338         assert(dir[0] == "./test-fs.dir/etc");
00339         assert(dir[1] == "./test-fs.dir/file1");
00340         assert(dir[2] == "./test-fs.dir/file2");
00341         assert(dir[3] == "./test-fs.dir/link-file1");
00342         assert(dir[4] == "./test-fs.dir/link-file2");
00343         assert(dir[5] == "./test-fs.dir/var");
00344 
00345         TRY_COMMAND(dir.path("./test-fs.dir/etc/rvm/l*1"));
00346         assert(!thrown);
00347         assert(dir.size() == 2);
00348         assert(dir[0] == "./test-fs.dir/etc/rvm/link-file1");
00349         assert(dir[1] == "./test-fs.dir/etc/rvm/link-rvm-file1");
00350 
00351         TRY_COMMAND(dir.path("./test-fs.dir/*/*/*"));
00352         assert(!thrown);
00353         assert(dir.size() == 4);
00354         assert(dir[0] == "./test-fs.dir/etc/rvm/file1");
00355         assert(dir[1] == "./test-fs.dir/etc/rvm/link-file1");
00356         assert(dir[2] == "./test-fs.dir/etc/rvm/link-rvm-file1");
00357         assert(dir[3] == "./test-fs.dir/var/rvm/file1");
00358 }
00359 
00360 void test_rm_recursive(void)
00361 {
00362         bool thrown;
00363 
00364         TRY_COMMAND(rm_recursive("./test-fs.dir"));
00365         assert(!thrown);
00366         assert(!exists("./test-fs.dir"));
00367 }
00368 
00369 void test_mk_relative_path(void)
00370 {
00371         assert(
00372                 mk_relative_path(
00373                         "./test-fs.dir/dir1a/dir2a/dir3a/file.conf",
00374                         "./test-fs.dir/dir1a/dir2a/dir3a"
00375                         )
00376                 == "file.conf"
00377         );
00378         assert(
00379                 mk_relative_path(
00380                         "./test-fs.dir/dir1a/dir2a/dir3a/file.conf",
00381                         "./test-fs.dir/dir1a/dir2a/dir3b"
00382                         )
00383                 == "../dir3a/file.conf"
00384         );
00385         assert(
00386                 mk_relative_path(
00387                         "./test-fs.dir/dir1a/dir2a/dir3a/file.conf",
00388                         "./test-fs.dir/dir1a/dir2b/dir3b"
00389                         )
00390                 == "../../dir2a/dir3a/file.conf"
00391         );
00392         assert(
00393                 mk_relative_path(
00394                         "./test-fs.dir/dir1a/dir2a/dir3a/file.conf",
00395                         "./test-fs.dir/dir1b/dir2b/dir3b"
00396                         )
00397                 == "../../../dir1a/dir2a/dir3a/file.conf"
00398         );
00399         assert(
00400                 mk_relative_path(
00401                         "./test-fs.dir/dir1a/dir2a/dir3a/file.conf",
00402                         "./test-fs.dir.b/dir1b/dir2b/dir3b"
00403                         )
00404                 == "../../../../test-fs.dir/dir1a/dir2a/dir3a/file.conf"
00405         );
00406 }
00407 
00408 void test_filesystem(void)
00409 {
00410         filesystem fsys;
00411 
00412         fsys.path(cwd());
00413 }
00414 
00415 int main(int argc, char *argv[])
00416 {
00417         cleanup();
00418         try {
00419                 test_cwd();
00420                 test_reform_path();
00421                 test_permute_path();
00422                 test_exists();
00423                 test_readable();
00424                 test_writable();
00425                 test_executable();
00426                 test_mk_dir();
00427                 test_rm_dir();
00428                 test_rm_file();
00429                 test_mk_dirhier();
00430                 test_filestatus();
00431                 test_mk_symlink();
00432                 test_mk_relative_symlink();
00433                 test_subdirectory();
00434                 test_directory();
00435                 test_rm_recursive();
00436                 test_mk_relative_path();
00437                 test_filesystem();
00438         }
00439         catch(error e) {
00440                 std::cerr << e;
00441                 assert(0);
00442         }
00443         catch(...) {
00444                 std::cerr << err_unknown;
00445                 assert(0);
00446         }
00447         cleanup();
00448         return(0);
00449 }

Generated on Mon Jul 12 12:02:51 2004 for rvm by doxygen 1.3.6