1*cf5a6c84SAndroid Build Coastguard Worker#!/bin/bash 2*cf5a6c84SAndroid Build Coastguard Worker 3*cf5a6c84SAndroid Build Coastguard Worker# 4*cf5a6c84SAndroid Build Coastguard Worker# Setup. 5*cf5a6c84SAndroid Build Coastguard Worker# 6*cf5a6c84SAndroid Build Coastguard Worker 7*cf5a6c84SAndroid Build Coastguard Worker# Copy the toybox tests across. 8*cf5a6c84SAndroid Build Coastguard Workerif [[ $(adb shell getprop ro.debuggable) == 1 ]]; then 9*cf5a6c84SAndroid Build Coastguard Worker adb shell su root rm -rf /data/local/tmp/toybox-tests/ 10*cf5a6c84SAndroid Build Coastguard Workerfi 11*cf5a6c84SAndroid Build Coastguard Workeradb shell rm -rf /data/local/tmp/toybox-tests/ 12*cf5a6c84SAndroid Build Coastguard Workeradb shell mkdir /data/local/tmp/toybox-tests/ 13*cf5a6c84SAndroid Build Coastguard Workeradb push tests/ /data/local/tmp/toybox-tests/ 14*cf5a6c84SAndroid Build Coastguard Workeradb push scripts/runtest.sh /data/local/tmp/toybox-tests/ 15*cf5a6c84SAndroid Build Coastguard Worker 16*cf5a6c84SAndroid Build Coastguard Worker# Make a temporary directory on the device. 17*cf5a6c84SAndroid Build Coastguard Workertmp_dir=`adb shell mktemp --directory /data/local/tmp/toybox-tests-tmp.XXXXXXXXXX` 18*cf5a6c84SAndroid Build Coastguard Worker 19*cf5a6c84SAndroid Build Coastguard Workerif tty -s; then 20*cf5a6c84SAndroid Build Coastguard Worker green="\033[1;32m" 21*cf5a6c84SAndroid Build Coastguard Worker red="\033[1;31m" 22*cf5a6c84SAndroid Build Coastguard Worker plain="\033[0m" 23*cf5a6c84SAndroid Build Coastguard Workerelse 24*cf5a6c84SAndroid Build Coastguard Worker green="" 25*cf5a6c84SAndroid Build Coastguard Worker red="" 26*cf5a6c84SAndroid Build Coastguard Worker plain="" 27*cf5a6c84SAndroid Build Coastguard Workerfi 28*cf5a6c84SAndroid Build Coastguard Worker 29*cf5a6c84SAndroid Build Coastguard Worker# Force pty allocation (http://b/142798587). 30*cf5a6c84SAndroid Build Coastguard Workerdash_t="-tt" 31*cf5a6c84SAndroid Build Coastguard Worker 32*cf5a6c84SAndroid Build Coastguard Workertest_toy() { 33*cf5a6c84SAndroid Build Coastguard Worker toy=$1 34*cf5a6c84SAndroid Build Coastguard Worker 35*cf5a6c84SAndroid Build Coastguard Worker echo 36*cf5a6c84SAndroid Build Coastguard Worker 37*cf5a6c84SAndroid Build Coastguard Worker location=$(adb shell "which $toy") 38*cf5a6c84SAndroid Build Coastguard Worker if [ -z "$location" ]; then 39*cf5a6c84SAndroid Build Coastguard Worker echo "-- $toy not present" 40*cf5a6c84SAndroid Build Coastguard Worker return 41*cf5a6c84SAndroid Build Coastguard Worker fi 42*cf5a6c84SAndroid Build Coastguard Worker 43*cf5a6c84SAndroid Build Coastguard Worker echo "-- $toy" 44*cf5a6c84SAndroid Build Coastguard Worker 45*cf5a6c84SAndroid Build Coastguard Worker implementation=$(adb shell "realpath $location") 46*cf5a6c84SAndroid Build Coastguard Worker non_toy=false 47*cf5a6c84SAndroid Build Coastguard Worker if [ "$implementation" != "/system/bin/toybox" ]; then 48*cf5a6c84SAndroid Build Coastguard Worker echo "-- note: $toy is *not* toybox; this does not count as a test failure" 49*cf5a6c84SAndroid Build Coastguard Worker non_toy=true 50*cf5a6c84SAndroid Build Coastguard Worker fi 51*cf5a6c84SAndroid Build Coastguard Worker 52*cf5a6c84SAndroid Build Coastguard Worker adb shell $dash_t "\ 53*cf5a6c84SAndroid Build Coastguard Worker export C=\"\$(which $toy)\"; \ 54*cf5a6c84SAndroid Build Coastguard Worker export CMDNAME=$toy; \ 55*cf5a6c84SAndroid Build Coastguard Worker export TESTDIR=$tmp_dir; \ 56*cf5a6c84SAndroid Build Coastguard Worker export FILES=/data/local/tmp/toybox-tests/tests/files/ ; \ 57*cf5a6c84SAndroid Build Coastguard Worker export LANG=en_US.UTF-8; \ 58*cf5a6c84SAndroid Build Coastguard Worker export VERBOSE=1 ; \ 59*cf5a6c84SAndroid Build Coastguard Worker mkdir $tmp_dir/$toy && cd $tmp_dir/$toy ; \ 60*cf5a6c84SAndroid Build Coastguard Worker source /data/local/tmp/toybox-tests/runtest.sh ; \ 61*cf5a6c84SAndroid Build Coastguard Worker source /data/local/tmp/toybox-tests/tests/$toy.test ; \ 62*cf5a6c84SAndroid Build Coastguard Worker if [ "\$FAILCOUNT" -ne 0 ]; then exit 1; fi; \ 63*cf5a6c84SAndroid Build Coastguard Worker cd .. && rm -rf $toy" 64*cf5a6c84SAndroid Build Coastguard Worker if [ $? -eq 0 ]; then 65*cf5a6c84SAndroid Build Coastguard Worker pass_count=$(($pass_count+1)) 66*cf5a6c84SAndroid Build Coastguard Worker elif [ "$non_toy" = "true" ]; then 67*cf5a6c84SAndroid Build Coastguard Worker non_toy_failures="$non_toy_failures $toy" 68*cf5a6c84SAndroid Build Coastguard Worker else 69*cf5a6c84SAndroid Build Coastguard Worker if [[ "$toy" = "vi" ]]; then 70*cf5a6c84SAndroid Build Coastguard Worker non_toy_failures="$non_toy_failures $toy" 71*cf5a6c84SAndroid Build Coastguard Worker else 72*cf5a6c84SAndroid Build Coastguard Worker failures="$failures $toy" 73*cf5a6c84SAndroid Build Coastguard Worker fi 74*cf5a6c84SAndroid Build Coastguard Worker fi 75*cf5a6c84SAndroid Build Coastguard Worker} 76*cf5a6c84SAndroid Build Coastguard Worker 77*cf5a6c84SAndroid Build Coastguard Worker# 78*cf5a6c84SAndroid Build Coastguard Worker# Run the selected test or all tests. 79*cf5a6c84SAndroid Build Coastguard Worker# 80*cf5a6c84SAndroid Build Coastguard Worker 81*cf5a6c84SAndroid Build Coastguard Workerfailures="" 82*cf5a6c84SAndroid Build Coastguard Workerpass_count=0 83*cf5a6c84SAndroid Build Coastguard Workerif [ "$#" -eq 0 ]; then 84*cf5a6c84SAndroid Build Coastguard Worker # Run all the tests. 85*cf5a6c84SAndroid Build Coastguard Worker for t in tests/*.test; do 86*cf5a6c84SAndroid Build Coastguard Worker toy=`echo $t | sed 's|tests/||' | sed 's|\.test||'` 87*cf5a6c84SAndroid Build Coastguard Worker test_toy $toy 88*cf5a6c84SAndroid Build Coastguard Worker done 89*cf5a6c84SAndroid Build Coastguard Workerelse 90*cf5a6c84SAndroid Build Coastguard Worker # Just run the tests for the given toys. 91*cf5a6c84SAndroid Build Coastguard Worker for toy in "$@"; do 92*cf5a6c84SAndroid Build Coastguard Worker test_toy $toy 93*cf5a6c84SAndroid Build Coastguard Worker done 94*cf5a6c84SAndroid Build Coastguard Workerfi 95*cf5a6c84SAndroid Build Coastguard Worker 96*cf5a6c84SAndroid Build Coastguard Worker# 97*cf5a6c84SAndroid Build Coastguard Worker# Show a summary and return a meaningful exit status. 98*cf5a6c84SAndroid Build Coastguard Worker# 99*cf5a6c84SAndroid Build Coastguard Worker 100*cf5a6c84SAndroid Build Coastguard Workerecho 101*cf5a6c84SAndroid Build Coastguard Workerecho "_________________________________________________________________________" 102*cf5a6c84SAndroid Build Coastguard Workerecho 103*cf5a6c84SAndroid Build Coastguard Workerecho -e "${green}PASSED${plain}: $pass_count" 104*cf5a6c84SAndroid Build Coastguard Workerfor failure in $failures; do 105*cf5a6c84SAndroid Build Coastguard Worker echo -e "${red}FAILED${plain}: $failure" 106*cf5a6c84SAndroid Build Coastguard Workerdone 107*cf5a6c84SAndroid Build Coastguard Workerfor failure in $non_toy_failures; do 108*cf5a6c84SAndroid Build Coastguard Worker echo -e "${red}FAILED${plain}: $failure (ignoring)" 109*cf5a6c84SAndroid Build Coastguard Workerdone 110*cf5a6c84SAndroid Build Coastguard Worker 111*cf5a6c84SAndroid Build Coastguard Worker# We should have run *something*... 112*cf5a6c84SAndroid Build Coastguard Workerif [ $pass_count -eq 0 ]; then exit 1; fi 113*cf5a6c84SAndroid Build Coastguard Worker# And all failures are bad... 114*cf5a6c84SAndroid Build Coastguard Workerif [ -n "$failures" ]; then exit 1; fi 115*cf5a6c84SAndroid Build Coastguard Workerexit 0 116