Commit 480afcb1 authored by ChenXiaoSong's avatar ChenXiaoSong Committed by Steve French
Browse files

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: default avatarDavid Howells <dhowells@redhat.com>
Signed-off-by: default avatarChenXiaoSong <chenxiaosong@kylinos.cn>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 75563adb
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -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.
+8 −0
Original line number Diff line number Diff line
@@ -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 */
+45 −0
Original line number Diff line number Diff line
// 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");