| #! /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 |
| |