// ProcessJobCreator_t.cxx #include "dial_job/ProcessJobCreator.h" #include "dataset_id/SimpleUniqueIdGenerator.h" #include "dataset_base/Dataset_t.h" #include "dial_job/Job_t.h" #include "dial_job/ProcessJob.h" #include #include using std::ostream; using std::cout; using std::endl; using dset::Content; using dset::Dataset; using dial::TaskId; using dial::Task; using dial::Application; using dial::JobId; using dial::JobPreferences; using dial::Job; using dial::ProcessJob; using dial::JobCreator; using dial::ProcessJobCreator; namespace { // Write message. void msg(const char* msg) { cout << "----- "; cout << msg; cout << " -----" << endl; } } int ProcessJobCreator_t() { msg("Create creator."); ProcessJobCreator cre; cout << cre << endl; assert( cre.is_valid() ); assert( cre.run_command().size() ); msg("Create application"); system("touch build_task run"); Application app(Text::split("run build_task")); cout << app << endl; msg("Create task"); SimpleUniqueIdGenerator::create_collection(Application::id_context(), 11, 101); SimpleUniqueIdGenerator::create_collection(Task::id_context(), 11, 101); SimpleUniqueIdGenerator::set_as_default(); Task::NameList files; Task tsk(files); cout << tsk << endl; msg("Create dataset"); EventIdList eids; eids.insert(EventIdRange(123,1,20)); ContentIdList cids; TestDataset dst(Content("TestDataset", "test", cids, eids)); cout << dst << endl; msg("Create preferences"); JobPreferences prf; prf.lock(); msg("Create job"); Job* pjob = cre.create_local_job(JobId(301,1), app, tsk, dst, prf, "mydir", "myscript"); assert( pjob != 0 ); cout << *pjob << endl; assert( pjob->application_id() == app.id() ); assert( pjob->task_id() == tsk.id() ); assert( pjob->dataset_id() == dst.id() ); ProcessJob* ppjob = dynamic_cast(pjob); assert( ppjob != 0 ); assert( ppjob->job_directory() == "mydir" ); assert( ppjob->run_script() == "myscript" ); msg("Create XML"); const XmlElement* pxcre = cre.xml(); assert( pxcre != 0 ); cout << *pxcre << endl; assert( pxcre->is_valid() ); msg("Check creator"); assert( JobCreator::has_creator(ProcessJobCreator::xml_name()) ); const JobCreator* pcre = JobCreator::create(*pxcre); assert( pcre != 0 ); cout << *pcre << endl; assert( pcre->is_valid() ); const ProcessJobCreator* pcre_full = dynamic_cast(pcre); assert( pcre_full != 0 ); assert( pcre_full->run_command() == cre.run_command() ); msg("Check DTD"); cout << ProcessJobCreator::dtd() << endl; assert( ProcessJobCreator::dtd().size() != 0 ); assert( DtdRegistry::instance("dial").has_type("ProcessJobCreator") ); return 0; } #ifdef CTEST_MAIN int main() { return ProcessJobCreator_t(); } #endif