mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
Extend the 'part' command unit tests to include partition lookup via UUID. This ensures that the 'number', 'start', and 'size' subcommands consistently handle UUIDs as partition identifiers, maintaining parity with the name-based lookup functionality. Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> Reviewed-by: Simon Glass <sjg@chromium.org>
228 lines
5.9 KiB
C
228 lines
5.9 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Test for part command
|
|
*
|
|
* Copyright (C) 2026 Amarula Solutions
|
|
* Written by Dario Binacchi <dario.binacchi@amarulasolutions.com>
|
|
*/
|
|
|
|
#include <command.h>
|
|
#include <dm.h>
|
|
#include <env.h>
|
|
#include <part.h>
|
|
#include <vsprintf.h>
|
|
#include <dm/test.h>
|
|
#include <test/cmd.h>
|
|
#include <test/test.h>
|
|
#include <test/ut.h>
|
|
|
|
static struct disk_partition gpt_parts[] = {
|
|
{
|
|
.start = 48,
|
|
.size = 1,
|
|
.name = "test1",
|
|
.uuid = "c5bce7a2-03f0-4d03-9048-01ff23b9d527",
|
|
},
|
|
{
|
|
.start = 49,
|
|
.size = 2,
|
|
.name = "test2",
|
|
.uuid = "9df346e8-2c53-4cd8-b9ac-3af83f9a9b74",
|
|
},
|
|
};
|
|
|
|
static char disk_guid[UUID_STR_LEN + 1] =
|
|
"8d60b397-1bb6-4d33-80ee-b1587d24c2f8";
|
|
|
|
static int setup_gpt_partitions(struct unit_test_state *uts,
|
|
unsigned int mmc_dev_num)
|
|
{
|
|
struct blk_desc *mmc_dev_desc;
|
|
char dev_str[10];
|
|
int i, ret;
|
|
|
|
if (!CONFIG_IS_ENABLED(MMC))
|
|
return -EAGAIN;
|
|
|
|
snprintf(dev_str, sizeof(dev_str), "%u", mmc_dev_num);
|
|
|
|
ret = blk_get_device_by_str("mmc", dev_str, &mmc_dev_desc);
|
|
if (ret == -ENODEV)
|
|
return -EAGAIN;
|
|
|
|
ut_asserteq(mmc_dev_num, ret);
|
|
|
|
if (CONFIG_IS_ENABLED(RANDOM_UUID)) {
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++)
|
|
gen_rand_uuid_str(gpt_parts[i].uuid,
|
|
UUID_STR_FORMAT_STD);
|
|
|
|
gen_rand_uuid_str(disk_guid, UUID_STR_FORMAT_STD);
|
|
}
|
|
|
|
ut_assertok(gpt_restore(mmc_dev_desc, disk_guid, gpt_parts,
|
|
ARRAY_SIZE(gpt_parts)));
|
|
return 0;
|
|
}
|
|
|
|
static int cmd_test_part_number(struct unit_test_state *uts)
|
|
{
|
|
unsigned int mmc_dev_num = 2;
|
|
char expected[10];
|
|
int i, ret;
|
|
|
|
ret = setup_gpt_partitions(uts, mmc_dev_num);
|
|
if (ret == -EAGAIN)
|
|
return ret;
|
|
|
|
ut_assertok(ret);
|
|
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++) {
|
|
env_set("partnum", NULL);
|
|
ut_assertok(run_commandf("part number mmc %u %s partnum",
|
|
mmc_dev_num, gpt_parts[i].name));
|
|
snprintf(expected, sizeof(expected), "0x%x", i + 1);
|
|
ut_asserteq_str(expected, env_get("partnum"));
|
|
}
|
|
|
|
env_set("partnum", NULL);
|
|
ut_asserteq(1, run_commandf("part number mmc %u bogus partnum",
|
|
mmc_dev_num));
|
|
ut_assertnull(env_get("partnum"));
|
|
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++) {
|
|
env_set("partnum", NULL);
|
|
ut_assertok(run_commandf("part number mmc %u %s partnum",
|
|
mmc_dev_num, gpt_parts[i].uuid));
|
|
snprintf(expected, sizeof(expected), "0x%x", i + 1);
|
|
ut_asserteq_str(expected, env_get("partnum"));
|
|
}
|
|
|
|
env_set("partnum", NULL);
|
|
ut_asserteq(1, run_commandf("part number mmc %u %s partnum",
|
|
mmc_dev_num,
|
|
"00000000-0000-0000-0000-000000000000"));
|
|
ut_assertnull(env_get("partnum"));
|
|
|
|
return 0;
|
|
}
|
|
CMD_TEST(cmd_test_part_number, UTF_CONSOLE);
|
|
|
|
static int cmd_test_part_start(struct unit_test_state *uts)
|
|
{
|
|
unsigned int mmc_dev_num = 2;
|
|
char expected[32];
|
|
int i, ret;
|
|
|
|
ret = setup_gpt_partitions(uts, mmc_dev_num);
|
|
if (ret == -EAGAIN)
|
|
return ret;
|
|
|
|
ut_assertok(ret);
|
|
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++) {
|
|
env_set("partstart", NULL);
|
|
ut_assertok(run_commandf("part start mmc %u %d partstart",
|
|
mmc_dev_num, i + 1));
|
|
snprintf(expected, sizeof(expected), "%lx",
|
|
(unsigned long)gpt_parts[i].start);
|
|
ut_asserteq_str(expected, env_get("partstart"));
|
|
}
|
|
|
|
env_set("partstart", NULL);
|
|
ut_asserteq(1, run_commandf("part start mmc %u 3 partstart",
|
|
mmc_dev_num));
|
|
ut_assertnull(env_get("partstart"));
|
|
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++) {
|
|
env_set("partstart", NULL);
|
|
ut_assertok(run_commandf("part start mmc %u %s partstart",
|
|
mmc_dev_num, gpt_parts[i].name));
|
|
snprintf(expected, sizeof(expected), "%lx",
|
|
(unsigned long)gpt_parts[i].start);
|
|
ut_asserteq_str(expected, env_get("partstart"));
|
|
}
|
|
|
|
env_set("partstart", NULL);
|
|
ut_asserteq(1, run_commandf("part start mmc %u bogus partstart",
|
|
mmc_dev_num));
|
|
ut_assertnull(env_get("partstart"));
|
|
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++) {
|
|
env_set("partstart", NULL);
|
|
ut_assertok(run_commandf("part start mmc %u %s partstart",
|
|
mmc_dev_num, gpt_parts[i].uuid));
|
|
snprintf(expected, sizeof(expected), "%lx",
|
|
(unsigned long)gpt_parts[i].start);
|
|
ut_asserteq_str(expected, env_get("partstart"));
|
|
}
|
|
|
|
env_set("partstart", NULL);
|
|
ut_asserteq(1, run_commandf("part start mmc %u %s partstart",
|
|
mmc_dev_num,
|
|
"00000000-0000-0000-0000-000000000000"));
|
|
ut_assertnull(env_get("partstart"));
|
|
|
|
return 0;
|
|
}
|
|
CMD_TEST(cmd_test_part_start, UTF_CONSOLE);
|
|
|
|
static int cmd_test_part_size(struct unit_test_state *uts)
|
|
{
|
|
unsigned int mmc_dev_num = 2;
|
|
char expected[32];
|
|
int i, ret;
|
|
|
|
ret = setup_gpt_partitions(uts, mmc_dev_num);
|
|
if (ret == -EAGAIN)
|
|
return ret;
|
|
|
|
ut_assertok(ret);
|
|
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++) {
|
|
env_set("partsize", NULL);
|
|
ut_assertok(run_commandf("part size mmc %u %d partsize",
|
|
mmc_dev_num, i + 1));
|
|
snprintf(expected, sizeof(expected), "%lx",
|
|
(unsigned long)gpt_parts[i].size);
|
|
ut_asserteq_str(expected, env_get("partsize"));
|
|
}
|
|
|
|
env_set("partsize", NULL);
|
|
ut_asserteq(1, run_commandf("part size mmc %u 3 partsize",
|
|
mmc_dev_num));
|
|
ut_assertnull(env_get("partsize"));
|
|
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++) {
|
|
env_set("partsize", NULL);
|
|
ut_assertok(run_commandf("part size mmc %u %s partsize",
|
|
mmc_dev_num, gpt_parts[i].name));
|
|
snprintf(expected, sizeof(expected), "%lx",
|
|
(unsigned long)gpt_parts[i].size);
|
|
ut_asserteq_str(expected, env_get("partsize"));
|
|
}
|
|
|
|
env_set("partsize", NULL);
|
|
ut_asserteq(1, run_commandf("part size mmc %u bogus partsize",
|
|
mmc_dev_num));
|
|
ut_assertnull(env_get("partsize"));
|
|
|
|
for (i = 0; i < ARRAY_SIZE(gpt_parts); i++) {
|
|
env_set("partsize", NULL);
|
|
ut_assertok(run_commandf("part size mmc %u %s partsize",
|
|
mmc_dev_num, gpt_parts[i].uuid));
|
|
snprintf(expected, sizeof(expected), "%lx",
|
|
(unsigned long)gpt_parts[i].size);
|
|
ut_asserteq_str(expected, env_get("partsize"));
|
|
}
|
|
|
|
env_set("partsize", NULL);
|
|
ut_asserteq(1, run_commandf("part size mmc %u %s partsize",
|
|
mmc_dev_num,
|
|
"00000000-0000-0000-0000-000000000000"));
|
|
ut_assertnull(env_get("partsize"));
|
|
|
|
return 0;
|
|
}
|
|
CMD_TEST(cmd_test_part_size, UTF_CONSOLE);
|