Re: [PATCH v3 4/9] platform/wmi: Add kunit test for the string conversion code

From: Armin Wolf

Date: Mon Jan 12 2026 - 13:00:04 EST


Am 12.01.26 um 17:34 schrieb Ilpo Järvinen:

On Fri, 9 Jan 2026, Armin Wolf wrote:

The string conversion frunctions provided by the WMI driver core
have no dependencies on the remaining WMI API, making them suitable
for unit tests.

Implement such a unit test using kunit. Those unit tests verify that
converting between WMI strings and UTF8 strings works as expected.
They also verify that edge cases are handled correctly.

Signed-off-by: Armin Wolf <W_Armin@xxxxxx>
---
drivers/platform/wmi/tests/Kconfig | 11 +
drivers/platform/wmi/tests/Makefile | 3 +
drivers/platform/wmi/tests/string_kunit.c | 278 ++++++++++++++++++++++
3 files changed, 292 insertions(+)
create mode 100644 drivers/platform/wmi/tests/string_kunit.c

diff --git a/drivers/platform/wmi/tests/Kconfig b/drivers/platform/wmi/tests/Kconfig
index efcbcb51c251..f7f0f3c540f5 100644
--- a/drivers/platform/wmi/tests/Kconfig
+++ b/drivers/platform/wmi/tests/Kconfig
@@ -14,3 +14,14 @@ config ACPI_WMI_MARSHALLING_KUNIT_TEST
to the KUnit documentation in Documentation/dev-tools/kunit/.
If unsure, say N.
+
+config ACPI_WMI_STRING_KUNIT_TEST
+ tristate "KUnit Test for ACPI-WMI string conversion" if !KUNIT_ALL_TESTS
+ depends on KUNIT
+ default KUNIT_ALL_TESTS
+ help
+ This builds unit tests for the ACPI-WMI string conversion code.
+ For more information on KUnit and unit tests in general, please refer
+ to the KUnit documentation in Documentation/dev-tools/kunit/.
+
+ If unsure, say N.
diff --git a/drivers/platform/wmi/tests/Makefile b/drivers/platform/wmi/tests/Makefile
index 252c3125353a..62c438e26259 100644
--- a/drivers/platform/wmi/tests/Makefile
+++ b/drivers/platform/wmi/tests/Makefile
@@ -6,3 +6,6 @@
wmi_marshalling_kunit-y := marshalling_kunit.o
obj-$(CONFIG_ACPI_WMI_MARSHALLING_KUNIT_TEST) += wmi_marshalling_kunit.o
+
+wmi_string_kunit-y := string_kunit.o
+obj-$(CONFIG_ACPI_WMI_STRING_KUNIT_TEST) += wmi_string_kunit.o
diff --git a/drivers/platform/wmi/tests/string_kunit.c b/drivers/platform/wmi/tests/string_kunit.c
new file mode 100644
index 000000000000..9aa3ffa85090
--- /dev/null
+++ b/drivers/platform/wmi/tests/string_kunit.c
@@ -0,0 +1,278 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * KUnit test for the ACPI-WMI string conversion code.
+ *
+ * Copyright (C) 2025 Armin Wolf <W_Armin@xxxxxx>
+ */
+
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/string.h>
+#include <linux/wmi.h>
+
+#include <kunit/resource.h>
+#include <kunit/test.h>
+
+#include <asm/byteorder.h>
+
+struct wmi_string_param {
+ const char *name;
+ const struct wmi_string *wmi_string;
+ /*
+ * Remember that using sizeof() on a struct wmi_string will
+ * always return a size of two bytes due to the flexible
+ * array member!
+ */
+ size_t wmi_string_length;
+ const u8 *utf8_string;
+ size_t utf8_string_length;
+};
+
+#define TEST_WMI_STRING_LENGTH 12
+
+static const struct wmi_string test_wmi_string = {
+ .length = cpu_to_le16(10),
+ .chars = {
+ cpu_to_le16(u'T'),
I've applied this to for-next and intend to keep these there but FYI these
trigger sparse errors. I don't know if they're fixable or not with
reasonable effort on kernel side.

To me it seems that sparse ignores the u-prefix signaling that the character constant
has a length of 16-bits, but good catch.

If this really is a problem then gcc would issue a warning anyway (happened when i was
using the 🐧 character which does not fit into a 16-bit character constant).

Thanks,
Armin Wolf


$ sparse --version
0.6.4 (Debian: 0.6.4-3)

--
i.