MySQL-run-tests   [plain text]


#!/bin/tcsh
#
# Name:        MySQL-run-tests
# Author:      Steve Peralta
# Description: See 'MySQL-run-tests --help' for details
#

	set __script_name="MySQL-run-tests"
	set __loop_forever=0
	set __show_help=0
	set __no_exec=0
	set __repeats=1
	set __delay_secs=0
	set __testname=""
	set __debug_opt=0
	set __keep_opt=0

	while ( "x-${1}" != "x-" )
		switch ("${1}")
			case "--forever":
				set __loop_forever=1
				breaksw
			case "--repeats":
				shift
				set __repeats=${1}
				breaksw
			case "--delay":
				shift
				set __delay_secs=${1}
				breaksw
			case "--debug":
				set __debug_opt=1
				breaksw
			case "--keep":
				set __keep_opt=1
				breaksw
			case "--noexec":
				set __no_exec=1
				breaksw
			case "--help":
			case "-h":
				set __show_help=1
				breaksw
			default:
				set __testname="${1}"
		endsw
		shift
	end

	if ( ${__show_help} == 1 ) then
		echo "${__script_name} - runs the MySQL test suite for all tests or an individual test"
		echo ""
		echo "Usage: ${__script_name} [ --help | [--forever] [--repeats num-times] [--delay num-secs] [--noexec] [ test-name ] ] "
		echo ""
		echo "where:"
		echo "   test-name   [optional] if used, runs only the named test.  [DEFAULT=ALL TESTS]"
		echo ""
		echo "where:"
		echo "   --help      Displays this message."
		echo "   --forever   Runs the test suite in a continuous loop until terminated by the user [DEFAULT=USE REPEATS]"
		echo "   --repeats N Number of test iterations to run [DEFAULT=1]"
		echo "               (Hint: use '--forever' to run unending repeats."
		echo "   --delay N   Pause N seconds between test iterations when used with --repeat > 1 or --forever [DEFAULT=NO DELAY]"
		echo "   --noexec    Runs the iteration loop without running the MySQL test(s) for script debugging [DEFAULT=EXECUTE TESTS]"
		echo "   --debug     Runs mysql-test-run with the --debug option [DEFAULT=(disabled)]"
		echo "   --keep      Prevents deletion of the mysql-test folder after completion [DEFAULT=delete folder]"
		goto __exit
	endif

	set __datefmt="+%Y/%m/%d %H:%M:%S"
	
	if ( ${__repeats} == 0 ) then
		echo ""
		echo "ERROR: Invalid option: '--repeat 0' (hint: use '--forever' instead)."
		echo ""
		exit 1
	endif

	echo -n "Repeats     : "
	if ( ${__loop_forever} == 1 ) then
		echo "[FOREVER]"
		set __repeats=0
	else
		echo "${__repeats}"
	endif

	echo -n "Delay       : "
	if ( ${__delay_secs} == 0 ) then
		echo "[DISABLED]"
	else
		echo "${__delay_secs} secs"
	endif

	echo -n "Test-only   : "
	if ( ${__no_exec} == 0 ) then
		echo "NO"
	else
		echo "YES"
	endif

	echo -n "Debug       : "
	if ( ${__debug_opt} == 0 ) then
		echo "NO"
	else
		echo "YES"
	endif

	echo -n "Keep results: "
	if ( ${__keep_opt} == 0 ) then
		echo "NO"
	else
		echo "YES"
	endif

	echo -n "Test(s)     : "
	if ( "x-${__testname}" != "x-" ) then
		echo "${__testname}"
	else
		echo "[ALL TESTS]"
	endif

#   exit 0

#   clear
	echo "==========================================================================="
	echo -n "Checking MySQL installation..."
	if (! -e /usr/libexec/mysqld) then
		echo " [FAILED]"
		echo "MySQL not installed!"
		echo "Install MySQL root and try again."
		goto __end
	endif
	echo " [FOUND]"
	echo "MySQL version: `/usr/libexec/mysqld --help | head -1`"
	
	echo "Initializing test environment:"
	echo -n "  looking for mysqld process..."
	set __mysqld=`ps auwwx | grep mysqld | grep usr\/libexec`
	if ( "x-${__mysqld}" == "x-" ) then
		echo " [FAILED]"
		echo "Error -- mysqld process not found!"
		echo "Start mysqld and try again (hint: use 'serveradmin start mysql')"
		goto __end
	endif
	echo " [FOUND]"
   
	echo -n "  copying /usr/share/mysql/mysql-test folder to /usr/... "
	rm -rf /usr/mysql-test
	cp -r /usr/share/mysql/mysql-test /usr
	echo " [DONE]"
   
	echo -n "  creating /usr/bin/ symlink to /usr/libexec/mysqld... "
	rm -rf /usr/bin/mysqld
	ln -s /usr/libexec/mysqld /usr/bin
	echo " [DONE]"

	echo "==========================================================================="

	set __iter=0
	set __remains=${__repeats}
	set __test_start=`date "${__datefmt}"`

__loop:
	set __iter=`expr ${__iter} + 1`
	if ( ${__loop_forever} == 0 ) then
		if ( ${__remains} == 0 ) then
			goto __finished
		endif
		set __remains=`expr ${__repeats} - ${__iter}`
	endif

	set __iter_start=`date "${__datefmt}"`
	echo ""
	echo ""
	echo -n "${__iter_start} ${__script_name}: STARTING TEST SUITE [${__iter}"
	if ( ${__loop_forever} == 0 ) then
		echo -n " of ${__repeats}"
	endif
	echo "]"
	echo ""
	echo ""

	cd /usr/mysql-test
	if ( ${__no_exec} == 1 ) then
		set __now=`date "${__datefmt}"`
		echo "${__now} ${__script_name}: *** TEST ONLY -- no tests run."
		goto __skip
	endif

	set __test_run_opts=""
	if ( ${__debug_opt} == 1 ) then
		set __test_run_opts="--debug"
	endif

	if ( "${__testname}" == "" ) then
		# run all tests except for kill which is expected to fail sometimes
		./mysql-test-run --force ${__test_run_opts} --mysqld=--user=root --skip-test=kill
	else
		# run single test
		./mysql-test-run --force ${__test_run_opts} --mysqld=--user=root --do-test=${__testname}
	endif
	unset __test_run_opts

__skip:
	if ( ${__delay_secs} != 0 ) then
		sleep ${__delay_secs}
	endif
	goto __loop

__finished:
	set __now=`date "${__datefmt}"`
	echo ""
	echo "==========================================================================="
	echo " ${__script_name}: All test iterations completed."
	echo "   Started : " ${__test_start}
	echo "   Finished: " ${__now}
	echo "==========================================================================="
	if ( ${__keep_opt} == 0 ) then
		rm -rf /usr/bin/mysqld
		rm -rf /usr/mysql-test
	endif
   
__end:
	unset __remains
	unset __iter
	unset __now
	unset __iter_start
	unset __test_start
	unset __keep_opt
	unset __debug_opt
	unset __testname
	unset __delay_secs
	unset __repeats
	unset __no_exec
	unset __show_help
	unset __loop_forever
	unset __script_name
   
__exit: