/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved.
 * ubs-engine is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

#include "test_ubse_mem_controller_serial.h"

#include "mockcpp/mockcpp.hpp"

#include "ubse_error.h"
#include "ubse_serial_util.h"
#include "message/ubse_mem_controller_serial.h"

namespace ubse::mem::serial::ut {
void TestUbseMemControllerSerial::SetUp()
{
    Test::SetUp();
}

void TestUbseMemControllerSerial::TearDown()
{
    Test::TearDown();
    GlobalMockObject::verify();
}

/*
 * 用例描述:测试 UbseMemDebtNumaInfoSerialization 方法
 * 测试步骤:略
 * 预期结果:方法正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemDebtNumaInfoSerialization)
{
    UbseSerialization out;
    UbseMemDebtNumaInfo debtNumaInfo;
    EXPECT_NO_THROW(UbseMemDebtNumaInfoSerialization(out, debtNumaInfo));
}

/*
 * 用例描述:测试 UbseMemDebtNumaInfoDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemDebtNumaInfoDeserialization)
{
    UbseDeSerialization in;
    UbseMemDebtNumaInfo debtNumaInfo;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemDebtNumaInfoDeserialization(in, debtNumaInfo));
    EXPECT_TRUE(UbseMemDebtNumaInfoDeserialization(in, debtNumaInfo));
}

/*
 * 用例描述: 测试 UbseMemAlgoResultSerialization 方法
 * 测试步骤: 略
 * 预期结果: 程序正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemAlgoResultSerialization)
{
    UbseSerialization out;
    UbseMemAlgoResult algoResult;
    algoResult.exportNumaInfos.emplace_back(UbseMemDebtNumaInfo());
    algoResult.importNumaInfos.emplace_back(UbseMemDebtNumaInfo());
    EXPECT_NO_THROW(UbseMemAlgoResultSerialization(out, algoResult));
}

/*
 * 用例描述: 测试UbseMemAlgoResultDeserialization 在Check函数失败时的行为
 * 测试步骤:略
 * 预期结果:返回UBSE_ERROR
 */
TEST_F(TestUbseMemControllerSerial, UbseMemAlgoResultDeserialization_WhenCheckFailed)
{
    UbseDeSerialization in;
    UbseMemAlgoResult algoResult;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false));
    EXPECT_FALSE(UbseMemAlgoResultDeserialization(in, algoResult));
}

/*
 * 用例描述:
 * 测试UbseMemAlgoResultDeserialization在一切功能正常时的行为
 * 测试步骤:略
 * 预期结果:返回UBSE_ERROR
 */
TEST_F(TestUbseMemControllerSerial, UbseMemAlgoResultDeserialization_WhenEverythingIsOk)
{
    UbseDeSerialization in;
    UbseMemAlgoResult algoResult;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(true));
    EXPECT_TRUE(UbseMemAlgoResultDeserialization(in, algoResult));
}

/*
 * 用例描述:测试 UbseMemObmmMemDescSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemObmmMemDescSerialization)
{
    UbseSerialization out;
    ubse_mem_obmm_mem_desc ubseMemObmmMemDesc;
    EXPECT_NO_THROW(UbseMemObmmMemDescSerialization(out, ubseMemObmmMemDesc));
}

/*
 * 用例描述:测试 UbseMemObmmMemDescDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemObmmMemDescDeserialization)
{
    UbseDeSerialization in;
    ubse_mem_obmm_mem_desc ubseMemObmmMemDesc;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemObmmMemDescDeserialization(in, ubseMemObmmMemDesc));
    EXPECT_TRUE(UbseMemObmmMemDescDeserialization(in, ubseMemObmmMemDesc));
}

/*
 * 用例描述:测试 UbseMemObmmInfoSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemObmmInfoSerialization)
{
    UbseSerialization out;
    UbseMemObmmInfo ubseMemObmmInfo;
    EXPECT_NO_THROW(UbseMemObmmInfoSerialization(out, ubseMemObmmInfo));
}

/*
 * 用例描述:测试 UbseMemObmmInfoDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemObmmInfoDeserialization)
{
    UbseDeSerialization in;
    UbseMemObmmInfo ubseMemObmmInfo;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemObmmInfoDeserialization(in, ubseMemObmmInfo));
    EXPECT_TRUE(UbseMemObmmInfoDeserialization(in, ubseMemObmmInfo));
}

/*
 * 用例描述:测试 UbseMemExportStatusSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemExportStatusSerialization)
{
    UbseSerialization out;
    UbseMemExportStatus ubseMemExportStatus;
    ubseMemExportStatus.exportObmmInfo.emplace_back(UbseMemObmmInfo());
    EXPECT_NO_THROW(UbseMemExportStatusSerialization(out, ubseMemExportStatus));
}

/*
 * 用例描述:测试 UbseMemExportStatusDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemExportStatusDeserialization)
{
    UbseDeSerialization in;
    UbseMemExportStatus ubseMemExportStatus;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemExportStatusDeserialization(in, ubseMemExportStatus));
    EXPECT_TRUE(UbseMemExportStatusDeserialization(in, ubseMemExportStatus));
}

/*
 * 用例描述:测试 UbseUdsInfoSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseUdsInfoSerialization)
{
    UbseSerialization out;
    UbseUdsInfo udsInfo;
    EXPECT_NO_THROW(UbseUdsInfoSerialization(out, udsInfo));
}

/*
 * 用例描述:测试 UbseUdsInfoDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseUdsInfoDeserialization)
{
    UbseDeSerialization in;
    UbseUdsInfo udsInfo;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseUdsInfoDeserialization(in, udsInfo));
    EXPECT_TRUE(UbseUdsInfoDeserialization(in, udsInfo));
}

/*
 * 用例描述:测试 UbseNumaLocationSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseNumaLocationSerialization)
{
    UbseSerialization out;
    UbseNumaLocation ubseNumaLocation;
    EXPECT_NO_THROW(UbseNumaLocationSerialization(out, ubseNumaLocation));
}

/*
 * 用例描述:测试 UbseNumaLocationDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseNumaLocationDeserialization)
{
    UbseDeSerialization in;
    UbseNumaLocation ubseNumaLocation;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseNumaLocationDeserialization(in, ubseNumaLocation));
    EXPECT_TRUE(UbseNumaLocationDeserialization(in, ubseNumaLocation));
}

/*
 * 用例描述:测试 UbseMemFdBorrowReqSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdBorrowReqSerialization)
{
    UbseSerialization out;
    UbseMemFdBorrowReq req;
    req.lenderLocs.emplace_back(UbseNumaLocation());
    uint64_t size = 1;
    req.lenderSizes.emplace_back(size);
    EXPECT_NO_THROW(UbseMemFdBorrowReqSerialization(out, req));
}

/*
 * 用例描述:测试 UbseMemFdBorrowReqDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdBorrowReqDeserialization)
{
    UbseDeSerialization in;
    UbseMemFdBorrowReq req;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false));
    EXPECT_FALSE(UbseMemFdBorrowReqDeserialization(in, req));
    MOCKER_CPP(&UbseDeSerialization::Check).reset();
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(true));
    EXPECT_TRUE(UbseMemFdBorrowReqDeserialization(in, req));
}

/*
 * 用例描述:测试 UbseMemFdBorrowExportObjSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdBorrowExportObjSerialization)
{
    UbseSerialization out;
    UbseMemFdBorrowExportObj fdBorrowExportObj;
    EXPECT_NO_THROW(UbseMemFdBorrowExportObjSerialization(out, fdBorrowExportObj));
}

/*
 * 用例描述:测试 UbseMemFdBorrowExportObjDeserialization 方法
 * 测试步骤:
 * 1.模拟Check返回false的情况
 * 2.模拟UbseMemAlgoResultDeserialization返回UBSE_ERROR的情况
 * 3.模拟UbseMemExportStatusDeserialization返回UBSE_ERROR的情况
 * 4.模拟UbseMemFdBorrowReqDeserialization返回UBSE_ERROR的情况
 * 5.模拟一切功能正常的情况
 * 预期结果:
 * 1.返回UBSE_ERROR
 * 2.返回UBSE_ERROR
 * 3.返回UBSE_ERROR
 * 4.返回UBSE_ERROR
 * 5.返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdBorrowExportObjDeserialization)
{
    UbseDeSerialization in;
    UbseMemFdBorrowExportObj fdBorrowExportObj;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdBorrowExportObjDeserialization(in, fdBorrowExportObj));

    MOCKER_CPP(UbseMemAlgoResultDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdBorrowExportObjDeserialization(in, fdBorrowExportObj));
    MOCKER_CPP(UbseMemExportStatusDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdBorrowExportObjDeserialization(in, fdBorrowExportObj));
    MOCKER_CPP(UbseMemFdBorrowReqDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdBorrowExportObjDeserialization(in, fdBorrowExportObj));
    EXPECT_TRUE(UbseMemFdBorrowExportObjDeserialization(in, fdBorrowExportObj));
}

/*
 * 用例描述:测试 UbseMemImportResultSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemImportResultSerialization)
{
    UbseSerialization out;
    UbseMemImportResult ubseMemImportResult;
    EXPECT_NO_THROW(UbseMemImportResultSerialization(out, ubseMemImportResult));
}

/*
 * 用例描述:测试 UbseMemImportResultDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemImportResultDeserialization)
{
    UbseDeSerialization in;
    UbseMemImportResult ubseMemImportResult;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemImportResultDeserialization(in, ubseMemImportResult));
    EXPECT_TRUE(UbseMemImportResultDeserialization(in, ubseMemImportResult));
}

/*
 * 用例描述:测试 UbseMemImportStatusSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemImportStatusSerialization)
{
    UbseSerialization out;
    UbseMemImportStatus ubseMemImportStatus;
    ubseMemImportStatus.importResults.emplace_back(UbseMemImportResult());
    EXPECT_NO_THROW(UbseMemImportStatusSerialization(out, ubseMemImportStatus));
}

/*
 * 用例描述:测试 UbseMemImportStatusDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemImportStatusDeserialization)
{
    UbseDeSerialization in;
    UbseMemImportStatus ubseMemImportStatus;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemImportStatusDeserialization(in, ubseMemImportStatus));
    EXPECT_TRUE(UbseMemImportStatusDeserialization(in, ubseMemImportStatus));
}

/*
 * 用例描述:测试 UbseMemFdBorrowImportObjSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdBorrowImportObjSerialization)
{
    UbseSerialization out;
    UbseMemFdBorrowImportObj ubseMemFdBorrowImportObj;
    ubseMemFdBorrowImportObj.exportObmmInfo.emplace_back(UbseMemObmmInfo());
    EXPECT_NO_THROW(UbseMemFdBorrowImportObjSerialization(out, ubseMemFdBorrowImportObj));
}

/*
 * 用例描述:测试 UbseMemFdBorrowImportObjDeserialization 方法
 * 测试步骤:
 * 1.模拟Check返回false的情况
 * 2.模拟UbseMemAlgoResultDeserialization返回UBSE_ERROR的情况
 * 3.模拟MUbseMemImportStatusDeserialization返回UBSE_ERROR的情况
 * 4.模拟UbseMemFdBorrowReqDeserialization返回UBSE_ERROR的情况
 * 5.模拟一切功能正常的情况
 * 预期结果:
 * 1.返回UBSE_ERROR
 * 2.返回UBSE_ERROR
 * 3.返回UBSE_ERROR
 * 4.返回UBSE_ERROR
 * 5.返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdBorrowImportObjDeserialization)
{
    UbseDeSerialization in;
    UbseMemFdBorrowImportObj ubseMemFdBorrowImportObj;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdBorrowImportObjDeserialization(in, ubseMemFdBorrowImportObj));

    MOCKER_CPP(UbseMemAlgoResultDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdBorrowImportObjDeserialization(in, ubseMemFdBorrowImportObj));
    MOCKER_CPP(UbseMemImportStatusDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdBorrowImportObjDeserialization(in, ubseMemFdBorrowImportObj));
    MOCKER_CPP(UbseMemFdBorrowReqDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdBorrowImportObjDeserialization(in, ubseMemFdBorrowImportObj));
    EXPECT_TRUE(UbseMemFdBorrowImportObjDeserialization(in, ubseMemFdBorrowImportObj));
}

/*
 * 用例描述:测试 UbseMemNumaBorrowReqSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaBorrowReqSerialization)
{
    UbseSerialization out;
    UbseMemNumaBorrowReq req;
    EXPECT_NO_THROW(UbseMemNumaBorrowReqSerialization(out, req));
}

/*
 * 用例描述:测试 UbseMemNumaBorrowReqDeserialization 方法
 * 测试步骤:
 * 1.模拟Check返回false时的情况
 * 2.模拟UbseMemFdBorrowReqDeserialization 返回UBSE_ERROR时的情况
 * 3.模拟一切功能正常时的情况
 * 预期结果:
 * 1.返回UBSE_ERROR
 * 2.返回UBSE_ERROR
 * 3.返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaBorrowReqDeserialization)
{
    UbseDeSerialization in;
    UbseMemNumaBorrowReq req;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowReqDeserialization(in, req));
    MOCKER_CPP(UbseMemFdBorrowReqDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowReqDeserialization(in, req));
    EXPECT_TRUE(UbseMemNumaBorrowReqDeserialization(in, req));
}

/*
 * 用例描述:测试 UbseMemNumaBorrowExportObjSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaBorrowExportObjSerialization)
{
    UbseSerialization out;
    UbseMemNumaBorrowExportObj ubseMemNumaBorrowExportObj;
    EXPECT_NO_THROW(UbseMemNumaBorrowExportObjSerialization(out, ubseMemNumaBorrowExportObj));
}

/*
 * 用例描述:测试 UbseMemNumaBorrowExportObjDeserialization 方法
 * 测试步骤:
 * 1.模拟Check返回false的情况
 * 2.模拟UbseMemAlgoResultDeserialization返回UBSE_ERROR的情况
 * 3.模拟UbseMemExportStatusDeserialization返回UBSE_ERROR的情况
 * 4.模拟UbseMemNumaBorrowReqDeserialization返回UBSE_ERROR的情况
 * 5.模拟一切功能正常的情况
 * 预期结果:
 * 1.返回UBSE_ERROR
 * 2.返回UBSE_ERROR
 * 3.返回UBSE_ERROR
 * 4.返回UBSE_ERROR
 * 5.返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaBorrowExportObjDeserialization)
{
    UbseDeSerialization in;
    UbseMemNumaBorrowExportObj ubseMemNumaBorrowExportObj;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowExportObjDeserialization(in, ubseMemNumaBorrowExportObj));

    MOCKER_CPP(UbseMemAlgoResultDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowExportObjDeserialization(in, ubseMemNumaBorrowExportObj));
    MOCKER_CPP(UbseMemExportStatusDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowExportObjDeserialization(in, ubseMemNumaBorrowExportObj));
    MOCKER_CPP(UbseMemNumaBorrowReqDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowExportObjDeserialization(in, ubseMemNumaBorrowExportObj));
    EXPECT_TRUE(UbseMemNumaBorrowExportObjDeserialization(in, ubseMemNumaBorrowExportObj));
}

/*
 * 用例描述:测试 UbseMemNumaBorrowImportObjSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaBorrowImportObjSerialization)
{
    UbseSerialization out;
    UbseMemNumaBorrowImportObj ubseMemNumaBorrowImportObj;
    ubseMemNumaBorrowImportObj.exportObmmInfo.emplace_back(UbseMemObmmInfo());
    EXPECT_NO_THROW(UbseMemNumaBorrowImportObjSerialization(out, ubseMemNumaBorrowImportObj));
}

/*
 * 用例描述:测试 UbseMemNumaBorrowImportObjDeserialization 方法
 * 测试步骤:
 * 1.模拟Check返回false的情况
 * 2.模拟UbseMemAlgoResultDeserialization返回UBSE_ERROR的情况
 * 3.模拟UbseMemImportStatusDeserialization返回UBSE_ERROR的情况
 * 4.模拟UbseMemNumaBorrowReqDeserialization返回UBSE_ERROR的情况
 * 5.模拟一切功能正常的情况
 * 预期结果:
 * 1.返回UBSE_ERROR
 * 2.返回UBSE_ERROR
 * 3.返回UBSE_ERROR
 * 4.返回UBSE_ERROR
 * 5.返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaBorrowImportObjDeserialization)
{
    UbseDeSerialization in;
    UbseMemNumaBorrowImportObj ubseMemNumaBorrowImportObj;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowImportObjDeserialization(in, ubseMemNumaBorrowImportObj));

    MOCKER_CPP(UbseMemAlgoResultDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowImportObjDeserialization(in, ubseMemNumaBorrowImportObj));
    MOCKER_CPP(UbseMemImportStatusDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowImportObjDeserialization(in, ubseMemNumaBorrowImportObj));
    MOCKER_CPP(UbseMemNumaBorrowReqDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaBorrowImportObjDeserialization(in, ubseMemNumaBorrowImportObj));
    EXPECT_TRUE(UbseMemNumaBorrowImportObjDeserialization(in, ubseMemNumaBorrowImportObj));
}

/*
 * 用例描述:测试 UbseMemAddrInfoSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemAddrInfoSerialization)
{
    UbseSerialization out;
    UbseMemAddrInfo ubseMemAddrInfo;
    EXPECT_NO_THROW(UbseMemAddrInfoSerialization(out, ubseMemAddrInfo));
}

/*
 * 用例描述:测试 UbseMemAddrInfoDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemAddrInfoDeserialization)
{
    UbseDeSerialization in;
    UbseMemAddrInfo ubseMemAddrInfo;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemAddrInfoDeserialization(in, ubseMemAddrInfo));
    EXPECT_TRUE(UbseMemAddrInfoDeserialization(in, ubseMemAddrInfo));
}

/*
 * 用例描述:测试 UbseMemBorrowExportBaseObjSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemBorrowExportBaseObjSerialization)
{
    UbseSerialization out;
    UbseMemBorrowExportBaseObj data;
    EXPECT_NO_THROW(UbseMemBorrowExportBaseObjSerialization(out, data));
}

/*
 * 用例描述:测试 UbseMemBorrowExportBaseObjDeserialization 方法
 * 测试步骤:
 * 1.模拟Check返回false的情况
 * 2.模拟 UbseMemAlgoResultDeserialization 返回UBSE_ERROR的情况
 * 3.模拟 UbseMemExportStatusDeserialization 返回UBSE_ERROR的情况
 * 4.模拟一切功能正常的情况
 * 预期结果:
 * 1.返回UBSE_ERROR
 * 2.返回UBSE_ERROR
 * 3.返回UBSE_ERROR
 * 4.返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemBorrowExportBaseObjDeserialization)
{
    UbseDeSerialization in;
    UbseMemBorrowExportBaseObj data;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemBorrowExportBaseObjDeserialization(in, data));

    MOCKER_CPP(UbseMemAlgoResultDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemBorrowExportBaseObjDeserialization(in, data));
    MOCKER_CPP(UbseMemExportStatusDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemBorrowExportBaseObjDeserialization(in, data));
    EXPECT_TRUE(UbseMemBorrowExportBaseObjDeserialization(in, data));
}

/*
 * 用例描述:测试 UbseNodeInfoSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseNodeInfoSerialization)
{
    UbseSerialization out;
    UbseNodeInfo data;
    EXPECT_NO_THROW(UbseNodeInfoSerialization(out, data));
}

/*
 * 用例描述:测试 UbseNodeInfoDeserialization 方法
 * 测试步骤:按顺序判断Check返回false和true时函数的返回结果。
 * 预期结果:Check返回false时,函数返回UBSE_ERROR;否则返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseNodeInfoDeserialization)
{
    UbseDeSerialization in;
    UbseNodeInfo data;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseNodeInfoDeserialization(in, data));
    EXPECT_TRUE(UbseNodeInfoDeserialization(in, data));
}

/*
 * 用例描述:测试 UbseMemBorrowImportBaseObjSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemBorrowImportBaseObjSerialization)
{
    UbseSerialization out;
    UbseMemBorrowImportBaseObj data;
    data.exportObmmInfo.push_back(UbseMemObmmInfo());
    EXPECT_NO_THROW(UbseMemBorrowImportBaseObjSerialization(out, data));
}

/*
 * 用例描述:测试 UbseMemBorrowImportBaseObjDeserialization 方法
 * 测试步骤:
 * 1.模拟Check返回false的情况
 * 2.模拟 UbseMemAlgoResultDeserialization 返回UBSE_ERROR的情况
 * 3.模拟 UbseMemImportStatusDeserialization 返回UBSE_ERROR的情况
 * 4.模拟一切功能正常的情况
 * 预期结果:
 * 1.返回UBSE_ERROR
 * 2.返回UBSE_ERROR
 * 3.返回UBSE_ERROR
 * 4.返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, UbseMemBorrowImportBaseObjDeserialization)
{
    UbseDeSerialization in;
    UbseMemBorrowImportBaseObj data;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemBorrowImportBaseObjDeserialization(in, data));

    MOCKER_CPP(UbseMemAlgoResultDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemBorrowImportBaseObjDeserialization(in, data));
    MOCKER_CPP(UbseMemImportStatusDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemBorrowImportBaseObjDeserialization(in, data));
    EXPECT_TRUE(UbseMemBorrowImportBaseObjDeserialization(in, data));
}

/*
 * 用例描述:测试 UbseMemFdImportObjMapSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdImportObjMapSerialization)
{
    UbseSerialization out;
    UbseMemFdImportObjMap data;
    data.insert(std::make_pair("first", UbseMemFdBorrowImportObj()));
    EXPECT_NO_THROW(UbseMemFdImportObjMapSerialization(out, data));
}

/*
 * 用例描述:测试 UbseMemFdImportObjMapDeserialization 方法。
 * 测试步骤:略
 * 预期结果:Check成功时返回UBSE_OK;失败时返回UBSE_ERROR
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdImportObjMapDeserialization)
{
    UbseDeSerialization in;
    UbseMemFdImportObjMap data;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdImportObjMapDeserialization(in, data));
    EXPECT_TRUE(UbseMemFdImportObjMapDeserialization(in, data));
}

/*
 * 用例描述:测试 UbseMemFdExportObjMapSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdExportObjMapSerialization)
{
    UbseSerialization out;
    UbseMemFdExportObjMap data;
    data.insert(std::make_pair("first", UbseMemFdBorrowExportObj()));
    EXPECT_NO_THROW(UbseMemFdExportObjMapSerialization(out, data));
}

/*
 * 用例描述:测试 UbseMemFdExportObjMapDeserialization 方法。
 * 测试步骤:略
 * 预期结果:Check成功时返回UBSE_OK;失败时返回UBSE_ERROR
 */
TEST_F(TestUbseMemControllerSerial, UbseMemFdExportObjMapDeserialization)
{
    UbseDeSerialization in;
    UbseMemFdExportObjMap data;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemFdExportObjMapDeserialization(in, data));
    EXPECT_TRUE(UbseMemFdExportObjMapDeserialization(in, data));
}

/*
 * 用例描述:测试 UbseMemNumaImportObjMapSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaImportObjMapSerialization)
{
    UbseSerialization out;
    UbseMemNumaImportObjMap data;
    data.insert(std::make_pair("first", UbseMemNumaBorrowImportObj()));
    EXPECT_NO_THROW(UbseMemNumaImportObjMapSerialization(out, data));
}

/*
 * 用例描述:测试 UbseMemNumaImportObjMapDeserialization 方法。
 * 测试步骤:略
 * 预期结果:Check成功时返回UBSE_OK;失败时返回UBSE_ERROR
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaImportObjMapDeserialization)
{
    UbseDeSerialization in;
    UbseMemNumaImportObjMap data;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaImportObjMapDeserialization(in, data));
    EXPECT_TRUE(UbseMemNumaImportObjMapDeserialization(in, data));
}

/*
 * 用例描述:测试 UbseMemNumaExportObjMapSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaExportObjMapSerialization)
{
    UbseSerialization out;
    UbseMemNumaExportObjMap data;
    data.insert(std::make_pair("first", UbseMemNumaBorrowExportObj()));
    EXPECT_NO_THROW(UbseMemNumaExportObjMapSerialization(out, data));
}

/*
 * 用例描述:测试 UbseMemNumaExportObjMapDeserialization 方法。
 * 测试步骤:略
 * 预期结果:Check成功时返回UBSE_OK;失败时返回UBSE_ERROR
 */
TEST_F(TestUbseMemControllerSerial, UbseMemNumaExportObjMapDeserialization)
{
    UbseDeSerialization in;
    UbseMemNumaExportObjMap data;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(UbseMemNumaExportObjMapDeserialization(in, data));
    EXPECT_TRUE(UbseMemNumaExportObjMapDeserialization(in, data));
}

/*
 * 用例描述:测试 NodeMemDebtInfoSerialization 方法
 * 测试步骤:略
 * 预期结果:函数正常执行无异常
 */
TEST_F(TestUbseMemControllerSerial, NodeMemDebtInfoSerialization)
{
    UbseSerialization out;
    NodeMemDebtInfo data;
    EXPECT_NO_THROW(NodeMemDebtInfoSerialization(out, data));
}

/*
 * 用例描述:测试 NodeMemDebtInfoDeserialization 方法
 * 测试步骤:
 * 1.模拟Check返回false的情况
 * 2.模拟 UbseMemFdImportObjMapDeserialization 返回UBSE_ERROR的情况
 * 3.模拟 UbseMemFdExportObjMapDeserialization 返回UBSE_ERROR的情况
 * 4.模拟 UbseMemNumaImportObjMapDeserialization 返回UBSE_ERROR的情况
 * 5.模拟 UbseMemNumaExportObjMapDeserialization 返回UBSE_ERROR的情况
 * 6.模拟一切功能正常的情况
 * 预期结果:
 * 1.返回UBSE_ERROR
 * 2.返回UBSE_ERROR
 * 3.返回UBSE_ERROR
 * 4.返回UBSE_ERROR
 * 5.返回UBSE_ERROR
 * 6.返回UBSE_OK
 */
TEST_F(TestUbseMemControllerSerial, NodeMemDebtInfoDeserialization)
{
    UbseDeSerialization in;
    NodeMemDebtInfo data;
    MOCKER_CPP(&UbseDeSerialization::Check).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(NodeMemDebtInfoDeserialization(in, data));
    MOCKER_CPP(UbseMemFdImportObjMapDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(NodeMemDebtInfoDeserialization(in, data));
    MOCKER_CPP(UbseMemFdExportObjMapDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(NodeMemDebtInfoDeserialization(in, data));
    MOCKER_CPP(UbseMemNumaImportObjMapDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(NodeMemDebtInfoDeserialization(in, data));
    MOCKER_CPP(UbseMemNumaExportObjMapDeserialization).stubs().will(returnValue(false)).then(returnValue(true));
    EXPECT_FALSE(NodeMemDebtInfoDeserialization(in, data));
    EXPECT_TRUE(NodeMemDebtInfoDeserialization(in, data));
}
} // namespace ubse::mem::serial::ut