#!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to you under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. GETHOSTNAME="host" # GETHOSTNAME="echo" # Options: # VERBOSE="-Dverbose=true" # VERBOSE="-Dverbose=false" VERBOSE="" # You should NOT need to modify anything below. #--------------------------------------------- TOOLDIR="${DERBYDIR}/${BRANCH_DIR}/tools/testing/reporting/scripts" . ${TOOLDIR}/env SEND_UPDATE_EXECUTE_REVISION_MISMATCH_MSG="true" SVNREVUSED="-" SANDBOX=`basename ${DERBYDIR}` move_log(){ TESTDIRl="$1" TESTHOSTl="$2" OSPLATFROMl="$3" HWPROCl="$4" startTimel="$5" TESTLOGDIRl="$6" ## Following may need modification. # EXCLUDEl="-x \*.dat" # Does not seem to work. EXCLUDEl="-x@/${DERBYDIR}/testing/ExcludeFromZip" # EXCLUDEl="" echo "*************************************************************" echo "mkdir -p ${TESTLOGDIRl}/${OSPLATFROMl}_${HWPROCl}" echo "zip -r -q -9 ${TESTLOGDIRl}/${OSPLATFROMl}_${HWPROCl}/${startTimel}.zip . ${EXCLUDEl}" mkdir -p ${TESTLOGDIRl}/${OSPLATFROMl}_${HWPROCl} && \ chmod go+rx ${TESTLOGDIRl}/${OSPLATFROMl}_${HWPROCl} && \ zip -r -q -9 ${TESTLOGDIRl}/${OSPLATFROMl}_${HWPROCl}/${startTimel}.zip . ${EXCLUDEl} && \ cd ../ && \ # Wait: keep until starting next testrun.rm -rf ${OSPLATFROMl}_${HWPROCl} && \ echo "Successfully moved logfiles to ${TESTLOGDIRl}/${OSPLATFROMl}_${HWPROCl}/${startTimel}.zip" chmod go+r ${TESTLOGDIRl}/${OSPLATFROMl}_${HWPROCl}/${startTimel}.zip } # move_log END if [ "$1" == "" ] then echo "Usage: $0 fileListingTestsToRun fullPathTestLogDir" echo " Derby db files and test logs are moved to fullPathTestLogDir after test." echo "E.g. Unix: runAllTests testing/testlist ~/Apache/Derby/testing/testlog" echo " Win: ~/bin/runAllTests.cygwin testing/testlist /log/huge3/derbytester/DerbyTestLog" echo " Rerun: cd ..../Derby/adhoc/" echo " runAllTests ../testing/testlistReRun ~/Apache/Derby/testing/testlogEmbeddedReRun" exit fi if [ "$2" == "" ] then echo "Usage: $0 $1 testLogDir" echo " Derby db files and test logs are moved to fullPathTestLogDir after test." exit fi TESTLISTFILE=$1 TESTLOGDIR=$2 if [ ! -e $TESTLISTFILE ] then echo "$TESTLISTFILE does not exist." exit fi USEDERBYNET="" if [ "$3" != "" ] then USEDERBYNET="-Dframework=DerbyNet" fi HASFULLPATH=`echo "$TESTLOGDIR" | sed -e 's|^/|HASFULLPATH /|' | gawk '{ print $1 }'` #DEBUG echo "${HASFULLPATH}" if [ "${HASFULLPATH}" != "HASFULLPATH" ] then echo "Directory for test logs must be full path. You supplied '"$TESTLOGDIR"'" exit fi if [ ! -d $TESTLOGDIR ] then echo "$TESTLOGDIR does not exist." exit fi if [ ! -w $TESTLOGDIR ] then echo "$TESTLOGDIR is not writable." exit fi SUITES=`gawk '{ print $1 }' ${TESTLISTFILE} | grep -v "^#"` TESTHOST=`uname -n` TESTHOST=`${GETHOSTNAME} ${TESTHOST} | awk '{print $1}'` KERNEL=`uname -s` KERN_REV=`uname -r` OSPLATFROM="${KERNEL}-${KERN_REV}" # OSPLATFROM="${KERNEL}" HWNAME=`uname -m` PROCNAME=`uname -p` HWPROC="${HWNAME}-${PROCNAME}" HWPLATFORM=`uname -i` TESTLOG_PLATF_DIR="${TESTLOGDIR}/${OSPLATFROM}_${HWPROC}" #DEBUG echo "Log files will be zipped to $TESTLOG_PLATF_DIR/" # echo "mkdir -p ${TESTLOG_PLATF_DIR}" mkdir -p ${TESTLOG_PLATF_DIR} chmod go+rx ${TESTLOG_PLATF_DIR} TESTDIR="${TESTEXECUTIONDIR}/${OSPLATFROM}_${HWPROC}" # We keep old results until next test run is started, so now is the time to: rm -rf ${TESTDIR} # echo "mkdir -p ${TESTDIR}" mkdir -p ${TESTDIR} chmod go+rx ${TESTDIR} if [ ! -w $TESTDIR ] then echo "$TESTDIR is not writable." exit fi cd ${TESTDIR} #DEBUG pwd echo "Tests are executed on ${TESTHOST} in ${TESTDIR}" echo "${TESTHOST}: ${OSPLATFROM}_${HWPROC} [${HWPLATFORM}]" > OS_HW echo "ANT_HOME: ${ANT_HOME}" >> OS_HW echo "JAVA_HOME: ${JAVA_HOME}" >> OS_HW ant -version >> OS_HW java -version 2>> OS_HW echo "cp ${BUILDLOGDIR}/lastBuildInfo buildInfo" cp ${BUILDLOGDIR}/lastBuildInfo buildInfo REVISION=`head -2 buildInfo | tail -1 | gawk '{ print $3 }'` REPOSITORY=`head -2 buildInfo | tail -1 | gawk '{ print $6 }'` BUILTOS=`head -1 buildInfo | gawk '{ print $3 }'` BUILTOSKERN=`head -1 buildInfo | gawk '{ print $4 }'` BUILTDATE=`head -1 buildInfo | gawk '{ print $8" "$9 }'` BUILTINFO=`grep "^Built on" buildInfo` # echo "REVISION: ${REVISION} REPOSITORY: ${REPOSITORY} BUILTOS: ${BUILTOS} BUILTOSKERN: ${BUILTOSKERN} BUILTDATE: ${BUILTDATE} BUILTINFO: ${BUILTINFO}" timeId="${REVISION}" startTime=`date +%Y-%m-%d" "%H:%M:%S` SUITESLOG="${TESTLOG_PLATF_DIR}/${timeId}.csv" JAVAINFO="${TESTLOG_PLATF_DIR}/${timeId}.javainfo" CURRSUITESLOG="${TESTLOG_PLATF_DIR}/current.csv" PREVSUITESLOG="${TESTLOG_PLATF_DIR}/previous.csv" LOG="${TESTLOG_PLATF_DIR}/${timeId}.txt" cp ${CURRSUITESLOG} ${PREVSUITESLOG} echo -n "Starting Derby tests on ${TESTHOST} [${OSPLATFROM}_${HWPROC} [${HWPLATFORM}]] at " echo -n -e "${TESTHOST}\t${KERNEL}\t${KERN_REV}\t${HWNAME}\t${PROCNAME}\t${HWPLATFORM}\t${REVISION}\t${REPOSITORY}\t" > ${CURRSUITESLOG} echo ${startTime} echo -e ${startTime} >> ${CURRSUITESLOG} echo "${BUILTINFO}" >> ${CURRSUITESLOG} echo "" >> ${CURRSUITESLOG} # Start without knowing.... echo "-" > ${JAVAINFO} echo "-" >> ${JAVAINFO} chmod go+r ${JAVAINFO} ${TOOLDIR}/system > ${TESTLOG_PLATF_DIR}/${REVISION}-system ${TOOLDIR}/cpu_mem > ${TESTLOG_PLATF_DIR}/${REVISION}-cpu_mem chmod go+r ${TESTLOG_PLATF_DIR}/${REVISION}-system chmod go+r ${TESTLOG_PLATF_DIR}/${REVISION}-cpu_mem # echo "CLASSPATH = ${CLASSPATH}" HEADER="Tests \tPassed \tFailed \tSkippd \tDuration" echo -e "Suite \t${HEADER}" >> ${CURRSUITESLOG} # export CLASSPATH=`cygpath -wp $CLASSPATH` # echo "CLASSPATH: $CLASSPATH" # echo ${SUITES} echo "" > ${LOG} JAVAVENDOR="" for suite in ${SUITES} do if [ "${suite}" == "exit" ] then echo "Exit: found ${suite}" echo -e "\n\n\n" >> ${CURRSUITESLOG} endTime=`date +%Y-%m-%d" "%H:%M:%S` echo -e "Started:\t${startTime}\tEnd:\t${endTime}\tHost:\t${TESTHOST}" >> ${CURRSUITESLOG} # cat buildInfo >> ${CURRSUITESLOG} echo "Started: ${startTime} End: ${endTime} ${TESTHOST}" cp -f ${CURRSUITESLOG} ${SUITESLOG} chmod go+r ${SUITESLOG} move_log ${TESTDIR} ${TESTHOST} ${OSPLATFROM} ${HWPROC} ${timeId} ${TESTLOGDIR} SUBJECT="Regression Test: ${SANDBOX} ${timeId}/${SVNREVUSED} - ${OSPLATFROM}_${HWPROC} - ${TESTHOST} - ${BUILTOS} ${BUILTOSKERN} ${BUILTDATE}" FILELIST="${SUITESLOG}" ### ${TOOLDIR}/textMail "${SUBJECT}" ${MAILTOEXT} "${FILELIST}" exit fi suiteStart=`date +%Y-%m-%d" "%H:%M:%S` echo echo "------------ ${suite} " echo "${suiteStart} ------------ ${suite} " >> ${LOG} # Remove possible leftovers: rm -rf ${suite} # (re)Create the suite dir: mkdir -p ${suite} chmod go+rx ${suite} cd ${suite} ### VMPID=`${TOOLDIR}/beginVmStat vmstat.log` date +%H:%M:%S > ${TESTLOG_PLATF_DIR}/suiteStart.txt # --------------- # The test suite is run here: JUNIT=`echo ${suite} | grep org.apache.derbyTesting` if [ "${JUNIT}" == "" ] then echo "java ${VERBOSE} ${USEDERBYNET} org.apache.derbyTesting.functionTests.harness.RunSuite ${suite}" echo -n "Start: ${suiteStart} End: " java ${VERBOSE} ${USEDERBYNET} org.apache.derbyTesting.functionTests.harness.RunSuite ${suite} > out.log 2>out.err else echo "java junit.textui.TestRunner ${suite}" echo -n "Start: ${suiteStart} End: " java junit.textui.TestRunner ${suite} > out.log 2>out.err java org.apache.derby.tools.sysinfo > ${suite}_report.txt # To have sysinfo for junit tests fi # --------------- echo "" > ${TESTLOG_PLATF_DIR}/suiteStart.txt ### ${TOOLDIR}/endVmStat ${VMPID} vmstat.log date +%Y-%m-%d" "%H:%M:%S # date +%Y-%m-%d" "%H:%M:%S >> suite.log if [ "${SEND_UPDATE_EXECUTE_REVISION_MISMATCH_MSG}" = "true" ] then SVNREVUSED=`grep ".jar] " ${suite}_report.txt | head -1 | gawk '{ print $NF }' | sed -e 's/(//' | sed -e 's/)//'` if [ "${SVNREVUSED}" != "${REVISION}" ] then SUBJECT="Regression Test: ${SANDBOX} Expected revision ${REVISION}, found ${SVNREVUSED} - ${OSPLATFROM}_${HWPROC} - ${TESTHOST} - ${BUILTDATE}" FILELIST="" # JVM1.6 produces a LARGE _report.txt file. "${suite}_report.txt" ### UNCOMMENT TO SEND MAIL. ${TOOLDIR}/textMail "${SUBJECT}" ${MAILTOEXT} "${FILELIST}" ### UNCOMMENT TO SEND MAIL. ${TOOLDIR}/textMail "${SUBJECT}" ${MAILTOINT} "${FILELIST}" SEND_UPDATE_EXECUTE_REVISION_MISMATCH_MSG="false" else SUBJECT="Regression Test: ${SANDBOX} ${REVISION}/${SVNREVUSED} - ${OSPLATFROM}_${HWPROC} - ${TESTHOST} - ${BUILTDATE}" FILELIST="${suite}_report.txt" ### UNCOMMENT TO SEND MAIL. ${TOOLDIR}/textMail "${SUBJECT}" ${MAILTOEXT} "${FILELIST}" ### UNCOMMENT TO SEND MAIL. ${TOOLDIR}/textMail "${SUBJECT}" ${MAILTOINT} "${FILELIST}" SEND_UPDATE_EXECUTE_REVISION_MISMATCH_MSG="false" fi fi TESTSRUN="UNKNOWN" PASS="UNKNOWN" FAIL="UNKNOWN" SKIPPED="UNKNOWN" DURATION="UNKNOWN" if [ "${JUNIT}" == "" ] then TESTSRUN=`grep "Tests Run" ${suite}_report.txt | gawk '{ print $1 }'` PASS=`grep "% Pass" ${suite}_report.txt | gawk '{ print $3 }' | sed -e 's|(||'` FAIL=`grep "% Fail" ${suite}_report.txt | gawk '{ print $3 }' | sed -e 's|(||'` SKIPPED=`grep "Suites skipped" ${suite}_report.txt | gawk '{ print $1 }'` DURATION=`grep "Test Run Duration:" ${suite}_report.txt | gawk '{ print $4 }'` else OK=`tail -3 out.log | grep "OK ("` FAILURES=`tail -3 out.log | grep "FAILURES"` if [ "${OK}" != "" ] then TESTSRUN=`tail -3 out.log | grep "OK ("| gawk '{ print $2 }' | sed -e s/\(//` PASS=${TESTSRUN} FAIL=0 SKIPPED=0 # NA for JUnit tests TIME=`tail -5 out.log | grep "^Time: " ` # seconds as: 1,498.864 SECSONLY=`echo ${TIME} | gawk '{ print $2 }' | gawk -F. '{ print $1 }' | sed -e s/,//` DURATION=`${TOOLDIR}/fromSeconds ${SECSONLY}` elif [ "${FAILURES}" != "" ] then SUMMARY=`tail -3 out.log | grep "^Tests run: "` TESTSRUN=`echo ${SUMMARY} | gawk '{ print $3 }' | sed -e s/,//` FAILES=`echo ${SUMMARY} | gawk '{ print $5 }' | sed -e s/,//` # Assertion in test failed ERRS=`echo ${SUMMARY} | gawk '{ print $7 }'` # Unhandled error, exception not catched... let " PASS = ${TESTSRUN} - ${FAILES} - ${ERRS} " # FIXME: may get PASS less than 0.... FAIL="F:${FAILES},E:${ERRS}" SKIPPED=0 # NA for JUnit tests TIME=`grep "^Time: " out.log` # seconds as: 1,498.864 SECSONLY=`echo ${TIME} | gawk '{ print $2 }' | gawk -F. '{ print $1 }' | sed -e s/,//` DURATION=`${TOOLDIR}/fromSeconds ${SECSONLY}` grep "^.*) " out.log > ${suite}_fail.txt fi cat out.log >> ${suite}_report.txt echo "------------------------------" >> ${suite}_report.txt cat out.err >> ${suite}_report.txt fi MSG="${TESTSRUN} \t${PASS} \t${FAIL} \t${SKIPPED} \t${DURATION}" TEXT="${HEADER}\n${MSG}" echo -e "${TEXT}" echo -e "${TEXT}" > suite.log echo -e "${TEXT}" >> ${LOG} if [ "${JAVAVENDOR}" == "" ] then JAVAVERSION=`grep '(build ' ../OS_HW | head -1 | gawk -F\( '{ print $NF }' | gawk '{ print $2 }' | sed -e s/\)//` JAVAVENDOR=`grep "Java Vendor:" ${suite}_report.txt | sed -e 's/Java Vendor://'` fi echo ${JAVAVENDOR} > ${JAVAINFO} echo ${JAVAVERSION} >> ${JAVAINFO} if [ "${FAIL}" != "0" ] then FAILLOG="${TESTLOG_PLATF_DIR}/${timeId}-${suite}_fail.txt" DIFFLOG="${TESTLOG_PLATF_DIR}/${timeId}-${suite}_diff.txt" echo "${suite} fail *************************************************************" > ${FAILLOG} cat ${suite}_fail.txt >> ${FAILLOG} echo "${suite} fail *************************************************************" > ${DIFFLOG} cat ${suite}_fail.txt >> ${DIFFLOG} echo "" >> ${DIFFLOG} echo "${suite} diff -------------------------------------------------------------" >> ${DIFFLOG} cat ${suite}_report.txt >> ${DIFFLOG} chmod go+r ${DIFFLOG} ${FAILLOG} fi if [ ${SKIPPED} != 0 ] then SKIPLOG="${TESTLOG_PLATF_DIR}/${timeId}-${suite}_skipped.txt" cat ${suite}_skip.txt > ${SKIPLOG} fi cd ../ echo -e "${suite} \t${MSG}" >> ${CURRSUITESLOG} #---------------- # Make it avalable as soon as possible: cp -f ${CURRSUITESLOG} ${SUITESLOG} chmod go+r ${SUITESLOG} #---------------- echo "===========================================================" done echo -e "\n\n\n" >> ${CURRSUITESLOG} endTime=`date +%Y-%m-%d" "%H:%M:%S` echo -e "Started:\t${startTime}\tEnd:\t${endTime}\tHost:\t${TESTHOST}" >> ${CURRSUITESLOG} # cat buildInfo >> ${CURRSUITESLOG} echo "Started: ${startTime} End: ${endTime} ${TESTHOST}" cp -f ${CURRSUITESLOG} ${SUITESLOG} chmod go+r ${SUITESLOG} move_log ${TESTDIR} ${TESTHOST} ${OSPLATFROM} ${HWPROC} ${timeId} ${TESTLOGDIR} SUBJECT="Regression Test: ${SANDBOX} ${timeId}/${SVNREVUSED} - ${OSPLATFROM}_${HWPROC} - ${TESTHOST} - ${BUILTOS} ${BUILTOSKERN} ${BUILTDATE}" FILELIST="${SUITESLOG}" ### UNCOMMENT TO SEND MAIL. ${TOOLDIR}/textMail "${SUBJECT}" ${MAILTOINT} "${FILELIST}"