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 <cstring>
170485dae0Sopenharmony_ci#include <unistd.h>
180485dae0Sopenharmony_ci
190485dae0Sopenharmony_ci#include "gtest/gtest.h"
200485dae0Sopenharmony_ci
210485dae0Sopenharmony_ci#include "client_executor/include/i_aie_client.inl"
220485dae0Sopenharmony_ci#include "protocol/struct_definition/aie_info_define.h"
230485dae0Sopenharmony_ci#include "service_dead_cb.h"
240485dae0Sopenharmony_ci#include "utils/log/aie_log.h"
250485dae0Sopenharmony_ci
260485dae0Sopenharmony_ciusing namespace OHOS::AI;
270485dae0Sopenharmony_ciusing namespace testing::ext;
280485dae0Sopenharmony_ci
290485dae0Sopenharmony_cinamespace {
300485dae0Sopenharmony_ci    const char * const INPUT_CHARACTER = "inputData";
310485dae0Sopenharmony_ci    const char * const CONFIG_DESCRIPTION = "config information";
320485dae0Sopenharmony_ci    const long long CLIENT_INFO_VERSION = 1;
330485dae0Sopenharmony_ci    const int CLIENT_ID = -1;
340485dae0Sopenharmony_ci    const int SESSION_ID = -1;
350485dae0Sopenharmony_ci    const long long ALGORITHM_INFO_CLIENT_VERSION = 2;
360485dae0Sopenharmony_ci    const int ALGORITHM_TYPE_SYNC = 0;
370485dae0Sopenharmony_ci    const int ALGORITHM_TYPE_ASYNC = 1;
380485dae0Sopenharmony_ci    const long long ALGORITHM_VERSION = 1;
390485dae0Sopenharmony_ci    const int OPERATE_ID = 2;
400485dae0Sopenharmony_ci    const int REQUEST_ID = 3;
410485dae0Sopenharmony_ci}
420485dae0Sopenharmony_ci
430485dae0Sopenharmony_ciclass DestroyFunctionTest : public testing::Test {
440485dae0Sopenharmony_cipublic:
450485dae0Sopenharmony_ci    // SetUpTestCase:The preset action of the test suite is executed before the first TestCase
460485dae0Sopenharmony_ci    static void SetUpTestCase() {};
470485dae0Sopenharmony_ci
480485dae0Sopenharmony_ci    // TearDownTestCase:The test suite cleanup action is executed after the last TestCase
490485dae0Sopenharmony_ci    static void TearDownTestCase() {};
500485dae0Sopenharmony_ci
510485dae0Sopenharmony_ci    // SetUp:Execute before each test case
520485dae0Sopenharmony_ci    void SetUp() {};
530485dae0Sopenharmony_ci
540485dae0Sopenharmony_ci    // TearDown:Execute after each test case
550485dae0Sopenharmony_ci    void TearDown() {};
560485dae0Sopenharmony_ci};
570485dae0Sopenharmony_ci
580485dae0Sopenharmony_ciclass ClientCallback : public IClientCb {
590485dae0Sopenharmony_cipublic:
600485dae0Sopenharmony_ci    ClientCallback() = default;
610485dae0Sopenharmony_ci    ~ClientCallback() override = default;
620485dae0Sopenharmony_ci    void OnResult(const DataInfo &result, int resultCode, int requestId) override
630485dae0Sopenharmony_ci    {
640485dae0Sopenharmony_ci        HILOGI("[Test]TestAieClientDestroy001 OnResult resultCode[%d],"\
650485dae0Sopenharmony_ci            "requestId[%d], resultData[%s], resultLength[%d].",
660485dae0Sopenharmony_ci            resultCode, requestId, result.data, result.length);
670485dae0Sopenharmony_ci    }
680485dae0Sopenharmony_ci};
690485dae0Sopenharmony_ci
700485dae0Sopenharmony_ci/**
710485dae0Sopenharmony_ci * @tc.name: TestAieClientDestroy001
720485dae0Sopenharmony_ci * @tc.desc: Test the execution of destroying interface immediately after initializing ai server.
730485dae0Sopenharmony_ci * @tc.type: FUNC
740485dae0Sopenharmony_ci * @tc.require: AR000F77NL
750485dae0Sopenharmony_ci */
760485dae0Sopenharmony_ciHWTEST_F(DestroyFunctionTest, TestAieClientDestroy001, TestSize.Level0)
770485dae0Sopenharmony_ci{
780485dae0Sopenharmony_ci    HILOGI("[Test]TestAieClientDestroy001.");
790485dae0Sopenharmony_ci
800485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
810485dae0Sopenharmony_ci
820485dae0Sopenharmony_ci    const char *str = INPUT_CHARACTER;
830485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
840485dae0Sopenharmony_ci    int len = strlen(str) + 1;
850485dae0Sopenharmony_ci
860485dae0Sopenharmony_ci    ClientInfo clientInfo = {
870485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
880485dae0Sopenharmony_ci        .clientId = CLIENT_ID,
890485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
900485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
910485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
920485dae0Sopenharmony_ci        .extendLen = len,
930485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
940485dae0Sopenharmony_ci    };
950485dae0Sopenharmony_ci
960485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
970485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
980485dae0Sopenharmony_ci        .isAsync = false,
990485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_TYPE_SYNC,
1000485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
1010485dae0Sopenharmony_ci        .isCloud = true,
1020485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
1030485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
1040485dae0Sopenharmony_ci        .extendLen = len,
1050485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
1060485dae0Sopenharmony_ci    };
1070485dae0Sopenharmony_ci
1080485dae0Sopenharmony_ci    ServiceDeadCb deadCb = ServiceDeadCb();
1090485dae0Sopenharmony_ci    int resultCodeInit = AieClientInit(configInfo, clientInfo, algoInfo, &deadCb);
1100485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeInit, RETCODE_SUCCESS);
1110485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
1120485dae0Sopenharmony_ci
1130485dae0Sopenharmony_ci    int resultCodeDestroy = AieClientDestroy(clientInfo);
1140485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeDestroy, RETCODE_SUCCESS);
1150485dae0Sopenharmony_ci    ASSERT_EQ(clientInfo.clientId, INVALID_SESSION_ID);
1160485dae0Sopenharmony_ci}
1170485dae0Sopenharmony_ci
1180485dae0Sopenharmony_ci/**
1190485dae0Sopenharmony_ci * @tc.name: TestAieClientDestroy002
1200485dae0Sopenharmony_ci * @tc.desc: Test the execution of destroying interface, after initializing, preparing and synchronous processing.
1210485dae0Sopenharmony_ci * @tc.type: FUNC
1220485dae0Sopenharmony_ci * @tc.require: AR000F77NL
1230485dae0Sopenharmony_ci */
1240485dae0Sopenharmony_ciHWTEST_F(DestroyFunctionTest, TestAieClientDestroy002, TestSize.Level0)
1250485dae0Sopenharmony_ci{
1260485dae0Sopenharmony_ci    HILOGI("[Test]TestAieClientDestroy002.");
1270485dae0Sopenharmony_ci
1280485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
1290485dae0Sopenharmony_ci
1300485dae0Sopenharmony_ci    const char *str = INPUT_CHARACTER;
1310485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
1320485dae0Sopenharmony_ci    int len = strlen(str) + 1;
1330485dae0Sopenharmony_ci
1340485dae0Sopenharmony_ci    ClientInfo clientInfo = {
1350485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
1360485dae0Sopenharmony_ci        .clientId = CLIENT_ID,
1370485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
1380485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
1390485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
1400485dae0Sopenharmony_ci        .extendLen = len,
1410485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
1420485dae0Sopenharmony_ci    };
1430485dae0Sopenharmony_ci
1440485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
1450485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
1460485dae0Sopenharmony_ci        .isAsync = false,
1470485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_TYPE_SYNC,
1480485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
1490485dae0Sopenharmony_ci        .isCloud = true,
1500485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
1510485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
1520485dae0Sopenharmony_ci        .extendLen = len,
1530485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
1540485dae0Sopenharmony_ci    };
1550485dae0Sopenharmony_ci
1560485dae0Sopenharmony_ci    DataInfo inputInfo = {
1570485dae0Sopenharmony_ci        .data = reinterpret_cast<unsigned char*>(inputData),
1580485dae0Sopenharmony_ci        .length = len,
1590485dae0Sopenharmony_ci    };
1600485dae0Sopenharmony_ci
1610485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
1620485dae0Sopenharmony_ci    int resultCodeInit = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
1630485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeInit, RETCODE_SUCCESS);
1640485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
1650485dae0Sopenharmony_ci
1660485dae0Sopenharmony_ci    IClientCb *callback = nullptr;
1670485dae0Sopenharmony_ci    DataInfo outputInfo;
1680485dae0Sopenharmony_ci    int resultCodePrepare = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, callback);
1690485dae0Sopenharmony_ci    ASSERT_EQ(resultCodePrepare, RETCODE_SUCCESS);
1700485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
1710485dae0Sopenharmony_ci
1720485dae0Sopenharmony_ci    int resultCodeSyncProcess = AieClientSyncProcess(clientInfo, algoInfo, inputInfo, outputInfo);
1730485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeSyncProcess, RETCODE_SUCCESS);
1740485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
1750485dae0Sopenharmony_ci
1760485dae0Sopenharmony_ci    int resultCodeRelease = AieClientRelease(clientInfo, algoInfo, inputInfo);
1770485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeRelease, RETCODE_SUCCESS);
1780485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
1790485dae0Sopenharmony_ci
1800485dae0Sopenharmony_ci    int resultCodeDestroy = AieClientDestroy(clientInfo);
1810485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeDestroy, RETCODE_SUCCESS);
1820485dae0Sopenharmony_ci    ASSERT_EQ(clientInfo.clientId, INVALID_SESSION_ID);
1830485dae0Sopenharmony_ci}
1840485dae0Sopenharmony_ci
1850485dae0Sopenharmony_ci/**
1860485dae0Sopenharmony_ci * @tc.name: TestAieClientDestroy003
1870485dae0Sopenharmony_ci * @tc.desc: Test the execution of destroying interface, after initializing, preparing and asynchronous processing.
1880485dae0Sopenharmony_ci * @tc.type: FUNC
1890485dae0Sopenharmony_ci * @tc.require: AR000F77NL
1900485dae0Sopenharmony_ci */
1910485dae0Sopenharmony_ciHWTEST_F(DestroyFunctionTest, TestAieClientDestroy003, TestSize.Level0)
1920485dae0Sopenharmony_ci{
1930485dae0Sopenharmony_ci    HILOGI("[Test]TestAieClientDestroy003.");
1940485dae0Sopenharmony_ci
1950485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
1960485dae0Sopenharmony_ci
1970485dae0Sopenharmony_ci    const char *str = INPUT_CHARACTER;
1980485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
1990485dae0Sopenharmony_ci    int len = strlen(str) + 1;
2000485dae0Sopenharmony_ci
2010485dae0Sopenharmony_ci    ClientInfo clientInfo = {
2020485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
2030485dae0Sopenharmony_ci        .clientId = CLIENT_ID,
2040485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
2050485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
2060485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
2070485dae0Sopenharmony_ci        .extendLen = len,
2080485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
2090485dae0Sopenharmony_ci    };
2100485dae0Sopenharmony_ci
2110485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
2120485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
2130485dae0Sopenharmony_ci        .isAsync = true,
2140485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_TYPE_ASYNC,
2150485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
2160485dae0Sopenharmony_ci        .isCloud = true,
2170485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
2180485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
2190485dae0Sopenharmony_ci        .extendLen = len,
2200485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
2210485dae0Sopenharmony_ci    };
2220485dae0Sopenharmony_ci
2230485dae0Sopenharmony_ci    DataInfo inputInfo = {
2240485dae0Sopenharmony_ci        .data = reinterpret_cast<unsigned char*>(inputData),
2250485dae0Sopenharmony_ci        .length = len,
2260485dae0Sopenharmony_ci    };
2270485dae0Sopenharmony_ci
2280485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
2290485dae0Sopenharmony_ci    int resultCodeInit = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
2300485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeInit, RETCODE_SUCCESS);
2310485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
2320485dae0Sopenharmony_ci
2330485dae0Sopenharmony_ci    ClientCallback callback = ClientCallback();
2340485dae0Sopenharmony_ci    DataInfo outputInfo;
2350485dae0Sopenharmony_ci    int resultCodePrepare = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, &callback);
2360485dae0Sopenharmony_ci    ASSERT_EQ(resultCodePrepare, RETCODE_SUCCESS);
2370485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
2380485dae0Sopenharmony_ci
2390485dae0Sopenharmony_ci    int resultCodeAsyncProcess = AieClientAsyncProcess(clientInfo, algoInfo, inputInfo);
2400485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeAsyncProcess, RETCODE_SUCCESS);
2410485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
2420485dae0Sopenharmony_ci
2430485dae0Sopenharmony_ci    int resultCodeRelease = AieClientRelease(clientInfo, algoInfo, inputInfo);
2440485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeRelease, RETCODE_SUCCESS);
2450485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
2460485dae0Sopenharmony_ci
2470485dae0Sopenharmony_ci    int resultCodeDestroy = AieClientDestroy(clientInfo);
2480485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeDestroy, RETCODE_SUCCESS);
2490485dae0Sopenharmony_ci    ASSERT_EQ(clientInfo.clientId, INVALID_SESSION_ID);
2500485dae0Sopenharmony_ci}
2510485dae0Sopenharmony_ci
2520485dae0Sopenharmony_ci/**
2530485dae0Sopenharmony_ci * @tc.name: TestAieClientDestroy004
2540485dae0Sopenharmony_ci * @tc.desc: Test the execution of destroying interface, on the condition that dead callback is nullptr
2550485dae0Sopenharmony_ci *           and not registered.
2560485dae0Sopenharmony_ci * @tc.type: FUNC
2570485dae0Sopenharmony_ci * @tc.require: AR000F77NL
2580485dae0Sopenharmony_ci */
2590485dae0Sopenharmony_ciHWTEST_F(DestroyFunctionTest, TestAieClientDestroy004, TestSize.Level0)
2600485dae0Sopenharmony_ci{
2610485dae0Sopenharmony_ci    HILOGI("[Test]TestAieClientDestroy004.");
2620485dae0Sopenharmony_ci
2630485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
2640485dae0Sopenharmony_ci
2650485dae0Sopenharmony_ci    const char *str = INPUT_CHARACTER;
2660485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
2670485dae0Sopenharmony_ci    int len = strlen(str) + 1;
2680485dae0Sopenharmony_ci
2690485dae0Sopenharmony_ci    ClientInfo clientInfo = {
2700485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
2710485dae0Sopenharmony_ci        .clientId = CLIENT_ID,
2720485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
2730485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
2740485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
2750485dae0Sopenharmony_ci        .extendLen = len,
2760485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
2770485dae0Sopenharmony_ci    };
2780485dae0Sopenharmony_ci
2790485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
2800485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
2810485dae0Sopenharmony_ci        .isAsync = true,
2820485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_TYPE_ASYNC,
2830485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
2840485dae0Sopenharmony_ci        .isCloud = true,
2850485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
2860485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
2870485dae0Sopenharmony_ci        .extendLen = len,
2880485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
2890485dae0Sopenharmony_ci    };
2900485dae0Sopenharmony_ci
2910485dae0Sopenharmony_ci    int resultCodeInit = AieClientInit(configInfo, clientInfo, algoInfo, nullptr);
2920485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeInit, RETCODE_SUCCESS);
2930485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
2940485dae0Sopenharmony_ci
2950485dae0Sopenharmony_ci    int resultCodeDestroy = AieClientDestroy(clientInfo);
2960485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeDestroy, RETCODE_SUCCESS);
2970485dae0Sopenharmony_ci    ASSERT_EQ(clientInfo.clientId, INVALID_SESSION_ID);
2980485dae0Sopenharmony_ci}
2990485dae0Sopenharmony_ci
3000485dae0Sopenharmony_ci/**
3010485dae0Sopenharmony_ci * @tc.name: TestAieClientDestroy005
3020485dae0Sopenharmony_ci * @tc.desc: Test the execution of destroying interface, after initializing, preparing.
3030485dae0Sopenharmony_ci * @tc.type: FUNC
3040485dae0Sopenharmony_ci * @tc.require: AR000F77NL
3050485dae0Sopenharmony_ci */
3060485dae0Sopenharmony_ciHWTEST_F(DestroyFunctionTest, TestAieClientDestroy005, TestSize.Level0)
3070485dae0Sopenharmony_ci{
3080485dae0Sopenharmony_ci    HILOGI("[Test]TestAieClientDestroy005.");
3090485dae0Sopenharmony_ci
3100485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
3110485dae0Sopenharmony_ci
3120485dae0Sopenharmony_ci    const char *str = INPUT_CHARACTER;
3130485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
3140485dae0Sopenharmony_ci    int len = strlen(str) + 1;
3150485dae0Sopenharmony_ci
3160485dae0Sopenharmony_ci    ClientInfo clientInfo = {
3170485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
3180485dae0Sopenharmony_ci        .clientId = CLIENT_ID,
3190485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
3200485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
3210485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
3220485dae0Sopenharmony_ci        .extendLen = len,
3230485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
3240485dae0Sopenharmony_ci    };
3250485dae0Sopenharmony_ci
3260485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
3270485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
3280485dae0Sopenharmony_ci        .isAsync = false,
3290485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_TYPE_SYNC,
3300485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
3310485dae0Sopenharmony_ci        .isCloud = true,
3320485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
3330485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
3340485dae0Sopenharmony_ci        .extendLen = len,
3350485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
3360485dae0Sopenharmony_ci    };
3370485dae0Sopenharmony_ci
3380485dae0Sopenharmony_ci    DataInfo inputInfo = {
3390485dae0Sopenharmony_ci        .data = reinterpret_cast<unsigned char*>(inputData),
3400485dae0Sopenharmony_ci        .length = len,
3410485dae0Sopenharmony_ci    };
3420485dae0Sopenharmony_ci
3430485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
3440485dae0Sopenharmony_ci    int resultCodeInit = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
3450485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeInit, RETCODE_SUCCESS);
3460485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
3470485dae0Sopenharmony_ci
3480485dae0Sopenharmony_ci    IClientCb *callback = nullptr;
3490485dae0Sopenharmony_ci    DataInfo outputInfo;
3500485dae0Sopenharmony_ci    int resultCodePrepare = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, callback);
3510485dae0Sopenharmony_ci    ASSERT_EQ(resultCodePrepare, RETCODE_SUCCESS);
3520485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
3530485dae0Sopenharmony_ci
3540485dae0Sopenharmony_ci    int resultCodeRelease = AieClientRelease(clientInfo, algoInfo, inputInfo);
3550485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeRelease, RETCODE_SUCCESS);
3560485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
3570485dae0Sopenharmony_ci
3580485dae0Sopenharmony_ci    int resultCodeDestroy = AieClientDestroy(clientInfo);
3590485dae0Sopenharmony_ci    ASSERT_EQ(resultCodeDestroy, RETCODE_SUCCESS);
3600485dae0Sopenharmony_ci    ASSERT_EQ(clientInfo.clientId, INVALID_SESSION_ID);
3610485dae0Sopenharmony_ci}
362