MXS-1220: Simplify test creation

The tests now automatically start MaxScale before each test block and stop
it and perform cleanup after the test. This is done by simply calling the
`before.sh` and `after.sh` scripts before each test block.
This commit is contained in:
Markus Mäkelä
2017-05-04 16:21:37 +03:00
parent 6b0fabf834
commit a3c683ab87
5 changed files with 78 additions and 15 deletions

View File

@ -0,0 +1,38 @@
#!/bin/bash
#
# This script is run after each test block. It kills the MaxScale process
# and cleans up the directories that contain generated files.
#
test -z "$MAXSCALE_DIR" && exit 1
maxscaledir=$MAXSCALE_DIR
pid=`cat $maxscaledir/maxscale.pid`
echo $pid
for ((i=0;i<60;i++))
do
kill -0 $pid
if [ $? -eq 0 ]
then
# Process is still up
kill $pid
if [ $i -gt 3 ]
then
sleep 0.1
fi
else
break
fi
done
rm -r $maxscaledir/lib/maxscale
rm -r $maxscaledir/cache/maxscale
rm -r $maxscaledir/run/maxscale
mkdir -m 0755 -p $maxscaledir/lib/maxscale
mkdir -m 0755 -p $maxscaledir/cache/maxscale
mkdir -m 0755 -p $maxscaledir/run/maxscale

View File

@ -0,0 +1,21 @@
#!/bin/bash
#
# This script is run before each test block. It starts MaxScale and waits for it
# to become responsive.
#
maxscaledir=$MAXSCALE_DIR
test -z "$MAXSCALE_DIR" && exit 1
# Start MaxScale
$maxscaledir/bin/maxscale -df $maxscaledir/maxscale.cnf >& $maxscaledir/maxscale.output &
pid=$!
# Wait for MaxScale to start
for ((i=0;i<60;i++))
do
$maxscaledir/bin/maxadmin help >& /dev/null && break
sleep 0.1
done

View File

@ -4,7 +4,7 @@
"repository": "https://github.com/mariadb-corporation/MaxScale",
"description": "MaxScale REST API tests",
"scripts": {
"test": "mocha"
"test": "mocha --timeout 60000 --slow 10000"
},
"author": "",
"license": "SEE LICENSE IN ../../../../LICENSE.txt",

View File

@ -50,24 +50,12 @@ chmod 0755 $maxscaledir/lib/maxscale
chmod 0755 $maxscaledir/cache/maxscale
chmod 0755 $maxscaledir/run/maxscale
# Start MaxScale
$maxscaledir/bin/maxscale -df $maxscaledir/maxscale.cnf >& $maxscaledir/maxscale.output &
pid=$!
# Wait for MaxScale to start
for ((i=0;i<60;i++))
do
$maxscaledir/bin/maxadmin help >& /dev/null && break
sleep 1
done
# This variable is used to start and stop MaxScale before each test
export MAXSCALE_DIR=$maxscaledir
# Run tests
cd $testdir
npm test
rval=$?
# Stop MaxScale
kill $pid
wait
exit $rval

View File

@ -405,6 +405,8 @@ function validate_json(data) {
return validate_func(JSON.parse(data))
}
var child_process = require("child_process")
module.exports = function() {
this.fs = require("fs")
this.request = require("request-promise-native")
@ -419,4 +421,18 @@ module.exports = function() {
this.validate_func = ajv.compile(json_api_schema)
this.validate = validate_json
this.base_url = "http://localhost:8989/v1"
this.before(function(done) {
child_process.execFile("./before.sh", function(err, stdout, stderr) {
if (process.env.MAXSCALE_DIR == null) {
throw new Error("MAXSCALE_DIR is not set");
}
done()
})
});
this.after(function(done) {
child_process.execFile("./after.sh", function(err, stdout, stderr) {
done()
})
});
}