]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
smb/client: introduce KUnit tests to check DOS/SRV err mapping search
authorYouling Tang <tangyouling@kylinos.cn>
Thu, 2 Apr 2026 14:18:39 +0000 (14:18 +0000)
committerSteve French <stfrench@microsoft.com>
Mon, 6 Apr 2026 00:58:40 +0000 (19:58 -0500)
Check whether all elements can be correctly found in the arrays.

Signed-off-by: Youling Tang <tangyouling@kylinos.cn>
Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/smb1maperror.c
fs/smb/client/smb1maperror_test.c
fs/smb/client/smb1proto.h
fs/smb/client/smberr.h

index bca9b60ac8368f0fc69f17eb4200ce3b0477a8a4..74530088d17d0316bb8998d52039b8982748c0e0 100644 (file)
 #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
index 1a2d1b91dd1337a312259fef8f476df318847f8f..820c0dd3bcce128e0c36b5e9412ffb7b84ab6d6e 100644 (file)
@@ -12,6 +12,7 @@
 #include <kunit/test.h>
 #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),
        {}
 };
 
index 5ec158df1c748daa588891b1587790a546fc39d2..5f522d359952d461bc7c2fa1abfa763d74aafc5b 100644 (file)
@@ -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
 
 /*
index 4ec2c5ffae253c6c4787bcee9a6eb5dc644bb6a3..5c3415bf18d77dcefc898fc486526e6ac07e461b 100644 (file)
@@ -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 */