// dataset_make_virtual_t.cxx #include #include #include "dataset_util/getcwd.h" #include "dataset_util/FileName.h" #include "dataset_util/FileStatus.h" #include "dataset_util/mkdir.h" #include "dataset_util/ssystem.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" #include "dataset_base/DatasetRepository.h" #include "dataset_xml/XmlParser.h" using std::string; using std::cout; using std::endl; using dset::Url; using dset::CredentialSelectionCatalog; using dset::GssCredentialManager; using dset::ContentBlock; using dset::Content; using dset::Location; using dset::Dataset; using dset::DatasetCreator; using dset::DatasetRepository; namespace { void msg(string txt) { cout << "*** "; cout << txt; cout << endl; } } int dataset_make_virtual_t() { system("rm -rf resolver.dat dr.dat UniqueId"); SimpleUniqueIdGenerator::create_collection("Dataset", 123, 1001); SimpleUniqueIdGenerator::set_as_default(); string conn = UniqueIdGenerator::connection(); cout << conn << endl; msg("Testing datset_make_virtual"); system("rm -rf dbdir myfile1.dat dataset.dtd nvdst.xml"); system("rm -f vdst.xml vdst2.xml"); msg("Create default repository"); DatasetRepository::create_default_instance(); DatasetRepository& rep = DatasetRepository::default_instance(); assert( rep.is_valid() ); 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("Display help message"); int stat = system("dataset_make_virtual -h"); assert( stat == 0 ); msg("Create content description"); ContentId cid1(101); assert( cid1.is_valid() ); ContentId cid2(102); assert( cid2.is_valid() ); ContentIdList cids; cids.insert(cid1); cids.insert(cid2); assert( cids.size() == 2 ); msg("Create event ID list"); EventIdList eids; eids.insert(EventId(101,11)); eids.insert(EventId(101,12)); eids.insert(EventId(101,13)); eids.insert(EventId(101,14)); eids.insert(EventId(101,15)); msg("Create content"); ContentBlock cb("EventDataset", "Test", cids, eids); Content con; con.push_back(cb); msg("Create location"); Location loc; Text txt1("myfile1.dat"); txt1.append("data file"); txt1.write(); loc.files().push_back(Url("file:" + FileName(txt1.name()).fullpath_name())); cout << loc << endl; assert( ! loc.is_empty() ); msg("Create non-virtual test dataset"); TestDataset nvdst(con, loc); nvdst.lock(); cout << nvdst << endl; assert( nvdst.is_valid() ); assert( ! nvdst.is_virtual() ); assert( nvdst.content() == con ); DatasetId did1 = nvdst.id(); assert( did1.is_valid() ); msg("Write to XML"); const XmlElement* pele = nvdst.xml(); assert( pele != 0 ); assert( ! FileStatus("nvdst.xml").exists() ); DtdRegistry::instance("dataset").write(); XmlParser parser; int pstat = parser.write("nvdst.xml", *pele); assert( pstat == 0 ); assert( FileStatus("nvdst.xml").exists() ); msg("Put virtual dataset in DB"); assert( rep.extract(did1, true) == 0 ); assert( rep.insert(&nvdst) == did1 ); assert( rep.extract(did1, true) != 0 ); msg("Create virtual dataset from non-virtual dataset in file"); string com0 = "export DIAL_CATALOG_CONF=resolver.dat; "; com0 += "export DIAL_UIDS=" + conn + "; "; string com = com0 + "dataset_make_virtual "; com += "-i 202-2 -w -f vdst.xml -r nvdst.xml"; assert( ! FileStatus("vdst.xml").exists() ); cout << com << endl; int stat3 = system(com.c_str()); if ( stat3 != 0 ) { cout << "Return status " << stat3 << endl; } assert( stat3 == 0 ); assert( FileStatus("vdst.xml").exists() ); msg("Create virtual dataset from non-virtual dataset in DB"); com = com0 + "dataset_make_virtual "; com += "-i 202-3 -w -f vdst2.xml -e "; com += did1.to_string(); assert( ! FileStatus("vdst2.xml").exists() ); stat = system(com.c_str()); assert( stat == 0 ); assert( FileStatus("vdst2.xml").exists() ); return 0; } #ifdef CTEST_MAIN int main() { return dataset_make_virtual_t(); } #endif