From 0c730ea49928beabf00183f74a83532a829aea5d Mon Sep 17 00:00:00 2001
From: Developer <developer@example.com>
Date: Fri, 27 Sep 2024 21:09:07 +0000
Subject: [PATCH 1/2] Create an example KUnit test

Following the "Writing Your First Test" guide from the KUnit
documentation, adds an example driver and KUnit test to drivers/misc.

Link: https://docs.kernel.org/dev-tools/kunit/start.html#writing-your-first-test
Test: tools/testing/kunit/kunit.py run --kunitconfig drivers/misc
Change-Id: I2f9570b7815bb600e83b1871852454c29ac42e0a
Signed-off-by: Developer <developer@example.com>
---
 drivers/misc/.kunitconfig                    |  4 +++
 drivers/misc/Kconfig                         |  8 +++++
 drivers/misc/Makefile                        |  2 ++
 drivers/misc/example.c                       | 13 +++++++
 drivers/misc/example.h                       |  5 +++
 drivers/misc/example_test.c                  | 37 ++++++++++++++++++++
 tools/testing/kunit/configs/all_tests.config |  2 ++
 7 files changed, 71 insertions(+)
 create mode 100644 drivers/misc/.kunitconfig
 create mode 100644 drivers/misc/example.c
 create mode 100644 drivers/misc/example.h
 create mode 100644 drivers/misc/example_test.c

diff --git a/drivers/misc/.kunitconfig b/drivers/misc/.kunitconfig
new file mode 100644
index 000000000000..beaba9037670
--- /dev/null
+++ b/drivers/misc/.kunitconfig
@@ -0,0 +1,4 @@
+CONFIG_KUNIT=y
+CONFIG_MISC_EXAMPLE=y
+CONFIG_MISC_EXAMPLE_TEST=y
+
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index d118aeeb1049..4af45d56cb04 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -5,6 +5,14 @@

 menu "Misc devices"

+config MISC_EXAMPLE
+	bool "My example"
+
+config MISC_EXAMPLE_TEST
+	tristate "Test for my example" if !KUNIT_ALL_TESTS
+	depends on MISC_EXAMPLE && KUNIT
+	default KUNIT_ALL_TESTS
+
 config SENSORS_LIS3LV02D
 	tristate
 	depends on INPUT
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index 35c790e23072..c0bdb54f3af8 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -3,6 +3,8 @@
 # Makefile for misc devices that really don't fit anywhere else.
 #

+obj-$(CONFIG_MISC_EXAMPLE)	+= example.o
+obj-$(CONFIG_MISC_EXAMPLE_TEST)	+= example_test.o
 obj-$(CONFIG_IBM_ASM)		+= ibmasm/
 obj-$(CONFIG_IBMVMC)		+= ibmvmc.o
 obj-$(CONFIG_AD525X_DPOT)	+= ad525x_dpot.o
diff --git a/drivers/misc/example.c b/drivers/misc/example.c
new file mode 100644
index 000000000000..75a1d8984f7c
--- /dev/null
+++ b/drivers/misc/example.c
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2025 Google LLC.
+ */
+#include <linux/module.h>
+
+#include "example.h"
+
+int misc_example_add(int left, int right)
+{
+   return left + right;
+}
+EXPORT_SYMBOL_GPL(misc_example_add);
diff --git a/drivers/misc/example.h b/drivers/misc/example.h
new file mode 100644
index 000000000000..698a31ac54cd
--- /dev/null
+++ b/drivers/misc/example.h
@@ -0,0 +1,5 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2025 Google LLC.
+ */
+int misc_example_add(int left, int right);
diff --git a/drivers/misc/example_test.c b/drivers/misc/example_test.c
new file mode 100644
index 000000000000..77ffcb863ccc
--- /dev/null
+++ b/drivers/misc/example_test.c
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2025 Google LLC.
+ */
+#include <kunit/test.h>
+#include "example.h"
+
+/* Define the test cases. */
+
+static void misc_example_add_test_basic(struct kunit *test)
+{
+   KUNIT_EXPECT_EQ(test, 1, misc_example_add(1, 0));
+   KUNIT_EXPECT_EQ(test, 2, misc_example_add(1, 1));
+   KUNIT_EXPECT_EQ(test, 0, misc_example_add(-1, 1));
+   KUNIT_EXPECT_EQ(test, INT_MAX, misc_example_add(0, INT_MAX));
+   KUNIT_EXPECT_EQ(test, -1, misc_example_add(INT_MAX, INT_MIN));
+}
+
+static void misc_example_test_failure(struct kunit *test)
+{
+   KUNIT_FAIL(test, "This test never passes.");
+}
+
+static struct kunit_case misc_example_test_cases[] = {
+   KUNIT_CASE(misc_example_add_test_basic),
+   KUNIT_CASE(misc_example_test_failure),
+   {}
+};
+
+static struct kunit_suite misc_example_test_suite = {
+   .name = "misc-example",
+   .test_cases = misc_example_test_cases,
+};
+kunit_test_suite(misc_example_test_suite);
+
+MODULE_DESCRIPTION("KUnit test for misc_example_add");
+MODULE_LICENSE("GPL");
diff --git a/tools/testing/kunit/configs/all_tests.config b/tools/testing/kunit/configs/all_tests.config
index 422e186cf3cf..08b31354ce97 100644
--- a/tools/testing/kunit/configs/all_tests.config
+++ b/tools/testing/kunit/configs/all_tests.config
@@ -29,6 +29,8 @@ CONFIG_MCTP_FLOWS=y
 CONFIG_INET=y
 CONFIG_MPTCP=y

+CONFIG_MISC_EXAMPLE=y
+
 CONFIG_NETDEVICES=y
 CONFIG_WLAN=y
 CONFIG_CFG80211=y
