From: Youling Tang Date: Thu, 2 Apr 2026 14:18:39 +0000 (+0000) Subject: smb/client: introduce KUnit tests to check DOS/SRV err mapping search X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=85274a3bd40f46a17f520c9d84a5b72d4704d2c3;p=thirdparty%2Fkernel%2Flinux.git smb/client: introduce KUnit tests to check DOS/SRV err mapping search Check whether all elements can be correctly found in the arrays. Signed-off-by: Youling Tang Reviewed-by: ChenXiaoSong Signed-off-by: Steve French --- diff --git a/fs/smb/client/smb1maperror.c b/fs/smb/client/smb1maperror.c index bca9b60ac8368..74530088d17d0 100644 --- a/fs/smb/client/smb1maperror.c +++ b/fs/smb/client/smb1maperror.c @@ -16,11 +16,6 @@ #include "nterr.h" #include "cifs_debug.h" -struct smb_to_posix_error { - __u16 smb_err; - int posix_code; -}; - static __always_inline int smb1_posix_error_cmp(const void *_key, const void *_pivot) { __u16 key = *(__u16 *)_key; @@ -260,4 +255,32 @@ EXPORT_SYMBOL_FOR_SMB_TEST(ntstatus_to_dos_map_test); unsigned int ntstatus_to_dos_num = ARRAY_SIZE(ntstatus_to_dos_map); EXPORT_SYMBOL_FOR_SMB_TEST(ntstatus_to_dos_num); + +const struct smb_to_posix_error * +search_mapping_table_ERRDOS_test(__u16 smb_err) +{ + return search_mapping_table_ERRDOS(smb_err); +} +EXPORT_SYMBOL_FOR_SMB_TEST(search_mapping_table_ERRDOS_test); + +const struct smb_to_posix_error * +mapping_table_ERRDOS_test = mapping_table_ERRDOS; +EXPORT_SYMBOL_FOR_SMB_TEST(mapping_table_ERRDOS_test); + +unsigned int mapping_table_ERRDOS_num = ARRAY_SIZE(mapping_table_ERRDOS); +EXPORT_SYMBOL_FOR_SMB_TEST(mapping_table_ERRDOS_num); + +const struct smb_to_posix_error * +search_mapping_table_ERRSRV_test(__u16 smb_err) +{ + return search_mapping_table_ERRSRV(smb_err); +} +EXPORT_SYMBOL_FOR_SMB_TEST(search_mapping_table_ERRSRV_test); + +const struct smb_to_posix_error * +mapping_table_ERRSRV_test = mapping_table_ERRSRV; +EXPORT_SYMBOL_FOR_SMB_TEST(mapping_table_ERRSRV_test); + +unsigned int mapping_table_ERRSRV_num = ARRAY_SIZE(mapping_table_ERRSRV); +EXPORT_SYMBOL_FOR_SMB_TEST(mapping_table_ERRSRV_num); #endif diff --git a/fs/smb/client/smb1maperror_test.c b/fs/smb/client/smb1maperror_test.c index 1a2d1b91dd133..820c0dd3bcce1 100644 --- a/fs/smb/client/smb1maperror_test.c +++ b/fs/smb/client/smb1maperror_test.c @@ -12,6 +12,7 @@ #include #include "smb1proto.h" #include "nterr.h" +#include "smberr.h" #define DEFINE_CHECK_SEARCH_FUNC(__struct_name, __field, \ __array, __num) \ @@ -39,12 +40,29 @@ test_cmp_ntstatus_to_dos_err(struct kunit *test, KUNIT_EXPECT_STREQ(test, expect->nt_errstr, result->nt_errstr); } +static void +test_cmp_smb_to_posix_error(struct kunit *test, + const struct smb_to_posix_error *expect, + const struct smb_to_posix_error *result) +{ + KUNIT_EXPECT_EQ(test, expect->smb_err, result->smb_err); + KUNIT_EXPECT_EQ(test, expect->posix_code, result->posix_code); +} + /* check_search_ntstatus_to_dos_map */ DEFINE_CHECK_SEARCH_FUNC(ntstatus_to_dos_err, ntstatus, ntstatus_to_dos_map, ntstatus_to_dos_num); +/* check_search_mapping_table_ERRDOS */ +DEFINE_CHECK_SEARCH_FUNC(smb_to_posix_error, smb_err, mapping_table_ERRDOS, + mapping_table_ERRDOS_num); +/* check_search_mapping_table_ERRSRV */ +DEFINE_CHECK_SEARCH_FUNC(smb_to_posix_error, smb_err, mapping_table_ERRSRV, + mapping_table_ERRSRV_num); static struct kunit_case maperror_test_cases[] = { KUNIT_CASE(check_search_ntstatus_to_dos_map), + KUNIT_CASE(check_search_mapping_table_ERRDOS), + KUNIT_CASE(check_search_mapping_table_ERRSRV), {} }; diff --git a/fs/smb/client/smb1proto.h b/fs/smb/client/smb1proto.h index 5ec158df1c748..5f522d359952d 100644 --- a/fs/smb/client/smb1proto.h +++ b/fs/smb/client/smb1proto.h @@ -242,6 +242,14 @@ extern const struct ntstatus_to_dos_err *ntstatus_to_dos_map_test; extern unsigned int ntstatus_to_dos_num; const struct ntstatus_to_dos_err * search_ntstatus_to_dos_map_test(__u32 ntstatus); +extern const struct smb_to_posix_error *mapping_table_ERRDOS_test; +extern unsigned int mapping_table_ERRDOS_num; +const struct smb_to_posix_error * +search_mapping_table_ERRDOS_test(__u16 smb_err); +extern const struct smb_to_posix_error *mapping_table_ERRSRV_test; +extern unsigned int mapping_table_ERRSRV_num; +const struct smb_to_posix_error * +search_mapping_table_ERRSRV_test(__u16 smb_err); #endif /* diff --git a/fs/smb/client/smberr.h b/fs/smb/client/smberr.h index 4ec2c5ffae253..5c3415bf18d77 100644 --- a/fs/smb/client/smberr.h +++ b/fs/smb/client/smberr.h @@ -9,6 +9,11 @@ * */ +struct smb_to_posix_error { + __u16 smb_err; + int posix_code; +}; + /* The request was successful. */ #define SUCCESS 0x00 /* Error is from the core DOS operating system set */