test: lib/uuid: add unit tests for dynamic UUIDs

Add some basic unit tests to validate that the UUID generation behaves
as expected. This matches the implementation in efi_loader for sandbox
and a Qualcomm board and should catch any regressions.

Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
This commit is contained in:
Caleb Connolly 2024-08-30 13:34:40 +01:00 committed by Heinrich Schuchardt
parent 7558385e48
commit 26e16a850e

View File

@ -8,13 +8,18 @@
* Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
*/
#include <charset.h>
#include <u-boot/uuid.h>
#include <test/lib.h>
#include <test/test.h>
#include <test/ut.h>
#include <efi.h>
/* test UUID */
#define TEST_SVC_UUID "ed32d533-4209-99e6-2d72-cdd998a79cc0"
/* U-Boot default fw image namespace */
#define DEFAULT_FW_IMAGE_NAMESPACE "8c9f137e-91dc-427b-b2d6-b420faebaf2a"
#define UUID_SIZE 16
@ -37,3 +42,79 @@ static int lib_test_uuid_to_le(struct unit_test_state *uts)
return 0;
}
LIB_TEST(lib_test_uuid_to_le, 0);
struct dynamic_uuid_test_data {
const char *compatible;
const u16 *images[4];
const char *expected_uuids[4];
};
static int lib_test_dynamic_uuid_case(struct unit_test_state *uts,
const struct dynamic_uuid_test_data *data)
{
struct uuid namespace;
int j;
ut_assertok(uuid_str_to_bin(DEFAULT_FW_IMAGE_NAMESPACE, (unsigned char *)&namespace,
UUID_STR_FORMAT_GUID));
for (j = 0; data->images[j]; j++) {
const char *expected_uuid = data->expected_uuids[j];
const u16 *image = data->images[j];
efi_guid_t uuid;
char uuid_str[37];
gen_v5_guid(&namespace, &uuid,
data->compatible, strlen(data->compatible),
image, u16_strlen(image) * sizeof(uint16_t),
NULL);
uuid_bin_to_str((unsigned char *)&uuid, uuid_str, UUID_STR_FORMAT_GUID);
ut_asserteq_str(expected_uuid, uuid_str);
}
return 0;
}
static int lib_test_dynamic_uuid(struct unit_test_state *uts)
{
int ret, i;
const struct dynamic_uuid_test_data test_data[] = {
{
.compatible = "sandbox",
.images = {
u"SANDBOX-UBOOT",
u"SANDBOX-UBOOT-ENV",
u"SANDBOX-FIT",
NULL,
},
.expected_uuids = {
"985f2937-7c2e-5e9a-8a5e-8e063312964b",
"9e339473-c2eb-530a-a69b-0cd6bbbed40e",
"46610520-469e-59dc-a8dd-c11832b877ea",
NULL,
}
},
{
.compatible = "qcom,qrb4210-rb2",
.images = {
u"QUALCOMM-UBOOT",
NULL,
},
.expected_uuids = {
"d5021fac-8dd0-5ed7-90c2-763c304aaf86",
NULL,
}
},
};
for (i = 0; i < ARRAY_SIZE(test_data); i++) {
ret = lib_test_dynamic_uuid_case(uts, &test_data[i]);
if (ret)
return ret;
}
return 0;
}
LIB_TEST(lib_test_dynamic_uuid, 0);