blob: 8bf3cb98c6905c6a99f9d3762e2b122c61ba5b7d [file] [log] [blame]
#! /bin/sh
# Copyright (c) 2010 Stephan Herrmann.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# Stephan Herrmann - initial API and implementation
###############################################################################
# =============================================================================
# MAIN BUILD AND TEST SCRIPT FOR THE OBJECT TEAMS DEVELOPMENT TOOLING (OTDT)
# =============================================================================
# INPUT: Variables from otdt_prerequisites:
# -----------------------------------------------------------------------------
# TMPDIR for log output
# OT_TESTSUITE_DIR root directory for building and testing
# METADATA directory for metadata from previous builds
# OT_RECIPIENT mail address for failure messages
# ECLIPSE_SDK_TGZ archive file of the base eclipse SDK build (full path)
# ECLIPSE_TESTLIB_ZIP archive file of the eclipse test framework (full path)
# OTRE_LIB directory holding various otre jar files
# PUBLISHED_UPDATES directory of previously published plugins&features
# ANT_PROFILE configure the ant process
# X11 XVFB, XVNC or X11
# NICE niceness value for nice -n ${NICE}
# =============================================================================
# OUTPUT: Variables passed to the toplevel ant script
# -----------------------------------------------------------------------------
## As Environment Variables:
## ANT_OPTS configure Ant
## As Ant Arguments (from ANT_PROFILE):
## -verbose configure Ant
## As Java Properties:
## -Declipse-app.tgz path of eclipse SDK
## -Declipse.tests.zip path of eclipse test framework
## -Dotre.lib directory to otre jars
## -Dpublished.updates path to previously published things
## -Ddo.build.all true|false: should OTDT and tests be built?
## -Ddo.run.tests true|false: should test be run?
# =============================================================================
usage()
{
echo "Usage:"
echo "$0 [-b|-nobuild]"
echo " -b: build OTDT only, no testing."
echo " -nobuild: don't build OTDT, directly invoke testing."
}
notifyTestRunFailure()
{
echo "Running the test-cases failed!";
local subject="OT Testsuite: Failure!"
local message="See the attached log to fix the problems."
local cmdLogfiles="-a ${OT_SUITE_LOG}-tail.gz"
grep -q "\[java\] BUILD FAILED" "$OT_SUITE_LOG" && { subject="OT Testsuite: Compile/Build Failure!"; }
grep -q "svn.*connection timed out" "$OT_SUITE_LOG" && { subject="OT Testsuite: SVN timeout"; message="Nothing to fix, next run hopefully works"; }
tail -1000 "$OT_SUITE_LOG" | gzip -f - > "${OT_SUITE_LOG}-tail.gz"
echo -e "$message" | mutt -s "$subject" $cmdLogfiles $OT_RECIPIENT
cleanup
exit 1;
}
cleanup()
{
if test $X11 = "XVNC"; then
vncserver -kill $VNC_DISPLAY
fi
}
_prefix=`dirname $0`
_prefix=`readlink -f $_prefix`
. "${_prefix}/otdt_prerequisites.sh"
#LOCAL: log file:
OT_SUITE_LOG=$TMPDIR/ot-testsuite.log
# LOCAL: the initial ant build file:
BUILDFILE="${_prefix}/run.xml"
#LOCAL: main ant target:
MAIN_TARGET=${MAIN_TARGET:="ot-junit-all"}
#LOCAL: should OTDT and tests be built?
DO_BUILD="true"
#LOCAL: should the tests be run?
DO_RUN="true"
#LOCAL: Display to be used by VNC:
VNC_DISPLAY=:23
while test $# -gt 0; do
case "$1" in
-b)
MAIN_TARGET="ot-junit-build"
DO_RUN="false"
shift
;;
-nobuild)
DO_BUILD="false"
shift
;;
-x11)
X11=X11
shift
;;
*)
echo "Unknown argument: $1"
usage
exit 1
esac
done
# start working:
test -d "$TMPDIR" || mkdir -p "$TMPDIR"
test -d "$OT_TESTSUITE_DIR" || mkdir -p "$OT_TESTSUITE_DIR"
cd "$OT_TESTSUITE_DIR"
# cleanup previous:
if [ "$DO_BUILD" == "true" ]
then
rm -rf build-root
rm -rf test-root
rm -rf updateSite
rm -rf updateSiteTests
rm -rf metadata
fi
# preload metadata for appending:
if [ -f "${METADATA}/content.xml" ]
then
mkdir -p metadata
cp ${METADATA}/*.xml metadata
fi
trap "echo Aborting by SIGTERM; cleanup; exit 130" INT
# Assemble the Ant call:
ANT_OPTIONS="${ANT_PROFILE} \
-Declipse-app.tgz=${ECLIPSE_SDK_TGZ} \
-Declipse.tests.zip=${ECLIPSE_TESTLIB_ZIP} \
-Dotre.lib=${OTRE_LIB} \
-Dpublished.updates=${PUBLISHED_UPDATES} \
-Ddo.run.tests=${DO_RUN} \
-Ddo.build.all=${DO_BUILD}"
ANT_OPTS="-Xmx1024m"
export ANT_OPTS
CMD="nice -n ${NICE} ant -f ${BUILDFILE} ${ANT_OPTIONS} ${MAIN_TARGET}"
if test "$X11" = "XVFB" && test `which xvfb-run` > /dev/null; then
echo "Running xvfb-run $CMD"
# make sure that xauth can be found
export PATH="$PATH:/usr/bin/X11"
# try to start with DISPLAY=10 instead of default 99 -- seems to not work everywhere
exec xvfb-run -n 10 -e xvfb.log --auto-servernum $CMD < /dev/null > ${OT_SUITE_LOG} 2>&1 || { notifyTestRunFailure; }
elif test "$X11" = "XVNC"; then
echo "starting vncserver $VNC_DISPLAY"
vncserver $VNC_DISPLAY
DISPLAY=$VNC_DISPLAY
export DISPLAY
exec $CMD < /dev/null > ${OT_SUITE_LOG} 2>&1 && { cleanup; } || { notifyTestRunFailure; }
else
echo "##### You don't have xvfb nor vnc, the GUI tests will appear on your display... ####"
echo "Running $CMD"
eval "$CMD" < /dev/null
fi
trap - INT