summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChenXiaoSong <chenxiaosong@kylinos.cn>2026-01-18 17:13:13 +0800
committerSteve French <stfrench@microsoft.com>2026-02-08 21:24:41 -0600
commit480afcb19b61385dfe64840d87c355293a5fa698 (patch)
treebd4eee057a12ae063326612d3a64086872112c2d
parent75563adbb91d9d199b33f8b9a2fe4e9cafea6a69 (diff)
smb/client: introduce KUnit test to check search result of smb2_error_map_table
The KUnit test are executed when cifs.ko is loaded. Just like `fs/ext4/mballoc.c` includes `fs/ext4/mballoc-test.c`. `smb2maperror.c` also includes `smb2maperror_test.c`, allowing KUnit tests to access any functions and variables in `smb2maperror.c`. The maperror_test_check_search() checks whether all elements can be correctly found in the array. Suggested-by: David Howells <dhowells@redhat.com> Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn> Signed-off-by: Steve French <stfrench@microsoft.com>
-rw-r--r--fs/smb/Kconfig17
-rw-r--r--fs/smb/client/smb2maperror.c8
-rw-r--r--fs/smb/client/smb2maperror_test.c45
3 files changed, 70 insertions, 0 deletions
diff --git a/fs/smb/Kconfig b/fs/smb/Kconfig
index ef425789fa6a..85f7ad5fbc5e 100644
--- a/fs/smb/Kconfig
+++ b/fs/smb/Kconfig
@@ -9,3 +9,20 @@ config SMBFS
tristate
default y if CIFS=y || SMB_SERVER=y
default m if CIFS=m || SMB_SERVER=m
+
+config SMB_KUNIT_TESTS
+ tristate "KUnit tests for SMB" if !KUNIT_ALL_TESTS
+ depends on SMBFS && KUNIT
+ default KUNIT_ALL_TESTS
+ help
+ This builds the SMB KUnit tests.
+
+ KUnit tests run during boot and output the results to the debug log
+ in TAP format (https://testanything.org/). Only useful for kernel devs
+ running KUnit test harness and are not for inclusion into a production
+ build.
+
+ 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/fs/smb/client/smb2maperror.c b/fs/smb/client/smb2maperror.c
index 090bbd10623d..cd036365201f 100644
--- a/fs/smb/client/smb2maperror.c
+++ b/fs/smb/client/smb2maperror.c
@@ -114,3 +114,11 @@ int __init smb2_init_maperror(void)
return 0;
}
+
+#define SMB_CLIENT_KUNIT_AVAILABLE \
+ ((IS_MODULE(CONFIG_CIFS) && IS_ENABLED(CONFIG_KUNIT)) || \
+ (IS_BUILTIN(CONFIG_CIFS) && IS_BUILTIN(CONFIG_KUNIT)))
+
+#if SMB_CLIENT_KUNIT_AVAILABLE && IS_ENABLED(CONFIG_SMB_KUNIT_TESTS)
+#include "smb2maperror_test.c"
+#endif /* CONFIG_SMB_KUNIT_TESTS */
diff --git a/fs/smb/client/smb2maperror_test.c b/fs/smb/client/smb2maperror_test.c
new file mode 100644
index 000000000000..38ea6b846a99
--- /dev/null
+++ b/fs/smb/client/smb2maperror_test.c
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: LGPL-2.1
+/*
+ *
+ * KUnit tests of SMB2 maperror
+ *
+ * Copyright (C) 2025 KylinSoft Co., Ltd. All rights reserved.
+ * Author(s): ChenXiaoSong <chenxiaosong@kylinos.cn>
+ *
+ */
+
+#include <kunit/test.h>
+
+static void
+test_cmp_map(struct kunit *test, const struct status_to_posix_error *expect)
+{
+ const struct status_to_posix_error *result;
+
+ result = smb2_get_err_map(expect->smb2_status);
+ KUNIT_EXPECT_PTR_NE(test, NULL, result);
+ KUNIT_EXPECT_EQ(test, expect->smb2_status, result->smb2_status);
+ KUNIT_EXPECT_EQ(test, expect->posix_error, result->posix_error);
+ KUNIT_EXPECT_STREQ(test, expect->status_string, result->status_string);
+}
+
+static void maperror_test_check_search(struct kunit *test)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(smb2_error_map_table); i++)
+ test_cmp_map(test, &smb2_error_map_table[i]);
+}
+
+static struct kunit_case maperror_test_cases[] = {
+ KUNIT_CASE(maperror_test_check_search),
+ {}
+};
+
+static struct kunit_suite maperror_suite = {
+ .name = "smb2_maperror",
+ .test_cases = maperror_test_cases,
+};
+
+kunit_test_suite(maperror_suite);
+
+MODULE_LICENSE("GPL");