10485dae0Sopenharmony_ci/*
20485dae0Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
30485dae0Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
40485dae0Sopenharmony_ci * you may not use this file except in compliance with the License.
50485dae0Sopenharmony_ci * You may obtain a copy of the License at
60485dae0Sopenharmony_ci *
70485dae0Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
80485dae0Sopenharmony_ci *
90485dae0Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
100485dae0Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
110485dae0Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120485dae0Sopenharmony_ci * See the License for the specific language governing permissions and
130485dae0Sopenharmony_ci * limitations under the License.
140485dae0Sopenharmony_ci */
150485dae0Sopenharmony_ci
160485dae0Sopenharmony_ci#include "gtest/gtest.h"
170485dae0Sopenharmony_ci
180485dae0Sopenharmony_ci#include <cstddef>
190485dae0Sopenharmony_ci#include <string>
200485dae0Sopenharmony_ci
210485dae0Sopenharmony_ci#include "utils/aie_guard.h"
220485dae0Sopenharmony_ci#include "utils/aie_macros.h"
230485dae0Sopenharmony_ci#include "utils/encdec/include/data_decoder.h"
240485dae0Sopenharmony_ci#include "utils/encdec/include/data_encoder.h"
250485dae0Sopenharmony_ci#include "utils/encdec/include/encdec_facade.h"
260485dae0Sopenharmony_ci#include "utils/log/aie_log.h"
270485dae0Sopenharmony_ci
280485dae0Sopenharmony_ciusing namespace OHOS::AI;
290485dae0Sopenharmony_ciusing namespace testing::ext;
300485dae0Sopenharmony_cinamespace {
310485dae0Sopenharmony_ciconstexpr size_t ARRAY_LEN = 10;
320485dae0Sopenharmony_ciconstexpr int g_int = 12;
330485dae0Sopenharmony_ciconstexpr char g_char = 'd';
340485dae0Sopenharmony_ciconstexpr float g_float = 0.99f;
350485dae0Sopenharmony_ciconstexpr long long g_long = 123456789L;
360485dae0Sopenharmony_ciconst std::string g_string = "random string";
370485dae0Sopenharmony_ciconst std::string g_emptyString = "";
380485dae0Sopenharmony_ci
390485dae0Sopenharmony_citypedef struct {
400485dae0Sopenharmony_ci    char foo;
410485dae0Sopenharmony_ci    int bar;
420485dae0Sopenharmony_ci} StructWithPadding; // definition of struct with padding(blank memory) between members
430485dae0Sopenharmony_ci
440485dae0Sopenharmony_citypedef struct {
450485dae0Sopenharmony_ci    int foo;
460485dae0Sopenharmony_ci    StructWithPadding bar;
470485dae0Sopenharmony_ci} NestedStruct;
480485dae0Sopenharmony_ci
490485dae0Sopenharmony_citypedef struct {
500485dae0Sopenharmony_ci    size_t objectsNum;
510485dae0Sopenharmony_ci    StructWithPadding* objects;
520485dae0Sopenharmony_ci} StructWithPointer;
530485dae0Sopenharmony_ci
540485dae0Sopenharmony_citypedef struct {
550485dae0Sopenharmony_ci    size_t foo;
560485dae0Sopenharmony_ci    int barArray[ARRAY_LEN];
570485dae0Sopenharmony_ci} StructWithArray;
580485dae0Sopenharmony_ci
590485dae0Sopenharmony_citemplate<typename Type>
600485dae0Sopenharmony_cibool CompareData(const Type &input, const Type &output)
610485dae0Sopenharmony_ci{
620485dae0Sopenharmony_ci    return input == output;
630485dae0Sopenharmony_ci}
640485dae0Sopenharmony_ci
650485dae0Sopenharmony_cibool CompareData(const StructWithPadding &input, const StructWithPadding &output)
660485dae0Sopenharmony_ci{
670485dae0Sopenharmony_ci    return (input.foo == output.foo) && (input.bar == output.bar);
680485dae0Sopenharmony_ci}
690485dae0Sopenharmony_ci
700485dae0Sopenharmony_cibool CompareData(const NestedStruct &input, const NestedStruct &output)
710485dae0Sopenharmony_ci{
720485dae0Sopenharmony_ci    return (input.foo == output.foo) && CompareData(input.bar, output.bar);
730485dae0Sopenharmony_ci}
740485dae0Sopenharmony_ci
750485dae0Sopenharmony_cibool CompareData(const StructWithPointer &input, const StructWithPointer &output)
760485dae0Sopenharmony_ci{
770485dae0Sopenharmony_ci    if (input.objectsNum != output.objectsNum) {
780485dae0Sopenharmony_ci        return false;
790485dae0Sopenharmony_ci    }
800485dae0Sopenharmony_ci    for (unsigned int i = 0; i < input.objectsNum; ++i) {
810485dae0Sopenharmony_ci        if (!CompareData(input.objects[i], output.objects[i])) {
820485dae0Sopenharmony_ci            return false;
830485dae0Sopenharmony_ci        }
840485dae0Sopenharmony_ci    }
850485dae0Sopenharmony_ci    return true;
860485dae0Sopenharmony_ci}
870485dae0Sopenharmony_ci
880485dae0Sopenharmony_cibool CompareData(const StructWithArray &input, const StructWithArray &output)
890485dae0Sopenharmony_ci{
900485dae0Sopenharmony_ci    if (input.foo != output.foo) {
910485dae0Sopenharmony_ci        return false;
920485dae0Sopenharmony_ci    }
930485dae0Sopenharmony_ci    for (unsigned int i = 0; i < ARRAY_LEN; ++i) {
940485dae0Sopenharmony_ci        if (!CompareData(input.barArray[i], output.barArray[i])) {
950485dae0Sopenharmony_ci            return false;
960485dae0Sopenharmony_ci        }
970485dae0Sopenharmony_ci    }
980485dae0Sopenharmony_ci    return true;
990485dae0Sopenharmony_ci}
1000485dae0Sopenharmony_ci
1010485dae0Sopenharmony_ciStructWithPadding GenStructWithPadding(const int myNum, const char myChar)
1020485dae0Sopenharmony_ci{
1030485dae0Sopenharmony_ci    StructWithPadding structWithPadding = {
1040485dae0Sopenharmony_ci        .foo = myChar,
1050485dae0Sopenharmony_ci        .bar = myNum
1060485dae0Sopenharmony_ci    };
1070485dae0Sopenharmony_ci    return structWithPadding;
1080485dae0Sopenharmony_ci}
1090485dae0Sopenharmony_ci
1100485dae0Sopenharmony_ciNestedStruct GenNestedStruct()
1110485dae0Sopenharmony_ci{
1120485dae0Sopenharmony_ci    NestedStruct nestedStruct = {
1130485dae0Sopenharmony_ci        .foo = g_int,
1140485dae0Sopenharmony_ci        .bar = GenStructWithPadding(g_int, g_char)
1150485dae0Sopenharmony_ci    };
1160485dae0Sopenharmony_ci    return nestedStruct;
1170485dae0Sopenharmony_ci}
1180485dae0Sopenharmony_ci
1190485dae0Sopenharmony_ciStructWithPointer GenStructWithPointer(const size_t objectsNum)
1200485dae0Sopenharmony_ci{
1210485dae0Sopenharmony_ci    StructWithPointer structWithPointer {
1220485dae0Sopenharmony_ci        .objectsNum = objectsNum
1230485dae0Sopenharmony_ci    };
1240485dae0Sopenharmony_ci    if (objectsNum > 0) {
1250485dae0Sopenharmony_ci        AIE_NEW(structWithPointer.objects, StructWithPadding[objectsNum]);
1260485dae0Sopenharmony_ci        for (size_t i = 0; i < objectsNum; ++i) {
1270485dae0Sopenharmony_ci            structWithPointer.objects[i] = GenStructWithPadding(g_int, g_char);
1280485dae0Sopenharmony_ci        }
1290485dae0Sopenharmony_ci    }
1300485dae0Sopenharmony_ci    return structWithPointer;
1310485dae0Sopenharmony_ci}
1320485dae0Sopenharmony_ci
1330485dae0Sopenharmony_civoid ReleaseStructWithPointer(StructWithPointer &structWithPointer)
1340485dae0Sopenharmony_ci{
1350485dae0Sopenharmony_ci    AIE_DELETE_ARRAY(structWithPointer.objects);
1360485dae0Sopenharmony_ci}
1370485dae0Sopenharmony_ci
1380485dae0Sopenharmony_ciStructWithArray GenStructWithArray(const size_t num)
1390485dae0Sopenharmony_ci{
1400485dae0Sopenharmony_ci    StructWithArray structWithArray {
1410485dae0Sopenharmony_ci        .foo = num
1420485dae0Sopenharmony_ci    };
1430485dae0Sopenharmony_ci    for (size_t i = 0; i < num && i < ARRAY_LEN; ++i) {
1440485dae0Sopenharmony_ci        structWithArray.barArray[i] = g_int;
1450485dae0Sopenharmony_ci    }
1460485dae0Sopenharmony_ci    return structWithArray;
1470485dae0Sopenharmony_ci}
1480485dae0Sopenharmony_ci
1490485dae0Sopenharmony_civoid PolluteData(DataInfo &dataInfo)
1500485dae0Sopenharmony_ci{
1510485dae0Sopenharmony_ci    *(reinterpret_cast<size_t*>(dataInfo.data + dataInfo.length - sizeof(size_t))) = 0U;
1520485dae0Sopenharmony_ci}
1530485dae0Sopenharmony_ci
1540485dae0Sopenharmony_civoid BasicTypesCheck(bool normalMode = true)
1550485dae0Sopenharmony_ci{
1560485dae0Sopenharmony_ci    DataInfo dataInfo {};
1570485dae0Sopenharmony_ci    int retCode = EncdecFacade::ProcessEncode(dataInfo, g_int, g_char, g_float, g_long, g_string, g_emptyString);
1580485dae0Sopenharmony_ci    MallocPointerGuard<unsigned char> dataInfoGuard(dataInfo.data);
1590485dae0Sopenharmony_ci    ASSERT_EQ(retCode, RETCODE_SUCCESS);
1600485dae0Sopenharmony_ci    if (!normalMode) {
1610485dae0Sopenharmony_ci        PolluteData(dataInfo);
1620485dae0Sopenharmony_ci    }
1630485dae0Sopenharmony_ci    int outInt {};
1640485dae0Sopenharmony_ci    char outChar {};
1650485dae0Sopenharmony_ci    float outFloat {};
1660485dae0Sopenharmony_ci    long long outLong {};
1670485dae0Sopenharmony_ci    std::string outString {};
1680485dae0Sopenharmony_ci    std::string outEmptyString {};
1690485dae0Sopenharmony_ci
1700485dae0Sopenharmony_ci    retCode = EncdecFacade::ProcessDecode(dataInfo, outInt, outChar, outFloat, outLong, outString,
1710485dae0Sopenharmony_ci        outEmptyString);
1720485dae0Sopenharmony_ci    if (normalMode) {
1730485dae0Sopenharmony_ci        ASSERT_EQ(retCode, RETCODE_SUCCESS);
1740485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(g_int, outInt));
1750485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(g_char, outChar));
1760485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(g_float, outFloat));
1770485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(g_long, outLong));
1780485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(g_string, outString));
1790485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(g_emptyString, outEmptyString));
1800485dae0Sopenharmony_ci    } else {
1810485dae0Sopenharmony_ci        ASSERT_NE(retCode, RETCODE_SUCCESS);
1820485dae0Sopenharmony_ci    }
1830485dae0Sopenharmony_ci}
1840485dae0Sopenharmony_ci
1850485dae0Sopenharmony_civoid StructCheck(bool normalMode = true)
1860485dae0Sopenharmony_ci{
1870485dae0Sopenharmony_ci    DataInfo dataInfo {};
1880485dae0Sopenharmony_ci    StructWithPadding structWithPadding = GenStructWithPadding(g_int, g_char);
1890485dae0Sopenharmony_ci    NestedStruct nestedStruct = GenNestedStruct();
1900485dae0Sopenharmony_ci    StructWithArray structWithArray = GenStructWithArray(ARRAY_LEN);
1910485dae0Sopenharmony_ci
1920485dae0Sopenharmony_ci    int retCode = EncdecFacade::ProcessEncode(dataInfo, structWithPadding, nestedStruct, structWithArray);
1930485dae0Sopenharmony_ci    MallocPointerGuard<unsigned char> dataInfoGuard(dataInfo.data);
1940485dae0Sopenharmony_ci    ASSERT_EQ(retCode, RETCODE_SUCCESS);
1950485dae0Sopenharmony_ci    if (!normalMode) {
1960485dae0Sopenharmony_ci        PolluteData(dataInfo);
1970485dae0Sopenharmony_ci    }
1980485dae0Sopenharmony_ci    StructWithPadding outStructWithPadding {};
1990485dae0Sopenharmony_ci    NestedStruct outNestedStruct {};
2000485dae0Sopenharmony_ci    StructWithArray outStructWithArray {};
2010485dae0Sopenharmony_ci
2020485dae0Sopenharmony_ci    retCode = EncdecFacade::ProcessDecode(dataInfo, outStructWithPadding, outNestedStruct, outStructWithArray);
2030485dae0Sopenharmony_ci    if (normalMode) {
2040485dae0Sopenharmony_ci        ASSERT_EQ(retCode, RETCODE_SUCCESS);
2050485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(structWithPadding, outStructWithPadding));
2060485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(nestedStruct, outNestedStruct));
2070485dae0Sopenharmony_ci        ASSERT_TRUE(CompareData(structWithArray, outStructWithArray));
2080485dae0Sopenharmony_ci    } else {
2090485dae0Sopenharmony_ci        ASSERT_NE(retCode, RETCODE_SUCCESS);
2100485dae0Sopenharmony_ci    }
2110485dae0Sopenharmony_ci}
2120485dae0Sopenharmony_ci
2130485dae0Sopenharmony_civoid StructWithPointerCheck(bool normalMode = true)
2140485dae0Sopenharmony_ci{
2150485dae0Sopenharmony_ci    for (size_t classNum = 0; classNum <= ARRAY_LEN; ++classNum) {
2160485dae0Sopenharmony_ci        HILOGD ("[Test]Normal test StructWithPointer, classNum = %d.************", classNum);
2170485dae0Sopenharmony_ci        StructWithPointer structWithPointer = GenStructWithPointer(classNum);
2180485dae0Sopenharmony_ci        DataInfo dataInfo {};
2190485dae0Sopenharmony_ci        int retCode = EncdecFacade::ProcessEncode(dataInfo, structWithPointer);
2200485dae0Sopenharmony_ci        MallocPointerGuard<unsigned char> dataInfoGuard(dataInfo.data);
2210485dae0Sopenharmony_ci        ASSERT_EQ(retCode, RETCODE_SUCCESS);
2220485dae0Sopenharmony_ci        if (!normalMode) {
2230485dae0Sopenharmony_ci            PolluteData(dataInfo);
2240485dae0Sopenharmony_ci        }
2250485dae0Sopenharmony_ci        StructWithPointer res {};
2260485dae0Sopenharmony_ci        retCode = EncdecFacade::ProcessDecode(dataInfo, res);
2270485dae0Sopenharmony_ci        if (normalMode) {
2280485dae0Sopenharmony_ci            ASSERT_EQ(retCode, RETCODE_SUCCESS);
2290485dae0Sopenharmony_ci            ASSERT_TRUE(CompareData(structWithPointer, res));
2300485dae0Sopenharmony_ci            ReleaseStructWithPointer(res);
2310485dae0Sopenharmony_ci        } else {
2320485dae0Sopenharmony_ci            ASSERT_NE(retCode, RETCODE_SUCCESS);
2330485dae0Sopenharmony_ci        }
2340485dae0Sopenharmony_ci        ReleaseStructWithPointer(structWithPointer);
2350485dae0Sopenharmony_ci    }
2360485dae0Sopenharmony_ci}
2370485dae0Sopenharmony_ci}
2380485dae0Sopenharmony_ci
2390485dae0Sopenharmony_cinamespace OHOS {
2400485dae0Sopenharmony_cinamespace AI {
2410485dae0Sopenharmony_citemplate<>
2420485dae0Sopenharmony_ciint DataEncoder::EncodeOneParameter(const StructWithPointer &val)
2430485dae0Sopenharmony_ci{
2440485dae0Sopenharmony_ci    if (RecursiveEncode(val.objectsNum) != RETCODE_SUCCESS) {
2450485dae0Sopenharmony_ci        HILOGE("[EncdecTest]Serialize memory error.");
2460485dae0Sopenharmony_ci        return RETCODE_FAILURE;
2470485dae0Sopenharmony_ci    }
2480485dae0Sopenharmony_ci    for (size_t i = 0; i < val.objectsNum; ++i) {
2490485dae0Sopenharmony_ci        if (RecursiveEncode(val.objects[i]) != RETCODE_SUCCESS) {
2500485dae0Sopenharmony_ci            HILOGE("[EncdecTest]Serialize memory error.");
2510485dae0Sopenharmony_ci            return RETCODE_FAILURE;
2520485dae0Sopenharmony_ci        }
2530485dae0Sopenharmony_ci    }
2540485dae0Sopenharmony_ci    return RETCODE_SUCCESS;
2550485dae0Sopenharmony_ci}
2560485dae0Sopenharmony_ci
2570485dae0Sopenharmony_citemplate<>
2580485dae0Sopenharmony_ciint DataDecoder::DecodeOneParameter(StructWithPointer &val)
2590485dae0Sopenharmony_ci{
2600485dae0Sopenharmony_ci    if (RecursiveDecode(val.objectsNum) != RETCODE_SUCCESS) {
2610485dae0Sopenharmony_ci        HILOGE("[EncdecTest]Unserialize failed.");
2620485dae0Sopenharmony_ci        return RETCODE_FAILURE;
2630485dae0Sopenharmony_ci    }
2640485dae0Sopenharmony_ci    if (val.objectsNum > 0) {
2650485dae0Sopenharmony_ci        AIE_NEW(val.objects, StructWithPadding[val.objectsNum]);
2660485dae0Sopenharmony_ci        for (size_t i = 0; i < val.objectsNum; ++i) {
2670485dae0Sopenharmony_ci            if (RecursiveDecode(val.objects[i]) != RETCODE_SUCCESS) {
2680485dae0Sopenharmony_ci                AIE_DELETE_ARRAY(val.objects);
2690485dae0Sopenharmony_ci                return RETCODE_FAILURE;
2700485dae0Sopenharmony_ci            }
2710485dae0Sopenharmony_ci        }
2720485dae0Sopenharmony_ci    }
2730485dae0Sopenharmony_ci    return RETCODE_SUCCESS;
2740485dae0Sopenharmony_ci}
2750485dae0Sopenharmony_ci} // namespace AI
2760485dae0Sopenharmony_ci} // namespace OHOS
2770485dae0Sopenharmony_ci
2780485dae0Sopenharmony_ciclass EncdecTest : public testing::Test {
2790485dae0Sopenharmony_cipublic:
2800485dae0Sopenharmony_ci    // SetUpTestCase:The preset action of the test suite is executed before the first TestCase
2810485dae0Sopenharmony_ci    static void SetUpTestCase() {};
2820485dae0Sopenharmony_ci
2830485dae0Sopenharmony_ci    // TearDownTestCase:The test suite cleanup action is executed after the last TestCase
2840485dae0Sopenharmony_ci    static void TearDownTestCase() {};
2850485dae0Sopenharmony_ci
2860485dae0Sopenharmony_ci    // SetUp:Execute before each test case
2870485dae0Sopenharmony_ci    void SetUp() override {};
2880485dae0Sopenharmony_ci
2890485dae0Sopenharmony_ci    // TearDown:Execute after each test case
2900485dae0Sopenharmony_ci    void TearDown() override {};
2910485dae0Sopenharmony_ci};
2920485dae0Sopenharmony_ci
2930485dae0Sopenharmony_ci/**
2940485dae0Sopenharmony_ci * @tc.name: EncdecNormalCheck001
2950485dae0Sopenharmony_ci * @tc.desc: Test encode decode function for non-pointer type in normal mode.
2960485dae0Sopenharmony_ci * @tc.type: FUNC
2970485dae0Sopenharmony_ci * @tc.require: AR000F77MR
2980485dae0Sopenharmony_ci */
2990485dae0Sopenharmony_ciHWTEST_F(EncdecTest, EncdecNormalCheck001, TestSize.Level0)
3000485dae0Sopenharmony_ci{
3010485dae0Sopenharmony_ci    HILOGD ("**********[Test]Normal test start, all the result should return 0************");
3020485dae0Sopenharmony_ci    BasicTypesCheck();
3030485dae0Sopenharmony_ci    HILOGD ("**********[Test]Normal test end************");
3040485dae0Sopenharmony_ci}
3050485dae0Sopenharmony_ci
3060485dae0Sopenharmony_ci/**
3070485dae0Sopenharmony_ci * @tc.name: EncdecNormalCheck002
3080485dae0Sopenharmony_ci * @tc.desc: Test encode decode function for struct without pointer.
3090485dae0Sopenharmony_ci * @tc.type: FUNC
3100485dae0Sopenharmony_ci * @tc.require: AR000F77MR
3110485dae0Sopenharmony_ci */
3120485dae0Sopenharmony_ciHWTEST_F(EncdecTest, EncdecNormalCheck002, TestSize.Level0)
3130485dae0Sopenharmony_ci{
3140485dae0Sopenharmony_ci    HILOGD ("**********[Test]Normal test start, all the result should return 0************");
3150485dae0Sopenharmony_ci    StructCheck();
3160485dae0Sopenharmony_ci    HILOGD ("**********[Test]Normal test end************");
3170485dae0Sopenharmony_ci}
3180485dae0Sopenharmony_ci
3190485dae0Sopenharmony_ci/**
3200485dae0Sopenharmony_ci * @tc.name: EncdecNormalCheck003
3210485dae0Sopenharmony_ci * @tc.desc: Test encode decode function for types which include pointers in normal mode.
3220485dae0Sopenharmony_ci * @tc.type: FUNC
3230485dae0Sopenharmony_ci * @tc.require: AR000F77MR
3240485dae0Sopenharmony_ci */
3250485dae0Sopenharmony_ciHWTEST_F(EncdecTest, EncdecNormalCheck003, TestSize.Level0)
3260485dae0Sopenharmony_ci{
3270485dae0Sopenharmony_ci    HILOGD ("**********[Test]Normal test start, all the result should return 0************");
3280485dae0Sopenharmony_ci    StructWithPointerCheck();
3290485dae0Sopenharmony_ci    HILOGD ("**********[Test]Normal test end************");
3300485dae0Sopenharmony_ci}
3310485dae0Sopenharmony_ci
3320485dae0Sopenharmony_ci/**
3330485dae0Sopenharmony_ci * @tc.name: EncdecAbnormalCheck001
3340485dae0Sopenharmony_ci * @tc.desc: Test encode decode function for non-pointer type in abnormal mode.
3350485dae0Sopenharmony_ci * @tc.type: FUNC
3360485dae0Sopenharmony_ci * @tc.require: AR000F77MR
3370485dae0Sopenharmony_ci */
3380485dae0Sopenharmony_ciHWTEST_F(EncdecTest, EncdecAbnormalCheck001, TestSize.Level1)
3390485dae0Sopenharmony_ci{
3400485dae0Sopenharmony_ci    HILOGD ("**********[Test]abnormal test start************");
3410485dae0Sopenharmony_ci    BasicTypesCheck(false);
3420485dae0Sopenharmony_ci    HILOGD ("**********[Test]abnormal test end************");
3430485dae0Sopenharmony_ci}
3440485dae0Sopenharmony_ci
3450485dae0Sopenharmony_ci/**
3460485dae0Sopenharmony_ci * @tc.name: EncdecAbnormalCheck002
3470485dae0Sopenharmony_ci * @tc.desc: Test encode decode function for types which include pointers in abnormal mode.
3480485dae0Sopenharmony_ci * @tc.type: FUNC
3490485dae0Sopenharmony_ci * @tc.require: AR000F77MR
3500485dae0Sopenharmony_ci */
3510485dae0Sopenharmony_ciHWTEST_F(EncdecTest, EncdecAbnormalCheck002, TestSize.Level1)
3520485dae0Sopenharmony_ci{
3530485dae0Sopenharmony_ci    HILOGD ("**********[Test]abnormal test start************");
3540485dae0Sopenharmony_ci    StructCheck(false);
3550485dae0Sopenharmony_ci    HILOGD ("**********[Test]abnormal test end************");
3560485dae0Sopenharmony_ci}
3570485dae0Sopenharmony_ci
3580485dae0Sopenharmony_ci/**
3590485dae0Sopenharmony_ci * @tc.name: EncdecAbnormalCheck003
3600485dae0Sopenharmony_ci * @tc.desc: Test encode decode function for types which include pointers in normal mode.
3610485dae0Sopenharmony_ci * @tc.type: FUNC
3620485dae0Sopenharmony_ci * @tc.require: AR000F77MR
3630485dae0Sopenharmony_ci */
3640485dae0Sopenharmony_ciHWTEST_F(EncdecTest, EncdecAbnormalCheck003, TestSize.Level1)
3650485dae0Sopenharmony_ci{
3660485dae0Sopenharmony_ci    HILOGD ("**********[Test]Normal test start, all the result should return 0************");
3670485dae0Sopenharmony_ci    StructWithPointerCheck(false);
3680485dae0Sopenharmony_ci    HILOGD ("**********[Test]Normal test end************");
3690485dae0Sopenharmony_ci}
370