run-test.sh revision 7f101d6dd0e9da88ffed3aef0686758950285b3d
1aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#!/bin/sh
2aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
3aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# Copyright (C) 2010 The Android Open Source Project
4aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
5aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License");
6aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# you may not use this file except in compliance with the License.
7aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# You may obtain a copy of the License at
8aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
9aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#      http://www.apache.org/licenses/LICENSE-2.0
10aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
11aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software
12aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS,
13aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# See the License for the specific language governing permissions and
15aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# limitations under the License.
16aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
17aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#  This shell script is used to run one test on a device emulator.
18aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
19aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
20aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerPROGDIR=`dirname $0`
21aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
22aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
23aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# Parse options
24aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
25aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerVERBOSE=no
26aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerVERBOSE2=no
27aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerADB_CMD=adb
28aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
29aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerwhile [ -n "$1" ]; do
30aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    opt="$1"
31aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
32aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    case "$opt" in
33aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        --help|-h|-\?)
34aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            OPTION_HELP=yes
35aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            ;;
36aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        --verbose)
37aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            if [ "$VERBOSE" = "yes" ] ; then
38aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner                VERBOSE2=yes
39aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            else
40aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner                VERBOSE=yes
41aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            fi
42aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            ;;
43aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        --adb=*)
44aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            ADB_CMD="$optarg"
45aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            ;;
46aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        -*) # unknown options
47aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            echo "ERROR: Unknown option '$opt', use --help for list of valid ones."
48aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            exit 1
49aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        ;;
50aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        *)  # Simply record parameter
51aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            if [ -z "$PARAMETERS" ] ; then
52aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner                PARAMETERS="$opt"
53aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            else
54aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner                PARAMETERS="$PARAMETERS $opt"
55aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            fi
56aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner            ;;
57aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    esac
58aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    shift
59aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerdone
60aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
61aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ "$OPTION_HELP" = "yes" ] ; then
62aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "Usage: $PROGNAME [options] <test-name>"
63aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo ""
64aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "Run one C library test on a device/emulator through ADB."
65aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo ""
66aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "Valid options:"
67aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo ""
68aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "    --help|-h|-?      Print this help"
69aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "    --verbose         Enable verbose mode"
70aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "    --adb=<file>      Specify adb executable for device tests"
71aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo ""
72aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    exit 0
73aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
74aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
75aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ -z "$ANDROID_PRODUCT_OUT" ] ; then
76aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "ERROR: ANDROID_PRODUCT_OUT not defined. Please run the 'lunch' command"
77aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    exit 1
78aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
79aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
80aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ ! -f "$ANDROID_PRODUCT_OUT/system.img" ] ; then
81aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "ERROR: Missing file: $ANDROID_PRODUCT_OUT/system.img"
82aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "Are you sure you built the proper system image?"
83aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    exit 1
84aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
85aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
86aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerEXEC_ROOT_PATH="$ANDROID_PRODUCT_OUT/obj/EXECUTABLES"
87aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ ! -d "$EXEC_ROOT_PATH" ] ; then
88aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "ERROR: Missing directory: $EXEC_ROOT_PATH"
89aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "Are you sure you built the proper system image?"
90aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    exit 1
91aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
92aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
93aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ -z "$PARAMETERS" ] ; then
94aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "ERROR: Please specify test name."
95aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "Must be one of the following:"
96aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    for FILE in `cd $EXEC_ROOT_PATH && ls -d test_*`; do
97aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        TEST=`echo "$FILE" | sed -e "s!test_\(.*\)_intermediates!\\1!g"`
98aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        echo "  $TEST"
99aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    done
100aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    exit 1
101aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
102aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
103aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerTEST="$PARAMETERS"
104aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# Normalize test name, i.e. remove test_ prefix
105aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerTEST=`echo "$TEST" | sed -e "s!^test_!!g"`
106aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
107aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerTESTDIR="$EXEC_ROOT_PATH/test_${TEST}_intermediates"
108aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ ! -d "$TESTDIR" ] ; then
109aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "ERROR: No test by that name: test_$TEST!"
110aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    exit 1
111aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
112aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
113aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerTESTNAME="test_$TEST"
114aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerTESTEXE="$TESTDIR/$TESTNAME"
115aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ ! -f "$TESTEXE" ] ; then
116aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "ERROR: Missing file: $TESTEXE"
117aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "Are you sure your last test build was complete?"
118aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    exit 1
119aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
120aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
121aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# Run a command in ADB and return 0 in case of success, or 1 otherwise.
122aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# This is needed because "adb shell" does not return the proper status
123aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# of the launched command.
124aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
125aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# NOTE: You must call set_adb_cmd_log before that to set the location
126aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#        of the temporary log file that will be used.
127aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner#
128aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turneradb_cmd ()
129aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner{
130aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    local RET
131aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    if [ -z "$ADB_CMD_LOG" ] ; then
132aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        dump "INTERNAL ERROR: ADB_CMD_LOG not set!"
133aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        exit 1
134aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    fi
135aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    if [ $VERBOSE = "yes" ] ; then
136aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        echo "$ADB_CMD shell $@"
137aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        $ADB_CMD shell $@ "&&" echo OK "||" echo KO | tee $ADB_CMD_LOG
138aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    else
139aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner        $ADB_CMD shell $@ "&&" echo OK "||" echo KO > $ADB_CMD_LOG
140aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    fi
141aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    # Get last line in log, should be OK or KO
142aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    RET=`tail -n1 $ADB_CMD_LOG`
143aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    # Get rid of \r at the end of lines
144aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    RET=`echo "$RET" | sed -e 's![[:cntrl:]]!!g'`
145aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    [ "$RET" = "OK" ]
146aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner}
147aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
148aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerset_adb_cmd_log ()
149aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner{
150aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    ADB_CMD_LOG="$1"
151aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner}
152aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
153aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# Returns 0 if a variable containing one or more items separated
154aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# by spaces contains a given value.
155aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# $1: variable name (e.g. FOO)
156aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner# $2: value to test
157aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnervar_list_contains ()
158aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner{
159aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo `var_value $1` | tr ' ' '\n' | fgrep -q -e "$2"
160aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner}
161aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
162aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerTMPDIR=/tmp/bionic-tests
163aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnermkdir -p $TMPDIR
164aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerset_adb_cmd_log $TMPDIR/adb.log.txt
165aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
166aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerDEVICE_TEST_DIR=/data/local/bionic-test
167aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerDEVICE_TEST=$DEVICE_TEST_DIR/$TESTNAME
1687f101d6dd0e9da88ffed3aef0686758950285b3dDavid 'Digit' Turneradb_cmd mkdir $DEVICE_TEST_DIR
169aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner$ADB_CMD push $TESTEXE $DEVICE_TEST_DIR/
170aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ $? != 0 ] ; then
171aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "ERROR: Can't push test to device!"
172aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    exit 1
173aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
174aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
175aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turneradb_cmd chmod 0755 $DEVICE_TEST &&
176aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turneradb_cmd $DEVICE_TEST
177aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' TurnerRET=$?
178aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turneradb_cmd rm -r $DEVICE_TEST_DIR
179aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner
180aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerif [ "$RET" != 0 ] ; then
181aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "FAIL!"
182aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerelse
183aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turner    echo "OK!"
184aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerfi
185aa47f0c8ebe0ee3fc6e6ab90b81848efb4c011a8David 'Digit' Turnerexit 0
186