// EventMergeDataset_t.cxx #include "dataset_base/EventMergeDataset.h" #include #include #include #include #include "dataset_util/XmlElement.h" #include "dataset_util/DtdRegistry.h" #include "dataset_id/SimpleUniqueIdGenerator.h" #include "dataset_credential/CredentialSelectionCatalog.h" #include "dataset_credential/GssCredentialManager.h" #include "dataset_base/DatasetCreator.h" #include "dataset_base/Dataset_t.h" using std::string; using std::ostream; using std::cout; using std::endl; using dset::CredentialSelectionCatalog; using dset::GssCredentialManager; using dset::Dataset; using dset::DatasetCreator; using dset::ContentBlock; using dset::Content; using dset::GenericDataset; using dset::EventMergeDataset; void msg(const char* msg) { cout << "----- "; cout << msg; cout << " -----" << endl; } int EventMergeDataset_t() { msg("Check promoter registration"); assert( GenericDataset::has_promoter("EventMergeDataset") ); SimpleUniqueIdGenerator::create_collection("Dataset", 123, 1001); SimpleUniqueIdGenerator::set_as_default(); msg("Fetch default instance of CSC."); assert( CredentialSelectionCatalog::create_default_instance() == 0 ); CredentialSelectionCatalog& sc = CredentialSelectionCatalog::default_instance(); cout << sc << endl; assert( sc.is_valid() ); string owner = "me"; assert( GssCredentialManager::set_default() == 0 ); assert( GssCredentialManager::set_owner("me") == 0 ); msg("Empty"); EventMergeDataset dst0; cout << dst0 << endl; assert( dst0.is_valid() ); assert( dst0.is_empty() ); assert( ! dst0.is_virtual() ); assert( dst0.location().is_empty() ); assert( dst0.content().is_empty() ); assert( dst0.content().blocks().size() == 0 ); msg("Check casts."); assert( dst0.is() ); assert( dst0.is() ); assert( dst0.is() ); msg("Construct from content ID's"); msg("Create content ID's"); string cname = "TestContent"; ContentId cid = ContentId::register_id(221, cname.c_str()); ContentId cid1(cname, "first"); ContentId cid2(cname, "second"); cout << cid1 << endl; cout << cid2 << endl; msg("Create content list"); ContentIdList cids; cids.insert(ContentId(cid1)); cids.insert(ContentId(cid2)); cout << cids << endl; msg("Create content"); EventIdList eids; Content con; ContentBlock blk("MyDataset", "my_content", cids, eids); assert( con.push_back(blk) == 0 ); cout << con << endl; msg("Construct empty dataset"); EventMergeDataset dst(true, con); cout << dst << endl; assert( dst.is_valid() ); assert( dst.is_empty() ); assert( ! dst.is_locked() ); assert( dst.content() == con ); msg("Add datasets"); { EventIdList eids; eids.insert(EventIdRange(123,1,10)); Content conv; ContentBlock blkv("MyDataset", "my_content", cids, eids); conv.push_back(blkv); Dataset* pds = new TestDataset(conv); pds->lock(); assert( dst0.merge(*pds) == 0 ); assert( dst0.merge(*pds) != 0 ); assert( dst.merge(*pds) == 0 ); } { EventIdList eids; eids.insert(EventIdRange(123,11,20)); Content conv; ContentBlock blkv("MyDataset", "my_content", cids, eids); conv.push_back(blkv); Dataset* pds = new TestDataset(conv); pds->lock(); assert( dst0.merge(*pds) == 0 ); assert( dst.merge(*pds) == 0 ); } msg("Check dst"); dst.lock(); cout << dst << endl; assert( dst.is_valid() ); assert( dst.is_locked() ); assert( ! dst.is_empty() ); assert( dst.content().blocks().size() == 1 ); assert( dst.content().blocks().front().content_ids() == cids ); assert( dst.content().blocks().front().has_events() ); assert( dst.content().blocks().front().event_ids().size() == 20 ); msg("Check dst0"); dst0.lock(); cout << dst0 << endl; assert( dst0.is_valid() ); assert( dst0.is_locked() ); assert( ! dst0.is_empty() ); assert( dst0.content().blocks().size() == 1 ); assert( dst0.content().blocks().front().content_ids() == cids ); assert( dst0.content().blocks().front().has_events() ); assert( dst0.content().blocks().front().event_ids().size() == 20 ); msg("Clone"); Dataset* pdst_clone = dst.clone(); assert( pdst_clone != 0 ); cout << *pdst_clone << endl; assert( pdst_clone->is_valid() ); assert( pdst_clone->is_virtual() ); assert( pdst_clone->is() ); assert( pdst_clone->id() != dst.id() ); assert( pdst_clone->parent() != 0 ); assert( pdst_clone->parent() == &dst ); assert( pdst_clone->parent()->id() == dst.id() ); assert( pdst_clone->content() == dst.content() ); msg("Write to XML"); const XmlElement* pele = dst.xml(); cout << *pele << endl; msg("Read XML"); GenericDataset gdst(*pele); assert( gdst.is_valid() ); EventMergeDataset dst3(gdst); cout << dst3 << endl; assert( dst3.is_valid() ); assert( dst3.is_virtual() ); assert( dst3.content() == dst.content() ); msg("All tests passed."); return 0; } #ifdef CTEST_MAIN int main() { return EventMergeDataset_t(); } #endif