#!/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:
#
#
##################################################################
TESTER=$USER
CLIENT=$HOSTNAME
SERVER=$HOSTNAME
BASENAME=RASBASE
USERNAME=rasguest
USERPASSWD=rasguest
TRANSFER=Array
TRANSFERPARAMS=""
STORAGE=Array
STORAGEPARAMS=""
TILING=""
TILINGPARAMS=""
LOGFILE=testcenter.log
TESTINTERACTIVE="off"
DIFFINTERACTIVE="on"
UPDATEINTERACTIVE="on"
RESETDB="on"
SCRIPTS="off"
QUERIES="on"
TESTDIR="testdata"
returnValue="EXECUTION OK"
DEBUG="off"
if (test -n "$1"); then
if (test -d $1 -o -f $1); then
TESTDIR=$1
else
SERVER=$1
if (test -n "$2"); then
TESTDIR=$2
fi
fi
fi
showOptions()
{
echo "===================================================================="
echo " TEST CENTER OPTIONS:"
echo "===================================================================="
echo " Date...........................: " `date`
echo " (T)ester.......................: " $TESTER
echo " (C)lient name..................: " $CLIENT
echo " (S)erver name..................: " $SERVER
echo " (B)ase name....................: " $BASENAME
echo " (U)ser name....................: " $USERNAME
echo " User (p)assword................: " $USERPASSWD
echo " T(r)ansfer format..............: " $TRANSFER
echo " Tra(n)sfer format params.......: " $TRANSFERPARAMS
echo " Stora(g)e format...............: " $STORAGE
echo " Stor(a)ge format params........: " $STORAGEPARAMS
echo " Tiling sc(h)eme................: " $TILING
echo " Tiling sche(m)e params.........: " $TILINGPARAMS
echo " (L)og file.....................: " $LOGFILE
echo " (Q)uery dir....................: " $TESTDIR
echo ""
echo " Tests (i)nteractive............: " $TESTINTERACTIVE
echo " Show dif(f) interactive........: " $DIFFINTERACTIVE
echo " Update testbe(d) interactive...: " $UPDATEINTERACTIVE
echo " R(e)set test database..........: " $RESETDB
echo " Debug c(o)mmands...............: " $DEBUG
echo ""
echo " Phase (1) Test queries.........: " $QUERIES
echo " Phase (2) Test scripts.........: " $SCRIPTS
echo ""
}
setParameters()
{
option="*"
while [[ $option != "" ]]; do
clear
showOptions
echo " \nEnter option 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 = u ]]; then
echo " Enter new user name: \c"
read USERNAME
echo
elif [[ $option = p ]]; then
echo " Enter new user password: \c"
read USERPASSWD
echo
elif [[ $option = r ]]; then
echo " Enter new transfer format: \c"
read TRANSFER
echo
elif [[ $option = n ]]; then
echo " Enter new transfer format params: \c"
read TRANSFERPARAMS
echo
elif [[ $option = g ]]; then
echo " Enter new storage format: \c"
read STORAGE
echo
elif [[ $option = a ]]; then
echo " Enter new storage format params: \c"
read STORAGEPARAMS
echo
elif [[ $option = h ]]; then
echo " Enter new tiling scheme: \c"
read TILING
echo
elif [[ $option = m ]]; then
echo " Enter new tiling scheme params: \c"
read TILINGPARAMS
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 [[ $TESTINTERACTIVE = "off" ]]; then
TESTINTERACTIVE="on"
else
TESTINTERACTIVE="off"
fi
elif [[ $option = f ]]; then
if [[ $DIFFINTERACTIVE = "off" ]]; then
DIFFINTERACTIVE="on"
else
DIFFINTERACTIVE="off"
fi
elif [[ $option = d ]]; then
if [[ $UPDATEINTERACTIVE = "off" ]]; then
UPDATEINTERACTIVE="on"
else
UPDATEINTERACTIVE="off"
fi
elif [[ $option = o ]]; then
if [[ $DEBUG = "off" ]]; then
DEBUG="on"
else
DEBUG="off"
fi
elif [[ $option = e ]]; then
if [[ $RESETDB = "off" ]]; then
RESETDB="on"
else
RESETDB="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"
if [[ $DEBUG = "on" ]]; then
echo "shell command:"
echo $query -file $testFile -testbed
else
YesNo="y"
if [[ $TESTINTERACTIVE = "on" ]]; then
echo " Test it (y/n) ? \c"
read YesNo
fi
if [[ $YesNo = "y" ]]; then
$query -file $testFile -testbed > testbedOutput
checkTestImage $testFile;
fi
fi
}
testScript()
{
testFile=$1
echo $testCnt ". Test script: " $testFile "\c"
if [[ $DEBUG = "on" ]]; then
echo "shell command:"
echo $testFile $SERVER $BASENAME > testbedOutput
else
YesNo="y"
if [[ $TESTINTERACTIVE = "on" ]]; then
echo " Test it (y/n) ? \c"
read YesNo
fi
if [[ $YesNo = "y" ]]; then
$testFile $SERVER $BASENAME > testbedOutput
checkTestImage $testFile;
fi
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
echo " ERROR: verification file $verificationFile does not exist"
YesNo="n"
if [[ $DIFFINTERACTIVE = "on" ]]; then
echo " Do you want to see the output (y/n) ? \c"
read YesNo__
fi
if [[ $YesNo = "y" ]]; then
echo "\n\nI. TEST FILE"
cat $testFile
echo "\n\nII. OUTPUT"
cat testbedOutputInfo
echo "\n\n"
fi
YesNo="n"
if [[ $UPDATEINTERACTIVE = "on" ]]; then
echo " Do you want to create a verification file (y/n) ? \c"
read YesNo
fi
if [[ $YesNo = "y" ]]; then
cp testbedOutputInfo $verificationFile
echo " CREATED\n"
returnValue=$returnValue" VERIFICATION FILE NOT FOUND, CREATED AS NEW"
cvs add -m "testcenter verificationf file for query $testFile" $verificationFile
cvs commit -m "testcenter verification file created as new by TESTER=$TESTER" $verificationFile
else
cp testbedOutputInfo $testFile".tmp"
echo " NOT CREATED\n"
returnValue=$returnValue" VERIFICATION FILE NOT FOUND, NOT CREATED"
fi
else
diff -c testbedOutputInfo $verificationFile 2>&1 1> /tmp/diff.out
if [[ $? != 0 ]]; then
echo "FAILED"
returnValue="EXECUTION FAILED"
YesNo="n"
if [[ $DIFFINTERACTIVE = "on" ]]; then
echo " Do you want to see the diff output (y/n) ? \c"
read YesNo
fi
if [[ $YesNo = "y" ]]; then
echo "\n\nI. TEST FILE"
cat $testFile
echo "\n\n DIFF OUTPUT:"
cat /tmp/diff.out
echo "\n\n"
fi
YesNo="n"
if [[ $UPDATEINTERACTIVE = "on" ]]; then
echo " Do you want to update the verification file (y/n) ? \c"
read YesNo
fi
if [[ $YesNo = "y" ]]; then
if(cvs status $verificationFile); then
cvs edit $verificationFile
cp testbedOutputInfo $verificationFile
echo " UPDATED\n"
cvs commit -m "testcenter verification file updated by TESTER=$TESTER" $verificationFile
returnValue=$returnValue" VERIFICATION FILE UPDATED"
else
cp testbedOutputInfo $verificationFile
echo " CREATED\n"
cvs add -m "testcenter verificationf file for query $testFile" $verificationFile
cvs commit -m "testcenter verification file created as new by TESTER=$TESTER" $verificationFile
returnValue=$returnValue" VERIFICATION FILE NOT IN REPOSITORY, CHECKED AS NEW"
fi
else
cp testbedOutputInfo $testFile".tmp"
fi
else
echo "OK"
fi
fi
rm testbedOutput testbedOutputInfo /tmp/diff.out
}
checkBinaries()
{
# test programs
insert="$RMANBASE/bin/test_insert3"
query="$RMANBASE/bin/test_query"
insertppm="$RMANBASE/insertutils/insertppm"
images="$RMANBASE/systemtest/images"
if [[ ! -a $insertppm ]]; then
echo "\nTest program $insertppm not found"
echo "Please build the program and try again."
exit 1
fi
if [[ ! -a $insert ]]; then
echo "\nTest program $insert not found"
echo "Please build the program and try again."
exit 1
fi
if [[ ! -a $query ]]; then
echo "\nTest program $query not found"
echo "Please build the program and try again."
exit 1
fi
}
setBinariesParams()
{
# server and database required
if(test -z "$SERVER"); then
echo "Server name is not set!"
exit 1
fi
if(test -z "$BASENAME"); then
echo "Base name is not set!"
exit 1
fi
if(test -z "$USERNAME"); then
echo "User name is not set!"
exit 1
fi
if(test -z "$USERPASSWD"); then
echo "User password is not set!"
exit 1
fi
#test_insert3 params
insert="$insert -server $SERVER -base $BASENAME -user $USERNAME -passwd $USERPASSWD"
if(test -n "$TRANSFER"); then
insert="$insert -transferformat $TRANSFER"
fi
if(test -n "$TRANSFERPARAMS"); then
insert="$insert -transferformatparams $TRANSFERPARAMS"
fi
if(test -n "$STORAGE"); then
insert="$insert -storageformat $STORAGE"
fi
if(test -n "$STORAGEPARAMS"); then
insert="$insert -storageformatparams $STORAGEPARAMS"
fi
if(test -n "$TILING"); then
insert="$insert -tiling $TILING"
fi
if(test -n "$TILINGPARAMS"); then
insert="$insert -tilingparams $TILINGPARAMS"
fi
#insertppm params
insertppm="$insertppm -server $SERVER -base $BASENAME -user $USERNAME -passwd $USERPASSWD"
if(test -n "$TRANSFER"); then
insertppm="$insertppm -transferformat $TRANSFER"
fi
if(test -n "$TRANSFERPARAMS"); then
insertppm="$insertppm -transferformatparams $TRANSFERPARAMS"
fi
if(test -n "$STORAGE"); then
insertppm="$insertppm -storageformat $STORAGE"
fi
if(test -n "$STORAGEPARAMS"); then
insertppm="$insertppm -storageformatparams $STORAGEPARAMS"
fi
#test_query params
query="$query -server $SERVER -base $BASENAME -user $USERNAME -passwd $USERPASSWD"
if(test -n "$TRANSFER"); then
query="$query -transferformat $TRANSFER"
fi
if(test -n "$TRANSFERPARAMS"); then
query="$query -transferformatparams $TRANSFERPARAMS"
fi
if(test -n "$STORAGE"); then
query="$query -storageformat $STORAGE"
fi
if(test -n "$STORAGEPARAMS"); then
query="$query -storageformatparams $STORAGEPARAMS"
fi
if(test -n "$TILING"); then
query="$query -tiling $TILING"
fi
if(test -n "$TILINGPARAMS"); then
query="$query -tilingparams $TILINGPARAMS"
fi
}
resetLog()
{
YesNo="n"
if [[ $UPDATEINTERACTIVE = "on" ]]; then
if [[ -a $LOGFILE ]]; then
echo "Delete log file $LOGFILE (y/n) ? \c"
read YesNo
echo "\n"
fi
fi
if [[ $YesNo = y ]]; then
rm -f $LOGFILE
fi
}
resetDB()
{
if [[ $RESETDB = "on" ]]; then
echo "Reset demo data in db (y/n) ? \c"
read YesNo
echo "\n"
if [[ $YesNo = y ]]; then
# delete collections
echo "Delete test collections of $BASENAME...\c" ;
echo "=============================================================================" >> $LOGFILE
echo "Delete test collections of $BASENAME" >> $LOGFILE ;
echo "=============================================================================\n" >> $LOGFILE
if [[ $DEBUG = "on" ]]; then
echo "shell command:"
echo "10\n" $insert -setname ImgCharA
echo "10\n" $insert -setname ImgCharB
echo "10\n" $insert -setname ImgCharC
echo "10\n" $insert -setname ImgCharD
echo "10\n" $insert -setname ImgCharMask
echo "10\n" $insert -setname OvlCharA
echo "10\n" $insert -setname OvlCharB
echo "10\n" $insert -setname OvlCharC
echo "10\n" $insert -setname ImgRGBA
echo "10\n" $insert -setname ImgULongC
echo "10\n" $insert -setname OlapCharA
echo "10\n" $insert -setname StringCharA
echo "10\n" $insert -setname CubeCharA
echo "10\n" $insert -setname OvlRGBA
echo "10\n" $insert -setname OvlRGBB
echo "10\n" $insert -setname OvlRGBC
else
echo "10\n" | $insert -setname ImgCharA >> $LOGFILE ;
echo "10\n" | $insert -setname ImgCharB >> $LOGFILE ;
echo "10\n" | $insert -setname ImgCharC >> $LOGFILE ;
echo "10\n" | $insert -setname ImgCharD >> $LOGFILE ;
echo "10\n" | $insert -setname ImgCharMask >> $LOGFILE ;
echo "10\n" | $insert -setname OvlCharA >> $LOGFILE ;
echo "10\n" | $insert -setname OvlCharB >> $LOGFILE ;
echo "10\n" | $insert -setname OvlCharC >> $LOGFILE ;
echo "10\n" | $insert -setname ImgRGBA >> $LOGFILE ;
echo "10\n" | $insert -setname ImgULongC >> $LOGFILE ;
echo "10\n" | $insert -setname OlapCharA >> $LOGFILE ;
echo "10\n" | $insert -setname StringCharA >> $LOGFILE ;
echo "10\n" | $insert -setname CubeCharA >> $LOGFILE ;
echo "10\n" | $insert -setname OvlRGBA >> $LOGFILE ;
echo "10\n" | $insert -setname OvlRGBB >> $LOGFILE ;
echo "10\n" | $insert -setname OvlRGBC >> $LOGFILE ;
fi
echo "OK" ;
echo "\n\nCreate demo data in db (y/n) ? \c"
read YesNo
echo "\n"
if [[ $YesNo = y ]]; then
#create collections
echo "Insert test collections into $BASENAME...\c" ;
echo "=============================================================================" >> $LOGFILE
echo "Insert test collections into $BASENAME" >> $LOGFILE ;
echo "=============================================================================\n" >> $LOGFILE
if [[ $DEBUG = "on" ]]; then
echo "shell command:"
echo "5\n 0\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgCharA
echo "5\n 1\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgCharA
echo "5\n 10\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgCharB
echo "5\n 20\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgCharB
echo "5\n 100\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgCharC
echo "5\n 200\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgCharC
echo "13\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgCharD
echo "5\n 2\n 2\n-2\n 2\n-1\n 1\n" $insert -setname ImgCharMask
echo "1\n 2\n 0\n 9\n 0\n 9\n" $insert -setname ImgULongC
echo "6\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgRGBA
echo "6\n 2\n 0\n 10\n 0\n 10\n" $insert -setname ImgRGBA
echo "13\n 2\n 0\n 13\n 0\n 1\n" $insert -setname OlapCharA
echo "13\n 1\n 0\n 99\n " $insert -setname StringCharA -settype GreySet1 -mddtype GreyString
echo "5\n 0\n 3\n 0\n 10\n 0\n 10\n 0\n 10\n" $insert -setname CubeCharA -settype GreySet3 -mddtype GreyCube
echo $insertppm -collection OvlRGBA $images/ovl1.ppm
echo $insertppm -collection OvlRGBB $images/ovl2.ppm
echo $insertppm -collection OvlRGBC $images/ovl3.ppm
echo $insertppm -grey -collection OvlCharA $images/ovl1.ppm
echo $insertppm -grey -collection OvlCharB $images/ovl2.ppm
echo $insertppm -grey -collection OvlCharC $images/ovl3.ppm
else
echo "5\n 0\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgCharA >> $LOGFILE ;
echo "5\n 1\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgCharA >> $LOGFILE ;
echo "5\n 10\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgCharB >> $LOGFILE ;
echo "5\n 20\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgCharB >> $LOGFILE ;
echo "5\n 100\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgCharC >> $LOGFILE ;
echo "5\n 200\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgCharC >> $LOGFILE ;
echo "13\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgCharD >> $LOGFILE ;
echo "5\n 2\n 2\n-2\n 2\n-1\n 1\n" | $insert -setname ImgCharMask >> $LOGFILE;
echo "1\n 2\n 0\n 9\n 0\n 9\n" | $insert -setname ImgULongC >> $LOGFILE;
echo "6\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgRGBA >> $LOGFILE ;
echo "6\n 2\n 0\n 10\n 0\n 10\n" | $insert -setname ImgRGBA >> $LOGFILE ;
echo "13\n 2\n 0\n 13\n 0\n 1\n" | $insert -setname OlapCharA >> $LOGFILE ;
echo "13\n 1\n 0\n 99\n " | $insert -setname StringCharA -settype GreySet1 -mddtype GreyString >> $LOGFILE ;
echo "5\n 0\n 3\n 0\n 10\n 0\n 10\n 0\n 10\n" | $insert -setname CubeCharA -settype GreySet3 -mddtype GreyCube >> $LOGFILE ;
$insertppm -collection OvlRGBA $images/ovl1.ppm >> $LOGFILE
$insertppm -collection OvlRGBB $images/ovl2.ppm >> $LOGFILE
$insertppm -collection OvlRGBC $images/ovl3.ppm >> $LOGFILE
$insertppm -grey -collection OvlCharA $images/ovl1.ppm >> $LOGFILE
$insertppm -grey -collection OvlCharB $images/ovl2.ppm >> $LOGFILE
$insertppm -grey -collection OvlCharC $images/ovl3.ppm >> $LOGFILE
fi
echo "OK" ;
fi
fi
fi
}
#
# main
#
checkBinaries;
setParameters;
setBinariesParams;
resetLog;
showOptions >> $LOGFILE
resetDB;
#
# test query files
#
if [[ $QUERIES = "on" ]]; then
echo "\nPhase 1: Testing Query Files\n"
echo "\n=============================================================================" >> $LOGFILE
echo "Phase 1: Testing Query Files..." >> $LOGFILE ;
echo "=============================================================================\n" >> $LOGFILE
testCnt=1
queryFiles=`find $TESTDIR -name '*.ql' | sort`
for queryFile in $queryFiles; do
testQuery $queryFile
echo "Query " $testCnt $queryFile":" $returnValue >> $LOGFILE
testCnt=$(($testCnt+1))
done
fi
#
# test scripts
#
if [[ $SCRIPTS = "on" ]]; then
echo "\nPhase 2: Testing Scripts\n"
echo "\n=============================================================================" >> $LOGFILE
echo "Phase 2: Testing Scripts" >> $LOGFILE
echo "=============================================================================\n" >> $LOGFILE
testCnt=1
scriptFiles=`find scripts -name '*.sh' | sort`
for scriptFile in $scriptFiles; do
testScript $scriptFile
echo "Script " $testCnt $scriptFile":" $returnValue >> $LOGFILE
testCnt=$(($testCnt+1))
done
fi
echo "\nTesting finnished at " `date`
echo "\n===================================================================" >> $LOGFILE
echo "Test finnished at " `date` >> $LOGFILE
echo "===================================================================\n" >> $LOGFILE
YesNo="n"
if [[ $UPDATEINTERACTIVE = "on" ]]; then
echo "\nDo you want to check in the log file (y/n) ? \c"
read YesNo
echo "\n\n"
fi
if [[ $YesNo = y ]]; then
cvs edit session.log
cp $LOGFILE session.log
cvs commit -m "updated by testcenter runned by TESTER=$TESTER" session.log
fi
exit 0