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