-include Makefile.inc
YACC=bison -y
+CC=gcc
VPATH=${top_srcdir}/src:${top_srcdir}/test
AT3=perl -I${top_srcdir}/project ${top_srcdir}/project/at3
GLOBUS_LIBS:= -L${globus_prefix}/lib \
-lglobus_common_${nothrflavour} \
- -lglobus_gssapi_gsi_${nothrflavour}
+ -lglobus_gssapi_gsi_${nothrflavour} \
# XXX: our vomsc.la depends on badly installed expat
compile: glite_lb_bkserverd glite_lb_bkindex
-check: test_xml
+check: compile test.xml test.query
-echo check.query not complete yet
test_xml: test_xml.cpp
${CXX} -c ${CFLAGS} ${TEST_INC} $<
- ${LINKXX} -o $@ test_xml.o lb_xml_parse.o ${COMMON_LIB} ${TEST_LIBS}
+ ${LINKXX} -o $@ test_xml.o lb_xml_parse.o ${COMMON_LIB} ${TEST_LIBS} ${EXT_LIBS}
+
+test.query: test_query_events
+ ./test_query_events ${top_srcdir}/test
+
+test.xml: test_xml
./test_xml
lb_xml_parse.c: lb_xml_parse.c.T
--- /dev/null
+SELECT e.event,j.userid,j.dg_jobid,e.code,e.prog,e.host,u.cert_subj,e.time_stamp,e.usec,e.level,e.arrived FROM events e,users u,jobs j WHERE e.jobid=j.jobid AND e.userid=u.userid AND e.code != 0 AND (j.jobid='WrCEKje9QTXFiSOZuPMLtw')
+0 294de3557d9d00b3d2d8a1e6aab028cf https://lhun.ics.muni.cz:4850/WrCEKje9QTXFiSOZuPMLtw 17 UserInterface lhun.ics.muni.cz anonymous 2003-08-07 11:08:40 432100 8 2003-08-07 11:08:40
+1 294de3557d9d00b3d2d8a1e6aab028cf https://lhun.ics.muni.cz:4850/WrCEKje9QTXFiSOZuPMLtw 2 NetworkServer lhun.ics.muni.cz anonymous 2003-08-07 11:09:05 664600 8 2003-08-07 11:09:05
+
+select name,value from short_fields where jobid = 'WrCEKje9QTXFiSOZuPMLtw' and event = 0
+JDL x
+JOBTYPE SIMPLE
+NS NNNSSSS
+NSUBJOBS 0
+PARENT https://lhun.ics.muni.cz:4850/Qt7utj80miXexi7bkxyhnA
+SEQCODE (nil)
+SRC_INSTANCE (nil)
+
+select name,value from long_fields where jobid = 'WrCEKje9QTXFiSOZuPMLtw' and event = 0
+
+select name,value from short_fields where jobid = 'WrCEKje9QTXFiSOZuPMLtw' and event = 1
+FROM UserInterface
+FROM_HOST sending component hostname
+FROM_INSTANCE sending component instance
+LOCAL_JOBID new jobId (Condor Globus ...)
+SEQCODE UI=000002:NS=0000000001:WM=000000:BH=0000000000:JSS=000000:LM=000000:LRMS=000000:APP=000000
+SRC_INSTANCE
+
+select name,value from long_fields where jobid = 'WrCEKje9QTXFiSOZuPMLtw' and event = 1
-#include <iostream>
+#include <fstream>
#include <cppunit/extensions/HelperMacros.h>
#include <cppunit/CompilerOutputter.h>
using namespace std;
+static const char *test_dir;
+
class QueryEventsTest: public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(QueryEventsTest);
private:
edg_wll_Context ctx;
- vector<pair<string,vector<string>>> expQueries;
- int queryIdx;
+
+ ifstream qry_file;
+
+ vector<pair<string,vector<string> > > queries;
public:
void oneJob();
job[0].attr = EDG_WLL_QUERY_ATTR_JOBID;
job[0].op = EDG_WLL_QUERY_OP_EQUAL ;
- edg_wlc_JobIdParse("https://fake.server/fake_job",&job[0].value.j);
+ edg_wlc_JobIdParse("https://lhun.ics.muni.cz:4850/WrCEKje9QTXFiSOZuPMLtw",
+ &job[0].value.j);
job[1].attr = EDG_WLL_QUERY_ATTR_UNDEF;
+
+ string file(test_dir);
+ file += "/oneJob.qry";
+ qry_file.open(file.c_str());
+
+ while (!qry_file.eof()) {
+ string query,line;
+ vector<string> rows;
+
+ getline(qry_file,query);
+ cout << "read: " << query <<endl;
+ rows.clear();
+
+ while (!qry_file.eof()) {
+ getline(qry_file,line);
+ if (line == "") break;
+
+ rows.push_back(line);
+ }
+ rows.push_back("END");
+ queries.push_back(pair<string,vector<string> >(query,rows));
+ }
+
+ qry_file.close();
- expQueries.clear();
- /*
- * XXX: ...
- */
- expQueries.push_back();
CPPUNIT_ASSERT(!edg_wll_QueryEventsServer(ctx,1,jobs,NULL,&events));
}
-int QueryEventsTest::ExecStmt(const char *, edg_wll_Stmt *)
+int QueryEventsTest::ExecStmt(const char *qry, edg_wll_Stmt *stmt_out)
{
- return 0;
+ vector<pair<string,vector<string> > >::iterator stmt = queries.begin();
+
+ for (; stmt != queries.end(); stmt++) {
+ const char *q = stmt->first.c_str();
+
+ /* XXX: there some spaces at the end of qry */
+ if (!strncmp(q,qry,strlen(q))) break;
+ }
+
+ if (stmt == queries.end()) {
+ cerr << "query not found" << endl;
+ CPPUNIT_ASSERT(0);
+ }
+ vector<string>::iterator *rows = new vector<string>::iterator(stmt->second.begin());
+
+ *stmt_out = (edg_wll_Stmt) rows;
+ return stmt->second.size()-1;
}
extern "C" {
int edg_wll_ExecStmt(edg_wll_Context ctx,char *qry,edg_wll_Stmt *stmt)
{
- cout << qry << endl;
+ cout << "edg_wll_ExecStmt: " << qry << endl;
class QueryEventsTest *tst = (class QueryEventsTest *)(ctx->mysql);
return tst->ExecStmt(qry, stmt);
int edg_wll_FetchRow(edg_wll_Stmt stmt, char **cols)
{
- return 0;
+ vector<string>::iterator *rows = (vector<string>::iterator *) stmt;
+ char *row,*p,i=0;
+
+ if (**rows == "END") return 0;
+ row = strdup((*rows)->c_str());
+ (*rows)++;
+ for (p = strtok(row,"\t"); p; p = strtok(NULL,"\t"))
+ cols[i++] = strdup(p);
+
+ return i;
}
void edg_wll_FreeStmt(edg_wll_Stmt *) {}
CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
CppUnit::TextUi::TestRunner runner;
+ test_dir = ac >= 2 ? av[1] : "../test";
+
runner.addTest(suite);
return runner.run() ? 0 : 1;
}