]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
test: spl: Split tests up and use some configs
authorSean Anderson <seanga2@gmail.com>
Sat, 14 Oct 2023 20:47:57 +0000 (16:47 -0400)
committerTom Rini <trini@konsulko.com>
Wed, 18 Oct 2023 00:50:52 +0000 (20:50 -0400)
In order to make adding new spl unit tests easier, especially when they may
have many dependencies, add some Kconfigs for the existing image test.
Split it into the parts which are generic (such as callbacks) and the
test-specific parts.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
test/Kconfig
test/Makefile
test/image/Kconfig [new file with mode: 0644]
test/image/Makefile
test/image/spl_load.c
test/image/spl_load_os.c [new file with mode: 0644]

index 830245b6f9a986450af1a4094f02f8302aa6a8ad..ca648d23376f9cf50fd2b605f92b450847b77a1e 100644 (file)
@@ -101,6 +101,7 @@ config UT_UNICODE
 
 source "test/dm/Kconfig"
 source "test/env/Kconfig"
+source "test/image/Kconfig"
 source "test/lib/Kconfig"
 source "test/optee/Kconfig"
 source "test/overlay/Kconfig"
index 178773647a828e0a260a74aac96c98c914831d98..8e1fed2c28b27683a74184bcdf09a076eedf45da 100644 (file)
@@ -3,9 +3,6 @@
 # (C) Copyright 2012 The Chromium Authors
 
 obj-y += test-main.o
-ifdef CONFIG_SPL_LOAD_FIT
-obj-$(CONFIG_SANDBOX) += image/
-endif
 
 ifneq ($(CONFIG_$(SPL_)BLOBLIST),)
 obj-$(CONFIG_$(SPL_)CMDLINE) += bloblist.o
@@ -30,4 +27,6 @@ obj-$(CONFIG_UNIT_TEST) += boot/
 obj-$(CONFIG_UNIT_TEST) += common/
 obj-y += log/
 obj-$(CONFIG_$(SPL_)UT_UNICODE) += unicode_ut.o
+else
+obj-$(CONFIG_SPL_UT_LOAD) += image/
 endif
diff --git a/test/image/Kconfig b/test/image/Kconfig
new file mode 100644 (file)
index 0000000..70ffe0f
--- /dev/null
@@ -0,0 +1,20 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (C) 2023 Sean Anderson <seanga2@gmail.com>
+
+config SPL_UT_LOAD
+       bool "Unit tests for SPL load methods"
+       depends on SPL_UNIT_TEST
+       default y if SANDBOX
+       help
+         Test various SPL load methods.
+
+if SPL_UT_LOAD
+
+config SPL_UT_LOAD_OS
+       bool "Test loading from the host OS"
+       depends on SANDBOX && SPL_LOAD_FIT
+       default y
+       help
+         Smoke test to ensure that loading U-boot works in sandbox.
+
+endif
index c4039df707f27319a76352ad7772db1a4b3287bf..f7ae996bc863c65093101a2eabdfcf49b9f64936 100644 (file)
@@ -2,4 +2,5 @@
 #
 # Copyright 2021 Google LLC
 
-obj-$(CONFIG_SPL_BUILD) += spl_load.o
+obj-y += spl_load.o
+obj-$(CONFIG_SPL_UT_LOAD_OS) += spl_load_os.o
index 4e27ff460ab4af6d5c4f686f7b753271cdb59cf9..1a57bf846d2f1a986c25f30fc77eb169da6b5c12 100644 (file)
@@ -1,48 +1,10 @@
 // SPDX-License-Identifier: GPL-2.0+
 /*
- * Copyright 2021 Google LLC
- * Written by Simon Glass <sjg@chromium.org>
+ * Copyright (C) 2023 Sean Anderson <seanga2@gmail.com>
  */
 
 #include <common.h>
-#include <image.h>
 #include <mapmem.h>
-#include <os.h>
-#include <spl.h>
-#include <test/ut.h>
-
-/* Declare a new SPL test */
-#define SPL_TEST(_name, _flags)                UNIT_TEST(_name, _flags, spl_test)
-
-/* Context used for this test */
-struct text_ctx {
-       int fd;
-};
-
-static ulong read_fit_image(struct spl_load_info *load, ulong sector,
-                           ulong count, void *buf)
-{
-       struct text_ctx *text_ctx = load->priv;
-       off_t offset, ret;
-       ssize_t res;
-
-       offset = sector * load->bl_len;
-       ret = os_lseek(text_ctx->fd, offset, OS_SEEK_SET);
-       if (ret != offset) {
-               printf("Failed to seek to %zx, got %zx (errno=%d)\n", offset,
-                      ret, errno);
-               return 0;
-       }
-
-       res = os_read(text_ctx->fd, buf, count * load->bl_len);
-       if (res == -1) {
-               printf("Failed to read %lx bytes, got %ld (errno=%d)\n",
-                      count * load->bl_len, res, errno);
-               return 0;
-       }
-
-       return count;
-}
 
 int board_fit_config_name_match(const char *name)
 {
@@ -53,39 +15,3 @@ struct legacy_img_hdr *spl_get_load_buffer(ssize_t offset, size_t size)
 {
        return map_sysmem(0x100000, 0);
 }
-
-static int spl_test_load(struct unit_test_state *uts)
-{
-       struct spl_image_info image;
-       struct legacy_img_hdr *header;
-       struct text_ctx text_ctx;
-       struct spl_load_info load;
-       char fname[256];
-       int ret;
-       int fd;
-
-       memset(&load, '\0', sizeof(load));
-       load.bl_len = 512;
-       load.read = read_fit_image;
-
-       ret = sandbox_find_next_phase(fname, sizeof(fname), true);
-       if (ret) {
-               printf("(%s not found, error %d)\n", fname, ret);
-               return ret;
-       }
-       load.filename = fname;
-
-       header = spl_get_load_buffer(-sizeof(*header), sizeof(*header));
-
-       fd = os_open(fname, OS_O_RDONLY);
-       ut_assert(fd >= 0);
-       ut_asserteq(512, os_read(fd, header, 512));
-       text_ctx.fd = fd;
-
-       load.priv = &text_ctx;
-
-       ut_assertok(spl_load_simple_fit(&image, &load, 0, header));
-
-       return 0;
-}
-SPL_TEST(spl_test_load, 0);
diff --git a/test/image/spl_load_os.c b/test/image/spl_load_os.c
new file mode 100644 (file)
index 0000000..bf374f2
--- /dev/null
@@ -0,0 +1,80 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2021 Google LLC
+ * Written by Simon Glass <sjg@chromium.org>
+ */
+
+#include <common.h>
+#include <image.h>
+#include <os.h>
+#include <spl.h>
+#include <test/ut.h>
+
+/* Declare a new SPL test */
+#define SPL_TEST(_name, _flags)                UNIT_TEST(_name, _flags, spl_test)
+
+/* Context used for this test */
+struct text_ctx {
+       int fd;
+};
+
+static ulong read_fit_image(struct spl_load_info *load, ulong sector,
+                           ulong count, void *buf)
+{
+       struct text_ctx *text_ctx = load->priv;
+       off_t offset, ret;
+       ssize_t res;
+
+       offset = sector * load->bl_len;
+       ret = os_lseek(text_ctx->fd, offset, OS_SEEK_SET);
+       if (ret != offset) {
+               printf("Failed to seek to %zx, got %zx (errno=%d)\n", offset,
+                      ret, errno);
+               return 0;
+       }
+
+       res = os_read(text_ctx->fd, buf, count * load->bl_len);
+       if (res == -1) {
+               printf("Failed to read %lx bytes, got %ld (errno=%d)\n",
+                      count * load->bl_len, res, errno);
+               return 0;
+       }
+
+       return count;
+}
+
+static int spl_test_load(struct unit_test_state *uts)
+{
+       struct spl_image_info image;
+       struct legacy_img_hdr *header;
+       struct text_ctx text_ctx;
+       struct spl_load_info load;
+       char fname[256];
+       int ret;
+       int fd;
+
+       memset(&load, '\0', sizeof(load));
+       load.bl_len = 512;
+       load.read = read_fit_image;
+
+       ret = sandbox_find_next_phase(fname, sizeof(fname), true);
+       if (ret) {
+               printf("(%s not found, error %d)\n", fname, ret);
+               return ret;
+       }
+       load.filename = fname;
+
+       header = spl_get_load_buffer(-sizeof(*header), sizeof(*header));
+
+       fd = os_open(fname, OS_O_RDONLY);
+       ut_assert(fd >= 0);
+       ut_asserteq(512, os_read(fd, header, 512));
+       text_ctx.fd = fd;
+
+       load.priv = &text_ctx;
+
+       ut_assertok(spl_load_simple_fit(&image, &load, 0, header));
+
+       return 0;
+}
+SPL_TEST(spl_test_load, 0);