// FileManagementSystem_t.cxx #include "dataset_file/FileManagementSystem.h" #include #include #include #include "dataset_util/getcwd.h" #include "dataset_util/copy_file.h" #include "dataset_util/mkdir.h" #include "dataset_util/Text.h" #include "dataset_util/ssystem.h" #include "dataset_util/FileStatus.h" using std::string; using std::cout; using std::endl; using dset::Url; using dset::FileManagementSystem; void msg(string txt) { cout << "--- "; cout << txt; cout << " ---" << endl; } int FileManagementSystem_t() { //ssystem("touch debug_FileManagementSystem"); msg("Invalid FMS"); FileManagementSystem fmsbad; cout << fmsbad << endl; assert( ! fmsbad.is_valid() ); msg("Create valid FMS"); string basedir = getcwd(); string sub1 = basedir + "/sub1"; string sub2 = basedir + "/sub2"; Url durl0("file:" + basedir); Url durl1("file:" + sub1); Url durl2("file:" + sub2); Url durl3("http://somesite/somedir"); Environment env; env["DIAL_FMS_CATALOG"] = ""; env["DIAL_FMS_PROTOCOLS"] = "dcap,file,glite"; env["DIAL_FMS_PROTOCOL_ORDER"] = durl1.to_string() + ",copy," + durl2.to_string() + "," + durl3.to_string() + ",file"; env["DIAL_FMS_SE"] = durl1.to_string(); env["DIAL_FMS_VERBOSE"] = "true"; FileManagementSystem fms(env); cout << fms << endl; assert( fms .is_valid() ); msg("Create some files"); string file0 = basedir + "/myfile.dat"; string file1 = basedir + "/sub1/myfile.dat"; string file2 = basedir + "/sub2/myfile.dat"; cout << file0 << endl; cout << file1 << endl; cout << file2 << endl; Text tf(file0); tf.append("Hello"); tf.write(); mkdir(sub1); mkdir(sub2); copy_file(file0, file1); copy_file(file0, file2); unlink(file0.c_str()); assert( ! FileStatus(file0).exists() ); assert( FileStatus(file1).exists() ); assert( FileStatus(file2).exists() ); msg("Retrieve from sub1"); Url furl1(durl1.to_string() + "/myfile.dat"); cout << furl1 << endl; Url outurl1 = fms.get(furl1); cout << furl1 << endl; cout << outurl1 << endl; assert( outurl1 == furl1 ); msg("Retrieve copy from sub2"); Url furl2(durl2.to_string() + "/myfile.dat"); cout << furl2 << endl; assert( ! FileStatus(file0).exists() ); assert( FileStatus(file2).exists() ); Url outurl2 = fms.get(furl2); cout << furl2 << endl; cout << outurl2 << endl; assert( outurl2 != furl2 ); assert( outurl2.suffix() == file0 ); assert( FileStatus(file0).exists() ); assert( FileStatus(file2).exists() ); msg("Check cache"); fms.display_cache(cout); Url outurl2c = fms.get(furl2); cout << outurl2c << endl; assert( outurl2c.suffix() == file0 ); msg("Copy file"); string copy0001 = file0 + ".copy0001"; Url copyurl1 = fms.copy(furl2, durl0); cout << copy0001 << endl; cout << copyurl1 << endl; assert( copyurl1.suffix() == copy0001 ); msg("Put file"); unlink(file1.c_str()); assert( ! FileStatus(file1).exists() ); Url outurl3 = fms.put(furl2); cout << fms.error_message() << endl; assert( outurl3.is_valid() ); assert( FileStatus(file1).exists() ); assert( outurl3 == furl1 ); msg("Create filter."); string ffilt = getcwd() + "/filter"; cout << ffilt << endl; Text tfilt(ffilt); tfilt.append("echo $1 | sed 's#^srm://dialtest.org/topdir#" + durl1.to_string() + "#'"); tfilt.write(); cout << tfilt << endl; msg("Add alias and filter to FMS"); env["DIAL_FMS_SE_ALIAS"] = "srm://dialtest.org" + sub1; env["DIAL_FMS_FILTER"] = ffilt; FileManagementSystem fms2(env); cout << fms2 << endl; assert( fms2.is_valid() ); msg("Put with alias"); Url exp4("srm://dialtest.org" + file1 ); cout << furl2 << endl; cout << furl1 << endl; cout << exp4 << endl; unlink(file1.c_str()); assert( ! FileStatus(file1).exists() ); Url outurl4 = fms2.put(furl2); assert( outurl4.is_valid() ); assert( FileStatus(file1).exists() ); cout << outurl4 << endl; assert( outurl4 == exp4 ); msg("Get with alias"); Url outurl5 = fms2.get(outurl4); cout << outurl4 << endl; cout << outurl5 << endl; assert( outurl5 == furl2 ); msg("Set default"); FileManagementSystem* pfms = new FileManagementSystem(env); pfms->set_default(); assert( &FileManagementSystem::default_instance() == pfms ); return 0; } #ifdef CTEST_MAIN int main() { return FileManagementSystem_t(); } #endif