root/fs/smb/client/smb1maperror_test.c
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 *
 *   KUnit tests of SMB1 maperror
 *
 *   Copyright (C) 2026 KylinSoft Co., Ltd. All rights reserved.
 *   Author(s): Youling Tang <tangyouling@kylinos.cn>
 *              ChenXiaoSong <chenxiaosong@kylinos.cn>
 *
 */

#include <kunit/test.h>
#include "smb1proto.h"
#include "nterr.h"
#include "smberr.h"

#define DEFINE_CHECK_SEARCH_FUNC(__struct_name, __field,                \
                                 __array, __num)                        \
static void check_search_ ## __array(struct kunit *test)                \
{                                                                       \
        unsigned int i;                                                 \
        const struct __struct_name *expect, *result;                    \
                                                                        \
        for (i = 0; i < __num; i++) {                                   \
                expect = &__array ## _test[i];                          \
                result = search_ ## __array ## _test(expect->__field);  \
                KUNIT_ASSERT_NOT_NULL(test, result);                    \
                test_cmp_ ## __struct_name(test, expect, result);       \
        }                                                               \
}

static void
test_cmp_ntstatus_to_dos_err(struct kunit *test,
                             const struct ntstatus_to_dos_err *expect,
                             const struct ntstatus_to_dos_err *result)
{
        KUNIT_EXPECT_EQ(test, expect->dos_class, result->dos_class);
        KUNIT_EXPECT_EQ(test, expect->dos_code, result->dos_code);
        KUNIT_EXPECT_EQ(test, expect->ntstatus, result->ntstatus);
        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),
        {}
};

static struct kunit_suite maperror_suite = {
        .name = "smb1_maperror",
        .test_cases = maperror_test_cases,
};

kunit_test_suite(maperror_suite);

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("KUnit tests of SMB1 maperror");
MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");