summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorSean Anderson <sean.anderson@seco.com>2021-04-12 18:53:07 -0400
committerTom Rini <trini@konsulko.com>2021-04-22 14:09:45 -0400
commit535e700b9db908e0b1afba7719090e315299b9c2 (patch)
tree4459819dc11c912d5d53198297dfd93a2b6b6fde /test
parentfe5a50910a64d8773fcd1454631d28da72319f28 (diff)
downloadu-boot-535e700b9db908e0b1afba7719090e315299b9c2.tar.gz
u-boot-535e700b9db908e0b1afba7719090e315299b9c2.tar.xz
u-boot-535e700b9db908e0b1afba7719090e315299b9c2.zip
test: Add test for partitions
This is technically a library function, but we use MMCs for testing, so it is easier to do it with DM. At the moment, the only block devices in sandbox are MMCs (AFAIK) so we just test with those. Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Diffstat (limited to 'test')
-rw-r--r--test/dm/Makefile1
-rw-r--r--test/dm/part.c76
2 files changed, 77 insertions, 0 deletions
diff --git a/test/dm/Makefile b/test/dm/Makefile
index 52a8c932b8..e7cb1eec96 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -61,6 +61,7 @@ obj-y += ofread.o
obj-y += of_extra.o
obj-$(CONFIG_OSD) += osd.o
obj-$(CONFIG_DM_VIDEO) += panel.o
+obj-$(CONFIG_EFI_PARTITION) += part.o
obj-$(CONFIG_DM_PCI) += pci.o
obj-$(CONFIG_P2SB) += p2sb.o
obj-$(CONFIG_PCI_ENDPOINT) += pci_ep.o
diff --git a/test/dm/part.c b/test/dm/part.c
new file mode 100644
index 0000000000..051e9010b6
--- /dev/null
+++ b/test/dm/part.c
@@ -0,0 +1,76 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2020 Sean Anderson <sean.anderson@seco.com>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <mmc.h>
+#include <part.h>
+#include <part_efi.h>
+#include <dm/test.h>
+#include <test/ut.h>
+
+static int dm_test_part(struct unit_test_state *uts)
+{
+ char str_disk_guid[UUID_STR_LEN + 1];
+ struct blk_desc *mmc_dev_desc;
+ struct disk_partition part_info;
+ struct disk_partition parts[2] = {
+ {
+ .start = 48, /* GPT data takes up the first 34 blocks or so */
+ .size = 1,
+ .name = "test1",
+ },
+ {
+ .start = 49,
+ .size = 1,
+ .name = "test2",
+ },
+ };
+
+ ut_asserteq(1, blk_get_device_by_str("mmc", "1", &mmc_dev_desc));
+ if (CONFIG_IS_ENABLED(RANDOM_UUID)) {
+ gen_rand_uuid_str(parts[0].uuid, UUID_STR_FORMAT_STD);
+ gen_rand_uuid_str(parts[1].uuid, UUID_STR_FORMAT_STD);
+ gen_rand_uuid_str(str_disk_guid, UUID_STR_FORMAT_STD);
+ }
+ ut_assertok(gpt_restore(mmc_dev_desc, str_disk_guid, parts,
+ ARRAY_SIZE(parts)));
+
+#define test(expected, part_str, whole) \
+ ut_asserteq(expected, \
+ part_get_info_by_dev_and_name_or_num("mmc", part_str, \
+ &mmc_dev_desc, \
+ &part_info, whole))
+
+ test(-ENODEV, "", true);
+ env_set("bootdevice", "0");
+ test(0, "", true);
+ env_set("bootdevice", "1");
+ test(1, "", false);
+ test(1, "-", false);
+ env_set("bootdevice", "");
+ test(-EPROTONOSUPPORT, "0", false);
+ test(0, "0", true);
+ test(0, ":0", true);
+ test(0, ".0", true);
+ test(0, ".0:0", true);
+ test(-EINVAL, "#test1", true);
+ test(1, "1", false);
+ test(1, "1", true);
+ test(-ENOENT, "1:0", false);
+ test(0, "1:0", true);
+ test(1, "1:1", false);
+ test(2, "1:2", false);
+ test(1, "1.0", false);
+ test(0, "1.0:0", true);
+ test(1, "1.0:1", false);
+ test(2, "1.0:2", false);
+ test(-EINVAL, "1#bogus", false);
+ test(1, "1#test1", false);
+ test(2, "1#test2", false);
+
+ return 0;
+}
+DM_TEST(dm_test_part, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);