00001 #include "config.h" 00002 00003 #include <iostream> 00004 #include <string> 00005 #include <cassert> 00006 00007 #ifdef HAVE_UNISTD_H 00008 #include <unistd.h> 00009 #endif 00010 00011 #include <errno.h> 00012 00013 #include "asserts.h" 00014 #include "types.h" 00015 #include "error.h" 00016 #include "estring.h" 00017 #include "fs.h" 00018 #include "tstamp.h" 00019 #include "rconfig.h" 00020 #include "test-rconfig-setup.h" 00021 00022 #define ERR_OUT(e) std::cerr << e; 00023 // #define ERR_OUT(e) 00024 00025 void test(void) 00026 { 00027 char const * argv[256] = { 0 }; 00028 int argc = 0; 00029 bool thrown = false; 00030 std::vector<std::string> opt_vec; 00031 00032 argv[argc++] = "<program>"; 00033 argv[argc++] = "--archive"; 00034 00035 config.default_file("./test-rconfig.dir/job.dir/file-7.conf"); 00036 config.default_logdir("./test-rconfig.dir/log.dir"); 00037 try { 00038 config.init(argc, argv); 00039 } 00040 catch(error e) { 00041 ERR_OUT(e); 00042 thrown = true; 00043 } 00044 catch(...) { 00045 assert(0); 00046 } 00047 assert(!thrown); 00048 assert(config.default_job().groupname == "group-A"); 00049 assert(config.default_job().hostname == "host-A"); 00050 assert(config.default_job().rsync_behavior.default_value() 00051 == rsync_behavior::fail); 00052 assert(config.default_job().rsync_behavior.map_value().size() == 1); 00053 assert(config.default_job().rsync_behavior[5] == rsync_behavior::ok); 00054 assert(config.default_job().rsync_connection == job::connection_server); 00055 assert(config.default_job().rsync_hardlink == false); 00056 assert(config.default_job().rsync_options == "--some -options for-rsync"); 00057 assert(config.default_job().rsync_remote_user == "alice"); 00058 assert(config.default_job().rsync_remote_port == 4338); 00059 assert(config.jobs().size() == 5); 00060 assert(config.jobs()[0].jobname == "job-A"); 00061 assert(config.jobs()[0].groupname == "group-A"); 00062 assert(config.jobs()[0].hostname == "host-A"); 00063 assert(config.jobs()[0].rsync_behavior.default_value() 00064 == rsync_behavior::retry); 00065 assert(config.jobs()[0].rsync_behavior.map_value().size() == 9); 00066 assert(config.jobs()[0].rsync_behavior[0] == rsync_behavior::ok); 00067 assert(config.jobs()[0].rsync_behavior[1] == rsync_behavior::fail); 00068 assert(config.jobs()[0].rsync_behavior[2] == rsync_behavior::fail); 00069 assert(config.jobs()[0].rsync_behavior[4] == rsync_behavior::fail); 00070 assert(config.jobs()[0].rsync_behavior[23] 00071 == rsync_behavior::retry_without_hardlinks); 00072 assert(config.jobs()[0].rsync_behavior[124] == rsync_behavior::fail); 00073 assert(config.jobs()[0].rsync_behavior[125] == rsync_behavior::fail); 00074 assert(config.jobs()[0].rsync_behavior[126] == rsync_behavior::fail); 00075 assert(config.jobs()[0].rsync_behavior[127] == rsync_behavior::fail); 00076 assert(config.jobs()[0].rsync_connection == job::connection_local); 00077 assert(config.jobs()[0].rsync_hardlink == true); 00078 assert(config.jobs()[0].rsync_multi_hardlink == false); 00079 assert(config.jobs()[0].rsync_multi_hardlink_max == 20); 00080 assert(config.jobs()[0].rsync_options == "--some -options for-rsync some more \"options for\" the\\trsync\\ program"); 00081 opt_vec.clear(); 00082 opt_vec = config.jobs()[0].generate_rsync_options_vector(); 00083 assert(opt_vec[0] == "--some"); 00084 assert(opt_vec[1] == "-options"); 00085 assert(opt_vec[2] == "for-rsync"); 00086 assert(opt_vec[3] == "some"); 00087 assert(opt_vec[4] == "more"); 00088 assert(opt_vec[5] == "options for"); 00089 assert(opt_vec[6] == "the\trsync program"); 00090 assert(opt_vec.size() == 7); 00091 assert(config.jobs()[0].rsync_remote_user == ""); 00092 assert(config.jobs()[0].rsync_remote_port == 0); 00093 assert(config.jobs()[1].jobname.size() == 0); 00094 assert(config.jobs()[1].groupname == "group-A"); 00095 assert(config.jobs()[1].hostname == "host-B"); 00096 assert(config.jobs()[1].rsync_behavior.default_value() 00097 == rsync_behavior::fail); 00098 assert(config.jobs()[1].rsync_behavior.map_value().size() == 1); 00099 assert(config.jobs()[1].rsync_behavior.map_value().find(5)->second 00100 == rsync_behavior::ok); 00101 assert(config.jobs()[1].rsync_connection == job::connection_server); 00102 assert(config.jobs()[1].rsync_hardlink == false); 00103 assert(config.jobs()[1].rsync_remote_user == "alice"); 00104 assert(config.jobs()[1].rsync_remote_port == 4338); 00105 assert(config.jobs()[2].hostname == "host-C"); 00106 assert(config.jobs()[2].rsync_hardlink == true); 00107 assert(config.jobs()[2].rsync_multi_hardlink == true); 00108 assert(config.jobs()[2].rsync_multi_hardlink_max == 7); 00109 assert(config.jobs()[3].jobname == "job-D"); 00110 assert(config.jobs()[3].rsync_options == "--some -options for-rsync -e \"-i foo\""); 00111 opt_vec.clear(); 00112 opt_vec = config.jobs()[3].generate_rsync_options_vector(); 00113 assert(opt_vec[0] == "--some"); 00114 assert(opt_vec[1] == "-options"); 00115 assert(opt_vec[2] == "for-rsync"); 00116 assert(opt_vec[3] == "-e"); 00117 assert(opt_vec[4] == "-i foo"); 00118 assert(config.jobs()[4].jobname == "job-E"); 00119 assert(config.jobs()[4].rsync_options == "--some -options for-rsync --rsh=\"/usr/bin/rsh -i foo\""); 00120 opt_vec.clear(); 00121 opt_vec = config.jobs()[4].generate_rsync_options_vector(); 00122 assert(opt_vec[0] == "--some"); 00123 assert(opt_vec[1] == "-options"); 00124 assert(opt_vec[2] == "for-rsync"); 00125 assert(opt_vec[3] == "--rsh=/usr/bin/rsh -i foo"); 00126 } 00127 00128 int main(int argc, char const * argv[]) 00129 { 00130 cleanup(); 00131 setup(); 00132 try { 00133 test(); 00134 } 00135 catch(error e) { 00136 std::cerr << e; 00137 assert(0); 00138 } 00139 catch(...) { 00140 std::cerr << err_unknown; 00141 assert(0); 00142 } 00143 cleanup(); 00144 return(0); 00145 } 00146