Doug Zongker | 73ae31c | 2009-12-09 17:01:45 -0800 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | # |
Doug Zongker | 28ce47c | 2011-10-28 10:33:05 -0700 | [diff] [blame] | 3 | # A test suite for recovery's package signature verifier. Run in a |
| 4 | # client where you have done envsetup, lunch, etc. |
Doug Zongker | 73ae31c | 2009-12-09 17:01:45 -0800 | [diff] [blame] | 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_fail unsigned.zip |
| 77 | expect_fail jarsigned.zip |
| 78 | expect_succeed otasigned.zip |
| 79 | expect_fail random.zip |
| 80 | expect_fail fake-eocd.zip |
| 81 | expect_fail alter-metadata.zip |
| 82 | expect_fail alter-footer.zip |
| 83 | |
| 84 | # --------------- cleanup ---------------------- |
| 85 | |
| 86 | cleanup |
| 87 | |
| 88 | echo |
| 89 | echo PASS |
| 90 | echo |