| #! /bin/bash | |
| do_help() | |
| { | |
| echo You need to fill out the testrc with your machine\'s details before | |
| echo using this script. | |
| exit; | |
| } | |
| do_test() | |
| { | |
| test_prog=$1 | |
| test_name=`echo -n $test_prog | sed "s/test_//" | sed "s/_/ /" \ | |
| | tr '[:lower:]' '[:upper:]'` | |
| echo "-----------------------------------------------------------------" | |
| echo "TESTING $test_name..." | |
| echo "-----------------------------------------------------------------" | |
| echo "-----------------------------------------------------------------"\ | |
| >> test_log | |
| echo "TESTING $test_name..." >> test_log | |
| echo "-----------------------------------------------------------------"\ | |
| >> test_log | |
| if [ -e core* ]; then | |
| rm core* | |
| fi | |
| ./$test_prog | |
| if [ -e test_out ]; then | |
| echo > test_out | |
| fi | |
| } | |
| do_tests() | |
| { | |
| for walk in $TEST_LIST; do | |
| if [ -x $walk ]; then | |
| do_test $walk | |
| fi | |
| done | |
| } | |
| ################################################ | |
| # GLOBAL HELPER FUNCTIONS | |
| ################################################ | |
| ped_testing() | |
| { | |
| echo -n "testing $1... " | |
| echo -n "testing $1... " >> test_log | |
| } | |
| ped_testing_expect_fail() | |
| { | |
| echo -n "testing for failure on $1... " | |
| echo -n "testing for failure on $1... " >> test_log | |
| } | |
| ped_test_ok() | |
| { | |
| echo "ok" | |
| echo "ok" >> test_log | |
| if [ "x$VERBOSE_LOGS" = "x1" ]; then | |
| cat test_out >> test_log | |
| echo >> test_log | |
| fi | |
| export OK_COUNT=$[ $OK_COUNT + 1 ] | |
| } | |
| ped_test_failed() | |
| { | |
| echo "failed" | |
| echo "failed" >> test_log | |
| cat test_out >> test_log | |
| echo >> test_log | |
| export FAILED_COUNT=$[ $FAILED_COUNT + 1 ] | |
| if [ -e core ]; then | |
| echo core dumped, saving to core-$CORE_COUNTER\ | |
| >> test_log | |
| echo >> test_log | |
| mv core core-$CORE_COUNTER | |
| export CORE_COUNTER=$[ $CORE_COUNTER + 1 ] | |
| fi | |
| } | |
| check_leaks() | |
| { | |
| if test "x$MALLOC_TRACE" != "x"; then | |
| ./build_leak_list > leaks | |
| if test -s leaks; then | |
| printf \ | |
| 'Found memory leaks: (add this list to dodgey_malloc_list in\n'\ | |
| 'libparted/libparted.c to debug them)\n' \ | |
| >> test_out | |
| cat leaks >> test_out | |
| return 0 | |
| fi | |
| rm leaks | |
| fi | |
| return 1 | |
| } | |
| ped_test_get_val() | |
| { | |
| post_command=$2 | |
| if test "x$input" = "x"; then | |
| input="Cancel" | |
| fi | |
| if test "x$post_command" = "x"; then | |
| post_command="true" | |
| fi | |
| if test -e leaks; then | |
| rm leaks | |
| fi | |
| if test "x$MALLOC_TRACE" != "x"; then | |
| if test -e $MALLOC_TRACE; then | |
| rm $MALLOC_TRACE | |
| fi | |
| fi | |
| if $TEST_PARTED_COMMAND -s $TEST_DRIVE $1 2>&1 > test_out; then | |
| if [ -e core ]; then | |
| return 0 | |
| fi | |
| if check_leaks; then | |
| return 0 | |
| fi | |
| if ( echo >> test_out ; ( eval $post_command ) 2>&1 >> test_out ); then | |
| return 1 | |
| else | |
| return 0 | |
| fi | |
| else | |
| return 0 | |
| fi | |
| } | |
| ped_test() | |
| { | |
| ped_testing "$1" | |
| if ped_test_get_val "$2" "$3"; then | |
| ped_test_failed | |
| return 1 | |
| else | |
| ped_test_ok | |
| return 0 | |
| fi | |
| } | |
| ped_test_expect_fail() | |
| { | |
| ped_testing_expect_fail "$1" | |
| if ped_test_get_val "$2" "$3"; then | |
| # we expect a CLEAN fail :-) | |
| if [ -e core ]; then | |
| ped_test_failed | |
| return 1 | |
| fi | |
| if check_leaks; then | |
| ped_test_failed | |
| return 1 | |
| fi | |
| ped_test_ok | |
| return 0 | |
| else | |
| ped_test_failed | |
| return 1 | |
| fi | |
| } | |
| ################################################ | |
| # the rest... | |
| ################################################ | |
| init_environment() | |
| { | |
| if [ "x$UID" != "x0" ]; then | |
| echo Warning: you should probably be running this as root. | |
| echo | |
| fi | |
| . testrc | |
| `cat testrc | grep "^[^#].*=" | sed "s/=.*//" | sed "s/^/export /" ` | |
| if [ "x$HOSTNAME" != "x$TEST_HOST" ]; then | |
| do_help | |
| fi | |
| export OLD_KERNEL_PRINTK=`cat /proc/sys/kernel/printk` | |
| if [ "x$QUIET_KERNEL" = "x1" ]; then | |
| echo 1 1 1 1 > /proc/sys/kernel/printk | |
| fi | |
| renice 20 $$ > /dev/null | |
| export CORE_COUNTER=1 | |
| export OK_COUNT=0 | |
| export FAILED_COUNT=0 | |
| export -f ped_testing | |
| export -f ped_testing_expect_fail | |
| export -f ped_test_ok | |
| export -f ped_test_failed | |
| export -f ped_test_get_val | |
| export -f ped_test | |
| export -f ped_test_expect_fail | |
| export -f check_leaks | |
| } | |
| done_environment() | |
| { | |
| echo $OLD_KERNEL_PRINTK > /proc/sys/kernel/printk | |
| } | |
| open_log() | |
| { | |
| if [ -e test_log ]; then | |
| echo -n > test_log; | |
| fi | |
| } | |
| print_version() | |
| { | |
| echo -n "Testing " | |
| $TEST_PARTED_COMMAND --version | |
| echo | |
| echo -n "Testing " >> test_log | |
| $TEST_PARTED_COMMAND --version >> test_log | |
| echo >> test_log | |
| } | |
| main() | |
| { | |
| init_environment | |
| open_log | |
| print_version | |
| do_tests | |
| done_environment | |
| } | |
| if [ "x$1" != "x" ]; then | |
| export TEST_LIST="test_*$1*" | |
| else | |
| export TEST_LIST="test_*" | |
| fi | |
| main | |