refstack/setup-mysql-tests.sh
Vladislav Kuzmin 16affe2d12 Improve database creation for testing
Create MySQL database before starting tests and cleanup after that.
MySQL database is able to work in standalone mode where establish
connection using a Unix domain socket.
This patch makes it possible to perform functional tests with `tox -e py27-func-mysql`.
If an enviroment variable REFSTACK_TEST_MYSQL_URL is set then tests will run with it
and a database will not be created.
Update test requirements.

Change-Id: I0cdba19701bbf06109e78f78f275038caeecd881
2015-03-06 10:14:04 +03:00

38 lines
1.1 KiB
Bash
Executable File

#!/bin/bash -x
wait_for_line () {
while read line
do
echo "$line" | grep -q "$1" && break
done < "$2"
# Read the fifo for ever otherwise process would block
cat "$2" >/dev/null &
}
# If test DB url is provided, run tests with it
if [[ "$REFSTACK_TEST_MYSQL_URL" ]]
then
$*
exit $?
fi
# Else setup mysql base for tests.
# Start MySQL process for tests
MYSQL_DATA=`mktemp -d /tmp/refstack-mysql-XXXXX`
mkfifo ${MYSQL_DATA}/out
# On systems like Fedora here's where mysqld can be found
PATH=$PATH:/usr/libexec
mysqld --no-defaults --datadir=${MYSQL_DATA} --pid-file=${MYSQL_DATA}/mysql.pid --socket=${MYSQL_DATA}/mysql.socket --skip-networking --skip-grant-tables &> ${MYSQL_DATA}/out &
# Wait for MySQL to start listening to connections
wait_for_line "mysqld: ready for connections." ${MYSQL_DATA}/out
export REFSTACK_TEST_MYSQL_URL="mysql://root@localhost/test?unix_socket=${MYSQL_DATA}/mysql.socket&charset=utf8"
mysql --no-defaults -S ${MYSQL_DATA}/mysql.socket -e 'CREATE DATABASE test;'
# Yield execution to venv command
$*
# Cleanup after tests
ret=$?
kill $(jobs -p)
rm -rf "${MYSQL_DATA}"
exit $ret