// DatasetReplicaCatalog_t.cxx #include "dataset_catalog/DatasetReplicaCatalog.h" #include #include #include "dataset_catalog/ConnectionResolver.h" #include "dataset_sql/SelectQuery.h" using std::string; using std::cout; using std::endl; using dset::SqlQuery; using dset::DatasetReplicaCatalog; typedef DatasetReplicaCatalog::Id Id; typedef DatasetReplicaCatalog::IdList IdList; namespace { // Display messsage. void msg(string txt) { cout << "--- " << txt << " ---" << endl; } } // end of unnamed namespace int DatasetReplicaCatalog_t() { msg("Begin testing DatasetReplicaCatalog"); system("rm -f resolver.dat"); msg("Fetch default instance."); assert( DatasetReplicaCatalog::create_default_instance() == 0 ); DatasetReplicaCatalog& cat = DatasetReplicaCatalog::default_instance(); cout << cat << endl; assert( cat.is_valid() ); assert( cat.logical_size() == 0 ); msg("Insert entries"); Id lid1(101,1); Id lid2(101,2); Id lid3(101,3); Id lid4(101,4); IdList rids1; rids1.insert(Id(201,11)); IdList rids2; rids2.insert(Id(201,21)); rids2.insert(Id(201,22)); rids2.insert(Id(201,23)); IdList rids3; assert( cat.insert(lid1, rids1) == 0 ); assert( cat.insert(lid2, rids2) == 0 ); assert( cat.insert(lid3, rids3) == 0 ); cout << cat << endl; assert( cat.logical_size() == 3 ); assert( cat.replica_size() == 4 ); assert( cat.logicals().size() == 3 ); assert( cat.replicas().size() == 4 ); assert( cat.replicas(lid1) == rids1 ); assert( cat.replicas(lid2) == rids2 ); assert( cat.replicas(lid3) == rids3 ); msg("Check has"); assert( cat.has_logical(lid1) ); assert( cat.has_logical(lid2) ); assert( cat.has_logical(lid3) ); assert( ! cat.has_logical(lid4) ); assert( cat.has_replica(Id(201,21)) ); assert( ! cat.has_replica(Id(201,41)) ); assert( cat.has(lid2, Id(201,21)) ); assert( ! cat.has(lid2, Id(201,11)) ); msg("Insert new logical."); IdList rids4; assert( cat.insert(lid4, rids4) == 0 ); cout << cat << endl; assert( cat.logical_size() == 4 ); assert( cat.replica_size() == 4 ); rids4.insert(Id(201,41)); rids4.insert(Id(201,42)); msg("Attempt invalid insertion"); assert( cat.insert(lid4, rids4) != 0 ); cout << cat << endl; assert( cat.logical_size() == 4 ); assert( cat.replica_size() == 4 ); msg("Update"); assert( cat.update(lid4, rids4) == 0 ); cout << cat << endl; assert( cat.logical_size() == 4 ); assert( cat.replica_size() == 6 ); assert( cat.update(lid4, rids4) != 0 ); msg("Another update"); rids4.clear(); rids4.insert(Id(201,43)); assert( cat.update(lid4, rids4) == 0 ); cout << cat << endl; assert( cat.logical_size() == 4 ); assert( cat.replica_size() == 7 ); msg("Remove replica"); assert( cat.has(lid4, Id(201,43)) ); assert( cat.remove_replica(lid4, Id(201,43)) == 0 ); cout << cat << endl; assert( cat.logical_size() == 4 ); assert( cat.replica_size() == 6 ); assert( ! cat.has(lid4, Id(201,43)) ); assert( cat.remove_replica(lid4, Id(201,43)) != 0 ); msg("Remove logical"); assert( cat.has_logical(lid4) ); assert( cat.remove_logical(lid4) == 0 ); cout << cat << endl; assert( cat.logical_size() == 3 ); assert( cat.replica_size() == 4 ); assert( ! cat.has_logical(lid4) ); return 0; } #ifdef CTEST_MAIN int main() { return DatasetReplicaCatalog_t(); } #endif