summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Richardson <wfrichar@chromium.org>2015-03-05 16:51:39 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-03-11 07:50:34 +0000
commit271c071344beaacc45201c17406bcf3b4daece88 (patch)
tree5ba22014d89d97b75d2ec251bd386d170ee6995e
parentd7e1e4f0befdda52ad48e5a8eb5fc49dbee40247 (diff)
downloadvboot-271c071344beaacc45201c17406bcf3b4daece88.tar.gz
futility: add tests for futil_file_type()
This adds a test to be sure we can identify the types of input files that futility can handle. BUG=none BRANCH=none TEST=make runtests Change-Id: Iff1dcc05530af2969a82d7c32599850bba59597a Signed-off-by: Bill Richardson <wfrichar@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/258501
-rw-r--r--Makefile7
-rw-r--r--tests/futility/data/fw_gbb.binbin0 -> 978944 bytes
-rw-r--r--tests/futility/data/fw_vblock.binbin0 -> 65536 bytes
-rw-r--r--tests/futility/data/kern_preamble.binbin0 -> 139264 bytes
-rw-r--r--tests/futility/data/random_noise.binbin0 -> 4096 bytes
-rw-r--r--tests/futility/data/sample.vbprik2bin0 -> 4724 bytes
-rw-r--r--tests/futility/data/sample.vbpubk2bin0 -> 2132 bytes
-rw-r--r--tests/futility/test_file_types.c95
-rw-r--r--tests/test_common.h1
9 files changed, 103 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index bb62f148..812f1d1e 100644
--- a/Makefile
+++ b/Makefile
@@ -683,6 +683,7 @@ TEST_NAMES = \
tests/vboot_nvstorage_test \
tests/verify_kernel \
tests/futility/binary_editor \
+ tests/futility/test_file_types \
tests/futility/test_not_really
ifdef REGION_READ
@@ -1176,6 +1177,11 @@ ${BUILD}/tests/%: CFLAGS += -Xlinker --allow-multiple-definition
${BUILD}/tests/%: LDLIBS += -lrt -luuid
${BUILD}/tests/%: LIBS += ${TESTLIB}
+# Futility tests need almost everything that futility needs.
+${BUILD}/tests/futility/%: INCLUDES += -Ifutility
+${BUILD}/tests/futility/%: OBJS += ${FUTIL_OBJS} ${UTILLIB} ${UTILLIB21}
+${BUILD}/tests/futility/%: LDLIBS += ${CRYPTO_LIBS}
+
${BUILD}/tests/rollback_index2_tests: OBJS += \
${BUILD}/firmware/lib/rollback_index_for_test.o
${BUILD}/tests/rollback_index2_tests: \
@@ -1348,6 +1354,7 @@ run2tests: test_setup
.PHONY: runfutiltests
runfutiltests: test_setup
tests/futility/run_test_scripts.sh ${TEST_INSTALL_DIR}/bin
+ ${RUNTEST} ${BUILD_RUN}/tests/futility/test_file_types
${RUNTEST} ${BUILD_RUN}/tests/futility/test_not_really
# Run long tests, including all permutations of encryption keys (instead of
diff --git a/tests/futility/data/fw_gbb.bin b/tests/futility/data/fw_gbb.bin
new file mode 100644
index 00000000..e717a00c
--- /dev/null
+++ b/tests/futility/data/fw_gbb.bin
Binary files differ
diff --git a/tests/futility/data/fw_vblock.bin b/tests/futility/data/fw_vblock.bin
new file mode 100644
index 00000000..ec2769dd
--- /dev/null
+++ b/tests/futility/data/fw_vblock.bin
Binary files differ
diff --git a/tests/futility/data/kern_preamble.bin b/tests/futility/data/kern_preamble.bin
new file mode 100644
index 00000000..6d34ee56
--- /dev/null
+++ b/tests/futility/data/kern_preamble.bin
Binary files differ
diff --git a/tests/futility/data/random_noise.bin b/tests/futility/data/random_noise.bin
new file mode 100644
index 00000000..1e2d76ee
--- /dev/null
+++ b/tests/futility/data/random_noise.bin
Binary files differ
diff --git a/tests/futility/data/sample.vbprik2 b/tests/futility/data/sample.vbprik2
new file mode 100644
index 00000000..34f12e41
--- /dev/null
+++ b/tests/futility/data/sample.vbprik2
Binary files differ
diff --git a/tests/futility/data/sample.vbpubk2 b/tests/futility/data/sample.vbpubk2
new file mode 100644
index 00000000..aac42f38
--- /dev/null
+++ b/tests/futility/data/sample.vbpubk2
Binary files differ
diff --git a/tests/futility/test_file_types.c b/tests/futility/test_file_types.c
new file mode 100644
index 00000000..25beb479
--- /dev/null
+++ b/tests/futility/test_file_types.c
@@ -0,0 +1,95 @@
+/*
+ * 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.
+ */
+#include <limits.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "file_type.h"
+#include "futility.h"
+#include "test_common.h"
+
+/*
+ * Files that exemplify each type.
+ * Paths are relative to the source directory.
+ * A missing path means we don't (yet?) know how to identify it reliably.
+ */
+static struct {
+ enum futil_file_type type;
+ const char * const file;
+} test_case[] = {
+ {FILE_TYPE_UNKNOWN, "tests/futility/data/random_noise.bin"},
+ {FILE_TYPE_PUBKEY, "tests/devkeys/root_key.vbpubk"},
+ {FILE_TYPE_KEYBLOCK, "tests/devkeys/kernel.keyblock"},
+ {FILE_TYPE_FW_PREAMBLE, "tests/futility/data/fw_vblock.bin"},
+ {FILE_TYPE_GBB, "tests/futility/data/fw_gbb.bin"},
+ {FILE_TYPE_BIOS_IMAGE, "tests/futility/data/bios_zgb_mp.bin"},
+ {FILE_TYPE_OLD_BIOS_IMAGE, "tests/futility/data/bios_mario_mp.bin"},
+ {FILE_TYPE_KERN_PREAMBLE, "tests/futility/data/kern_preamble.bin"},
+ {FILE_TYPE_RAW_FIRMWARE, },
+ {FILE_TYPE_RAW_KERNEL, },
+ {FILE_TYPE_CHROMIUMOS_DISK, },
+ {FILE_TYPE_PRIVKEY, "tests/devkeys/root_key.vbprivk"},
+ {FILE_TYPE_VB2_PUBKEY, "tests/futility/data/sample.vbpubk2"},
+ {FILE_TYPE_VB2_PRIVKEY, "tests/futility/data/sample.vbprik2"},
+ {FILE_TYPE_PEM, "tests/testkeys/key_rsa2048.pem"},
+};
+BUILD_ASSERT(ARRAY_SIZE(test_case) == NUM_FILE_TYPES);
+
+int main(int argc, char *argv[])
+{
+ char filename[PATH_MAX];
+ char status[80];
+ char *srcdir;
+ enum futil_file_type type;
+ int i;
+
+ /* Where's the source directory? */
+ srcdir = getenv("SRCDIR");
+ if (argc > 1)
+ srcdir = argv[1];
+ if (!srcdir)
+ srcdir = ".";
+
+ /* Complain about some files we can't handle */
+ TEST_EQ(futil_file_type("/Sir/Not/Appearing/In/This/Film", &type),
+ FILE_ERR_OPEN, "Identify missing file");
+ TEST_EQ(futil_file_type("/", &type),
+ FILE_ERR_DIR, "Identify directory");
+ TEST_EQ(futil_file_type("/dev/zero", &type),
+ FILE_ERR_CHR, "Identify char device");
+
+ /* Now test things we can handle */
+ for (i = 0; i < NUM_FILE_TYPES; i++) {
+
+ if (!test_case[i].file) {
+ printf("%sWarning: No test for file type %d (%s)%s\n",
+ COL_YELLOW, test_case[i].type,
+ futil_file_type_str(test_case[i].type),
+ COL_STOP);
+ continue;
+ }
+
+ snprintf(filename, sizeof(filename), "%s/%s",
+ srcdir, test_case[i].file);
+
+ type = NUM_FILE_TYPES;
+ snprintf(status, sizeof(status),
+ "File type %d (%s): examined",
+ test_case[i].type,
+ futil_file_type_str(test_case[i].type));
+ TEST_EQ(FILE_ERR_NONE, futil_file_type(filename, &type),
+ status);
+
+ snprintf(status, sizeof(status),
+ "File type %d (%s) identified",
+ test_case[i].type,
+ futil_file_type_str(test_case[i].type));
+ TEST_EQ(type, test_case[i].type, status);
+ }
+
+ return !gTestSuccess;
+}
diff --git a/tests/test_common.h b/tests/test_common.h
index 9a84f505..34e39ed7 100644
--- a/tests/test_common.h
+++ b/tests/test_common.h
@@ -51,6 +51,7 @@ int TEST_SUCC(int result, const char* testname);
* Don't use \e as MSC does not recognize it as a valid escape sequence.
*/
#define COL_GREEN "\x1b[1;32m"
+#define COL_YELLOW "\x1b[1;33m"
#define COL_RED "\x1b[0;31m"
#define COL_STOP "\x1b[m"