Message ID | 20240719-b4-dynamic-uuid-v5-10-8a83de3fe3dc@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | efi: CapsuleUpdate: support for dynamic UUIDs | expand |
On Fri, 19 Jul 2024 at 15:43, Caleb Connolly <caleb.connolly@linaro.org> wrote: > > 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. > > Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org> > --- > test/lib/uuid.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 82 insertions(+) > > diff --git a/test/lib/uuid.c b/test/lib/uuid.c > index 9629d378c329..2c6cfd42ddc3 100644 > --- a/test/lib/uuid.c > +++ b/test/lib/uuid.c > @@ -7,15 +7,20 @@ > * 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) */ > @@ -37,4 +42,81 @@ 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); > + > > -- > 2.45.2 > Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
diff --git a/test/lib/uuid.c b/test/lib/uuid.c index 9629d378c329..2c6cfd42ddc3 100644 --- a/test/lib/uuid.c +++ b/test/lib/uuid.c @@ -7,15 +7,20 @@ * 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) */ @@ -37,4 +42,81 @@ 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); +
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. Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org> --- test/lib/uuid.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+)