// DatasetFileCatalog_t.cxx #include "dataset_file/DatasetFileCatalog.h" #include #include #include "dataset_util/ThreadCredential.h" #include "dataset_catalog/ConnectionResolver.h" #include "dataset_sql/SelectQuery.h" using std::string; using std::cout; using std::endl; using dset::SqlQuery; using dset::Url; using dset::DatasetFileCatalog; typedef DatasetFileCatalog::IdList IdList; typedef DatasetFileCatalog::Attributes Attributes; namespace { // Display messsage. void msg(string txt) { cout << "--- " << txt << " ---" << endl; } } // end of unnamed namespace int DatasetFileCatalog_t() { msg("Begin testing DatasetFileCatalog"); system("rm -f resolver.dat dfc.dat file1.dat file2.dat"); msg("Set thread credential owner"); ThreadCredential().set_default_owner("me"); cout << ThreadCredential() << endl; msg("Fetch default instance."); assert( DatasetFileCatalog::create_default_instance() == 0 ); DatasetFileCatalog& dfc = DatasetFileCatalog::default_instance(); cout << dfc << endl; assert( dfc.is_valid() ); assert( dfc.size() == 0 ); assert( dfc.schema().size() == 10 ); msg("Attempt insertion without file."); DatasetId id1(101,201); Attributes atts1; atts1["name"] = "dataset 1"; atts1["owner"] = "Annette"; cout << atts1 << endl; assert( ! dfc.has_name("dataset 1") ); assert( dfc.insert(id1, atts1) != 0 ); msg("Create files."); system("touch file1.dat"); system("touch file2.dat"); Url url1("file:file1.dat"); assert( url1.is_valid() ); cout << url1 << endl; Url url2("file:file2.dat"); assert( url2.is_valid() ); cout << url2 << endl; msg("Insert with file."); assert( dfc.insert_file(id1, url1, atts1) == 0 ); cout << dfc << endl; assert( dfc.size() == 1 ); assert( dfc.has_name(url1.to_string()) ); assert( dfc.has_file(url1) ); assert( ! dfc.has_file(url2) ); assert( dfc.file(id1) == url1 ); assert( dfc.id_for_file(url1) == id1 ); msg("Insert another entry."); DatasetId id2(101,202); Attributes atts2; atts2["name"] = "dataset 2"; atts2["owner"] = "Annette"; assert( dfc.insert_file(id2, url2, atts2) == 0 ); cout << dfc << endl; assert( dfc.size() == 2 ); assert( dfc.has_name(url2.to_string()) ); assert( dfc.id(url1.to_string()) == id1 ); assert( dfc.has_file(url2) ); assert( dfc.file(id2) == url2 ); assert( dfc.id_for_file(url2) == id2 ); msg("Check attributes"); DatasetId id3(101,203); assert( dfc.attributes("lfn://doesnotexist").size() == 0 ); Attributes atts1out = dfc.attributes(url1.to_string()); assert( atts1out.size() == 10 ); msg("Check query count"); SqlQuery q0("name = 'Herb'"); SqlQuery q1("name = '" + url1.to_string() + "'"); SqlQuery q2("owner = 'me'"); assert( dfc.query_count(q0) == 0 ); assert( dfc.query_count(q1) == 1 ); assert( dfc.query_count(q2) == 2 ); msg("Check query"); assert( dfc.query(q0,100).size() == 0 ); assert( *dfc.query(q1,100).begin() == url1.to_string() ); assert( dfc.query(q2,100).size() == 2 ); msg("Update an entry"); Attributes atts3; atts3["name"] = "My dataset"; assert( dfc.update("lfn://nosuchfile.dat", atts3) != 0 ); assert( dfc.update(url2.to_string(), atts3) == 0 ); assert( dfc.id("My dataset") == id2 ); assert( dfc.size() == 2 ); msg("Remove an entry"); assert( dfc.remove("lfn://nosuchfile.dat") != 0 ); assert( dfc.size() == 2 ); assert( dfc.remove("My dataset") == 0 ); assert( dfc.size() == 1 ); return 0; } #ifdef CTEST_MAIN int main() { return DatasetFileCatalog_t(); } #endif