#!/bin/sh # # Copyright (C) 2010 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This shell script is used to run one test on a device emulator. # PROGDIR=`dirname $0` # # Parse options # VERBOSE=no VERBOSE2=no ADB_CMD=adb while [ -n "$1" ]; do opt="$1" optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` case "$opt" in --help|-h|-\?) OPTION_HELP=yes ;; --verbose) if [ "$VERBOSE" = "yes" ] ; then VERBOSE2=yes else VERBOSE=yes fi ;; --adb=*) ADB_CMD="$optarg" ;; -*) # unknown options echo "ERROR: Unknown option '$opt', use --help for list of valid ones." exit 1 ;; *) # Simply record parameter if [ -z "$PARAMETERS" ] ; then PARAMETERS="$opt" else PARAMETERS="$PARAMETERS $opt" fi ;; esac shift done if [ "$OPTION_HELP" = "yes" ] ; then echo "Usage: $PROGNAME [options] <test-name>" echo "" echo "Run one C library test on a device/emulator through ADB." echo "" echo "Valid options:" echo "" echo " --help|-h|-? Print this help" echo " --verbose Enable verbose mode" echo " --adb=<file> Specify adb executable for device tests" echo "" exit 0 fi if [ -z "$ANDROID_PRODUCT_OUT" ] ; then echo "ERROR: ANDROID_PRODUCT_OUT not defined. Please run the 'lunch' command" exit 1 fi if [ ! -f "$ANDROID_PRODUCT_OUT/system.img" ] ; then echo "ERROR: Missing file: $ANDROID_PRODUCT_OUT/system.img" echo "Are you sure you built the proper system image?" exit 1 fi EXEC_ROOT_PATH="$ANDROID_PRODUCT_OUT/obj/EXECUTABLES" if [ ! -d "$EXEC_ROOT_PATH" ] ; then echo "ERROR: Missing directory: $EXEC_ROOT_PATH" echo "Are you sure you built the proper system image?" exit 1 fi if [ -z "$PARAMETERS" ] ; then echo "ERROR: Please specify test name." echo "Must be one of the following:" for FILE in `cd $EXEC_ROOT_PATH && ls -d test_*`; do TEST=`echo "$FILE" | sed -e "s!test_\(.*\)_intermediates!\\1!g"` echo " $TEST" done exit 1 fi TEST="$PARAMETERS" # Normalize test name, i.e. remove test_ prefix TEST=`echo "$TEST" | sed -e "s!^test_!!g"` TESTDIR="$EXEC_ROOT_PATH/test_${TEST}_intermediates" if [ ! -d "$TESTDIR" ] ; then echo "ERROR: No test by that name: test_$TEST!" exit 1 fi TESTNAME="test_$TEST" TESTEXE="$TESTDIR/$TESTNAME" if [ ! -f "$TESTEXE" ] ; then echo "ERROR: Missing file: $TESTEXE" echo "Are you sure your last test build was complete?" exit 1 fi # Run a command in ADB and return 0 in case of success, or 1 otherwise. # This is needed because "adb shell" does not return the proper status # of the launched command. # # NOTE: You must call set_adb_cmd_log before that to set the location # of the temporary log file that will be used. # adb_cmd () { local RET if [ -z "$ADB_CMD_LOG" ] ; then dump "INTERNAL ERROR: ADB_CMD_LOG not set!" exit 1 fi if [ $VERBOSE = "yes" ] ; then echo "$ADB_CMD shell $@" $ADB_CMD shell $@ "&&" echo OK "||" echo KO | tee $ADB_CMD_LOG else $ADB_CMD shell $@ "&&" echo OK "||" echo KO > $ADB_CMD_LOG fi # Get last line in log, should be OK or KO RET=`tail -n1 $ADB_CMD_LOG` # Get rid of \r at the end of lines RET=`echo "$RET" | sed -e 's![[:cntrl:]]!!g'` [ "$RET" = "OK" ] } set_adb_cmd_log () { ADB_CMD_LOG="$1" } # Returns 0 if a variable containing one or more items separated # by spaces contains a given value. # $1: variable name (e.g. FOO) # $2: value to test var_list_contains () { echo `var_value $1` | tr ' ' '\n' | fgrep -q -e "$2" } TMPDIR=/tmp/bionic-tests mkdir -p $TMPDIR set_adb_cmd_log $TMPDIR/adb.log.txt DEVICE_TEST_DIR=/data/local/bionic-test DEVICE_TEST=$DEVICE_TEST_DIR/$TESTNAME adb_cmd mkdir $DEVICE_TEST_DIR $ADB_CMD push $TESTEXE $DEVICE_TEST_DIR/ if [ $? != 0 ] ; then echo "ERROR: Can't push test to device!" exit 1 fi adb_cmd chmod 0755 $DEVICE_TEST && adb_cmd $DEVICE_TEST RET=$? adb_cmd rm -r $DEVICE_TEST_DIR if [ "$RET" != 0 ] ; then echo "FAIL!" else echo "OK!" fi exit 0