canonical query tests for query classifier
This commit is contained in:
63
query_classifier/test/canonical_tests/Makefile
Normal file
63
query_classifier/test/canonical_tests/Makefile
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# cleantests - clean local and subdirectories' tests
|
||||||
|
# buildtests - build all local and subdirectories' tests
|
||||||
|
# runtests - run all local tests
|
||||||
|
# testall - clean, build and run local and subdirectories' tests
|
||||||
|
|
||||||
|
include ../../../build_gateway.inc
|
||||||
|
include ../../../makefile.inc
|
||||||
|
include ../../../test.inc
|
||||||
|
|
||||||
|
CC = gcc
|
||||||
|
CPP = g++
|
||||||
|
|
||||||
|
TESTPATH := $(shell pwd)
|
||||||
|
TESTLOG := $(TESTPATH)/testqclass.log
|
||||||
|
QUERY_CLASSIFIER_PATH := $(ROOT_PATH)/query_classifier
|
||||||
|
LOG_MANAGER_PATH := $(ROOT_PATH)/log_manager
|
||||||
|
UTILS_PATH := $(ROOT_PATH)/utils
|
||||||
|
CORE_PATH := $(ROOT_PATH)/server/core
|
||||||
|
TESTAPP = $(TESTPATH)/canonizer
|
||||||
|
|
||||||
|
LDFLAGS=-L$(QUERY_CLASSIFIER_PATH) \
|
||||||
|
-L$(LOG_MANAGER_PATH) \
|
||||||
|
-L$(EMBEDDED_LIB) \
|
||||||
|
-Wl,-rpath,$(DEST)/lib \
|
||||||
|
-Wl,-rpath,$(EMBEDDED_LIB) \
|
||||||
|
-Wl,-rpath,$(LOG_MANAGER_PATH) \
|
||||||
|
-Wl,-rpath,$(QUERY_CLASSIFIER_PATH)
|
||||||
|
|
||||||
|
LIBS=-lpthread -lquery_classifier -lz -ldl -lssl -laio -lcrypt -lcrypto -lrt \
|
||||||
|
-llog_manager $(UTILS_PATH)/skygw_utils.o $(CORE_PATH)/buffer.o $(CORE_PATH)/atomic.o $(CORE_PATH)/spinlock.o
|
||||||
|
|
||||||
|
CFLAGS=$ -g $(MYSQL_HEADERS) \
|
||||||
|
-I$(QUERY_CLASSIFIER_PATH) \
|
||||||
|
$(MYSQL_HEADERS) \
|
||||||
|
-I$(ROOT_PATH)/server/include \
|
||||||
|
-I$(UTILS_PATH)
|
||||||
|
|
||||||
|
EMBFLAGS=$(shell mysql_config --cflags --libmysqld-libs)
|
||||||
|
|
||||||
|
|
||||||
|
testall:
|
||||||
|
$(MAKE) cleantests
|
||||||
|
$(MAKE) buildtests
|
||||||
|
$(MAKE) runtests
|
||||||
|
|
||||||
|
cleantests:
|
||||||
|
- $(DEL) *.o
|
||||||
|
- $(DEL) *~
|
||||||
|
- $(DEL) canonizer
|
||||||
|
- $(DEL) aria_log*
|
||||||
|
- $(DEL) ib*
|
||||||
|
|
||||||
|
buildtests: $(OBJS)
|
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) $(EMBFLAGS) $(LIBS) canonizer.c -o $(TESTAPP)
|
||||||
|
|
||||||
|
runtests:
|
||||||
|
@echo "" > $(TESTLOG)
|
||||||
|
@echo "-------------------------------" >> $(TESTLOG)
|
||||||
|
@echo $(shell date) >> $(TESTLOG)
|
||||||
|
@echo "Canonical Query Tests" >> $(TESTLOG)
|
||||||
|
@echo "-------------------------------" >> $(TESTLOG)
|
||||||
|
@echo "" >> $(TESTLOG)
|
||||||
|
./canontest.sh $(TESTLOG) input.sql output.sql expected.sql
|
101
query_classifier/test/canonical_tests/canonizer.c
Normal file
101
query_classifier/test/canonical_tests/canonizer.c
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <query_classifier.h>
|
||||||
|
#include <buffer.h>
|
||||||
|
#include <mysql.h>
|
||||||
|
|
||||||
|
static char* server_options[] = {
|
||||||
|
"SkySQL Gateway",
|
||||||
|
"--datadir=./",
|
||||||
|
"--language=./",
|
||||||
|
"--skip-innodb",
|
||||||
|
"--default-storage-engine=myisam",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
const int num_elements = (sizeof(server_options) / sizeof(char *)) - 1;
|
||||||
|
|
||||||
|
static char* server_groups[] = {
|
||||||
|
"embedded",
|
||||||
|
"server",
|
||||||
|
"server",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
|
||||||
|
int fdin,fdout,i=0,fnamelen,fsz,lines = 0;
|
||||||
|
unsigned int psize;
|
||||||
|
GWBUF** qbuff;
|
||||||
|
char *qin, *outnm, *buffer, *tok;
|
||||||
|
|
||||||
|
if(argc != 3){
|
||||||
|
printf("Usage: canonizer <input file> <output file>\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool failed = mysql_library_init(num_elements, server_options, server_groups);
|
||||||
|
|
||||||
|
if(failed){
|
||||||
|
printf("Embedded server init failed.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fnamelen = strlen(argv[1]) + 16;
|
||||||
|
fdin = open(argv[1],O_RDONLY);
|
||||||
|
fsz = lseek(fdin,0,SEEK_END);
|
||||||
|
lseek(fdin,0,SEEK_SET);
|
||||||
|
|
||||||
|
if(!(buffer = malloc(sizeof(char)*fsz))){
|
||||||
|
printf("Error: Failed to allocate memory.");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
read(fdin,buffer,fsz);
|
||||||
|
tok = strpbrk(buffer,"\n");
|
||||||
|
lines = 1;
|
||||||
|
|
||||||
|
while((tok = strpbrk(tok + 1,"\n"))){
|
||||||
|
lines++;
|
||||||
|
}
|
||||||
|
|
||||||
|
qbuff = malloc(sizeof(GWBUF*)*lines);
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
tok = strtok(buffer,"\n");
|
||||||
|
|
||||||
|
while(tok){
|
||||||
|
qin = strdup(tok);
|
||||||
|
psize = strlen(qin);
|
||||||
|
qbuff[i] = gwbuf_alloc(psize + 6);
|
||||||
|
*(qbuff[i]->sbuf->data + 0) = (unsigned char)psize;
|
||||||
|
*(qbuff[i]->sbuf->data + 1) = (unsigned char)(psize>>8);
|
||||||
|
*(qbuff[i]->sbuf->data + 2) = (unsigned char)(psize>>16);
|
||||||
|
*(qbuff[i]->sbuf->data + 4) = 0x03;
|
||||||
|
memcpy(qbuff[i]->sbuf->data + 5,qin,psize);
|
||||||
|
*(qbuff[i]->sbuf->data + 5 + psize) = 0x00;
|
||||||
|
tok = strtok(NULL,"\n");
|
||||||
|
free(qin);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
fdout = open(argv[2],O_TRUNC|O_CREAT|O_WRONLY,S_IRWXU|S_IXGRP|S_IXOTH);
|
||||||
|
|
||||||
|
for(i = 0;i<lines;i++){
|
||||||
|
parse_query(qbuff[i]);
|
||||||
|
tok = skygw_get_canonical(qbuff[i]);
|
||||||
|
write(fdout,tok,strlen(tok));
|
||||||
|
write(fdout,"\n",1);
|
||||||
|
gwbuf_free(qbuff[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
close(fdin);
|
||||||
|
close(fdout);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
21
query_classifier/test/canonical_tests/canontest.sh
Executable file
21
query_classifier/test/canonical_tests/canontest.sh
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
if [[ $# -ne 4 ]]
|
||||||
|
then
|
||||||
|
echo "Usage: canontest.sh <logfile name> <input file> <output file> <expected output>"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
TESTLOG=$1
|
||||||
|
INPUT=$2
|
||||||
|
OUTPUT=$3
|
||||||
|
EXPECTED=$4
|
||||||
|
DIFFLOG=diff.out
|
||||||
|
$PWD/canonizer $INPUT $OUTPUT
|
||||||
|
diff $OUTPUT $EXPECTED > $DIFFLOG
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "PASSED" >> $TESTLOG
|
||||||
|
else
|
||||||
|
echo "FAILED" >> $TESTLOG
|
||||||
|
echo "Diff output: " >> $TESTLOG
|
||||||
|
cat $DIFFLOG >> $TESTLOG
|
||||||
|
fi
|
BIN
query_classifier/test/canonical_tests/errmsg.sys
Normal file
BIN
query_classifier/test/canonical_tests/errmsg.sys
Normal file
Binary file not shown.
6
query_classifier/test/canonical_tests/expected.sql
Executable file
6
query_classifier/test/canonical_tests/expected.sql
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
select sleep(?)
|
||||||
|
select * from tst where lname='?'
|
||||||
|
select ?,?,?,?,?,? from tst
|
||||||
|
select * from tst where fname like '?'
|
||||||
|
select * from tst where lname like '?' order by fname
|
||||||
|
insert into tst values ("?","?"),("?",?),("?","?")
|
6
query_classifier/test/canonical_tests/input.sql
Executable file
6
query_classifier/test/canonical_tests/input.sql
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
select sleep(2);
|
||||||
|
select * from tst where lname='Doe';
|
||||||
|
select 1,2,3,4,5,6 from tst;
|
||||||
|
select * from tst where fname like '%a%';
|
||||||
|
select * from tst where lname like '%e%' order by fname;
|
||||||
|
insert into tst values ("John","Doe"),("Plato",null),("Nietzsche","");
|
@ -18,7 +18,7 @@ UTILS_PATH := $(ROOT_PATH)/utils
|
|||||||
TESTAPP = $(TESTPATH)/testmain
|
TESTAPP = $(TESTPATH)/testmain
|
||||||
|
|
||||||
testall:buildtests
|
testall:buildtests
|
||||||
|
$(MAKE) -C canonical_tests testall
|
||||||
testalllaters:
|
testalllaters:
|
||||||
$(MAKE) cleantests
|
$(MAKE) cleantests
|
||||||
$(MAKE) DEBUG=Y DYNLIB=Y buildtests
|
$(MAKE) DEBUG=Y DYNLIB=Y buildtests
|
||||||
|
Reference in New Issue
Block a user