open-source-search-engine/QAClient.h
2013-08-02 13:12:24 -07:00

111 lines
2.0 KiB
C++

#ifndef QACLIENT_H___
#define QACLIENT_H___
//#include "HttpServer.h"
#include "Url.h"
#include "Titledb.h"
typedef void (*qatest_callback_t)(void *);
typedef void (*httpdoc_callback_t)(void *, class HttpDoc *);
#define MAX_QA_TESTS 2000
// keep track of everything involved with getting a doc by http
class HttpDoc {
public:
HttpDoc();
~HttpDoc();
void reset();
void get(void *state, httpdoc_callback_t callback);
Url m_url;
bool m_done;
long m_errno;
long long m_startTime;
long long m_elapsed;
char *m_buf;
bool m_ownBuf;
long m_bufSize;
char *m_content;
long m_contentLen;
short m_httpStatus;
short m_charset;
void *m_state;
httpdoc_callback_t m_callback;
};
class QATest {
public:
void reset();
// Subclasses must define these funtions
virtual ~QATest();
virtual void startTest() = 0;
};
class QADiffTest: public QATest {
public:
void reset() {
m_state = NULL;
m_callback = NULL;
m_doc1.reset();
m_doc2.reset();
m_desc[0] = '\0';
};
bool set(char *desc,char *u1, char *u2, void*, qatest_callback_t);
~QADiffTest(){reset();};
void startTest();
void processResults();
HttpDoc m_doc1;
HttpDoc m_doc2;
// should these go in base class?
void *m_state;
qatest_callback_t m_callback;
char m_desc[256];
private:
// diff m_doc1 and m_doc2 using unix diff cmd
void fileDiff();
// diff m_doc1 and m_doc2 using xml tag diff
void xmlDiff();
};
class QAClient {
public:
QAClient();
~QAClient();
bool init(char *s1=NULL, char *s2=NULL,
char *parserUrls=NULL, char *queryUrls=NULL);
bool runTests();
void runNextTest();
private:
Url m_server1 ;
Url m_server2 ;
QATest *m_curTest;
// for mnew/mdelete
int m_curTestSize;
char **m_parserUrls;
long m_numParserUrls;
char **m_queries;
long m_numQueries;
long m_numTests;
long m_nextTest;
char *m_pbuf;
long m_pbufSize;
char **m_pbufPtr;
long m_pbufPtrSize;
char *m_qbuf;
long m_qbufSize;
char **m_qbufPtr;
long m_qbufPtrSize;
};
#endif