#!/bin/bash cd `dirname $0` || exit 1 cd ../.. || exit 1 REPOS=`pwd` cd .. || exit 1 BUILD=`pwd` if [ -z "$VBOXUSER" ] then echo "VBOXUSER is not defined" exit 1 fi if [ -z "$DISPLAY" ] then echo "DISPLAY is not defined" exit 1 fi VBOXHOST=192.168.155.1 rm -rf java-bin || exit 1 mkdir java-bin || exit 1 SRCPATH=$REPOS/org.eclipse.tcf/plugins/org.eclipse.tcf DSTPATH=$BUILD/java-bin javac -g -nowarn \ -sourcepath $SRCPATH.core/src:$SRCPATH.debug/src \ -d $DSTPATH \ "$SRCPATH.debug/src/org/eclipse/tcf/internal/debug/tests/Main.java" \ || exit 1 pushd "$SRCPATH.core/src/org/eclipse/tcf/internal/services/remote" >/dev/null || exit 1 for FILE in `ls *.java` do javac -g -nowarn \ -classpath $DSTPATH \ -sourcepath "$SRCPATH.core/src" \ -d $DSTPATH \ "$SRCPATH.core/src/org/eclipse/tcf/internal/services/remote/$FILE" \ || exit 1 done popd >/dev/null if ps ax | grep -q VirtualBox then true else VirtualBox & fi rm -rf logs || exit 1 mkdir logs || exit 1 VMS_ALL=`VBoxManage --nologo list vms | sed -e "s/.*{\\(.*\\)}/\\1/"` HTML=logs/index.html echo "" >$HTML echo "" >>$HTML echo "TCF Nightly Build Status" >>$HTML echo "" >>$HTML echo "

TCF Nightly Build Status

" >>$HTML echo "

Host: `hostname`

" >>$HTML echo "

Date: `date`

" >>$HTML echo "

VirtualBox version: `VBoxManage --version`

" >>$HTML echo "" >>$HTML echo "" >>$HTML echo "" >>$HTML if grep -q $VM vms.lst ; then SKIP= HOST=`grep $VM vms.lst | sed -e "s/.*:\\(.*\\)/\\1/"` VMNAME=`VBoxManage --nologo showvminfo $VM --machinereadable | grep name= | sed -e "s/name=\"\(.*\)\"/\1/"` SSH="ssh -o TCPKeepAlive=yes $VBOXUSER@$HOST" echo "" >>$HTML echo "
" >>$HTML echo "IP Addr" >>$HTML echo "" >>$HTML echo "Name" >>$HTML echo "" >>$HTML echo "Start" >>$HTML echo "" >>$HTML echo "Ping" >>$HTML echo "" >>$HTML echo "OS" >>$HTML echo "" >>$HTML echo "CPU" >>$HTML echo "" >>$HTML echo "Build
Debug
C" >>$HTML echo "
" >>$HTML echo "Build
Debug
C++" >>$HTML echo "
" >>$HTML echo "Build
Release
C" >>$HTML echo "
" >>$HTML echo "Build
Release
C++" >>$HTML echo "
" >>$HTML echo "Build
RPM" >>$HTML echo "
" >>$HTML echo "Stop" >>$HTML function start_vm() { local LOGFILE=$HOST-Start.txt echo "" >>$HTML echo "" >>$HTML date >logs/$LOGFILE echo Starting $VM >>logs/$LOGFILE if VBoxManage --nologo list runningvms | sed -e "s/.*{\\(.*\\)}/\\1/" | grep -q $VM >>logs/$LOGFILE 2>&1 ; then echo $VM is already running >>logs/$LOGFILE echo "" >>$HTML elif VBoxManage --nologo startvm $VM >>logs/$LOGFILE 2>&1 ; then echo "" >>$HTML else echo "" >>$HTML SKIP=1 fi echo "" >>$HTML } function ping_vm() { local LOGFILE=$HOST-Ping.txt echo "" >>$HTML echo "" >>$HTML date >logs/$LOGFILE echo Ping $VM >>logs/$LOGFILE sleep 4 if ping -c 30 $HOST >>logs/$LOGFILE 2>&1 || \ ping -c 30 $HOST >>logs/$LOGFILE 2>&1 then echo >>logs/$LOGFILE if $SSH "ping $PING_FLAG 30 $VBOXHOST" >>logs/$LOGFILE 2>&1 || \ $SSH "ping $PING_FLAG 30 $VBOXHOST" >>logs/$LOGFILE 2>&1 then if [ "$SET_CLOCK" = 2 ] ; then DATE=`date +%m%d%H%M.%S` $SSH "/bin/date $DATE" >>logs/$LOGFILE 2>&1 elif [ ! -z "$SET_CLOCK" ] ; then DATE=`date +%m%d%H%M.%S` $SSH -tt "sudo /bin/date $DATE" >>logs/$LOGFILE 2>&1 fi if $SSH "cd $AGENT" >>logs/$LOGFILE 2>&1 ; then echo "" >>$HTML else echo "" >>$HTML SKIP=1 fi else echo "" >>$HTML SKIP=1 fi else echo "" >>$HTML SKIP=1 fi echo "" >>$HTML } function stop_vm() { local LOGFILE=$HOST-Stop.txt echo "" >>$HTML echo "" >>$HTML date >logs/$LOGFILE echo "Stop $VM" >>logs/$LOGFILE if [ -z "$STOP_VM" ] ; then echo "VM does not need to be stopped" >>logs/$LOGFILE echo "" >>$HTML elif VBoxManage --nologo list runningvms | sed -e "s/.*{\\(.*\\)}/\\1/" | grep -q $VM ; then if VBoxManage --nologo controlvm $VM savestate >>logs/$LOGFILE 2>&1 ; then echo "" >>$HTML else echo "" >>$HTML fi else echo $VM is already stopped >>logs/$LOGFILE 2>&1 echo "" >>$HTML fi echo "" >>$HTML } function get_make_options() { # Currently we cannot test login feature of Terminals service OPTS="-DTERMINALS_NO_LOGIN=1 $CFLAGS" # Disable signal handlers for better error reporting OPTS="-DENABLE_SignalHandlers=0 $OPTS" # Hardware breakpoints are broken in VirtualBox OPTS="-DENABLE_HardwareBreakpoints=0 $OPTS" case $CC in gcc) OPTS="CC=gcc 'CFLAGS=-Werror $OPTS'" ;; g++) OPTS="CC=g++ 'CFLAGS=-Werror $OPTS'" ;; msvc++) OPTS="'CFLAGS=-x c++ $OPTS'" ;; *) OPTS="'CFLAGS=$OPTS'" ;; esac echo "OPSYS=$OPSYS CONF=$CONF $OPTS" | \ sed -e "s/ *$//" | sed -e "s/ */ /g" } function build_and_start_server() { echo "" >>$HTML local LOGFILE=$HOST-$CONF-$CC-Server.txt echo "" >>$HTML date >logs/$LOGFILE echo "$CONF build on $HOST $VM $VMNAME" >>logs/$LOGFILE echo "Compiler: $CC" >>logs/$LOGFILE echo "Options: `get_make_options`" >>logs/$LOGFILE echo >>logs/$LOGFILE if $SSH "cd $AGENT/server; $MAKE `get_make_options` clean all" >>logs/$LOGFILE 2>&1 then echo "" >>$HTML local SERVER_LFILE=$VMBUILD/logs/server-$HOST.txt if [ $OPSYS = Windows ] ; then local SERVER_LFILE=`$SSH "cygpath -m $SERVER_LFILE"` fi $SSH -f "$AGENT/server/obj/$OPSYS/$MACHINE/$CONF/server -s TCP::1535 -L$SERVER_LFILE -l0x800" >>logs/$LOGFILE 2>&1 else echo "" >>$HTML fi echo "" >>$HTML } function stop_server() { local LOGFILE=$HOST-$CONF-$CC-Server.txt $SSH "killall server" >>logs/$LOGFILE 2>&1 if [ -r logs/server-$HOST.txt ] ; then echo >>logs/$LOGFILE echo "Server log:" >>logs/$LOGFILE cat logs/server-$HOST.txt >>logs/$LOGFILE rm logs/server-$HOST.txt echo "End of server log" >>logs/$LOGFILE fi } function build_and_test_agent() { local LOGFILE=$HOST-$CONF-$CC-Agent-$SEQ.txt date >logs/$LOGFILE echo "Build on $HOST $VM $VMNAME" >>logs/$LOGFILE echo "Compiler: $CC" >>logs/$LOGFILE echo "Options: `get_make_options`" >>logs/$LOGFILE echo >>logs/$LOGFILE local BUILD_ERROR= local TEST_ERROR= local TEST_WARNING= if $SSH "cd $AGENT/agent; time -p $MAKE `get_make_options` clean all" >>logs/$LOGFILE 2>&1 then if [ $SEQ = 1 ] ; then $SSH "$AGENT/agent/obj/$OPSYS/$MACHINE/$CONF/agent -c" >>logs/$LOGFILE 2>&1 fi if [ $OPSYS = Windows ] ; then local AGENT_L_OPT=-L`$SSH "cygpath -m $VMBUILD/logs/agent-$HOST.txt"` else local AGENT_L_OPT=-L$VMBUILD/logs/agent-$HOST.txt fi $SSH -f "$AGENT/agent/obj/$OPSYS/$MACHINE/$CONF/agent -s TCP::1534 $AGENT_L_OPT -l0" >>logs/$LOGFILE 2>&1 sleep 15 TESTURL1=TransportName=TCP:Host=$HOST:Port=1534 TESTURL2=TransportName=TCP:Host=$HOST:Port=1535 echo >>logs/$LOGFILE echo "Starting tests, target: $TESTURL1" >>logs/$LOGFILE if time -p java -ea \ -classpath java-bin \ org.eclipse.tcf.internal.debug.tests.Main \ $TESTURL1 \ >>logs/$LOGFILE 2>&1 then if [ -s logs/agent-$HOST.txt ] ; then TEST_WARNING=1 fi else TEST_ERROR=1 fi $SSH "killall agent" >>logs/$LOGFILE 2>&1 if [ -r logs/agent-$HOST.txt ] ; then echo >>logs/$LOGFILE echo "Agent log:" >>logs/$LOGFILE cat logs/agent-$HOST.txt >>logs/$LOGFILE rm logs/agent-$HOST.txt echo "End of agent log" >>logs/$LOGFILE fi if [ "$OPSYS" = Windows -a $SEQ != 1 ] ; then # TCF server does not support PE object files echo "Skipping server tests." >>logs/$LOGFILE else # Test server with different channel trasports for PROTO in TCP SSL PIPE UNIX do case $PROTO in PIPE) if [ "$OPSYS" != Windows ] ; then continue fi local AGENT_S_OPT=PIPE: TESTURL1=TransportName=PIPE ;; UNIX) if [ "$OPSYS" != GNU/Linux ] ; then continue; fi local AGENT_S_OPT=UNIX:/tmp/tcf TESTURL1=TransportName=UNIX:Host=/tmp/tcf ;; SSL) if [ "$OPSYS" != GNU/Linux ] ; then continue; fi local AGENT_S_OPT=SSL::1534 TESTURL1=TransportName=SSL:Host=localhost:Port=1534 ;; *) local AGENT_S_OPT=TCP::1534 TESTURL1=TransportName=TCP:Host=localhost:Port=1534 ;; esac sleep 5 $SSH -f "$AGENT/agent/obj/$OPSYS/$MACHINE/$CONF/agent -s $AGENT_S_OPT $AGENT_L_OPT -l0" >>logs/$LOGFILE 2>&1 sleep 5 echo >>logs/$LOGFILE echo "Starting tests, target: $TESTURL2 $TESTURL1" >>logs/$LOGFILE if time -p java -ea \ -classpath java-bin \ org.eclipse.tcf.internal.debug.tests.Main \ $TESTURL2 $TESTURL1 \ >>logs/$LOGFILE 2>&1 then if [ -s logs/agent-$HOST.txt ] ; then TEST_WARNING=1 fi else TEST_ERROR=1 fi $SSH "killall agent" >>logs/$LOGFILE 2>&1 if [ -r logs/agent-$HOST.txt ] ; then echo >>logs/$LOGFILE echo "Agent log:" >>logs/$LOGFILE cat logs/agent-$HOST.txt >>logs/$LOGFILE rm logs/agent-$HOST.txt echo "End of agent log" >>logs/$LOGFILE fi done fi else BUILD_ERROR=1 fi echo "" >>$HTML if [ ! -z "$BUILD_ERROR" ] ; then echo "" >>$HTML elif [ ! -z "$TEST_ERROR" ] ; then echo "" >>$HTML elif [ ! -z "$TEST_WARNING" ] ; then echo "" >>$HTML else echo "" >>$HTML fi echo "" >>$HTML sleep 5 $SSH "cd $AGENT/agent; rm -rf obj" >>logs/$LOGFILE 2>&1 } function test_one_conf() { CFLAGS= build_and_start_server local CFLAGS1="\ -DMEM_USAGE_FACTOR=1" local CFLAGS2="\ -DENABLE_SymbolsProxy=1 \ -DENABLE_LineNumbersProxy=1" local CFLAGS3="\ -DSERVICE_RunControl=0 \ -DSERVICE_Breakpoints=0 \ -DSERVICE_Memory=0 \ -DSERVICE_Registers=0 \ -DSERVICE_MemoryMap=0 \ -DSERVICE_StackTrace=0 \ -DSERVICE_Symbols=0 \ -DSERVICE_LineNumbers=0 \ -DSERVICE_Expressions=0" local CFLAGS4="\ -DENABLE_DebugContext=0 \ -DENABLE_ELF=0 \ -DSERVICE_StackTrace=0 \ -DSERVICE_Breakpoints=0 \ -DSERVICE_Memory=0 \ -DSERVICE_Registers=0 \ -DSERVICE_RunControl=0 \ -DSERVICE_LineNumbers=0 \ -DSERVICE_Processes=0 \ -DSERVICE_Expressions=0 \ -DSERVICE_MemoryMap=0" SEQ=1 for CFLAGS in "" "$CFLAGS1" "$CFLAGS2" "$CFLAGS3" "$CFLAGS4" do build_and_test_agent SEQ=`expr $SEQ + 1` done stop_server sleep 5 } function test_one_opsys() { echo "" >>$HTML echo "$OPSYS" >>$HTML echo "" >>$HTML echo "$MACHINE" >>$HTML for CONF in Debug Release do for CC in $CC_LIST do test_one_conf done done } function build_rpm() { local LOGFILE=$HOST-RPM.txt echo "" >>$HTML echo "" >>$HTML date >logs/$LOGFILE echo RPM build on $VM >>logs/$LOGFILE if [ -z "$BUILD_RPM" ] ; then echo "" >>$HTML elif $SSH "cd $AGENT/agent; $MAKE clean rpm" >>logs/$LOGFILE 2>&1 ; then echo "" >>$HTML else echo "" >>$HTML fi echo "" >>$HTML } for VM in $VMS_ALL do echo "
" >>$HTML echo "$HOST" >>$HTML echo "" >>$HTML echo "$VMNAME" >>$HTML start_vm if [ ! -z "$SKIP" ] ; then continue fi VMBUILD=/net/$VBOXHOST$BUILD AGENT=/net/$VBOXHOST$REPOS/org.eclipse.tcf.agent MAKE=make PING_FLAG=-c OPSYS_FLAG=-o BUILD_RPM= STOP_VM= SET_CLOCK= case $HOST in 192.168.155.4) # Ubuntu STOP_VM=1 SET_CLOCK= ;; 192.168.155.5) # Free BSD MAKE=gmake OPSYS_FLAG=-s STOP_VM=1 ;; 192.168.155.10) # Windows 7 32 PING_FLAG=-n SET_CLOCK=2 ;; 192.168.155.11) # Windows 7 64 PING_FLAG=-n SET_CLOCK=2 ;; *) # Linux STOP_VM=1 SET_CLOCK=1 ;; esac ping_vm if [ ! -z "$SKIP" ] ; then continue fi OPSYS=`$SSH "uname $OPSYS_FLAG"` || exit 1 MACHINE=`$SSH "uname -m"` || exit 1 CC_LIST="gcc g++" $SSH "killall server" >/dev/null 2>&1 $SSH "killall agent" >/dev/null 2>&1 if [ "$OPSYS" = Cygwin ] ; then if false # cygwin tests are disabled for now then test_one_opsys echo "
" >>$HTML fi OPSYS=Windows CC_LIST="msvc msvc++" fi test_one_opsys build_rpm $SSH "sync" || exit 1 sleep 5 stop_vm else echo "" >>$HTML echo "Not in vms.lst" >>$HTML echo "" >>$HTML echo "$VM" >>$HTML fi done #killall VirtualBox || exit 1 echo "
" >>$HTML echo "

Finished at: `date`

" >>$HTML echo "" >>$HTML echo "" >>$HTML