#! /bin/sh

#++
# Access Definitions
#--
DB=test
USER=test
PASSWD=

#++
# Misc. Definitions
#--
CWD=`pwd`
cd ..
BASEDIR=`pwd`
cd $CWD
MYBIN="$CWD/mybin"
TESTVER=3.23
TESTDIR="$CWD/t/$TESTVER"
TOT_PASS=0
TOT_FAIL=0
TOT_TEST=0
TIME_FORMAT='%U\t%S\t%E\t%P'
DASHBLANK="----\t----\t-------\t----"

[ -z $COLUMNS ] && COLUMNS=80
E=`expr $COLUMNS - 8`
C=0

while [ $C != $E ]
do
  DASH72="${DASH72}-"
  C=`expr $C + 1`
done

#++
# mysqld Environment Parameters
#--
MYPORT=9306
MYDDIR="$CWD/var/lib"
MYSOCK="$CWD/var/tmp/mysql.sock"
MYPID="$CWD/var/run/mysqld.pid"
MYLOG="$CWD/var/log/mysqld.log"
MYERR="$CWD/var/log/mysqld.err"

#++
# Program Definitions
#--
TIME=/usr/bin/time
MYSQLD="$BASEDIR/sql/mysqld"
MYSQL_TEST="$BASEDIR/client/mysql-test"
MYSQLADMIN="$BASEDIR/client/mysqladmin"
MYSQL_TEST="$MYSQL_TEST --socket=$MYSOCK --database=$DB --user=$USER --password=$PASSWD --silent"
INSTALL_DB="$MYBIN/mysql-test_install_db"


#++
# Terminal Modifications
#--
MOVE_TO_COL="echo -en \\033[300C\\033[20D"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \\033[0;39m"



#++
# Function Definitions
#--
echo_ok() {
  $MOVE_TO_COL && $SETCOLOR_NORMAL
  echo -n "[   "
  $SETCOLOR_SUCCESS
  echo -n "ok"
  $SETCOLOR_NORMAL
  echo "   ]"
  return 0
}

echo_notok() {
  $MOVE_TO_COL && $SETCOLOR_NORMAL
  echo -n "[ "
  $SETCOLOR_FAILURE
  echo -n "not ok"
  $SETCOLOR_NORMAL
  echo " ]"
  return 0
}

echo_pass () {
  $MOVE_TO_COL && $SETCOLOR_NORMAL
  echo -n "[  "
  $SETCOLOR_SUCCESS
  echo -n "pass"
  $SETCOLOR_NORMAL
  echo "  ]"
  return 0
}

echo_fail () {
  $MOVE_TO_COL && $SETCOLOR_NORMAL
  echo -n "[  "
  $SETCOLOR_FAILURE
  echo -n "fail"
  $SETCOLOR_NORMAL
  echo "  ]"
  return 0
}

error () {

    $SETCOLOR_FAILURE
    echo -n "Error: " && $SETCOLOR_NORMAL && echo $1
    $SETCOLOR_NORMAL
    exit 1
}

pass_inc () {
    TOT_PASS=`expr $TOT_PASS + 1`
}

fail_inc () {
    TOT_FAIL=`expr $TOT_FAIL + 1`
}

total_inc () {
    TOT_TEST=`expr $TOT_TEST + 1`
}

report_stats () {
    if [ $TOT_FAIL == 0 ]; then
	echo "All tests successful."
    else
	echo -n "Failed ${TOT_FAIL}/${TOT_TEST} tests, "

	xten=`expr $TOT_PASS \* 10000`   #
	raw=`expr $xten / $TOT_TEST`     # My God
	raw=`printf %.4d $raw`           # This is such a ...
	whole=`printf %.2s $raw`         # Narttu!!
	xwhole=`expr $whole \* 100`      # Hynda!!!
	deci=`expr $raw - $xwhole`       #

	echo "${whole}.${deci}% successful."
    fi
}
	
mysql_install_db () {
    if [ `$INSTALL_DB` ]; then
	error "Could not install tmp DBs"
    fi

    return 0
}

mysql_start () {

    `$MYSQLD --no-defaults \
             --skip-networking \
             --basedir=$CWD \
             --datadir=$MYDDIR \
	     --pid-file=$MYPID \
	     --socket=$MYSOCK \
             --log=$MYLOG \
             --language=english >> $MYERR 2>&1 &`

    return 1
}

mysql_stop () {

    `$MYSQLADMIN --socket=$MYSOCK -u root shutdown`

    return 1
}

mysql_restart () {

    mysql_stop
    res=$?
    [ $res != 1 ] && echo_notok && error "Stopping mysqld"

    mysql_start
    res=$?
    [ $res != 1 ] && echo_notok && error "Starting mysqld"

    return 1
}

mysql_loadstd () {

    sleep 2
    return 1
}


mysql_install_db

$SETCOLOR_NORMAL && echo -n "Starting mysqld for Testing"
mysql_start
res=$?
res=1
[ $res != 1 ] && echo_notok && error "Starting mysqld"
[ $res == 1 ] && echo_ok

$SETCOLOR_NORMAL && echo -n "Loading Standard Test Database"
mysql_loadstd
res=$?
[ $res != 1 ] && echo_notok && error "Loading STD"
[ $res == 1 ] && echo_ok

$SETCOLOR_NORMAL && echo -n "Starting Tests for MySQL $TESTVER Series"
$SETCOLOR_SUCCESS && echo_ok

echo
echo -e " TEST\t\t\tUSER\tSYSTEM\tELAPSED\t%CPU\t     RESULT"
echo $DASH72

for tf in $TESTDIR/*
do
    mytime=`$TIME -f $TIME_FORMAT $MYSQL_TEST < $tf 2>&1`
    res=$?

    tf=`basename $tf`

    [ $res == 1 ] && mytime=`echo -ne $mytime | cut -b 39-` && mytime=${mytime// /\\t}
    $SETCOLOR_NORMAL && echo -ne "$tf\t\t$mytime"
    [ $res == 1 ] && fail_inc && echo_fail 
    [ $res != 1 ] && pass_inc && echo_pass

    total_inc

    if [ $res != 0 ]; then
	echo
	$SETCOLOR_NORMAL && echo -ne "Restarting mysqld\t$DASHBLANK"
	mysql_restart
	$SETCOLOR_SUCCESS && echo_ok
	$SETCOLOR_NORMAL && echo -ne "Resuming Tests\t\t$DASHBLANK"
	$SETCOLOR_SUCCESS && echo_ok
	echo
    fi
done

echo $DASH72
echo
$SETCOLOR_NORMAL && echo -n "Ending Tests for MySQL $TESTVER Series"
$SETCOLOR_SUCCESS && echo_ok

$SETCOLOR_NORMAL && echo -n "Shutdown mysqld"
mysql_stop
res=$?
res=1
[ $res != 1 ] && echo_notok && error "Shutdown mysqld"
[ $res == 1 ] && echo_ok

$SETCOLOR_NORMAL

echo
report_stats
echo

exit 0
