Skip to content

Commit

Permalink
test: spl: Split tests up and use some configs
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
  • Loading branch information
Forty-Bot authored and trini committed Oct 18, 2023
1 parent a24be84 commit c56468a
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 79 deletions.
1 change: 1 addition & 0 deletions test/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
5 changes: 2 additions & 3 deletions test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
20 changes: 20 additions & 0 deletions test/image/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# SPDX-License-Identifier: GPL-2.0+
# Copyright (C) 2023 Sean Anderson <[email protected]>

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
3 changes: 2 additions & 1 deletion test/image/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
76 changes: 1 addition & 75 deletions test/image/spl_load.c
Original file line number Diff line number Diff line change
@@ -1,48 +1,10 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2021 Google LLC
* Written by Simon Glass <[email protected]>
* Copyright (C) 2023 Sean Anderson <[email protected]>
*/

#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)
{
Expand All @@ -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);
80 changes: 80 additions & 0 deletions test/image/spl_load_os.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2021 Google LLC
* Written by Simon Glass <[email protected]>
*/

#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);

0 comments on commit c56468a

Please sign in to comment.