Converts test lib/test_uuid.c to KUnit.
More information about KUnit can be found at
https://www.kernel.org/doc/html/latest/dev-tools/kunit/index.html.
This change is beneficial as KUnit provides a common framework for
unit tests in the kernel. KUnit is fast as well.

Signed-off-by: Arpitha Raghunandan <98.a...@gmail.com>
---
Changes v1->v2:
- Add a more detailed commit message

 lib/Kconfig.debug                 |  7 +--
 lib/Makefile                      |  2 +-
 lib/{test_uuid.c => uuid_kunit.c} | 84 +++++++++----------------------
 3 files changed, 28 insertions(+), 65 deletions(-)
 rename lib/{test_uuid.c => uuid_kunit.c} (48%)

diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index f174f8887ae7..330c0d1de50b 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -2070,9 +2070,6 @@ config TEST_BITFIELD
 
          If unsure, say N.
 
-config TEST_UUID
-       tristate "Test functions located in the uuid module at runtime"
-
 config TEST_XARRAY
        tristate "Test the XArray code at runtime"
 
@@ -2273,6 +2270,10 @@ config BITS_TEST
 
          If unsure, say N.
 
+config UUID_KUNIT_TEST
+       tristate "KUnit test for functions located in the uuid module at 
runtime"
+       depends on KUNIT
+
 config TEST_UDELAY
        tristate "udelay test driver"
        help
diff --git a/lib/Makefile b/lib/Makefile
index 032cc6c71a3a..62ef383c7563 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -81,7 +81,6 @@ obj-$(CONFIG_TEST_PRINTF) += test_printf.o
 obj-$(CONFIG_TEST_BITMAP) += test_bitmap.o
 obj-$(CONFIG_TEST_STRSCPY) += test_strscpy.o
 obj-$(CONFIG_TEST_BITFIELD) += test_bitfield.o
-obj-$(CONFIG_TEST_UUID) += test_uuid.o
 obj-$(CONFIG_TEST_XARRAY) += test_xarray.o
 obj-$(CONFIG_TEST_PARMAN) += test_parman.o
 obj-$(CONFIG_TEST_KMOD) += test_kmod.o
@@ -342,5 +341,6 @@ obj-$(CONFIG_PLDMFW) += pldmfw/
 obj-$(CONFIG_LIST_KUNIT_TEST) += list-test.o
 obj-$(CONFIG_LINEAR_RANGES_TEST) += test_linear_ranges.o
 obj-$(CONFIG_BITS_TEST) += test_bits.o
+obj-$(CONFIG_UUID_KUNIT_TEST) += uuid_kunit.o
 
 obj-$(CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED) += devmem_is_allowed.o
diff --git a/lib/test_uuid.c b/lib/uuid_kunit.c
similarity index 48%
rename from lib/test_uuid.c
rename to lib/uuid_kunit.c
index cd819c397dc7..f7f219ddecc2 100644
--- a/lib/test_uuid.c
+++ b/lib/uuid_kunit.c
@@ -3,6 +3,7 @@
  */
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#include <kunit/test.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
@@ -39,95 +40,56 @@ static const char * const test_uuid_wrong_data[] = {
        "0cb4ddff-a545-4401-9d06-688af53e",     /* not enough data */
 };
 
-static unsigned total_tests __initdata;
-static unsigned failed_tests __initdata;
-
-static void __init test_uuid_failed(const char *prefix, bool wrong, bool be,
-                                   const char *data, const char *actual)
-{
-       pr_err("%s test #%u %s %s data: '%s'\n",
-              prefix,
-              total_tests,
-              wrong ? "passed on wrong" : "failed on",
-              be ? "BE" : "LE",
-              data);
-       if (actual && *actual)
-               pr_err("%s test #%u actual data: '%s'\n",
-                      prefix,
-                      total_tests,
-                      actual);
-       failed_tests++;
-}
-
-static void __init test_uuid_test(const struct test_uuid_data *data)
+static void test_uuid_test(struct kunit *test, const struct test_uuid_data 
*data)
 {
        guid_t le;
        uuid_t be;
        char buf[48];
 
        /* LE */
-       total_tests++;
-       if (guid_parse(data->uuid, &le))
-               test_uuid_failed("conversion", false, false, data->uuid, NULL);
-
-       total_tests++;
-       if (!guid_equal(&data->le, &le)) {
-               sprintf(buf, "%pUl", &le);
-               test_uuid_failed("cmp", false, false, data->uuid, buf);
-       }
+       KUNIT_EXPECT_EQ(test, 0, guid_parse(data->uuid, &le));
+       KUNIT_EXPECT_TRUE(test, guid_equal(&data->le, &le));
 
        /* BE */
-       total_tests++;
-       if (uuid_parse(data->uuid, &be))
-               test_uuid_failed("conversion", false, true, data->uuid, NULL);
-
-       total_tests++;
-       if (!uuid_equal(&data->be, &be)) {
-               sprintf(buf, "%pUb", &be);
-               test_uuid_failed("cmp", false, true, data->uuid, buf);
-       }
+       KUNIT_EXPECT_EQ(test, 0, uuid_parse(data->uuid, &be));
+       KUNIT_EXPECT_TRUE(test, uuid_equal(&data->be, &be));
 }
 
-static void __init test_uuid_wrong(const char *data)
+static void test_uuid_wrong(struct kunit *test, const char *data)
 {
        guid_t le;
        uuid_t be;
 
        /* LE */
-       total_tests++;
-       if (!guid_parse(data, &le))
-               test_uuid_failed("negative", true, false, data, NULL);
+       KUNIT_EXPECT_NE(test, 0, guid_parse(data, &le));
 
        /* BE */
-       total_tests++;
-       if (!uuid_parse(data, &be))
-               test_uuid_failed("negative", true, true, data, NULL);
+       KUNIT_EXPECT_NE(test, 0, uuid_parse(data, &be));
 }
 
-static int __init test_uuid_init(void)
+static void test_uuid_init(struct kunit *test)
 {
        unsigned int i;
 
        for (i = 0; i < ARRAY_SIZE(test_uuid_test_data); i++)
-               test_uuid_test(&test_uuid_test_data[i]);
+               test_uuid_test(test, &test_uuid_test_data[i]);
 
        for (i = 0; i < ARRAY_SIZE(test_uuid_wrong_data); i++)
-               test_uuid_wrong(test_uuid_wrong_data[i]);
+               test_uuid_wrong(test, test_uuid_wrong_data[i]);
+}
 
-       if (failed_tests == 0)
-               pr_info("all %u tests passed\n", total_tests);
-       else
-               pr_err("failed %u out of %u tests\n", failed_tests, 
total_tests);
+static struct kunit_case uuid_test_cases[] = {
+       KUNIT_CASE(test_uuid_init),
+       {}
+};
 
-       return failed_tests ? -EINVAL : 0;
-}
-module_init(test_uuid_init);
+static struct kunit_suite uuid_test_suite = {
+       .name = "uuid-kunit-test",
+       .test_cases = uuid_test_cases,
+};
+
+kunit_test_suite(uuid_test_suite);
 
-static void __exit test_uuid_exit(void)
-{
-       /* do nothing */
-}
-module_exit(test_uuid_exit);
 
 MODULE_AUTHOR("Andy Shevchenko <andriy.shevche...@linux.intel.com>");
 MODULE_LICENSE("Dual BSD/GPL");
-- 
2.25.1

Reply via email to