// DatasetSelectionCatalog_t.cxx #include "dataset_catalog/DatasetSelectionCatalog.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::DatasetSelectionCatalog; typedef DatasetSelectionCatalog::IdList IdList; typedef DatasetSelectionCatalog::Attributes Attributes; namespace { // Display messsage. void msg(string txt) { cout << "--- " << txt << " ---" << endl; } } // end of unnamed namespace int DatasetSelectionCatalog_t() { msg("Begin testing DatasetSelectionCatalog"); system("rm -f resolver.dat dsc.dat"); msg("Set thread credential owner"); ThreadCredential().set_default_owner("me"); cout << ThreadCredential() << endl; msg("Fetch default instance."); assert( DatasetSelectionCatalog::create_default_instance() == 0 ); DatasetSelectionCatalog& dsc = DatasetSelectionCatalog::default_instance(); cout << dsc << endl; assert( dsc.is_valid() ); assert( dsc.size() == 0 ); assert( dsc.schema().size() == 15 ); msg("Insert an entry."); DatasetId id1(101,201); Attributes atts1; atts1["uid"] = "101-201"; atts1["owner"] = "Annette"; cout << atts1 << endl; assert( ! dsc.has_name("dataset 1") ); assert( dsc.insert("dataset 1", atts1) == 0 ); cout << dsc << endl; assert( dsc.size() == 1 ); assert( dsc.has_name("dataset 1") ); msg("Insert another entry."); DatasetId id2(101,202); Attributes atts2; atts1["uid"] = "101-202"; atts2["owner"] = "Annette"; assert( dsc.insert("dataset 2", atts2) == 0 ); cout << dsc << endl; assert( dsc.size() == 2 ); assert( dsc.has_name("dataset 2") ); assert( dsc.id("dataset 1") == id1 ); msg("Check attributes"); DatasetId id3(101,203); assert( dsc.attributes("dataset 3").size() == 0 ); cout << dsc.attributes("dataset 1") << endl; assert( dsc.attributes("dataset 1")["name"] == "dataset 1" ); assert( dsc.attributes("dataset 1")["uid"] == "101-201" ); assert( dsc.attributes("dataset 1")["owner"] == "me" ); msg("Check query count"); SqlQuery q0("name = Herb"); SqlQuery q1("name = 'dataset 1'"); SqlQuery q2("owner = me"); assert( dsc.query_count(q0) == 0 ); assert( dsc.query_count(q1) == 1 ); assert( dsc.query_count(q2) == 2 ); msg("Check query"); assert( dsc.query(q0,100).size() == 0 ); assert( *dsc.query(q1,100).begin() == "dataset 1" ); assert( dsc.query(q2,100).size() == 2 ); msg("Update an entry"); Attributes atts3; atts3["name"] = "dataset 3"; assert( dsc.update("dataset 3", atts3) != 0 ); assert( dsc.size() == 2 ); assert( dsc.has_name("dataset 2") ); assert( ! dsc.has_name("dataset 3") ); assert( dsc.update("dataset 2", atts3) == 0 ); assert( dsc.size() == 2 ); assert( ! dsc.has_name("dataset 2") ); assert( dsc.has_name("dataset 3") ); msg("Remove an entry"); assert( dsc.remove("dataset 2") != 0 ); assert( dsc.size() == 2 ); assert( dsc.remove("dataset 3") == 0 ); assert( dsc.size() == 1 ); return 0; } #ifdef CTEST_MAIN int main() { return DatasetSelectionCatalog_t(); } #endif