// fms_t.cxx #include #include #include #include "dataset_util/getcwd.h" #include "dataset_util/mkdir.h" #include "dataset_util/ssystem.h" #include "dataset_util/FileStatus.h" #include "dataset_util/Environment.h" #include "dataset_util/Text.h" #include "dataset_util/SystemCommand.h" #include "dataset_util/Url.h" using std::string; using std::cout; using std::endl; using dset::Url; namespace { void msg(string txt) { cout << "--- "; cout << txt; cout << " ---" << endl; } } // end unnamed namespace int fms_t() { //ssystem("touch debug_FileManagementSystem"); msg("Create test files and directories"); string basedir = getcwd(); string indir = basedir + "/infiles"; string outdir = basedir + "/outfiles"; mkdir(indir); mkdir(outdir); Url indurl("file:" + indir); Url outdurl("file:" + outdir); Url copydurl("copy:" + outdir); string infile = indir + "/myfile.dat"; string outfile = outdir + "/myfile.dat"; Text intext(infile); intext.append("Hello"); intext.write(); Url infurl("file:" + infile); Url outfurl("file:" + outfile ); Url copyfurl("file:" + outfile + ".copy0001" ); string copyfile = copyfurl.fullpath(); string env = "export DIAL_FMS_CATALOG="; env += "; export DIAL_FMS_PROTOCOLS=dcap,rfio,file,copy"; env += "; export DIAL_FMS_PROTOCOL_ORDER=" + copydurl.to_string(); env += "; "; msg("Help"); SystemCommand help(env + "fms help"); assert( help.runerr() == 0 ); cout << help << endl; assert( help.out().size() != 0 ); assert( help.err().size() == 0 ); msg("Ping"); SystemCommand ping(env + "fms ping"); assert( ping.runerr() == 0 ); cout << ping << endl; assert( ping.out().size() != 0 ); assert( ping.err().size() == 0 ); msg("Get copy"); SystemCommand gcp(env + "fms get " + infurl.to_string()); gcp.runerr(); cout << gcp << endl; assert( gcp.status() == 0 ); assert( gcp.out().size() == 1 ); if ( Environment::current().value("DIAL_FMS_VERBOSE") == "" ) { assert( gcp.err().size() == 0 ); } cout << infurl << endl; cout << gcp.out().line(0) << endl; assert( gcp.out().line(0) == outfurl.to_string() ); env = "export DIAL_FMS_CATALOG="; env += "; export DIAL_FMS_PROTOCOLS=dcap,rfio,file,copy"; env += "; export DIAL_FMS_PROTOCOL_ORDER=" + indurl.to_string(); env += "; export DIAL_FMS_SE=" + outdurl.to_string(); env += "; "; msg("Get original"); SystemCommand get(env + "fms get " + infurl.to_string()); get.runerr(); cout << get << endl; assert( get.status() == 0 ); assert( get.out().size() == 1 ); if ( Environment::current().value("DIAL_FMS_VERBOSE") == "" ) { assert( get.err().size() == 0 ); } cout << infurl << endl; cout << get.out().line(0) << endl; assert( get.out().line(0) == infurl.to_string() ); msg("put"); unlink(outfile.c_str()); assert( FileStatus(infile).exists() ); assert( ! FileStatus(outfile).exists() ); SystemCommand put(env + "fms put " + infurl.to_string()); put.runerr(); cout << put << endl; cout << put.out().line(0) << endl; assert( put.out().line(0) == outfurl.to_string() ); assert( FileStatus(outfile).exists() ); msg("Copy"); cout << infurl << endl; SystemCommand cop(env + "fms copy " + infurl.to_string() + " " + outdurl.to_string()); assert( ! FileStatus(copyfile).exists() ); cop.runerr(); cout << cop << endl; cout << copyfurl << endl; assert( cop.status() == 0 ); assert( cop.out().size() == 1 ); if ( Environment::current().value("DIAL_FMS_VERBOSE") == "" ) { assert( cop.err().size() == 0 ); } cout << cop.out().line(0) << endl; assert( cop.out().line(0) == copyfurl.to_string() ); assert( FileStatus(copyfile).exists() ); return 0; } #ifdef CTEST_MAIN int main() { return fms_t(); } #endif