diff --git a/server/modules/filter/test/CMakeLists.txt b/server/modules/filter/test/CMakeLists.txt index 9c87ee926..d703bc7be 100644 --- a/server/modules/filter/test/CMakeLists.txt +++ b/server/modules/filter/test/CMakeLists.txt @@ -13,4 +13,12 @@ target_link_libraries(harness fullcore) execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${ERRMSG} ${CMAKE_CURRENT_BINARY_DIR}) add_test(TestHintfilter /bin/sh -c "MAXSCALE_HOME=\"${CMAKE_BINARY_DIR}\" ${CMAKE_CURRENT_BINARY_DIR}/harness -i ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.input -o ${CMAKE_CURRENT_BINARY_DIR}/hint_testing.output -c ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.cnf -t 1 -s 1 -e ${CMAKE_CURRENT_SOURCE_DIR}/hint_testing.expected") -add_test(TestRegexfilter /bin/sh -c "MAXSCALE_HOME=\"${CMAKE_BINARY_DIR}\" ${CMAKE_CURRENT_BINARY_DIR}/harness -i ${CMAKE_CURRENT_SOURCE_DIR}/regextest.input -o ${CMAKE_CURRENT_BINARY_DIR}/regextest.output -c ${CMAKE_CURRENT_SOURCE_DIR}/regextest.cnf -t 1 -s 1 -e ${CMAKE_CURRENT_SOURCE_DIR}/regextest.expected") \ No newline at end of file +add_test(TestRegexfilter /bin/sh -c "MAXSCALE_HOME=\"${CMAKE_BINARY_DIR}\" ${CMAKE_CURRENT_BINARY_DIR}/harness -i ${CMAKE_CURRENT_SOURCE_DIR}/regextest.input -o ${CMAKE_CURRENT_BINARY_DIR}/regextest.output -c ${CMAKE_CURRENT_SOURCE_DIR}/regextest.cnf -t 1 -s 1 -e ${CMAKE_CURRENT_SOURCE_DIR}/regextest.expected") + +add_test(TestTeeRecursion ${CMAKE_CURRENT_SOURCE_DIR}/tee_recursion.sh + ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR} + ${TEST_USER} + ${TEST_PASSWORD} + ${TEST_HOST} + ${TEST_PORT}) diff --git a/server/modules/filter/test/tee_recursion.sh b/server/modules/filter/test/tee_recursion.sh new file mode 100755 index 000000000..3c689bb15 --- /dev/null +++ b/server/modules/filter/test/tee_recursion.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +function execute_test() +{ + + RVAL=$(mysql --connect-timeout=5 -u $USER -p$PWD -h $HOST -P $PORT -e "select 1;"|grep -i error) + + if [[ ! -e $MAXPID ]] + then + echo "Test failed: $MAXPID was not found." + return 1 + fi + + if [[ "$RVAL" != "" ]] + then + echo "Test failed: Query to backend didn't return an error." + return 1 + fi + + LAST_LOG=$(ls $BINDIR/log -1|grep err|sort|uniq|tail -n 1) + TEST_RESULT=$(cat $BINDIR/log/$LAST_LOG | grep -i recursive) + if [[ "$TEST_RESULT" != "" ]] + then + return 0 + fi + echo "Test failed: Log file didn't mention tee recursion." + return 1 +} + +function reload_conf() +{ + $BINDIR/bin/maxadmin --user=admin --password=skysql reload config + if [[ $? -ne 0 ]] + then + echo "Test failed: maxadmin returned a non-zero value." + return 1 + fi + return 0 +} + +if [[ $# -lt 6 ]] +then + echo "usage: $0 " + exit 1 +fi +BINDIR=$1 +SRCDIR=$2 +USER=$3 +PWD=$4 +HOST=$5 +PORT=$6 +CONF=$BINDIR/etc/MaxScale.cnf +OLDCONF=$BINDIR/etc/MaxScale.cnf.old +MAXPID=$BINDIR/log/$(ls -1 $BINDIR/log|grep maxscale) +TEST1=$SRCDIR/server/modules/filter/test/tee_recursion1.cnf +TEST2=$SRCDIR/server/modules/filter/test/tee_recursion2.cnf + +$BINDIR/bin/maxadmin --user=admin --password=skysql flush logs + +mv $CONF $OLDCONF +cp $TEST1 $CONF +reload_conf +execute_test +T1RVAL=$? +mv $CONF $CONF.test1 +cp $TEST2 $CONF +reload_conf +execute_test +T2RVAL=$? +mv $CONF $CONF.test2 +mv $OLDCONF $CONF +reload_conf + +if [[ $T1RVAL -ne 0 ]] +then + echo "Test 1 failed." + exit 1 +elif [[ $T2RVAL -ne 0 ]] +then + echo "Test 2 failed" + exit 1 +else + echo "Test successful: log mentions recursive tee usage." +fi + +exit 0 diff --git a/server/modules/filter/test/tee_recursion1.cnf b/server/modules/filter/test/tee_recursion1.cnf new file mode 100644 index 000000000..61acb9574 --- /dev/null +++ b/server/modules/filter/test/tee_recursion1.cnf @@ -0,0 +1,114 @@ +[maxscale] +threads=4 + +[MySQL Monitor] +type=monitor +module=mysqlmon +servers=server1,server2,server3,server4 +user=maxuser +passwd=maxpwd +monitor_interval=10000 + +[RW Split Router] +type=service +router=readwritesplit +servers=server1,server2,server3,server4 +user=maxuser +passwd=maxpwd +filters=recurse1 + +[RW Split Hint Router] +type=service +router=readwritesplit +servers=server1,server2,server3,server4 +user=maxuser +passwd=maxpwd +filters=recurse2 + + +[Read Connection Router] +type=service +router=readconnroute +router_options=master +servers=server1 +user=maxuser +passwd=maxpwd +filters=recurse3 + +[recurse3] +type=filter +module=tee +service=RW Split Router + +[recurse2] +type=filter +module=tee +service=Read Connection Router + +[recurse1] +type=filter +module=tee +service=RW Split Hint Router + + +[Debug Interface] +type=service +router=debugcli + +[CLI] +type=service +router=cli + +[Read Connection Listener] +type=listener +service=Read Connection Router +protocol=MySQLClient +port=4008 + +[RW Split Listener] +type=listener +service=RW Split Router +protocol=MySQLClient +port=4006 + +[RW Split Hint Listener] +type=listener +service=RW Split Hint Router +protocol=MySQLClient +port=4009 + +[Debug Listener] +type=listener +service=Debug Interface +protocol=telnetd +port=4442 + +[CLI Listener] +type=listener +service=CLI +protocol=maxscaled +port=6603 + +[server1] +type=server +address=127.0.0.1 +port=3000 +protocol=MySQLBackend + +[server2] +type=server +address=127.0.0.1 +port=3001 +protocol=MySQLBackend + +[server3] +type=server +address=127.0.0.1 +port=3002 +protocol=MySQLBackend + +[server4] +type=server +address=127.0.0.1 +port=3003 +protocol=MySQLBackend diff --git a/server/modules/filter/test/tee_recursion2.cnf b/server/modules/filter/test/tee_recursion2.cnf new file mode 100644 index 000000000..55eafd728 --- /dev/null +++ b/server/modules/filter/test/tee_recursion2.cnf @@ -0,0 +1,112 @@ +[maxscale] +threads=4 + +[MySQL Monitor] +type=monitor +module=mysqlmon +servers=server1,server2,server3,server4 +user=maxuser +passwd=maxpwd +monitor_interval=10000 + +[RW Split Router] +type=service +router=readwritesplit +servers=server1,server2,server3,server4 +user=maxuser +passwd=maxpwd +filters=recurse1|recurse2 + +[RW Split Hint Router] +type=service +router=readwritesplit +servers=server1,server2,server3,server4 +user=maxuser +passwd=maxpwd + +[Read Connection Router] +type=service +router=readconnroute +router_options=master +servers=server1 +user=maxuser +passwd=maxpwd +filters=recurse3 + +[recurse3] +type=filter +module=tee +service=RW Split Router + +[recurse2] +type=filter +module=tee +service=Read Connection Router + +[recurse1] +type=filter +module=tee +service=RW Split Hint Router + + +[Debug Interface] +type=service +router=debugcli + +[CLI] +type=service +router=cli + +[Read Connection Listener] +type=listener +service=Read Connection Router +protocol=MySQLClient +port=4008 + +[RW Split Listener] +type=listener +service=RW Split Router +protocol=MySQLClient +port=4006 + +[RW Split Hint Listener] +type=listener +service=RW Split Hint Router +protocol=MySQLClient +port=4009 + +[Debug Listener] +type=listener +service=Debug Interface +protocol=telnetd +port=4442 + +[CLI Listener] +type=listener +service=CLI +protocol=maxscaled +port=6603 + +[server1] +type=server +address=127.0.0.1 +port=3000 +protocol=MySQLBackend + +[server2] +type=server +address=127.0.0.1 +port=3001 +protocol=MySQLBackend + +[server3] +type=server +address=127.0.0.1 +port=3002 +protocol=MySQLBackend + +[server4] +type=server +address=127.0.0.1 +port=3003 +protocol=MySQLBackend diff --git a/server/test/MaxScale_test.cnf b/server/test/MaxScale_test.cnf index 60587ff92..a0b3df439 100644 --- a/server/test/MaxScale_test.cnf +++ b/server/test/MaxScale_test.cnf @@ -37,6 +37,22 @@ passwd=maxpwd type=filter module=hintfilter +[recurse3] +type=filter +module=tee +service=RW Split Router + +[recurse2] +type=filter +module=tee +service=Read Connection Router + +[recurse1] +type=filter +module=tee +service=RW Split Hint Router + + [Debug Interface] type=service router=debugcli