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 shift 68 run_command $WORK_DIR/verifier_test "$@" $WORK_DIR/package.zip || fail 69 } 70 71 expect_fail() { 72 testname "$1 (should fail)" 73 $ADB push $DATA_DIR/$1 $WORK_DIR/package.zip 74 shift 75 run_command $WORK_DIR/verifier_test "$@" $WORK_DIR/package.zip && fail 76 } 77 78 # not signed at all 79 expect_fail unsigned.zip 80 # signed in the pre-donut way 81 expect_fail jarsigned.zip 82 83 # success cases 84 expect_succeed otasigned.zip 85 expect_succeed otasigned_f4.zip -f4 86 expect_succeed otasigned_sha256.zip -sha256 87 expect_succeed otasigned_f4_sha256.zip -sha256 -f4 88 89 # verified against different key 90 expect_fail otasigned.zip -f4 91 expect_fail otasigned_f4.zip 92 93 # verified against right key but wrong hash algorithm 94 expect_fail otasigned.zip -sha256 95 expect_fail otasigned_f4.zip -sha256 -f4 96 expect_fail otasigned_sha256.zip 97 expect_fail otasigned_f4_sha256.zip -f4 98 99 # various other cases 100 expect_fail random.zip 101 expect_fail fake-eocd.zip 102 expect_fail alter-metadata.zip 103 expect_fail alter-footer.zip 104 105 # --------------- cleanup ---------------------- 106 107 cleanup 108 109 echo 110 echo PASS 111 echo 112