forked from MirrorHub/synapse
97d7e4c7b7
Including workers!
145 lines
4.5 KiB
Bash
145 lines
4.5 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Fetch sytest, and then run the tests for synapse. The entrypoint for the
|
|
# sytest-synapse docker images.
|
|
|
|
set -ex
|
|
|
|
if [ -n "$BUILDKITE" ]
|
|
then
|
|
SYNAPSE_DIR=`pwd`
|
|
else
|
|
SYNAPSE_DIR="/src"
|
|
fi
|
|
|
|
# Attempt to find a sytest to use.
|
|
# If /sytest exists, it means that a SyTest checkout has been mounted into the Docker image.
|
|
if [ -d "/sytest" ]; then
|
|
# If the user has mounted in a SyTest checkout, use that.
|
|
echo "Using local sytests..."
|
|
|
|
# create ourselves a working directory and dos2unix some scripts therein
|
|
mkdir -p /work/jenkins
|
|
for i in install-deps.pl run-tests.pl tap-to-junit-xml.pl jenkins/prep_sytest_for_postgres.sh; do
|
|
dos2unix -n "/sytest/$i" "/work/$i"
|
|
done
|
|
ln -sf /sytest/tests /work
|
|
ln -sf /sytest/keys /work
|
|
SYTEST_LIB="/sytest/lib"
|
|
else
|
|
if [ -n "BUILDKITE_BRANCH" ]
|
|
then
|
|
branch_name=$BUILDKITE_BRANCH
|
|
else
|
|
# Otherwise, try and find out what the branch that the Synapse checkout is using. Fall back to develop if it's not a branch.
|
|
branch_name="$(git --git-dir=/src/.git symbolic-ref HEAD 2>/dev/null)" || branch_name="develop"
|
|
fi
|
|
|
|
# Try and fetch the branch
|
|
echo "Trying to get same-named sytest branch..."
|
|
wget -q https://github.com/matrix-org/sytest/archive/$branch_name.tar.gz -O sytest.tar.gz || {
|
|
# Probably a 404, fall back to develop
|
|
echo "Using develop instead..."
|
|
wget -q https://github.com/matrix-org/sytest/archive/develop.tar.gz -O sytest.tar.gz
|
|
}
|
|
|
|
mkdir -p /work
|
|
tar -C /work --strip-components=1 -xf sytest.tar.gz
|
|
SYTEST_LIB="/work/lib"
|
|
fi
|
|
|
|
cd /work
|
|
|
|
# PostgreSQL setup
|
|
if [ -n "$POSTGRES" ]
|
|
then
|
|
export PGUSER=postgres
|
|
export POSTGRES_DB_1=pg1
|
|
export POSTGRES_DB_2=pg2
|
|
|
|
# Start the database
|
|
su -c 'eatmydata /usr/lib/postgresql/9.6/bin/pg_ctl -w -D /var/lib/postgresql/data start' postgres
|
|
|
|
# Use the Jenkins script to write out the configuration for a PostgreSQL using Synapse
|
|
jenkins/prep_sytest_for_postgres.sh
|
|
|
|
# Make the test databases for the two Synapse servers that will be spun up
|
|
su -c 'psql -c "CREATE DATABASE pg1;"' postgres
|
|
su -c 'psql -c "CREATE DATABASE pg2;"' postgres
|
|
|
|
fi
|
|
|
|
if [ -n "$OFFLINE" ]; then
|
|
# if we're in offline mode, just put synapse into the virtualenv, and
|
|
# hope that the deps are up-to-date.
|
|
#
|
|
# (`pip install -e` likes to reinstall setuptools even if it's already installed,
|
|
# so we just run setup.py explicitly.)
|
|
#
|
|
(cd $SYNAPSE_DIR && /venv/bin/python setup.py -q develop)
|
|
else
|
|
# We've already created the virtualenv, but lets double check we have all
|
|
# deps.
|
|
/venv/bin/pip install -q --upgrade --no-cache-dir -e $SYNAPSE_DIR
|
|
/venv/bin/pip install -q --upgrade --no-cache-dir \
|
|
lxml psycopg2 coverage codecov tap.py
|
|
|
|
# Make sure all Perl deps are installed -- this is done in the docker build
|
|
# so will only install packages added since the last Docker build
|
|
./install-deps.pl
|
|
fi
|
|
|
|
|
|
# Run the tests
|
|
>&2 echo "+++ Running tests"
|
|
|
|
RUN_TESTS=(
|
|
perl -I "$SYTEST_LIB" ./run-tests.pl --python=/venv/bin/python --synapse-directory=$SYNAPSE_DIR --coverage -O tap --all
|
|
)
|
|
|
|
TEST_STATUS=0
|
|
|
|
if [ -n "$WORKERS" ]; then
|
|
RUN_TESTS+=(-I Synapse::ViaHaproxy --dendron-binary=/pydron.py)
|
|
else
|
|
RUN_TESTS+=(-I Synapse)
|
|
fi
|
|
|
|
"${RUN_TESTS[@]}" "$@" > results.tap || TEST_STATUS=$?
|
|
|
|
if [ $TEST_STATUS -ne 0 ]; then
|
|
>&2 echo -e "run-tests \e[31mFAILED\e[0m: exit code $TEST_STATUS"
|
|
else
|
|
>&2 echo -e "run-tests \e[32mPASSED\e[0m"
|
|
fi
|
|
|
|
>&2 echo "--- Copying assets"
|
|
|
|
# Copy out the logs
|
|
mkdir -p /logs
|
|
cp results.tap /logs/results.tap
|
|
rsync --ignore-missing-args --min-size=1B -av server-0 server-1 /logs --include "*/" --include="*.log.*" --include="*.log" --exclude="*"
|
|
|
|
# Upload coverage to codecov and upload files, if running on Buildkite
|
|
if [ -n "$BUILDKITE" ]
|
|
then
|
|
/venv/bin/coverage combine || true
|
|
/venv/bin/coverage xml || true
|
|
/venv/bin/codecov -X gcov -f coverage.xml
|
|
|
|
wget -O buildkite.tar.gz https://github.com/buildkite/agent/releases/download/v3.13.0/buildkite-agent-linux-amd64-3.13.0.tar.gz
|
|
tar xvf buildkite.tar.gz
|
|
chmod +x ./buildkite-agent
|
|
|
|
# Upload the files
|
|
./buildkite-agent artifact upload "/logs/**/*.log*"
|
|
./buildkite-agent artifact upload "/logs/results.tap"
|
|
|
|
if [ $TEST_STATUS -ne 0 ]; then
|
|
# Annotate, if failure
|
|
/venv/bin/python $SYNAPSE_DIR/.buildkite/format_tap.py /logs/results.tap "$BUILDKITE_LABEL" | ./buildkite-agent annotate --style="error" --context="$BUILDKITE_LABEL"
|
|
fi
|
|
fi
|
|
|
|
|
|
exit $TEST_STATUS
|