#!/bin/ksh
#
# This file is part of rasdaman community.
#
# Rasdaman community is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Rasdaman community is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with rasdaman community. If not, see .
#
# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
# rasdaman GmbH.
#
# For more information please see
# or contact Peter Baumann via .
######################### testcenter.sh header ###################
#
# testcenter.sh FOR:
# Release of RASDAMAN
#
# COMMENTS:
# args needed: serverhost databasehost logdirectory testjava queries scripts checkin conversion compression
# last six are "on"/"off"-switches.
#
##################################################################
TESTER=$USER
BASENAME=RASBASE
TIMESTAMP=`date +%d%b%y%H%M%S`
LOGFILE="$3/$HOSTNAME.$TIMESTAMP.log"
SEEOUTPUT="off"
CREATEVFILE="off"
UPDATEVFILE="off"
INTERACTIVE="off"
DEMODATA="on"
CREATEDATA="on"
TESTJAVA=$4
QUERIES=$5
SCRIPTS=$6
CHECKINLOG=$7
CONV=$8
COMP=$9
TESTDIR=testdata
echo "$0 $1 $2 $3 $4 $5 $6 $7 $8 $9"
if [[ $1 = "" || $2 = "" ]]; then
SERVER=$HOSTNAME
CLIENT=$HOSTNAME
else
SERVER=$1
CLIENT=$2
fi
if [[ $7 = "" ]]; then
CHECKINLOG="off"
else
CHECKINLOG=$7
fi
if [[ $6 = "" ]]; then
SCRIPTS="off"
else
SCRIPTS=$6
fi
if [[ $5 = "" ]]; then
QUERIES="off"
else
QUERIES=$5
fi
if [[ $4 = "" ]]; then
TESTJAVA="off"
else
TESTJAVA=$4
fi
setParameters()
{
option="*"
while [[ $option != "" ]]; do
echo "\n"
echo " (T)ester...............: " $TESTER
echo " (C)lient name..........: " $CLIENT
echo " (S)erver name..........: " $SERVER
echo " (B)ase name............: " $BASENAME
echo " (L)og file.............: " $LOGFILE
echo " (Q)uery dir............: " $TESTDIR
echo " (I)nteractive..........: " $INTERACTIVE
echo ""
echo " Phase (1) Test Queries.: " $QUERIES
echo " Phase (2) Test Scripts.: " $SCRIPTS
echo " \nEnter [tcsblqi12] to change setting or to continue! \c"
read option
echo "\n"
if [[ $option = t ]]; then
echo " Enter new name for tester: \c"
read TESTER
echo
elif [[ $option = c ]]; then
echo " Enter new client name: \c"
read CLIENT
echo
elif [[ $option = s ]]; then
echo " Enter new server name: \c"
read SERVER
echo
elif [[ $option = b ]]; then
echo " Enter new base name: \c"
read BASENAME
echo
elif [[ $option = l ]]; then
echo " Enter new name for the log file: \c"
read LOGFILE
echo
elif [[ $option = q ]]; then
echo " Enter new name for the query data directory: \c"
read TESTDIR
echo
elif [[ $option = i ]]; then
if [[ $INTERACTIVE = "off" ]]; then
INTERACTIVE="on"
else
INTERACTIVE="off"
fi
elif [[ $option = 1 ]]; then
if [[ $QUERIES = "off" ]]; then
QUERIES="on"
else
QUERIES="off"
fi
elif [[ $option = 2 ]]; then
if [[ $SCRIPTS = "off" ]]; then
SCRIPTS="on"
else
SCRIPTS="off"
fi
fi
done
}
testQuery()
{
testFile=$1
echo $testCnt ". Test query: " $testFile "\c" >> $LOGFILE 2>&1
YesNo="y"
if [[ $INTERACTIVE = "on" ]]; then
echo $testCnt ". Test query: " $testFile "\c"
echo " Test it (y/n) ? \c"
read YesNo
fi
if [[ $YesNo = "y" ]]; then
$query $testFile -testbed > testbedOutput
checkTestImage $testFile;
fi
}
testScript()
{
testFile=$1
echo $testCnt ". Test script: " $testFile "\c" >> $LOGFILE 2>&1
YesNo="y"
if [[ $INTERACTIVE = "on" ]]; then
echo $testCnt ". Test script: " $testFile "\c"
echo " Test it (y/n) ? \c"
read YesNo
fi
if [[ $YesNo = "y" ]]; then
$testFile $SERVER $BASENAME > testbedOutput
checkTestImage $testFile;
fi
}
checkTestImage()
{
returnValue="EXECUTION OK"
# create info file
gawk -f testOutputGen.awk testbedOutput > testbedOutputInfo
# check for verification file
verificationFile=$testFile".out"
if [[ ! -a $verificationFile ]]; then
echo FAILED >> $LOGFILE 2>&1
echo " ERROR: verification file $verificationFile does not exist" >> $LOGFILE 2>&1
if [[ $SEEOUTPUT = "on" ]]; then
echo "I. TEST FILE" >> $LOGFILE 2>&1
cat $testFile >> $LOGFILE 2>&1
echo "\n\nII. OUTPUT" >> $LOGFILE 2>&1
cat testbedOutputInfo >> $LOGFILE 2>&1
echo "\n\n"
fi
if [[ $CREATEVFILE = "on" ]]; then
cp testbedOutputInfo $verificationFile
echo " CREATED\n" >> $LOGFILE 2>&1
returnValue="VERIFICATION FILE CREATED"
else
echo " NOT CREATED\n" >> $LOGFILE 2>&1
returnValue="VERIFICATION FILE NOT FOUND"
fi
else
diff testbedOutputInfo $verificationFile >> $LOGFILE 2>&1
if [[ $? = 1 ]]; then
echo "FAILED" >> $LOGFILE 2>&1
echo "\nProgram output:" >> $LOGFILE 2>&1
cat testbedOutput >> $LOGFILE 2>&1
echo "\n\n" >> $LOGFILE 2>&1
returnValue="EXECUTION FAILED"
if [[ $UPDATEVFILE = "on" ]]; then
co -l $verificationFile
cp testbedOutputInfo $verificationFile
echo " UPDATED\n" >> $LOGFILE 2>&1
ci -u -m"testcenter update" $verificationFile
returnValue="VERIFICATION FILE UPDATED"
fi
else
echo "OK" >> $LOGFILE 2>&1
fi
fi
rm testbedOutput testbedOutputInfo
}
#
# main
#
# test programs
insert="$RMANBASE/bin/test_insert3"
query="$RMANBASE/bin/test_query"
insertppm="$RMANBASE/insertutils/insertppm"
images="$RMANBASE/systemtest/images"
rasdltest="$RMANBASE/systemtest/rasdl/rasdl.sh"
echo "Test log file." > $LOGFILE 2>&1
if [[ ! -a $insert ]]; then
echo "\nTest program $insertppm not found" >> $LOGFILE 2>&1
echo "Please build the program and try again." >> $LOGFILE 2>&1
return
fi
if [[ ! -a $insert ]]; then
echo "\nTest program $insert not found" >> $LOGFILE 2>&1
echo "Please build the program and try again." >> $LOGFILE 2>&1
return
fi
if [[ ! -a $query ]]; then
echo "\nTest program $query not found" >> $LOGFILE 2>&1
echo "Please build the program and try again." >> $LOGFILE 2>&1
return
fi
if [[ ! -a $rasdltest ]]; then
echo "\nTest program $rasdltest not found" >> $LOGFILE 2>&1
echo "Please build the program and try again." >> $LOGFILE 2>&1
return
fi
#
# test rasdl
#
echo "\nPhase -1: Testing RasDL\n" >> $LOGFILE 2>&1
$rasdl >> $LOGFILE 2>&1
if [[ $? != 0 ]]; then
echo "\nTest program $rasdltest failed" >> $LOGFILE 2>&1
return
fi
insert="$insert $SERVER $BASENAME"
insertppm="$insertppm -server $SERVER -base $BASENAME"
query="$query $SERVER $BASENAME"
YesNo=""
if [[ $DEMODATA = "on" ]]; then
echo "\n\nReset demo data in db: \n" >> $LOGFILE 2>&1
# delete collections
echo "Delete test collections of $BASENAME..." >> $LOGFILE 2>&1;
echo "10\n" | $insert ImgCharA >> $LOGFILE 2>&1 ;
echo "10\n" | $insert ImgCharB >> $LOGFILE 2>&1 ;
echo "10\n" | $insert ImgCharC >> $LOGFILE 2>&1 ;
echo "10\n" | $insert ImgCharD >> $LOGFILE 2>&1 ;
echo "10\n" | $insert ImgCharMask >> $LOGFILE 2>&1 ;
echo "10\n" | $insert OvlCharA >> $LOGFILE 2>&1 ;
echo "10\n" | $insert OvlCharB >> $LOGFILE 2>&1 ;
echo "10\n" | $insert OvlCharC >> $LOGFILE 2>&1 ;
echo "10\n" | $insert ImgRGBA >> $LOGFILE 2>&1 ;
echo "10\n" | $insert ImgULongC >> $LOGFILE 2>&1 ;
echo "10\n" | $insert OlapCharA >> $LOGFILE 2>&1 ;
echo "10\n" | $insert StringCharA >> $LOGFILE 2>&1 ;
echo "10\n" | $insert CubeCharA >> $LOGFILE 2>&1 ;
echo "10\n" | $insert OvlRGBA >> $LOGFILE 2>&1 ;
echo "10\n" | $insert OvlRGBB >> $LOGFILE 2>&1 ;
echo "10\n" | $insert OvlRGBC >> $LOGFILE 2>&1 ;
if [[ $CREATEDATA = "on" ]]; then
echo "\n\nCreate demo data in db: \n" >> $LOGFILE 2>&1
#create collections
echo "Insert test collections into $BASENAME..." >> $LOGFILE 2>&1;
echo "5\n 0\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgCharA >> $LOGFILE 2>&1 ;
echo "5\n 1\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgCharA >> $LOGFILE 2>&1 ;
echo "5\n 10\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgCharB >> $LOGFILE 2>&1 ;
echo "5\n 20\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgCharB >> $LOGFILE 2>&1 ;
echo "5\n 100\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgCharC >> $LOGFILE 2>&1 ;
echo "5\n 200\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgCharC >> $LOGFILE 2>&1 ;
echo "13\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgCharD >> $LOGFILE 2>&1 ;
echo "5\n 2\n 2\n-2\n 2\n-1\n 1\n" | $insert ImgCharMask >> $LOGFILE 2>&1;
echo "1\n 2\n 0\n 9\n 0\n 9\n" | $insert ImgULongC >> $LOGFILE 2>&1;
echo "6\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgRGBA >> $LOGFILE 2>&1 ;
echo "6\n 2\n 0\n 10\n 0\n 10\n" | $insert ImgRGBA >> $LOGFILE 2>&1 ;
echo "13\n 2\n 0\n 13\n 0\n 1\n" | $insert OlapCharA >> $LOGFILE 2>&1 ;
echo "13\n 1\n 0\n 99\n " | $insert StringCharA -settype GreySet1 -mddtype GreyString >> $LOGFILE 2>&1 ;
echo "5\n 0\n 3\n 0\n 10\n 0\n 10\n 0\n 10\n" | $insert CubeCharA -settype GreySet3 -mddtype GreyCube >> $LOGFILE 2>&1 ;
$insertppm -collection OvlRGBA $images/ovl1.ppm >> $LOGFILE 2>&1
$insertppm -collection OvlRGBB $images/ovl2.ppm >> $LOGFILE 2>&1
$insertppm -collection OvlRGBC $images/ovl3.ppm >> $LOGFILE 2>&1
$insertppm -grey -collection OvlCharA $images/ovl1.ppm >> $LOGFILE 2>&1
$insertppm -grey -collection OvlCharB $images/ovl2.ppm >> $LOGFILE 2>&1
$insertppm -grey -collection OvlCharC $images/ovl3.ppm >> $LOGFILE 2>&1
fi
fi
#
# print some summary information
#
echo "--------------------------------------------------------------TEST SESSION--" >> $LOGFILE 2>&1
echo "- Date........ : " `date` >> $LOGFILE 2>&1
echo "- Tester.......: " $TESTER >> $LOGFILE 2>&1
echo "- Directory....: " $PWD/$TESTDIR >> $LOGFILE 2>&1
echo "- Client name..: " $CLIENT >> $LOGFILE 2>&1
echo "- Server name..: " $SERVER >> $LOGFILE 2>&1
echo "- Base name....: " $BASENAME >> $LOGFILE 2>&1
echo "- Time stamp...: " $TIMESTAMP >> $LOGFILE 2>&1
echo "----------------------------------------------------------------------START-" >> $LOGFILE 2>&1
#
# test java
#
if [[ $TESTJAVA = "on" ]]; then
javaquery="$RMANBASE/java/examples/TestQuery.class"
if [[ ! -a $javaquery ]]; then
echo "\nTest program $javaquery not found"
echo "Please build the program and try again."
return
fi
echo "\nPhase 0: Testing Java Query Files\n" >> $LOGFILE 2>&1
java -classpath $CLASSPATH:/usr/local/dist/dir/java/:$RMANBASE/java/:$RMANBASE/java/classes:$RMANHOME/java/:$RMANHOME/java/classes examples.TestQuery -server $SERVER -database $BASENAME -testdirectory /home/staff/rastest/testdata -logfile testjava.log
cat testjava.log >> $LOGFILE
fi
#
# test query files
#
if [[ $QUERIES = "on" ]]; then
echo "\nPhase 1: Testing Query Files\n" >> $LOGFILE 2>&1
testCnt=1
queryFiles=`find $TESTDIR -name '*.ql' | sort`
for queryFile in $queryFiles; do
testQuery $queryFile
echo "Query " $testCnt $queryFile":" $returnValue
testCnt=$(($testCnt+1))
done
fi
#
# test scripts
#
if [[ $SCRIPTS = "on" ]]; then
echo "\nPhase 2: Testing Scripts\n" >> $LOGFILE 2>&1
testCnt=1
scriptFiles=`find scripts -name '*.sh' | sort`
for scriptFile in $scriptFiles; do
testScript $scriptFile
echo "Script " $testCnt $scriptFile":" $returnValue
testCnt=$(($testCnt+1))
done
fi
#
# test conversion
#
if [[ $CONV = "on" ]]; then
echo "\nPhase 3: Testing Conversion\n" >> $LOGFILE 2>&1
cdir=$PWD
cd $RMANHOME/rasodmg/test
(echo "v"; echo "e") | ./test_comp_conv.sh
cd cdir
fi
#
# test compresion
#
if [[ $COMP = "on" ]]; then
echo "\nPhase 4: Testing Compression\n" >> $LOGFILE 2>&1
cdir=$PWD
cd $RMANHOME/rasodmg/test
(echo "p"; echo "e") | ./test_comp_conv.sh
cd cdir
fi
echo "\n\n" >> $LOGFILE 2>&1
#
# check in log file
#
if [[ $CHECKINLOG = "on" ]]; then
co -l session.log
cp $LOGFILE session.log
ci -u session.log
fi
echo "Testing finnished."