function usage() { echo "runs $TEST_NAME" echo "\t -h help" echo "\t -c [CLIENT64_SERVER64 | CLIENT32_SERVER32 | CLIENT64_SERVER32 | CLIENT32_SERVER64] configures whether to run 32-bit or 64-bit versions of the servers and client" echo "\t -x [/ld/library/path32] set the LD_LIBRARY_PATH for servers32 and client32" echo "\t -y [/ld/library/path64] set the LD_LIBRARY_PATH for servers64 and client64" } failed_test_cases=() function run_test() { if [ $1 -eq 32 ]; then CLIENT_PATH=$CLIENT_PATH32 LD_LIB_PATH_CLIENT=$LD_LIB_PATH32 else CLIENT_PATH=$CLIENT_PATH64 LD_LIB_PATH_CLIENT=$LD_LIB_PATH64 fi if [ $2 -eq 32 ]; then SERVER_PATH=$SERVER_PATH32 LD_LIB_PATH_SERVER=$LD_LIB_PATH32 else SERVER_PATH=$SERVER_PATH64 LD_LIB_PATH_SERVER=$LD_LIB_PATH64 fi echo "Running $1-bit client with $2-bit servers" echo "$LD_LIB_PATH_SERVER=$LD_LIB_PATH_SERVER" LD_LIBRARY_PATH=$LD_LIB_PATH_SERVER:$LD_LIBRARY_PATH $SERVER_PATH & SERVER_PID=$! LD_LIBRARY_PATH=$LD_LIB_PATH_CLIENT:$LD_LIBRARY_PATH $CLIENT_PATH if [ $? -ne 0 ]; then failed_test_cases+=("$1-bit client with $2-bit servers") fi kill $SERVER_PID } function check_env() { if [ -z ${TEST_NAME+x} ]; then echo "TEST_NAME is unset"; exit 1 fi if [ -z ${CLIENT_PATH32+x} ]; then echo "CLIENT_PATH32 is unset"; exit 1 fi if [ -z ${CLIENT_PATH64+x} ]; then echo "CLIENT_PATH64 is unset"; exit 1 fi if [ -z ${SERVER_PATH32+x} ]; then echo "SERVER_PATH32 is unset"; exit 1 fi if [ -z ${SERVER_PATH64+x} ]; then echo "SERVER_PATH64 is unset"; exit 1 fi } #usage: run_all_tests server_path32 server_path64 client_path32 client_path64 test_name [-h/-c config/-x lib32/-y ldlib64] function run_all_tests() { SERVER_PATH32=$1 SERVER_PATH64=$2 CLIENT_PATH32=$3 CLIENT_PATH64=$4 TEST_NAME=$5 check_env shift 5 while getopts hc:x:y: opt; do case $opt in h) usage exit 0 ;; c) case $OPTARG in CLIENT64_SERVER64) run_test 64 64 ;; CLIENT32_SERVER32) run_test 32 32 ;; CLIENT64_SERVER32) run_test 64 32 ;; CLIENT32_SERVER64) run_test 32 64 ;; *) echo "Error: unknown config value \"$OPTARG\"" exit 1 ;; esac exit 0 ;; x) LD_LIB_PATH32=$OPTARG ;; y) LD_LIB_PATH64=$OPTARG ;; *) echo "Error: unknown param \"$opt\"" usage exit 1 ;; esac done for i in 32 64 do for j in 32 64 do run_test $i $j done done count_failed_tests=${#failed_test_cases[@]} echo "*********************************************************" echo " $TEST_NAME Final Summary:\n" if [ $count_failed_tests -gt 0 ]; then echo " $TEST_NAME failed for the following cases:\n\t" for each in "${failed_test_cases[@]}" do echo "\t$each" done else echo " $TEST_NAME passed for all cases!" fi echo "*********************************************************" exit ${#failed_test_cases[@]} }