Home | History | Annotate | Download | only in recovery
      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