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 9 EMULATOR_PORT=5580 10 DATA_DIR=$ANDROID_BUILD_TOP/bootable/recovery/testdata 11 12 WORK_DIR=/data/local/tmp 13 14 # set to 0 to use a device instead 15 USE_EMULATOR=0 16 17 # ------------------------ 18 19 if [ "$USE_EMULATOR" == 1 ]; then 20 emulator -wipe-data -noaudio -no-window -port $EMULATOR_PORT & 21 pid_emulator=$! 22 ADB="adb -s emulator-$EMULATOR_PORT " 23 else 24 ADB="adb -d " 25 fi 26 27 echo "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. 32 run_command() { 33 $ADB shell "$@" \; echo \$? | awk '{if (b) {print a}; a=$0; b=1} END {exit a}' 34 } 35 36 testname() { 37 echo 38 echo "::: testing $1 :::" 39 testname="$1" 40 } 41 42 fail() { 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 52 cleanup() { 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 64 expect_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 70 expect_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 76 expect_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 82 expect_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 88 expect_fail unsigned.zip 89 expect_fail jarsigned.zip 90 expect_succeed otasigned.zip 91 expect_fail_f4 otasigned.zip 92 expect_succeed_f4 otasigned_f4.zip 93 expect_fail otasigned_f4.zip 94 expect_fail random.zip 95 expect_fail fake-eocd.zip 96 expect_fail alter-metadata.zip 97 expect_fail alter-footer.zip 98 99 # --------------- cleanup ---------------------- 100 101 cleanup 102 103 echo 104 echo PASS 105 echo 106