87 lines
2.1 KiB
Bash
Executable file
87 lines
2.1 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# This script expects to be started by a Buildbot slave with PWD set to the build
|
|
# directory.
|
|
|
|
# Script Setup
|
|
# ============
|
|
|
|
program=${0##*/}
|
|
progdir=${0%/*}
|
|
build=$PWD
|
|
|
|
. $progdir/shell-utils
|
|
|
|
# Patch Django
|
|
# ============
|
|
#
|
|
# Assuming we check out trunk or branch-XXX with the command
|
|
# 'svn co URL/BRANCH/'
|
|
# then this script will be $PWD/test/patch-django and we will place our patched
|
|
# django in $PWD/test/lib/django
|
|
#
|
|
|
|
say "Setting up a local Django for the test suite"
|
|
cd $build
|
|
|
|
django=$(py_module_path "django")
|
|
rsync -a $django $build/test/lib/ >&2
|
|
|
|
cd $build/test/lib
|
|
for patch in $build/test/*.patch; do
|
|
patch -p 3 -t -N < $patch >&2
|
|
done
|
|
|
|
# Database setup
|
|
# ==============
|
|
|
|
#say "Setting up a database for the test suite"
|
|
|
|
# Project Setup
|
|
# =============
|
|
# put in place a suitable settings_local.py for our application to find. This should
|
|
# be based on the local settings_local.py, but should add test-specific settings, and
|
|
# should set things up so that we use the patched Django, not the system's default
|
|
# Django.
|
|
|
|
say "Setting up the Django settings for the test suite"
|
|
cd $build
|
|
|
|
settings_local=$(py_module_file "settings_local")
|
|
[ "$settings_local" ] || die "No setting_local file available"
|
|
|
|
cat $settings_local test/settings_local_test.py > test/settings_local.py
|
|
|
|
# Acquire lock, to prevent running test and database update at the same time
|
|
|
|
for dir in $DBLOCK /var/lock /var/state /var/run /var/tmp; do
|
|
[ -d $dir -a -w $dir ] && lock=$dir/ietfdb && break
|
|
done
|
|
[ "$lock" ] || die "Couldn't find a directory to keep lock in."
|
|
|
|
LOCKDIR=$lock
|
|
PIDFILE=$LOCKDIR/pid
|
|
|
|
while true; do
|
|
if mkdir $LOCKDIR; then
|
|
echo "$$" > $PIDFILE
|
|
chmod a+rwx $LOCKDIR
|
|
chmod a+rw $PIDFILE
|
|
echo $PIDFILE # tell caller about the pidfile
|
|
break
|
|
else
|
|
pid=$(< $PIDFILE )
|
|
[ "$pid" ] || die "Couldn't read pidfile '$PIDFILE'"
|
|
if kill -0 $pid; then
|
|
say "Pidfile for process $pid exists, and process is running. Sleeping."
|
|
sleep 10
|
|
else
|
|
say "Pidfile for process $pid exists, but process doesn't seem to be running."
|
|
die "Remove lockdir $LOCKDIR and old pid file $pidfile."
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
exit $warnings
|