1#!/bin/bash 2# 3# A test suite for recovery's package signature verifier. Run in a 4# client where you have done envsetup, lunch, etc. 5# 6# TODO: find some way to get this run regularly along with the rest of 7# the tests. 8 9EMULATOR_PORT=5580 10DATA_DIR=$ANDROID_BUILD_TOP/bootable/recovery/testdata 11 12WORK_DIR=/data/local/tmp 13 14# set to 0 to use a device instead 15USE_EMULATOR=0 16 17# ------------------------ 18 19if [ "$USE_EMULATOR" == 1 ]; then 20 emulator -wipe-data -noaudio -no-window -port $EMULATOR_PORT & 21 pid_emulator=$! 22 ADB="adb -s emulator-$EMULATOR_PORT " 23else 24 ADB="adb -d " 25fi 26 27echo "waiting to connect to device" 28$ADB wait-for-device 29 30# run a command on the device; exit with the exit status of the device 31# command. 32run_command() { 33 $ADB shell "$@" \; echo \$? | awk '{if (b) {print a}; a=$0; b=1} END {exit a}' 34} 35 36testname() { 37 echo 38 echo "::: testing $1 :::" 39 testname="$1" 40} 41 42fail() { 43 echo 44 echo FAIL: $testname 45 echo 46 [ "$open_pid" == "" ] || kill $open_pid 47 [ "$pid_emulator" == "" ] || kill $pid_emulator 48 exit 1 49} 50 51 52cleanup() { 53 # not necessary if we're about to kill the emulator, but nice for 54 # running on real devices or already-running emulators. 55 run_command rm $WORK_DIR/verifier_test 56 run_command rm $WORK_DIR/package.zip 57 58 [ "$pid_emulator" == "" ] || kill $pid_emulator 59} 60 61$ADB push $ANDROID_PRODUCT_OUT/system/bin/verifier_test \ 62 $WORK_DIR/verifier_test 63 64expect_succeed() { 65 testname "$1 (should succeed)" 66 $ADB push $DATA_DIR/$1 $WORK_DIR/package.zip 67 run_command $WORK_DIR/verifier_test $WORK_DIR/package.zip || fail 68} 69 70expect_fail() { 71 testname "$1 (should fail)" 72 $ADB push $DATA_DIR/$1 $WORK_DIR/package.zip 73 run_command $WORK_DIR/verifier_test $WORK_DIR/package.zip && fail 74} 75 76expect_succeed_f4() { 77 testname "$1 (should succeed)" 78 $ADB push $DATA_DIR/$1 $WORK_DIR/package.zip 79 run_command $WORK_DIR/verifier_test -f4 $WORK_DIR/package.zip || fail 80} 81 82expect_fail_f4() { 83 testname "$1 (should fail)" 84 $ADB push $DATA_DIR/$1 $WORK_DIR/package.zip 85 run_command $WORK_DIR/verifier_test -f4 $WORK_DIR/package.zip && fail 86} 87 88expect_fail unsigned.zip 89expect_fail jarsigned.zip 90expect_succeed otasigned.zip 91expect_fail_f4 otasigned.zip 92expect_succeed_f4 otasigned_f4.zip 93expect_fail otasigned_f4.zip 94expect_fail random.zip 95expect_fail fake-eocd.zip 96expect_fail alter-metadata.zip 97expect_fail alter-footer.zip 98 99# --------------- cleanup ---------------------- 100 101cleanup 102 103echo 104echo PASS 105echo 106