blob: b0248a94b24138784fdb85e886ab9f0a1ed6fe53 [file] [log] [blame]
#!/bin/bash -eux
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
me=${0##*/}
TMP="$me.tmp"
# Work in scratch directory
cd "$OUTDIR"
# The first part of this is a script version of the compiled test by the same
# name, to ensure we have working results.
# Args are <expected_type>, <file_to_probe>
test_case() {
local result
result=$(${FUTILITY} show -t "${SRCDIR}/$2" | awk '{print $NF}')
[ "$1" = "$result" ]
}
# Arg is <file_to_probe>
fail_case() {
if ${FUTILITY} show -t "$1" ; then false; else true; fi
}
# Known types
test_case "unknown" "tests/futility/data/short_junk.bin"
test_case "unknown" "tests/futility/data/random_noise.bin"
test_case "pubkey" "tests/devkeys/root_key.vbpubk"
test_case "keyblock" "tests/devkeys/kernel.keyblock"
test_case "fw_pre" "tests/futility/data/fw_vblock.bin"
test_case "gbb" "tests/futility/data/fw_gbb.bin"
test_case "bios" "tests/futility/data/bios_zgb_mp.bin"
test_case "oldbios" "tests/futility/data/bios_mario_mp.bin"
test_case "kernel" "tests/futility/data/kern_preamble.bin"
# We don't have a way to identify these (yet?)
# test_case "RAW_FIRMWARE"
# test_case "RAW_KERNEL"
# test_case "CHROMIUMOS_DISK"
test_case "prikey" "tests/devkeys/root_key.vbprivk"
test_case "pubkey21" "tests/futility/data/sample.vbpubk2"
test_case "prikey21" "tests/futility/data/sample.vbprik2"
test_case "pem" "tests/testkeys/key_rsa2048.pem"
test_case "pem" "tests/testkeys/key_rsa8192.pub.pem"
test_case "bdb" "tests/futility/data/bdb.bin"
# Expect failure here.
fail_case "/Sir/Not/Appearing/In/This/Film"
fail_case "${SRCDIR}"
fail_case "/dev/zero"
# Now test the show command when the file type is intentionally wrong. It
# often won't work, but it certainly shouldn't core dump.
# We'll ask futility to tell us what types it supports
TYPES=$(${FUTILITY} show --type help | awk '/^ +/ {print $1}')
# And we'll just reuse the same files above.
FILES=$(awk '/^test_case / {print $NF}' $0 | tr -d '"')
# futility should normally exit with either 0 or 1. Make sure that happens.
# NOTE: /bin/bash returns values > 125 for special problems like signals.
# I welcome patches to do this more portably.
for type in $TYPES; do
for file in $FILES; do
${FUTILITY} show --type ${type} "${SRCDIR}/${file}" && rc=$? || rc=$?
[ "$rc" -le 2 ]
done
done
# cleanup
rm -rf ${TMP}*
exit 0