mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-21 04:14:34 +00:00

Add a test to check the version/variant bits of v4 and v5 UUIDs. Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
161 lines
3.7 KiB
C
161 lines
3.7 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Functional tests for UCLASS_FFA class
|
|
*
|
|
* Copyright 2022-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
|
|
*
|
|
* Authors:
|
|
* 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
|
|
|
|
/* The UUID binary data (little-endian format) */
|
|
static const u8 ref_uuid_bin[UUID_SIZE] = {
|
|
0x33, 0xd5, 0x32, 0xed,
|
|
0x09, 0x42, 0xe6, 0x99,
|
|
0x72, 0x2d, 0xc0, 0x9c,
|
|
0xa7, 0x98, 0xd9, 0xcd
|
|
};
|
|
|
|
static int lib_test_uuid_to_le(struct unit_test_state *uts)
|
|
{
|
|
const char *uuid_str = TEST_SVC_UUID;
|
|
u8 ret_uuid_bin[UUID_SIZE] = {0};
|
|
|
|
ut_assertok(uuid_str_to_le_bin(uuid_str, ret_uuid_bin));
|
|
ut_asserteq_mem(ref_uuid_bin, ret_uuid_bin, UUID_SIZE);
|
|
|
|
return 0;
|
|
}
|
|
LIB_TEST(lib_test_uuid_to_le, 0);
|
|
|
|
#if defined(CONFIG_RANDOM_UUID) || defined(CONFIG_CMD_UUID)
|
|
/* Test UUID attribute bits (version, variant) */
|
|
static int lib_test_uuid_bits(struct unit_test_state *uts)
|
|
{
|
|
unsigned char uuid[16];
|
|
efi_guid_t guid;
|
|
int i;
|
|
|
|
/*
|
|
* Reduce the chance of a randomly generated UUID disguising
|
|
* a regression by testing multiple times.
|
|
*/
|
|
for (i = 0; i < 5; i++) {
|
|
/* Test UUID v4 */
|
|
gen_rand_uuid((unsigned char *)&uuid);
|
|
|
|
printf("v4 UUID: %pUb\n", (efi_guid_t *)uuid);
|
|
|
|
/* version 4 */
|
|
ut_assert((uuid[6] & 0xf0) == 0x40);
|
|
/* variant 1 */
|
|
ut_assert((uuid[8] & UUID_VARIANT_MASK) == (UUID_VARIANT << UUID_VARIANT_SHIFT));
|
|
|
|
/* Test v5, use the v4 UUID as the namespace */
|
|
gen_v5_guid((struct uuid *)uuid,
|
|
&guid, "test", 4, NULL);
|
|
|
|
printf("v5 GUID: %pUl\n", (efi_guid_t *)uuid);
|
|
|
|
/* This is a GUID so bits 6 and 7 are swapped (little endian). Version 5 */
|
|
ut_assert((guid.b[7] & 0xf0) == 0x50);
|
|
/* variant 1 */
|
|
ut_assert((guid.b[8] & UUID_VARIANT_MASK) == (UUID_VARIANT << UUID_VARIANT_SHIFT));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
LIB_TEST(lib_test_uuid_bits, 0);
|
|
#endif
|
|
|
|
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);
|