blob: e09d575d97cfa0904eb2313bcafbf8defbde6ed4 [file] [log] [blame]
#!/bin/bash
#### Please post any and all results and analysis here:
#### http://wiki.eclipse.org/Linux_Tools_Project/Eclipse_Build/Tests
function usage() {
cat << _EOF_
usage: $0 [<options>]
Run Eclipse SDK tests
Optional arguments:
-h Show this help message
-g Don't run the tests headless
-d Debug tests (allow remote connection to test runs' JVM)
-b Tests build directory
-p Clean installation directory to copy for running test suites
-t Timestamp string with which to tag the results
-v Make test runs output to the console
_EOF_
}
function init() {
# Test suites to run
testPluginsToRun="\
org.eclipse.ant.tests.core \
org.eclipse.ant.tests.ui \
org.eclipse.compare.tests \
org.eclipse.core.expressions.tests \
org.eclipse.core.filebuffers.tests \
org.eclipse.core.tests.net \
org.eclipse.core.tests.resources \
org.eclipse.core.tests.runtime \
org.eclipse.equinox.security.tests \
org.eclipse.jdt.core.tests.builder \
org.eclipse.jdt.core.tests.compiler \
org.eclipse.jdt.core.tests.model \
org.eclipse.jdt.core.tests.performance \
org.eclipse.jdt.debug.tests \
org.eclipse.jdt.text.tests \
org.eclipse.jdt.ui.tests \
org.eclipse.jdt.ui.tests.refactoring \
org.eclipse.jface.tests.databinding \
org.eclipse.jface.text.tests \
org.eclipse.ltk.core.refactoring.tests \
org.eclipse.ltk.ui.refactoring.tests \
org.eclipse.osgi.tests \
org.eclipse.pde.api.tools.tests \
org.eclipse.pde.build.tests \
org.eclipse.pde.ds.tests \
org.eclipse.pde.ui.tests \
org.eclipse.search.tests \
org.eclipse.swt.tests \
org.eclipse.team.tests.core \
org.eclipse.text.tests \
org.eclipse.ua.tests \
org.eclipse.ui.editors.tests \
org.eclipse.ui.tests \
org.eclipse.ui.tests.forms \
org.eclipse.ui.tests.navigator \
org.eclipse.ui.tests.rcp \
org.eclipse.ui.tests.views.properties.tabbed \
org.eclipse.ui.workbench.texteditor.tests \
"
# We're not ready to run these yet (setup, etc.)
# org.eclipse.equinox.p2.tests \
# org.eclipse.equinox.p2.tests.ui \
# org.eclipse.update.tests.core \
# org.eclipse.ui.tests.performance \
# org.eclipse.team.tests.cvs.core \
# org.eclipse.releng.tests \
# org.eclipse.jdt.compiler.tool.tests \
# Defaults
if [ -z ${verbose} ]; then
verbose=0
fi
if [ -z ${debugTests} ]; then
debugTests=0
fi
if [ -z ${headless} ]; then
headless=1
fi
label=$(grep label build.properties | sed s/label=//)
testframework=$(grep ^testframework build.properties | sed s/testframework=//)
# Make directories absolute
testsBuildDirectory=$(readlink -f ${testsBuildDirectory})
provisionDir=$(readlink -f ${provisionDir})
testsRepo=${testsBuildDirectory}/buildRepo/
testsParent=$(pwd)/tests_${timestamp}
mkdir -p ${testsParent}
cp -rp ${provisionDir} ${testsParent}/installationWithTests.clean
cleanInstall=${testsParent}/installationWithTests.clean
workspace=${testsParent}/workspace
eclipseHome=${provisionDir}
results=${testsParent}/results
datadir=${testsParent}/testDataDir
homedir=${testsParent}/home
testhome=${testsParent}/testhome
rm -rf $datadir $homedir $testhome
mkdir -p $datadir $homedir $testhome $results/{xml,logs,html}
# improves test cases (but not required) for org.eclipse.pde.build.tests
echo "${testPluginsToRun}" | grep -q 'org.eclipse.pde.build.tests'
if [ $? -eq 0 ]; then
deltapackZip=$(pwd)/eclipse-${label}-delta-pack.zip
mkdir -p ${testsParent}/deltapack
if [ -e ${deltapackZip} ]; then
unzip -d ${testsParent}/deltapack ${deltapackZip}
else
echo "eclipse-${label}-delta-pack was not found at ${deltapackZip}."
echo "Some failures should be expected in org.eclipse.pde.build.tests."
fi
fi
properties=$(pwd)/sdk-tests.properties
rm -f $properties
echo "data-dir=$datadir" >> $properties
echo "useEclipseExe=true" >> $properties
echo "junit-report-output=$results" >> $properties
echo "junit-stylesheet=${eclipseHome}/plugins/${testframework}/JUNIT.XSL" >> $properties
echo "results=$results" >> $properties
echo "tmpresults=$tmpresults" >> $properties
echo "testhome=$testhome" >> $properties
if [ $debugTests -eq 1 ]; then
echo "extraVMargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=40000" >> $properties
else
echo "extraVMargs=" >> $properties
fi
}
function findXvncAndSetDisplay() {
if [ ${headless} == 1 ]; then
# Try to find Xvnc
xvnc=
if [ -a /usr/bin/Xvnc ]
then
xvnc=/usr/bin/Xvnc
setupXvnc
else
if [ -a /usr/X11/bin/Xvnc ]
then
xvnc=/usr/X11/bin/Xvnc
setupXvnc
else
echo "Couldn't find Xvnc (/usr/bin/Xvnc or /usr/X11/bin/Xvnc). Using DISPLAY=0:0"
DISPLAY=`$HOST`:0.0
fi
fi
export DISPLAY
fi
}
function setupXvnc() {
# Pick a high display number.
port=`expr '(' $RANDOM '*' 9 / 32767 ')' + 58`
echo localhost > Xvnc.cfg
echo "Setting up Xvnc on port ${port} with password VNCpassword1"
$xvnc :$port -screen 1 1024x768x32 -auth Xvnc.cfg -localhost -PasswordFile eclipse-tests-vncpwd &> Xvnc.log &
Xvncpid=$!
DISPLAY=`$HOST`:$port
}
function setArch() {
if [ "x$buildArch" = "x" ]
then
if uname -m > /dev/null 2>&1; then
arch=`uname -m`
else
arch=`uname -p`
fi
# Massage arch for Eclipse-uname differences
case $arch in
i[0-9]*86)
arch=x86 ;;
ia64)
arch=ia64 ;;
ppc)
arch=ppc ;;
x86_64)
arch=x86_64 ;;
*)
echo "Unrecognized architecture: $arch" 1>&2
exit 1 ;;
esac
echo >&2 "Architecture not specified. Assuming host architecture: $arch"
fi
}
function runTestSuite() {
libraryXml=${eclipseHome}/plugins/${testframework}/library.xml
if [ $verbose -eq 1 ]; then
${eclipseHome}/eclipse \
-debug -consolelog \
-data ${datadir} \
-application org.eclipse.ant.core.antRunner \
-file $testDriver \
-Declipse-home=${eclipseHome} \
-Dos=linux \
-Dws=gtk \
-Darch=${arch} \
-Dlibrary-file=$libraryXml \
-propertyfile $properties \
-logger org.apache.tools.ant.DefaultLogger \
-vmargs \
-Duser.home=${homedir} \
-Dosgi.os=linux \
-Dosgi.ws=gtk \
-Dosgi.arch=${arch}
else
${eclipseHome}/eclipse \
-data ${datadir} \
-application org.eclipse.ant.core.antRunner \
-file $testDriver \
-Declipse-home=${eclipseHome} \
-Dos=linux \
-Dws=gtk \
-Darch=${arch} \
-Dlibrary-file=$libraryXml \
-propertyfile $properties \
-logger org.apache.tools.ant.DefaultLogger \
-vmargs \
-Duser.home=${homedir} \
-Dosgi.os=linux \
-Dosgi.ws=gtk \
-Dosgi.arch=${arch}
fi
}
function cleanAfterTestSuite() {
rm -rf ${datadir} ${homedir} ${testhome}
mkdir -p ${datadir} ${homedir} ${testhome}
}
#function setupForP2Tests() {
# # Set up for p2 tests
# platformZip=$(grep platform.archive /usr/lib/eclipse/dropins/eclipse/rpm.properties | sed s/.*=//g)
# platformZipDir=$(dirname $platformZip)_eclipse
# if [ ! -f $platformZip ]; then
# mkdir -p $(dirname $platformZip)
# mkdir -p $platformZipDir/eclipse
# sh /usr/lib/eclipse/buildscripts/copy-platform $platformZipDir/eclipse /usr/lib/eclipse
# pushd $platformZipDir
# tar hczf $platformZip *
# popd
# rm -rf $platformZipDir
# fi
#}
function cleanupXvnc() {
# Clean up if we used Xvnc
if [ -e Xvnc.cfg ]
then
kill $Xvncpid
rm Xvnc.cfg
fi
}
function runTestPlugins() {
for plugin in $testPluginsToRun; do
cleanAndSetup
installTestPlugin
rm -rf ${workspace}
mkdir -p ${workspace}
runTestPlugin
done
}
function cleanAndSetup() {
rm -rf ${eclipseHome}
rm -rf ${workspace}
cp -rp ${cleanInstall} ${eclipseHome}
workspace=${testsParent}/workspace
# improves test cases (but not required) for org.eclipse.pde.ui.tests
if [ ${plugin} = 'org.eclipse.pde.ui.tests' ]; then
junitSourceLoc=$(pwd)/org.junit.source_*
if [ -e ${junitSourceLoc} ]; then
ln -s ${junitSourceLoc} ${eclipseHome}/plugins
else
echo "org.junit.source was not found at ${junitSourceLoc}."
echo "Some failures should be expected in org.eclipse.pde.ui.tests."
fi
# these 2 plugins are not being recognized as bundles
rm -rf ${eclipseHome}/plugins/org.junit4 ${eclipseHome}/plugins/junit4.jar
fi
}
function installTestPlugin() {
IUtoInstall=${plugin}
installIU
}
function installIU() {
pushd ${eclipseHome} > /dev/null
./eclipse \
-nosplash \
-application org.eclipse.equinox.p2.director \
-data ${workspace} \
-consoleLog \
-flavor tooling \
-installIU ${IUtoInstall} \
-profileProperties org.eclipse.update.install.features=true \
-metadatarepository file:${testsRepo} \
-artifactrepository file:${testsRepo}
popd > /dev/null
}
function installTestFramework() {
IUtoInstall=org.eclipse.test.feature.group
installIU
}
function runTestPlugin() {
pluginVersion=$(ls ${eclipseHome}/plugins | grep ${plugin}_ | sed s/${plugin}_//)
echo "Running ${plugin} (${pluginVersion})"
testDriver="${eclipseHome}/plugins/${plugin}_${pluginVersion}/test.xml"
if [ ${plugin} == "org.eclipse.swt.tests" ]; then
echo "plugin-path=${eclipseHome}/plugins/${plugin}_${pluginVersion}" >> ${properties}
fi
runTestSuite
cleanAfterTestSuite
mv ${results}/*.txt ${results}/logs
xmlDir=${results}/tmpXml
mkdir -p ${xmlDir}
mv ${results}/*.xml ${xmlDir}
genHtml
mv ${xmlDir}/* ${results}/xml
rm -rf ${xmlDir}
if [ ${plugin} == "org.eclipse.swt.tests" ]; then
sed -i "/plugin-path/d" ${properties}
fi
}
function genHtml() {
ant -Declipse-home=${eclipseHome} -Dresults=${results} -DxmlDir=${xmlDir} -Dtestframework=${testframework} -f junitHelper.xml
}
# Command-line arguments
while getopts "vde:gb:p:t:h" OPTION
do
case $OPTION in
d)
debugTests=1
;;
g)
headless=0
;;
t)
timestamp=$OPTARG
;;
b)
testsBuildDirectory=$OPTARG
;;
p)
provisionDir=$OPTARG
;;
h)
usage
exit 1
;;
v)
verbose=1
;;
esac
done
if [ -z ${timestamp} ]; then
timestamp=$(date "+%Y%m%d%H%M%S")
fi
if [ -z ${testsBuildDirectory} ]; then
echo "Tests build directory must be specified (-b)";
exit 1;
fi
if [ -z ${provisionDir} ]; then
echo "Directory containing clean provisioned SDK must be specified (-p)";
exit 1;
fi
init
findXvncAndSetDisplay
setArch
runTestPlugins
cleanupXvnc