summaryrefslogtreecommitdiff
path: root/tests/futility/test_update.sh
diff options
context:
space:
mode:
authorHung-Te Lin <hungte@chromium.org>2018-08-27 12:50:18 +0800
committerchrome-bot <chrome-bot@chromium.org>2018-09-05 09:15:18 -0700
commit4256ddecd72ce6d2b3e7e10fbc328f57bfdc4ac6 (patch)
treee501a4c2a6781927a6101b6f5d802a6058dc1126 /tests/futility/test_update.sh
parent1d4e02d8bab3f0aff945dcb6a3d828af53472b64 (diff)
downloadvboot-4256ddecd72ce6d2b3e7e10fbc328f57bfdc4ac6.tar.gz
futility: cmd_update: Check platform compatibility before updating
A safety check so people won't accidentally flashed wrong firmware image and then being not able to boot. The platform is decided by extracting the first component (delimited by dot '.') of firmware ID. For example, platform for "Google_Link.123" is "Google_Link". BUG=chromium:875551 TEST=make futil; tests/futility/run_test_scripts.sh $(pwd)/build/futility BRANCH=None Change-Id: I90a1631f6b3e9a675fe1990cf9c204d763faf54c Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1189248 Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'tests/futility/test_update.sh')
-rwxr-xr-xtests/futility/test_update.sh43
1 files changed, 41 insertions, 2 deletions
diff --git a/tests/futility/test_update.sh b/tests/futility/test_update.sh
index 3093e25d..9a56c3da 100755
--- a/tests/futility/test_update.sh
+++ b/tests/futility/test_update.sh
@@ -35,6 +35,28 @@ FROM_HWID="X86 PEPPY TEST 4211"
cp -f ${LINK_BIOS} ${TO_IMAGE}
cp -f ${PEPPY_BIOS} ${FROM_IMAGE}
+patch_file() {
+ local file="$1"
+ local section="$2"
+ local data="$3"
+
+ # NAME OFFSET SIZE
+ local fmap_info="$(${FUTILITY} dump_fmap -p ${file} ${section})"
+ local offset="$(echo "${fmap_info}" | sed 's/^[^ ]* //; s/ [^ ]*$//')"
+ echo "offset: ${offset}"
+ echo -n "${data}" | dd of="${file}" bs=1 seek="${offset}" conv=notrunc
+}
+
+# PEPPY and LINK have different platform element ("Google_Link" and
+# "Google_Peppy") in firmware ID so we want to hack them by changing
+# "Google_" to "Google.".
+patch_file ${TO_IMAGE} RW_FWID_A Google.
+patch_file ${TO_IMAGE} RW_FWID_B Google.
+patch_file ${TO_IMAGE} RO_FRID Google.
+patch_file ${FROM_IMAGE} RW_FWID_A Google.
+patch_file ${FROM_IMAGE} RW_FWID_B Google.
+patch_file ${FROM_IMAGE} RO_FRID Google.
+
unpack_image() {
local folder="${TMP}.$1"
local image="$2"
@@ -75,8 +97,13 @@ test_update() {
shift 3
cp -f "${emu_src}" "${TMP}.emu"
echo "*** Test Item: ${test_name}"
- "${FUTILITY}" update --emulate "${TMP}.emu" "$@"
- cmp "${TMP}.emu" "${expected}"
+ if [ "${error_msg}" != "${expected}" ] && [ -n "${error_msg}" ]; then
+ msg="$(! "${FUTILITY}" update --emulate "${TMP}.emu" "$@" 2>&1)"
+ echo "${msg}" | grep -qF -- "${error_msg}"
+ else
+ "${FUTILITY}" update --emulate "${TMP}.emu" "$@"
+ cmp "${TMP}.emu" "${expected}"
+ fi
}
# --sys_props: mainfw_act, is_vboot2, [wp_hw, wp_sw]
@@ -86,11 +113,19 @@ test_update "Full update" \
"${FROM_IMAGE}" "${TMP}.expected.full" \
-i "${TO_IMAGE}" --wp=0
+test_update "Full update (incompatible platform)" \
+ "${FROM_IMAGE}" "!platform is not compatible" \
+ -i "${LINK_BIOS}" --wp=0
+
# Test RW-only update.
test_update "RW update" \
"${FROM_IMAGE}" "${TMP}.expected.rw" \
-i "${TO_IMAGE}" --wp=1
+test_update "RW update (incompatible platform)" \
+ "${FROM_IMAGE}" "!platform is not compatible" \
+ -i "${LINK_BIOS}" --wp=1
+
# Test Try-RW update (vboot2).
test_update "RW update (A->B)" \
"${FROM_IMAGE}" "${TMP}.expected.b" \
@@ -103,6 +138,10 @@ test_update "RW update (B->A)" \
test_update "RW update -> fallback to RO+RW Full update" \
"${FROM_IMAGE}" "${TMP}.expected.full" \
-i "${TO_IMAGE}" -t --wp=0 --sys_props 1,1
+test_update "RW update (incompatible platform)" \
+ "${FROM_IMAGE}" "!platform is not compatible" \
+ -i "${LINK_BIOS}" -t --wp=1
+
# Test Try-RW update (vboot1).
test_update "RW update (vboot1, A->B)" \