xref: /linux/fs/smb/client/smb1maperror_test.c (revision 81dc1e4d32b064ac47abc60b0acbf49b66a34d52)
1e3ac6352SYouling Tang // SPDX-License-Identifier: GPL-2.0-or-later
2e3ac6352SYouling Tang /*
3e3ac6352SYouling Tang  *
4e3ac6352SYouling Tang  *   KUnit tests of SMB1 maperror
5e3ac6352SYouling Tang  *
6e3ac6352SYouling Tang  *   Copyright (C) 2026 KylinSoft Co., Ltd. All rights reserved.
7e3ac6352SYouling Tang  *   Author(s): Youling Tang <tangyouling@kylinos.cn>
8e3ac6352SYouling Tang  *              ChenXiaoSong <chenxiaosong@kylinos.cn>
9e3ac6352SYouling Tang  *
10e3ac6352SYouling Tang  */
11e3ac6352SYouling Tang 
12e3ac6352SYouling Tang #include <kunit/test.h>
13e3ac6352SYouling Tang #include "smb1proto.h"
14e3ac6352SYouling Tang #include "nterr.h"
1585274a3bSYouling Tang #include "smberr.h"
16e3ac6352SYouling Tang 
17e3ac6352SYouling Tang #define DEFINE_CHECK_SEARCH_FUNC(__struct_name, __field,		\
18e3ac6352SYouling Tang 				 __array, __num)			\
19e3ac6352SYouling Tang static void check_search_ ## __array(struct kunit *test)		\
20e3ac6352SYouling Tang {									\
21e3ac6352SYouling Tang 	unsigned int i;							\
22e3ac6352SYouling Tang 	const struct __struct_name *expect, *result;			\
23e3ac6352SYouling Tang 									\
24e3ac6352SYouling Tang 	for (i = 0; i < __num; i++) {					\
25e3ac6352SYouling Tang 		expect = &__array ## _test[i];				\
26e3ac6352SYouling Tang 		result = search_ ## __array ## _test(expect->__field);	\
27e3ac6352SYouling Tang 		KUNIT_ASSERT_NOT_NULL(test, result);			\
28e3ac6352SYouling Tang 		test_cmp_ ## __struct_name(test, expect, result);	\
29e3ac6352SYouling Tang 	}								\
30e3ac6352SYouling Tang }
31e3ac6352SYouling Tang 
32e3ac6352SYouling Tang static void
33e3ac6352SYouling Tang test_cmp_ntstatus_to_dos_err(struct kunit *test,
34e3ac6352SYouling Tang 			     const struct ntstatus_to_dos_err *expect,
35e3ac6352SYouling Tang 			     const struct ntstatus_to_dos_err *result)
36e3ac6352SYouling Tang {
37e3ac6352SYouling Tang 	KUNIT_EXPECT_EQ(test, expect->dos_class, result->dos_class);
38e3ac6352SYouling Tang 	KUNIT_EXPECT_EQ(test, expect->dos_code, result->dos_code);
39e3ac6352SYouling Tang 	KUNIT_EXPECT_EQ(test, expect->ntstatus, result->ntstatus);
40e3ac6352SYouling Tang 	KUNIT_EXPECT_STREQ(test, expect->nt_errstr, result->nt_errstr);
41e3ac6352SYouling Tang }
42e3ac6352SYouling Tang 
4385274a3bSYouling Tang static void
4485274a3bSYouling Tang test_cmp_smb_to_posix_error(struct kunit *test,
4585274a3bSYouling Tang 			    const struct smb_to_posix_error *expect,
4685274a3bSYouling Tang 			    const struct smb_to_posix_error *result)
4785274a3bSYouling Tang {
4885274a3bSYouling Tang 	KUNIT_EXPECT_EQ(test, expect->smb_err, result->smb_err);
4985274a3bSYouling Tang 	KUNIT_EXPECT_EQ(test, expect->posix_code, result->posix_code);
5085274a3bSYouling Tang }
5185274a3bSYouling Tang 
52e3ac6352SYouling Tang /* check_search_ntstatus_to_dos_map */
53e3ac6352SYouling Tang DEFINE_CHECK_SEARCH_FUNC(ntstatus_to_dos_err, ntstatus, ntstatus_to_dos_map,
54e3ac6352SYouling Tang 			 ntstatus_to_dos_num);
5585274a3bSYouling Tang /* check_search_mapping_table_ERRDOS */
5685274a3bSYouling Tang DEFINE_CHECK_SEARCH_FUNC(smb_to_posix_error, smb_err, mapping_table_ERRDOS,
5785274a3bSYouling Tang 			 mapping_table_ERRDOS_num);
5885274a3bSYouling Tang /* check_search_mapping_table_ERRSRV */
5985274a3bSYouling Tang DEFINE_CHECK_SEARCH_FUNC(smb_to_posix_error, smb_err, mapping_table_ERRSRV,
6085274a3bSYouling Tang 			 mapping_table_ERRSRV_num);
61e3ac6352SYouling Tang 
62e3ac6352SYouling Tang static struct kunit_case maperror_test_cases[] = {
63e3ac6352SYouling Tang 	KUNIT_CASE(check_search_ntstatus_to_dos_map),
6485274a3bSYouling Tang 	KUNIT_CASE(check_search_mapping_table_ERRDOS),
6585274a3bSYouling Tang 	KUNIT_CASE(check_search_mapping_table_ERRSRV),
66e3ac6352SYouling Tang 	{}
67e3ac6352SYouling Tang };
68e3ac6352SYouling Tang 
69e3ac6352SYouling Tang static struct kunit_suite maperror_suite = {
70e3ac6352SYouling Tang 	.name = "smb1_maperror",
71e3ac6352SYouling Tang 	.test_cases = maperror_test_cases,
72e3ac6352SYouling Tang };
73e3ac6352SYouling Tang 
74e3ac6352SYouling Tang kunit_test_suite(maperror_suite);
75e3ac6352SYouling Tang 
76e3ac6352SYouling Tang MODULE_LICENSE("GPL");
77*bc1a64d2SVenkat Rao Bagalkote MODULE_DESCRIPTION("KUnit tests of SMB1 maperror");
78