adb-remount-test: Add surgically_wipe_overlayfs & is_overlayfs_mounted util
Factor out common code to helper function.
Bug: 243116800
Test: adb-remount-test
Change-Id: If90e8d1a787fee2507d2b729316a67bf113a9cd8
diff --git a/fs_mgr/tests/adb-remount-test.sh b/fs_mgr/tests/adb-remount-test.sh
index e5f6ecb..c6856ca 100755
--- a/fs_mgr/tests/adb-remount-test.sh
+++ b/fs_mgr/tests/adb-remount-test.sh
@@ -59,6 +59,7 @@
print_time=false
start_time=`date +%s`
ACTIVE_SLOT=
+OVERLAYFS_BACKING="cache mnt/scratch"
ADB_WAIT=4m
FASTBOOT_WAIT=2m
@@ -788,6 +789,41 @@
grep -v "[%] /\(data_mirror\|apex\|bionic\|system\|vendor\)/[^ ][^ ]*$"
}
+[ "USAGE: surgically_wipe_overlayfs
+
+Surgically wipe any mounted overlayfs scratch files.
+
+Returns: true if wiped anything" ]
+surgically_wipe_overlayfs() {
+ local wiped_anything=false
+ for d in ${OVERLAYFS_BACKING}; do
+ if adb_su test -d "/${d}/overlay" </dev/null; then
+ echo "${BLUE}[ INFO ]${NORMAL} /${d}/overlay is setup, surgically wiping" >&2
+ adb_su rm -rf "/${d}/overlay" </dev/null
+ wiped_anything=true
+ fi
+ done
+ ${wiped_anything}
+}
+
+[ "USAGE: is_overlayfs_mounted
+
+Returns: true if overlayfs is mounted" ]
+is_overlayfs_mounted() {
+ local df_output=$(adb_su df -k </dev/null)
+ local df_header_line=$(echo "${df_output}" | head -1)
+ local overlay_mounts=$(echo "${df_output}" | tail +2 |
+ skip_unrelated_mounts |
+ awk '$1 == "overlay" || $6 == "/mnt/scratch"')
+ if ! echo "${overlay_mounts}" | grep -q '^overlay '; then
+ return 1
+ fi >/dev/null 2>/dev/null
+ ( echo "${df_header_line}"
+ echo "${overlay_mounts}"
+ ) >&2
+ return 0
+}
+
##
## MAINLINE
##
@@ -975,7 +1011,6 @@
fi
# Can we test remount -R command?
-OVERLAYFS_BACKING="cache mnt/scratch"
overlayfs_supported=true
if [ "orange" != "`get_property ro.boot.verifiedbootstate`" -o \
"2" != "`get_property partition.system.verified`" ]; then
@@ -986,14 +1021,7 @@
adb_wait ${ADB_WAIT} ||
true
if inAdb; then
- reboot=false
- for d in ${OVERLAYFS_BACKING}; do
- if adb_test -d /${d}/overlay; then
- adb_su rm -rf /${d}/overlay </dev/null
- reboot=true
- fi
- done
- if ${reboot}; then
+ if surgically_wipe_overlayfs; then
adb_reboot &&
adb_wait ${ADB_WAIT}
fi
@@ -1074,16 +1102,7 @@
# devices that remount the physical content rather than overlayfs.
# So lets do our best to surgically wipe the overlayfs state without
# having to go through enable-verity transition.
-reboot=false
-for d in ${OVERLAYFS_BACKING}; do
- if adb_test -d /${d}/overlay; then
- echo "${YELLOW}[ WARNING ]${NORMAL} /${d}/overlay is setup, surgically wiping" >&2
- adb_sh rm -rf /${d}/overlay </dev/null ||
- die "/${d}/overlay wipe"
- reboot=true
- fi
-done
-if ${reboot}; then
+if surgically_wipe_overlayfs; then
echo "${YELLOW}[ WARNING ]${NORMAL} rebooting before test" >&2
adb_reboot &&
adb_wait ${ADB_WAIT} ||
@@ -1091,14 +1110,10 @@
adb_root ||
die "lost device after elevation to root after wipe `usb_status`"
fi
-D=`adb_sh df -k </dev/null` &&
- H=`echo "${D}" | head -1` &&
- D=`echo "${D}" | grep -v " /vendor/..*$" | grep "^overlay "` &&
- ( echo "${H}" &&
- echo "${D}"
- ) >&2 &&
+is_overlayfs_mounted &&
die "overlay takeover unexpected at this phase"
echo "${GREEN}[ OK ]${NORMAL} no overlay present before setup" >&2
+
overlayfs_needed=true
D=`adb_sh cat /proc/mounts </dev/null |
skip_administrative_mounts data`
@@ -1153,14 +1168,7 @@
die "lost device after adb shell su root disable-verity -R $(usb_status)"
if ${overlayfs_needed}; then
- has_overlayfs_setup=false
- for d in ${OVERLAYFS_BACKING}; do
- if adb_test -d "/${d}/overlay"; then
- has_overlayfs_setup=true
- echo "${GREEN}[ OK ]${NORMAL} /${d}/overlay is setup" >&2
- fi
- done
- if ! ${has_overlayfs_setup}; then
+ if ! is_overlayfs_mounted; then
die "no overlay being setup after disable-verity -R"
fi
fi
@@ -1630,12 +1638,7 @@
# Prerequisite is an overlayfs deconstructed device but with verity disabled.
# This also saves a lot of 'noise' from the command doing a mkfs on backing
# storage and all the related tuning and adjustment.
-for d in ${OVERLAYFS_BACKING}; do
- if adb_test -d /${d}/overlay; then
- adb_su rm -rf /${d}/overlay </dev/null ||
- die "/${d}/overlay wipe"
- fi
-done
+surgically_wipe_overlayfs || true
adb_reboot &&
adb_wait ${ADB_WAIT} ||
fixup_from_fastboot ||