#!/bin/bash
#!/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 .
#
# SYNOPSIS
# test.sh
# Description
# Command-line utility for testing rasdaman.
# 1) Send rasql query
# 2) Get response
# 3) Compare the response with the expected result
# 4) Give out the testing result.
#
# PRECONDITIONS
# Postgres, Rasdaman installed
#
# Usage: ./test.sh
# images needed for testing shall be put in directory of testdata
# Parameters:
#
#
# CHANGE HISTORY
# 2009-Sep-16 J.Yu created
# 2010-Apr-13 J.Yu revise on input folder structure to support different queries input, including folders on mandatory, bug fixed, bug unfixed, and other queries.
#
# Parameters definistion and initiation
PROGNAME=`basename $0`
USERNAME=rasadmin
PASSWORD=rasadmin
DATABASE=RASBASE
# RMANBASE: change RMANBASE depending on your system, where rasdaman is installed
# RASQL="rasql --quiet" no ornament msg
# QUERY_DIR: the test input folder, including queries for extracting some aspects of tested data
# QUERY_DIR_T: the test input folder, including queries for updating some aspects of tested data
# TESTDATA_DIR: the images needed
# ORACLE_DIR: the expected result
RMANBASE=$RMANHOME
RASQL="rasql"
RASDL="rasdl"
DIR_NAME=$(dirname $0)
QUERY_DIR=$DIR_NAME/test_rasql
TESTDATA_DIR=$DIR_NAME/testdata
ORACLE_DIR=$DIR_NAME/oracle
LOG_DIR=$DIR_NAME
LOG=$LOG_DIR/log
TEST_GREY=test_grey
TEST_GREY2=test_grey2
TEST_RGB2=test_rgb2
QUERY=""
# LOG_DIR: the query output
# REPOET: test report
# NUM_TOTAL: number of the test query
# NUM_FAIL: number of fail test
# NUM_SUC: number of success test
# Q_ID: query identifier
NUM_TOTAL=0
NUM_FAIL=0
NUM_SUC=0
Q_ID=""
CODE_OK=0
CODE_FAIL=255
echo "Test by:"$PROGNAME $QUERY_DIR $ORACLE_DIR $LOG_DIR" at "`date`|tee $LOG
#---------------------------Precondition------------------------------------------
# check the Postgres
ps -e | grep --quiet -w postmaster
if [ $? -ne 0 ]
then
echo no postmaster available|tee -a $LOG
exit $CODE_FAIL
fi
# check the Rasdaman
ps -e | grep --quiet -w rasmgr
if [ $? -ne 0 ]
then
echo no rasmgr available|tee -a $LOG
exit $CODE_FAIL
fi
# check usr
#
# check data collection
$RASQL -q "select r from RAS_COLLECTIONNAMES as r"
if [ $? -ne 0 ]
then
echo no data collection available|tee -a $LOG
exit $CODE_FAIL
fi
# check data type
$RASDL --print|grep --quiet GreySet
if [ $? -ne 0 ]
then
echo no GreySet type available, try create_db.sh|tee -a $LOG
exit $CODE_FAIL
fi
$RASDL --print|grep --quiet RGBSet
if [ $? -ne 0 ]
then
echo no RGBSet type available, try create_db.sh|tee -a $LOG
exit $CODE_FAIL
fi
#--------------------------initiation--------------------------------------------
# drop test collection if they already exists
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w $TEST_GREY
then
echo dropping collection ... | tee -a $LOG
$RASQL -q 'drop collection '$TEST_GREY'' --user $USERNAME --passwd $PASSWORD | tee -a $LOG
fi
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w $TEST_GREY2
then
echo dropping collection ... | tee -a $LOG
$RASQL -q 'drop collection '$TEST_GREY2'' --user $USERNAME --passwd $PASSWORD | tee -a $LOG
fi
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w $TEST_RGB2
then
echo dropping collection ... | tee -a $LOG
$RASQL -q 'drop collection '$TEST_RGB2'' --user $USERNAME --passwd $PASSWORD | tee -a $LOG
fi
echo test data initiation... | tee -a $LOG
echo creating test collection $TEST_GREY... | tee -a $LOG
$RASQL -q 'create collection '$TEST_GREY' GreySet' --user $USERNAME --passwd $PASSWORD || echo Error creating collection $TEST_GREY| tee -a $LOG
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w $TEST_GREY
then
echo create collection $TEST_GREY GreySet successfully ... | tee -a $LOG
else
echo create collection $TEST_GREY GreySet unsuccessfully ... | tee -a $LOG
fi
echo inserting MDD into collection $TEST_GREY... | tee -a $LOG
if [ ! -f $TESTDATA_DIR/mr_1.png ]
then
echo "there is no test data in "$TESTDATA_DIR
exit $CODE_FAIL
else
if $RASQL -q 'insert into test_grey values inv_png($1)' --file $TESTDATA_DIR/mr_1.png --user $USERNAME --passwd $PASSWORD
then
echo insert test data into collection $TEST_GREY successfully ... | tee -a $LOG
else
echo insert test data into collection $TEST_GREY unsuccessfully ... | tee -a $LOG
exit $CODE_FAIL
fi
fi
echo creating test collection $TEST_GREY2... | tee -a $LOG
$RASQL -q 'create collection '$TEST_GREY2' GreySet' --user $USERNAME --passwd $PASSWORD || echo Error creating collection $TEST_GREY2| tee -a $LOG
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w $TEST_GREY2
then
echo create collection $TEST_GREY2 GreySet successfully ... | tee -a $LOG
else
echo create collection $TEST_GREY2 GreySet unsuccessfully ... | tee -a $LOG
fi
echo inserting MDD into collection $TEST_GREY2... | tee -a $LOG
if [ ! -f $TESTDATA_DIR/mr2_1.png ]
then
echo "there is no test data in "$TESTDATA_DIR
exit $CODE_FAIL
else
if $RASQL -q 'insert into '$TEST_GREY2' values inv_png($1)' -f $TESTDATA_DIR/mr2_1.png --user $USERNAME --passwd $PASSWORD
then
echo insert test data into collection $TEST_GREY2 successfully ... | tee -a $LOG
else
echo insert test data into collection $TEST_GREY2 unsuccessfully ... | tee -a $LOG
exit $CODE_FAIL
fi
fi
echo creating test collection $TEST_RGB2... | tee -a $LOG
$RASQL -q 'create collection '$TEST_RGB2' RGBSet' --user $USERNAME --passwd $PASSWORD || echo Error creating collection $TEST_RGB2| tee -a $LOG
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w test_rgb
then
echo create collection $TEST_RGB2 RGBSet successfully ... | tee -a $LOG
else
echo create collection $TEST_RGB2 RGBSet unsuccessfully ... | tee -a $LOG
fi
echo inserting MDD into collection $TEST_RGB2... | tee -a $LOG
if [ ! -f $TESTDATA_DIR/rgb.png ]
then
echo "there is no test data in "$TESTDATA_DIR
exit $CODE_FAIL
else
if $RASQL -q 'insert into '$TEST_RGB2' values inv_png($1)' --file $TESTDATA_DIR/rgb.png --user $USERNAME --passwd $PASSWORD
then
echo insert test data into collection $TEST_RGB2 successfully ... | tee -a $LOG
else
echo insert test data into collection $TEST_RGB2 unsuccessfully ... | tee -a $LOG
exit $CODE_FAIL
fi
fi
#==========================test by queries==================================================
if [ ! -f $QUERY_DIR/*.rasql ]
then
echo "there is no rasql for test in the "$QUERY_DIR
else
# initialation
rm tmp.unknown
# Query by query for extracting some aspects of tested data
for i in $QUERY_DIR/*.rasql
do
# Send query in query folder.
Q_ID=`basename $i`
echo -e "\n test query in " $Q_ID|tee -a $LOG
QUERY=`cat $i`
$RASQL -q "$QUERY" --out file --outfile tmp|tee -a $LOG
# if the result is a scalar, there will be no tmp file by rasql, here we output the Result element scalar into tmp.unknown
if [ ! -f tmp.unknown ]
then
$RASQL -q "$QUERY" --out string|grep Result > tmp.unknown
fi
mv tmp.unknown $Q_ID
# Compare the result byte by byte with the expected result in orale folder
cmp $ORACLE_DIR/$Q_ID $Q_ID
if [ $? != 0 ]
then
echo -e "\n Result error for the query."|tee -a $LOG
NUM_FAIL=$(($NUM_FAIL + 1))
else
echo -e "\n Result correct for the query."|tee -a $LOG
NUM_SUC=$(($NUM_SUC + 1))
fi
rm $Q_ID
done
fi
NUM_TOTAL=$(($NUM_SUC + $NUM_FAIL))
# drop collection after test
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w $TEST_GREY
then
echo dropping collection ... | tee -a $LOG
$RASQL -q 'drop collection '$TEST_GREY'' --user $USERNAME --passwd $PASSWORD | tee -a $LOG
fi
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w $TEST_GREY2
then
echo dropping collection ... | tee -a $LOG
$RASQL -q 'drop collection '$TEST_GREY2'' --user $USERNAME --passwd $PASSWORD | tee -a $LOG
fi
if $RASQL -q "select r from RAS_COLLECTIONNAMES as r" --out string|grep -w $TEST_RGB2
then
echo dropping collection ... | tee -a $LOG
$RASQL -q 'drop collection '$TEST_RGB2'' --user $USERNAME --passwd $PASSWORD | tee -a $LOG
fi
# Print the summary
echo "test done at "`date`|tee -a $LOG
echo "Total query number: "$NUM_TOTAL|tee -a $LOG
echo "Successful query number: "$NUM_SUC|tee -a $LOG
echo "Failed query number: "$NUM_FAIL|tee -a $LOG
echo "Detail test report is in "$LOG
if [ $NUM_TOTAL = $NUM_SUC ]
then
exit $CODE_OK 0
else
exit $CODE_FAIL 255
fi