Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a219a233 authored by Yi-yo Chiang's avatar Yi-yo Chiang Committed by Gerrit Code Review
Browse files

Merge "adb-remount-test: Refactor fastboot flash vendor test"

parents c69bcd4a 4cf5421e
Loading
Loading
Loading
Loading
+63 −84
Original line number Diff line number Diff line
@@ -55,7 +55,6 @@ RED="${ESCAPE}[31m"
YELLOW="${ESCAPE}[33m"
BLUE="${ESCAPE}[34m"
NORMAL="${ESCAPE}[0m"
TMPDIR=${TMPDIR:-/tmp}
print_time=false
start_time=`date +%s`
ACTIVE_SLOT=
@@ -588,22 +587,13 @@ get_active_slot() {

[ "USAGE: restore

Do nothing: should be redefined when necessary.  Called after cleanup.
Do nothing: should be redefined when necessary.

Returns: reverses configurations" ]
restore() {
  true
}

[ "USAGE: cleanup

Do nothing: should be redefined when necessary

Returns: cleans up any latent resources" ]
cleanup() {
  true
}

[ "USAGE: test_duration >/dev/stderr

Prints the duration of the test
@@ -874,8 +864,10 @@ if ! ${color}; then
  NORMAL=""
fi

TMPDIR=

exit_handler() {
  cleanup || true
  [ -n "${TMPDIR}" ] && rm -rf "${TMPDIR}"
  local err=0
  if ! restore; then
    LOG ERROR "restore failed"
@@ -888,6 +880,8 @@ exit_handler() {
}
trap 'exit_handler' EXIT

TMPDIR=$(mktemp -d)

if ${print_time}; then
  LOG INFO "start $(date)"
fi
@@ -1305,19 +1299,15 @@ check_ne "${SYSTEM_INO}" "${VENDOR_INO}" vendor and system inode

# Download libc.so, append some garbage, push back, and check if the file
# is updated.
tempdir="`mktemp -d`"
cleanup() {
  rm -rf ${tempdir}
}
adb pull /system/lib/bootstrap/libc.so ${tempdir} >/dev/null ||
adb pull /system/lib/bootstrap/libc.so "${TMPDIR}/libc.so" >/dev/null ||
  die "pull libc.so from device"
garbage="D105225BBFCB1EB8AB8EBDB7094646F0"
echo "${garbage}" >> ${tempdir}/libc.so
adb push ${tempdir}/libc.so /system/lib/bootstrap/libc.so >/dev/null ||
echo "${garbage}" >>"${TMPDIR}/libc.so"
adb push "${TMPDIR}/libc.so" /system/lib/bootstrap/libc.so >/dev/null ||
  die "push libc.so to device"
adb pull /system/lib/bootstrap/libc.so ${tempdir}/libc.so.fromdevice >/dev/null ||
adb pull /system/lib/bootstrap/libc.so "${TMPDIR}/libc.so.fromdevice" >/dev/null ||
  die "pull libc.so from device"
diff ${tempdir}/libc.so ${tempdir}/libc.so.fromdevice > /dev/null ||
diff "${TMPDIR}/libc.so" "${TMPDIR}/libc.so.fromdevice" > /dev/null ||
  die "libc.so differ"

LOG RUN "reboot to confirm content persistent"
@@ -1379,87 +1369,85 @@ adb_sh find ${MOUNTS} </dev/null >/dev/null 2>/dev/null || true

# Check if the updated libc.so is persistent after reboot.
adb_root &&
  adb pull /system/lib/bootstrap/libc.so ${tempdir}/libc.so.fromdevice >/dev/null ||
  adb pull /system/lib/bootstrap/libc.so "${TMPDIR}/libc.so.fromdevice" >/dev/null ||
  die "pull libc.so from device"
diff ${tempdir}/libc.so ${tempdir}/libc.so.fromdevice > /dev/null || die "libc.so differ"
rm -rf ${tempdir}
cleanup() {
  true
}
diff "${TMPDIR}/libc.so" "${TMPDIR}/libc.so.fromdevice" > /dev/null || die "libc.so differ"
LOG OK "/system/lib/bootstrap/libc.so content remains after reboot"

LOG RUN "flash vendor, confirm its content disappears"
################################################################################
LOG RUN "flash vendor, and confirm vendor override disappears"

H=`adb_sh echo '${HOSTNAME}' </dev/null 2>/dev/null`
is_bootloader_fastboot=false
is_bootloader_fastboot=true
# cuttlefish?
[ X"${H}" != X"${H#vsoc}" ] || is_bootloader_fastboot=true
[[ "$(get_property ro.product.device)" == vsoc* ]] &&
  is_bootloader_fastboot=false
is_userspace_fastboot=false

if ! ${is_bootloader_fastboot}; then
  LOG WARNING "does not support fastboot, skipping"
elif [ -z "${ANDROID_PRODUCT_OUT}" ]; then
  LOG WARNING "build tree not setup, skipping"
elif [ ! -s "${ANDROID_PRODUCT_OUT}/vendor.img" ]; then
  LOG WARNING "vendor image missing, skipping"
elif [ "${ANDROID_PRODUCT_OUT}" = "${ANDROID_PRODUCT_OUT%*/${H}}" ]; then
  LOG WARNING "wrong vendor image, skipping"
elif [ -z "${ANDROID_HOST_OUT}" ]; then
  LOG WARNING "please run lunch, skipping"
elif ! (
          adb_cat /vendor/build.prop |
          cmp -s ${ANDROID_PRODUCT_OUT}/vendor/build.prop
       ) >/dev/null 2>/dev/null; then
  LOG WARNING "vendor image signature mismatch, skipping"
  LOG WARNING "does not support fastboot flash, skipping"
else
  wait_for_screen
  adb_root || die "adb root"

  VENDOR_DEVICE_CANDIDATES=(
    "/dev/block/mapper/vendor"{_${ACTIVE_SLOT},}
    "/dev/block/by-name/vendor"{_${ACTIVE_SLOT},}
  )
  for b in "${VENDOR_DEVICE_CANDIDATES[@]}"; do
    if adb_test -e "${b}"; then
      adb pull "${b}" "${TMPDIR}/vendor.img" || die "adb pull ${b}"
      LOG INFO "pulled ${b} from device as vendor.img"
      break
    fi
  done
  [ -f "${TMPDIR}/vendor.img" ] ||
    die "cannot find block device of vendor partition"

  avc_check
  adb reboot fastboot </dev/null ||
    die "fastbootd not supported (wrong adb in path?)"
  any_wait ${ADB_WAIT} &&
    inFastboot ||
    die "reboot into fastboot to flash vendor `usb_status` (bad bootloader?)"
  fastboot flash vendor ||
  fastboot flash vendor "${TMPDIR}/vendor.img" ||
    ( fastboot reboot && false) ||
    die "fastboot flash vendor"
  LOG OK "flashed vendor"

  fastboot_getvar is-userspace yes &&
    is_userspace_fastboot=true
  # check ${scratch_partition} via fastboot
  if [ -n "${scratch_partition}" ]; then
    fastboot_getvar partition-type:${scratch_partition} raw ||
      ( fastboot reboot && false) ||
      die "fastboot can not see ${scratch_partition} parameters"
    if ${uses_dynamic_scratch}; then
      # check ${scratch_partition} via fastboot
      fastboot_getvar has-slot:${scratch_partition} no &&
        fastboot_getvar is-logical:${scratch_partition} yes ||
        ( fastboot reboot && false) ||
        die "fastboot can not see ${scratch_partition} parameters"
      LOG INFO "expect fastboot erase ${scratch_partition} to fail"
      fastboot erase ${scratch_partition} &&
        ( fastboot reboot || true) &&
        die "fastboot can erase ${scratch_partition}"
    else
      fastboot_getvar is-logical:${scratch_partition} no ||
        ( fastboot reboot && false) ||
        die "fastboot can not see ${scratch_partition} parameters"
    fi
    if ! ${uses_dynamic_scratch}; then
      fastboot reboot-bootloader ||
        die "Reboot into fastboot"
    fi
    if ${uses_dynamic_scratch}; then
      LOG INFO "expect fastboot erase ${scratch_partition} to fail"
      fastboot erase ${scratch_partition} &&
        ( fastboot reboot || true) &&
        die "fastboot can erase ${scratch_partition}"
        die "fastboot reboot bootloader"
    fi
    LOG INFO "expect fastboot format ${scratch_partition} to fail"
    fastboot format ${scratch_partition} &&
      ( fastboot reboot || true) &&
      die "fastboot can format ${scratch_partition}"
  fi
  fastboot reboot ||
    die "can not reboot out of fastboot"
  LOG WARNING "adb after fastboot"

  fastboot reboot || die "cannot reboot out of fastboot"
  LOG INFO "reboot from fastboot"
  adb_wait ${ADB_WAIT} ||
    fixup_from_recovery ||
    die "did not reboot after formatting ${scratch_partition} `usb_status`"
    die "cannot reboot after flash vendor $(usb_status)"
  if ${overlayfs_needed}; then
    adb_root &&
      D=`adb_sh df -k </dev/null` &&
@@ -1474,32 +1462,30 @@ else
      if ${is_userspace_fastboot}; then
        die  "overlay supposed to be minus /vendor takeover after flash vendor"
      else
        LOG WARNING "user fastboot missing required to invalidate, ignoring a failure"
        LOG WARNING "fastbootd missing required to invalidate, ignoring a failure"
        LOG WARNING "overlay supposed to be minus /vendor takeover after flash vendor"
      fi
  fi
  B="`adb_cat /system/hello`"
  check_eq "${A}" "${B}" system after flash vendor
  check_eq "${A}" "$(adb_cat /system/hello)" "/system content after flash vendor"
  check_eq "${SYSTEM_INO}" "$(adb_sh stat --format=%i /system/hello </dev/null)" "system inode after flash vendor"
  adb_sh ls /system >/dev/null || die "ls /system"
  adb_test -d /system/priv-app || die "[ -d /system/priv-app ]"
  B="`adb_cat /system/priv-app/hello`"
  check_eq "${A}" "${B}" system/priv-app after flash vendor
  adb_root ||
    die "adb root"
  check_eq "${A}" "$(adb_cat /system/priv-app/hello)" "/system/priv-app content after flash vendor"
  adb_root || die "adb root"
  if adb_test -e /vendor/hello; then
    if ${is_userspace_fastboot} || ! ${overlayfs_needed}; then
    adb_test -e /vendor/hello &&
      die "vendor content after flash vendor"
    else
    LOG WARNING "user fastboot missing required to invalidate, ignoring a failure"
    adb_test -e /vendor/hello &&
      LOG WARNING "fastbootd missing required to invalidate, ignoring a failure"
      LOG WARNING "vendor content after flash vendor"
    fi

  check_eq "${SYSTEM_INO}" "`adb_sh stat --format=%i /system/hello </dev/null`" system inode after reboot

  fi
  LOG OK "vendor override destroyed after flash verdor"
fi >&2

wait_for_screen

################################################################################
LOG RUN "remove test content (cleanup)"

T=`adb_date`
@@ -1541,19 +1527,12 @@ if ${is_bootloader_fastboot} && [ -n "${scratch_partition}" ]; then
  avc_check
  adb reboot fastboot </dev/null ||
    die "Reboot into fastbootd"
  img=${TMPDIR}/adb-remount-test-${$}.img
  cleanup() {
    rm ${img}
  }
  img="${TMPDIR}/adb-remount-test-${$}.img"
  dd if=/dev/zero of=${img} bs=4096 count=16 2>/dev/null &&
    fastboot_wait ${FASTBOOT_WAIT} ||
    die "reboot into fastboot to flash scratch `usb_status`"
  fastboot flash --force ${scratch_partition} ${img}
  err=${?}
  cleanup
  cleanup() {
    true
  }
  fastboot reboot ||
    die "can not reboot out of fastboot"
  [ 0 -eq ${err} ] ||