From 6479788283bddec0bcca3b63a3fb20439a197ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 11 Jul 2017 11:47:36 +0300 Subject: [PATCH] MXS-1300: Add docker based cluster for REST API testing The REST API test suite now starts a four node MariaDB cluster with docker-compose. This allows quick and easy local testing. --- maxctrl/test/docker-compose.yml | 43 ++++++++++++++++++++++++++ maxctrl/test/sql/master/users.sql | 13 ++++++++ maxctrl/test/sql/slave/replication.sql | 3 ++ maxctrl/test/test_rest_api.sh | 22 ++++++++++++- 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 maxctrl/test/docker-compose.yml create mode 100644 maxctrl/test/sql/master/users.sql create mode 100644 maxctrl/test/sql/slave/replication.sql diff --git a/maxctrl/test/docker-compose.yml b/maxctrl/test/docker-compose.yml new file mode 100644 index 000000000..91e0b6be0 --- /dev/null +++ b/maxctrl/test/docker-compose.yml @@ -0,0 +1,43 @@ +version: '2' +services: + server1: + image: mariadb:10.0 + network_mode: "host" + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: Y + volumes: + - ./sql/master:/docker-entrypoint-initdb.d + command: mysqld --log-bin=binlog --binlog-format=ROW --server-id=3000 --port=3000 --log-slave-updates + + server2: + image: mariadb:10.0 + network_mode: "host" + depends_on: + - server1 + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: Y + volumes: + - ./sql/slave:/docker-entrypoint-initdb.d + command: mysqld --log-bin=binlog --binlog-format=ROW --server-id=3001 --port=3001 --log-slave-updates + + server3: + image: mariadb:10.0 + network_mode: "host" + depends_on: + - server1 + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: Y + volumes: + - ./sql/slave:/docker-entrypoint-initdb.d + command: mysqld --log-bin=binlog --binlog-format=ROW --server-id=3002 --port=3002 --log-slave-updates + + server4: + image: mariadb:10.0 + network_mode: "host" + depends_on: + - server1 + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: Y + volumes: + - ./sql/slave:/docker-entrypoint-initdb.d + command: mysqld --log-bin=binlog --binlog-format=ROW --server-id=3003 --port=3003 --log-slave-updates diff --git a/maxctrl/test/sql/master/users.sql b/maxctrl/test/sql/master/users.sql new file mode 100644 index 000000000..5831a4200 --- /dev/null +++ b/maxctrl/test/sql/master/users.sql @@ -0,0 +1,13 @@ +CREATE DATABASE test; + +CREATE USER 'maxuser'@'127.0.0.1' IDENTIFIED BY 'maxpwd'; +CREATE USER 'maxuser'@'%' IDENTIFIED BY 'maxpwd'; +GRANT ALL ON *.* TO 'maxuser'@'127.0.0.1' WITH GRANT OPTION; +GRANT ALL ON *.* TO 'maxuser'@'%' WITH GRANT OPTION; + +CREATE USER 'skysql'@'127.0.0.1' IDENTIFIED BY 'skysql'; +CREATE USER 'skysql'@'%' IDENTIFIED BY 'skysql'; +GRANT ALL ON *.* TO 'skysql'@'127.0.0.1' WITH GRANT OPTION; +GRANT ALL ON *.* TO 'skysql'@'%' WITH GRANT OPTION; + +SET GLOBAL max_connections=10000; diff --git a/maxctrl/test/sql/slave/replication.sql b/maxctrl/test/sql/slave/replication.sql new file mode 100644 index 000000000..c916b1ddf --- /dev/null +++ b/maxctrl/test/sql/slave/replication.sql @@ -0,0 +1,3 @@ +CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3000, MASTER_USER='maxuser', MASTER_PASSWORD='maxpwd', MASTER_LOG_POS=4, MASTER_CONNECT_RETRY=1; +START SLAVE; +SET GLOBAL max_connections=10000; diff --git a/maxctrl/test/test_rest_api.sh b/maxctrl/test/test_rest_api.sh index e9c7eec8b..aa7ea8562 100755 --- a/maxctrl/test/test_rest_api.sh +++ b/maxctrl/test/test_rest_api.sh @@ -50,12 +50,32 @@ chmod 0755 $maxscaledir/lib/maxscale chmod 0755 $maxscaledir/cache/maxscale chmod 0755 $maxscaledir/run/maxscale +# Go to the test directory +cd $testdir + # This variable is used to start and stop MaxScale before each test export MAXSCALE_DIR=$maxscaledir +# Start MariaDB servers +docker-compose up -d + +# Wait until the servers are up +for node in server1 server2 server3 server4 +do + printf "Waiting for $node to start... " + for ((i=0; i<60; i++)) + do + docker-compose exec $node mysql -umaxuser -pmaxpwd -e "select 1" >& /dev/null && break + sleep 1 + done + echo "Done!" +done + # Run tests -cd $testdir npm test rval=$? +# Stop MariaDB servers +docker-compose down -v + exit $rval