Files
MaxScale/test/run_npm_test.sh
Markus Mäkelä a399c58df3 Make NPM tests runnable by root
The tests can now be run as root. This is most likely required in some
cases and it should not break things if they are run as root (e.g. inside
a VM with no other users).

NPM prevents the use of the root user (due to modules getting root access)
and uses an unprivileged user to install the modules. As maxctrl has to
generate the version information at install time, running `npm install` as
root will fail due to missing privileges to the current working
directory. To work around this, an explicit step was added.

Also changed the maxadmin checks to maxctrl to remove the dependency on
the socket file location being writable by non-root users
(/var/run/maxscale/ might not be accessible to all users).
2018-08-13 10:28:00 +03:00

106 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# This script builds and installs MaxScale, starts a MariaDB cluster and runs any
# tests that define a `npm test` target
#
# This is definitely not the most efficient way to test the binaries but it's a
# guaranteed method of creating a consistent and "safe" testing environment.
if [ $# -lt 3 ]
then
echo "USAGE: $0 <MaxScale sources> <test sources> <test directory>"
exit 1
fi
srcdir=$1
testsrc=$2
testdir=$3
maxscaledir=$PWD/maxscale_test/
# Create the test directories
mkdir -p $maxscaledir $testdir
# Copy the common test files (start/stop scripts etc.)
cp -t $testdir -r $srcdir/test/*
# Copy test sources to test workspace
cp -t $testdir -r $testsrc/*
# Required by MaxCtrl (not super pretty)
cp -t $testdir/.. $srcdir/VERSION*.cmake
# This avoids running npm as root if we're executing the tests as root (MaxCtrl specific)
(cd $testdir && test -f configure_version.cmake && cmake -P configure_version.cmake)
# Copy required docker-compose files to the MaxScale directory and bring MariaDB
# servers up. This is an asynchronous process.
cd $maxscaledir
cp -t $maxscaledir -r $srcdir/test/*
docker-compose up -d || exit 1
# Install dependencies
cd $testdir
npm install || exit 1
# Configure and install MaxScale
cd $maxscaledir
cmake $srcdir -DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=$maxscaledir \
-DBUILD_TESTS=N \
-DMAXSCALE_VARDIR=$maxscaledir \
-DWITH_SCRIPTS=N \
-DWITH_MAXSCALE_CNF=N \
-DBUILD_CDC=N || exit 1
make -j $(grep -c processor /proc/cpuinfo) install || exit 1
# Create required directories (we could run the postinst script but it's a bit too invasive)
mkdir -p $maxscaledir/lib64/maxscale
mkdir -p $maxscaledir/bin
mkdir -p $maxscaledir/share/maxscale
mkdir -p $maxscaledir/share/doc/MaxScale/maxscale
mkdir -p $maxscaledir/log/maxscale
mkdir -p $maxscaledir/lib/maxscale
mkdir -p $maxscaledir/cache/maxscale
mkdir -p $maxscaledir/run/maxscale
chmod 0755 $maxscaledir/log/maxscale
chmod 0755 $maxscaledir/lib/maxscale
chmod 0755 $maxscaledir/cache/maxscale
chmod 0755 $maxscaledir/run/maxscale
# This variable is used to start and stop MaxScale before each test
export MAXSCALE_DIR=$maxscaledir
# Wait until the servers are up
cd $maxscaledir
for node in server1 server2 server3 server4
do
printf "Waiting for $node to start... "
for ((i=0; i<60; i++))
do
docker exec -i $node mysql -umaxuser -pmaxpwd -e "select 1" >& /dev/null && break
sleep 1
done
echo "Done!"
done
# Go to the test directory
cd $testdir
# Make sure no stale processes of files are left from an earlier run
./stop_maxscale.sh
# Run tests
npm test
rval=$?
# Stop MariaDB servers
if [ -z "$SKIP_SHUTDOWN" ]
then
cd $maxscaledir
docker-compose down -v
fi
exit $rval