diff mbox series

[v7,11/11] test: lib/uuid: add tests for UUID version/variant bits

Message ID 20240809-b4-dynamic-uuid-v7-11-8c44ab1f06a5@linaro.org
State Superseded
Headers show
Series efi: CapsuleUpdate: support for dynamic UUIDs | expand

Commit Message

Caleb Connolly Aug. 9, 2024, 12:56 a.m. UTC
Add a test to check the version/variant bits of v4 and v5 UUIDs.

Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
---
 test/lib/uuid.c | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

Comments

Ilias Apalodimas Aug. 26, 2024, 2:37 p.m. UTC | #1
On Fri, 9 Aug 2024 at 03:56, Caleb Connolly <caleb.connolly@linaro.org> wrote:
>
> Add a test to check the version/variant bits of v4 and v5 UUIDs.
>
> Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
> ---
>  test/lib/uuid.c | 38 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
>
> diff --git a/test/lib/uuid.c b/test/lib/uuid.c
> index 2c6cfd42ddc3..bbaf821f007d 100644
> --- a/test/lib/uuid.c
> +++ b/test/lib/uuid.c
> @@ -43,8 +43,46 @@ static int lib_test_uuid_to_le(struct unit_test_state *uts)
>  }
>
>  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);
> +
> +               ut_assert((uuid[6] & 0xf0) == 0x40); /* version 4 */
> +               ut_assert((uuid[8] & UUID_VARIANT_MASK) == (UUID_VARIANT << UUID_VARIANT_SHIFT)); /* variant 1 */
> +
> +               /* 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) */
> +               ut_assert((guid.b[7] & 0xf0) == 0x50); /* version 5 */
> +               ut_assert((guid.b[8] & UUID_VARIANT_MASK) == (UUID_VARIANT << UUID_VARIANT_SHIFT)); /* variant 1 */
> +       }
> +
> +       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];
>
> --
> 2.46.0
>

Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
diff mbox series

Patch

diff --git a/test/lib/uuid.c b/test/lib/uuid.c
index 2c6cfd42ddc3..bbaf821f007d 100644
--- a/test/lib/uuid.c
+++ b/test/lib/uuid.c
@@ -43,8 +43,46 @@  static int lib_test_uuid_to_le(struct unit_test_state *uts)
 }
 
 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);
+
+		ut_assert((uuid[6] & 0xf0) == 0x40); /* version 4 */
+		ut_assert((uuid[8] & UUID_VARIANT_MASK) == (UUID_VARIANT << UUID_VARIANT_SHIFT)); /* variant 1 */
+
+		/* 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) */
+		ut_assert((guid.b[7] & 0xf0) == 0x50); /* version 5 */
+		ut_assert((guid.b[8] & UUID_VARIANT_MASK) == (UUID_VARIANT << UUID_VARIANT_SHIFT)); /* variant 1 */
+	}
+
+	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];