1*6dcd539fSRyota Sakamoto // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 2*6dcd539fSRyota Sakamoto /* 3*6dcd539fSRyota Sakamoto * Test cases for lib/uuid.c module. 4*6dcd539fSRyota Sakamoto */ 5*6dcd539fSRyota Sakamoto 6*6dcd539fSRyota Sakamoto #include <kunit/test.h> 7*6dcd539fSRyota Sakamoto #include <linux/uuid.h> 8*6dcd539fSRyota Sakamoto 9*6dcd539fSRyota Sakamoto struct test_uuid_data { 10*6dcd539fSRyota Sakamoto const char *uuid; 11*6dcd539fSRyota Sakamoto guid_t le; 12*6dcd539fSRyota Sakamoto uuid_t be; 13*6dcd539fSRyota Sakamoto }; 14*6dcd539fSRyota Sakamoto 15*6dcd539fSRyota Sakamoto static const struct test_uuid_data test_uuid_test_data[] = { 16*6dcd539fSRyota Sakamoto { 17*6dcd539fSRyota Sakamoto .uuid = "c33f4995-3701-450e-9fbf-206a2e98e576", 18*6dcd539fSRyota Sakamoto .le = GUID_INIT(0xc33f4995, 0x3701, 0x450e, 0x9f, 0xbf, 0x20, 0x6a, 0x2e, 0x98, 0xe5, 0x76), 19*6dcd539fSRyota Sakamoto .be = UUID_INIT(0xc33f4995, 0x3701, 0x450e, 0x9f, 0xbf, 0x20, 0x6a, 0x2e, 0x98, 0xe5, 0x76), 20*6dcd539fSRyota Sakamoto }, 21*6dcd539fSRyota Sakamoto { 22*6dcd539fSRyota Sakamoto .uuid = "64b4371c-77c1-48f9-8221-29f054fc023b", 23*6dcd539fSRyota Sakamoto .le = GUID_INIT(0x64b4371c, 0x77c1, 0x48f9, 0x82, 0x21, 0x29, 0xf0, 0x54, 0xfc, 0x02, 0x3b), 24*6dcd539fSRyota Sakamoto .be = UUID_INIT(0x64b4371c, 0x77c1, 0x48f9, 0x82, 0x21, 0x29, 0xf0, 0x54, 0xfc, 0x02, 0x3b), 25*6dcd539fSRyota Sakamoto }, 26*6dcd539fSRyota Sakamoto { 27*6dcd539fSRyota Sakamoto .uuid = "0cb4ddff-a545-4401-9d06-688af53e7f84", 28*6dcd539fSRyota Sakamoto .le = GUID_INIT(0x0cb4ddff, 0xa545, 0x4401, 0x9d, 0x06, 0x68, 0x8a, 0xf5, 0x3e, 0x7f, 0x84), 29*6dcd539fSRyota Sakamoto .be = UUID_INIT(0x0cb4ddff, 0xa545, 0x4401, 0x9d, 0x06, 0x68, 0x8a, 0xf5, 0x3e, 0x7f, 0x84), 30*6dcd539fSRyota Sakamoto }, 31*6dcd539fSRyota Sakamoto }; 32*6dcd539fSRyota Sakamoto 33*6dcd539fSRyota Sakamoto static const char * const test_uuid_wrong_data[] = { 34*6dcd539fSRyota Sakamoto "c33f4995-3701-450e-9fbf206a2e98e576 ", /* no hyphen(s) */ 35*6dcd539fSRyota Sakamoto "64b4371c-77c1-48f9-8221-29f054XX023b", /* invalid character(s) */ 36*6dcd539fSRyota Sakamoto "0cb4ddff-a545-4401-9d06-688af53e", /* not enough data */ 37*6dcd539fSRyota Sakamoto }; 38*6dcd539fSRyota Sakamoto 39*6dcd539fSRyota Sakamoto static void uuid_test_guid_valid(struct kunit *test) 40*6dcd539fSRyota Sakamoto { 41*6dcd539fSRyota Sakamoto unsigned int i; 42*6dcd539fSRyota Sakamoto const struct test_uuid_data *data; 43*6dcd539fSRyota Sakamoto guid_t le; 44*6dcd539fSRyota Sakamoto 45*6dcd539fSRyota Sakamoto for (i = 0; i < ARRAY_SIZE(test_uuid_test_data); i++) { 46*6dcd539fSRyota Sakamoto data = &test_uuid_test_data[i]; 47*6dcd539fSRyota Sakamoto KUNIT_EXPECT_EQ(test, guid_parse(data->uuid, &le), 0); 48*6dcd539fSRyota Sakamoto KUNIT_EXPECT_TRUE(test, guid_equal(&data->le, &le)); 49*6dcd539fSRyota Sakamoto } 50*6dcd539fSRyota Sakamoto } 51*6dcd539fSRyota Sakamoto 52*6dcd539fSRyota Sakamoto static void uuid_test_uuid_valid(struct kunit *test) 53*6dcd539fSRyota Sakamoto { 54*6dcd539fSRyota Sakamoto unsigned int i; 55*6dcd539fSRyota Sakamoto const struct test_uuid_data *data; 56*6dcd539fSRyota Sakamoto uuid_t be; 57*6dcd539fSRyota Sakamoto 58*6dcd539fSRyota Sakamoto for (i = 0; i < ARRAY_SIZE(test_uuid_test_data); i++) { 59*6dcd539fSRyota Sakamoto data = &test_uuid_test_data[i]; 60*6dcd539fSRyota Sakamoto KUNIT_EXPECT_EQ(test, uuid_parse(data->uuid, &be), 0); 61*6dcd539fSRyota Sakamoto KUNIT_EXPECT_TRUE(test, uuid_equal(&data->be, &be)); 62*6dcd539fSRyota Sakamoto } 63*6dcd539fSRyota Sakamoto } 64*6dcd539fSRyota Sakamoto 65*6dcd539fSRyota Sakamoto static void uuid_test_guid_invalid(struct kunit *test) 66*6dcd539fSRyota Sakamoto { 67*6dcd539fSRyota Sakamoto unsigned int i; 68*6dcd539fSRyota Sakamoto const char *uuid; 69*6dcd539fSRyota Sakamoto guid_t le; 70*6dcd539fSRyota Sakamoto 71*6dcd539fSRyota Sakamoto for (i = 0; i < ARRAY_SIZE(test_uuid_wrong_data); i++) { 72*6dcd539fSRyota Sakamoto uuid = test_uuid_wrong_data[i]; 73*6dcd539fSRyota Sakamoto KUNIT_EXPECT_EQ(test, guid_parse(uuid, &le), -EINVAL); 74*6dcd539fSRyota Sakamoto } 75*6dcd539fSRyota Sakamoto } 76*6dcd539fSRyota Sakamoto 77*6dcd539fSRyota Sakamoto static void uuid_test_uuid_invalid(struct kunit *test) 78*6dcd539fSRyota Sakamoto { 79*6dcd539fSRyota Sakamoto unsigned int i; 80*6dcd539fSRyota Sakamoto const char *uuid; 81*6dcd539fSRyota Sakamoto uuid_t be; 82*6dcd539fSRyota Sakamoto 83*6dcd539fSRyota Sakamoto for (i = 0; i < ARRAY_SIZE(test_uuid_wrong_data); i++) { 84*6dcd539fSRyota Sakamoto uuid = test_uuid_wrong_data[i]; 85*6dcd539fSRyota Sakamoto KUNIT_EXPECT_EQ(test, uuid_parse(uuid, &be), -EINVAL); 86*6dcd539fSRyota Sakamoto } 87*6dcd539fSRyota Sakamoto } 88*6dcd539fSRyota Sakamoto 89*6dcd539fSRyota Sakamoto static struct kunit_case uuid_test_cases[] = { 90*6dcd539fSRyota Sakamoto KUNIT_CASE(uuid_test_guid_valid), 91*6dcd539fSRyota Sakamoto KUNIT_CASE(uuid_test_uuid_valid), 92*6dcd539fSRyota Sakamoto KUNIT_CASE(uuid_test_guid_invalid), 93*6dcd539fSRyota Sakamoto KUNIT_CASE(uuid_test_uuid_invalid), 94*6dcd539fSRyota Sakamoto {}, 95*6dcd539fSRyota Sakamoto }; 96*6dcd539fSRyota Sakamoto 97*6dcd539fSRyota Sakamoto static struct kunit_suite uuid_test_suite = { 98*6dcd539fSRyota Sakamoto .name = "uuid", 99*6dcd539fSRyota Sakamoto .test_cases = uuid_test_cases, 100*6dcd539fSRyota Sakamoto }; 101*6dcd539fSRyota Sakamoto 102*6dcd539fSRyota Sakamoto kunit_test_suite(uuid_test_suite); 103*6dcd539fSRyota Sakamoto 104*6dcd539fSRyota Sakamoto MODULE_AUTHOR("Andy Shevchenko <andriy.shevchenko@linux.intel.com>"); 105*6dcd539fSRyota Sakamoto MODULE_DESCRIPTION("Test cases for lib/uuid.c module"); 106*6dcd539fSRyota Sakamoto MODULE_LICENSE("Dual BSD/GPL"); 107