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/retcode_inner/aie_retcode_inner.h"
230485dae0Sopenharmony_ci#include "server_executor/include/server_executor.h"
240485dae0Sopenharmony_ci#include "service_dead_cb.h"
250485dae0Sopenharmony_ci#include "utils/aie_macros.h"
260485dae0Sopenharmony_ci#include "utils/constants/constants.h"
270485dae0Sopenharmony_ci#include "utils/log/aie_log.h"
280485dae0Sopenharmony_ci
290485dae0Sopenharmony_ciusing namespace OHOS::AI;
300485dae0Sopenharmony_ciusing namespace testing::ext;
310485dae0Sopenharmony_ci
320485dae0Sopenharmony_cinamespace {
330485dae0Sopenharmony_ci    const int REQUEST_ID = 1;
340485dae0Sopenharmony_ci    const int OPERATE_ID = 2;
350485dae0Sopenharmony_ci    const long long CLIENT_INFO_VERSION = 1;
360485dae0Sopenharmony_ci    const int SESSION_ID = -1;
370485dae0Sopenharmony_ci    const long long ALGORITHM_INFO_CLIENT_VERSION = 1;
380485dae0Sopenharmony_ci    const int ALGORITHM_SYNC_TYPE = 0;
390485dae0Sopenharmony_ci    const int ALGORITHM_ASYNC_TYPE = 1;
400485dae0Sopenharmony_ci    const long long ALGORITHM_VERSION = 1;
410485dae0Sopenharmony_ci    const char * const CONFIG_DESCRIPTION = "Prepare config information";
420485dae0Sopenharmony_ci    const char * const PREPARE_INPUT_SYNC = "Sync prepare inputData";
430485dae0Sopenharmony_ci    const char * const PREPARE_INPUT_ASYNC = "Async prepare inputData";
440485dae0Sopenharmony_ci}
450485dae0Sopenharmony_ci
460485dae0Sopenharmony_ciclass ClientCallback : public IClientCb {
470485dae0Sopenharmony_cipublic:
480485dae0Sopenharmony_ci    ClientCallback() = default;
490485dae0Sopenharmony_ci    ~ClientCallback() override = default;
500485dae0Sopenharmony_ci    void OnResult(const DataInfo &result, int resultCode, int requestId) override
510485dae0Sopenharmony_ci    {
520485dae0Sopenharmony_ci        HILOGI("[Test]TestAieClientAsyncProcess execute ClientCallbackOnResult."\
530485dae0Sopenharmony_ci            " resultCode[%d], requestId[%d], resultData[%s], resultLength[%d].",
540485dae0Sopenharmony_ci            resultCode, requestId, result.data, result.length);
550485dae0Sopenharmony_ci    }
560485dae0Sopenharmony_ci};
570485dae0Sopenharmony_ci
580485dae0Sopenharmony_ciclass PrepareFunctionTest : public testing::Test {
590485dae0Sopenharmony_cipublic:
600485dae0Sopenharmony_ci    // SetUpTestCase:The preset action of the test suite is executed before the first TestCase
610485dae0Sopenharmony_ci    static void SetUpTestCase() {};
620485dae0Sopenharmony_ci
630485dae0Sopenharmony_ci    // TearDownTestCase:The test suite cleanup action is executed after the last TestCase
640485dae0Sopenharmony_ci    static void TearDownTestCase() {};
650485dae0Sopenharmony_ci
660485dae0Sopenharmony_ci    // SetUp:Execute before each test case
670485dae0Sopenharmony_ci    void SetUp() {};
680485dae0Sopenharmony_ci
690485dae0Sopenharmony_ci    // TearDown:Execute after each test case
700485dae0Sopenharmony_ci    void TearDown() {};
710485dae0Sopenharmony_ci};
720485dae0Sopenharmony_ci
730485dae0Sopenharmony_ci/**
740485dae0Sopenharmony_ci * @tc.name: TestAlgorithmInfo001
750485dae0Sopenharmony_ci * @tc.desc: Test preparing execution of certain synchronous plugin.
760485dae0Sopenharmony_ci * @tc.type: FUNC
770485dae0Sopenharmony_ci * @tc.require: AR000F77NN
780485dae0Sopenharmony_ci */
790485dae0Sopenharmony_ciHWTEST_F(PrepareFunctionTest, TestAlgorithmInfo001, TestSize.Level1)
800485dae0Sopenharmony_ci{
810485dae0Sopenharmony_ci    HILOGI("[Test]TestAlgorithmInfo001.");
820485dae0Sopenharmony_ci    const char *str = PREPARE_INPUT_SYNC;
830485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
840485dae0Sopenharmony_ci    int len = strlen(str) + 1;
850485dae0Sopenharmony_ci
860485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
870485dae0Sopenharmony_ci
880485dae0Sopenharmony_ci    ClientInfo clientInfo = {
890485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
900485dae0Sopenharmony_ci        .clientId = INVALID_CLIENT_ID,
910485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
920485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
930485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
940485dae0Sopenharmony_ci        .extendLen = len,
950485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
960485dae0Sopenharmony_ci    };
970485dae0Sopenharmony_ci
980485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
990485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
1000485dae0Sopenharmony_ci        .isAsync = false,
1010485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_SYNC_TYPE,
1020485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
1030485dae0Sopenharmony_ci        .isCloud = true,
1040485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
1050485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
1060485dae0Sopenharmony_ci        .extendLen = len,
1070485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
1080485dae0Sopenharmony_ci    };
1090485dae0Sopenharmony_ci
1100485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
1110485dae0Sopenharmony_ci    int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
1120485dae0Sopenharmony_ci    ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
1130485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
1140485dae0Sopenharmony_ci
1150485dae0Sopenharmony_ci    DataInfo inputInfo = {
1160485dae0Sopenharmony_ci        .data = reinterpret_cast<unsigned char*>(inputData),
1170485dae0Sopenharmony_ci        .length = len,
1180485dae0Sopenharmony_ci    };
1190485dae0Sopenharmony_ci
1200485dae0Sopenharmony_ci    DataInfo outputInfo;
1210485dae0Sopenharmony_ci    int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, nullptr);
1220485dae0Sopenharmony_ci    ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
1230485dae0Sopenharmony_ci    ASSERT_NE(outputInfo.data, nullptr);
1240485dae0Sopenharmony_ci
1250485dae0Sopenharmony_ci    AieClientRelease(clientInfo, algoInfo, inputInfo);
1260485dae0Sopenharmony_ci
1270485dae0Sopenharmony_ci    AieClientDestroy(clientInfo);
1280485dae0Sopenharmony_ci}
1290485dae0Sopenharmony_ci
1300485dae0Sopenharmony_ci/**
1310485dae0Sopenharmony_ci * @tc.name: TestAlgorithmInfo002
1320485dae0Sopenharmony_ci * @tc.desc: Test preparing execution of certain asynchronous plugin.
1330485dae0Sopenharmony_ci * @tc.type: FUNC
1340485dae0Sopenharmony_ci * @tc.require: AR000F77NN
1350485dae0Sopenharmony_ci */
1360485dae0Sopenharmony_ciHWTEST_F(PrepareFunctionTest, TestAlgorithmInfo002, TestSize.Level1)
1370485dae0Sopenharmony_ci{
1380485dae0Sopenharmony_ci    HILOGI("[Test]TestAlgorithmInfo002.");
1390485dae0Sopenharmony_ci    const char *str = PREPARE_INPUT_ASYNC;
1400485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
1410485dae0Sopenharmony_ci    int len = strlen(str) + 1;
1420485dae0Sopenharmony_ci
1430485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
1440485dae0Sopenharmony_ci
1450485dae0Sopenharmony_ci    ClientInfo clientInfo = {
1460485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
1470485dae0Sopenharmony_ci        .clientId = INVALID_CLIENT_ID,
1480485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
1490485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
1500485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
1510485dae0Sopenharmony_ci        .extendLen = len,
1520485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
1530485dae0Sopenharmony_ci    };
1540485dae0Sopenharmony_ci
1550485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
1560485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
1570485dae0Sopenharmony_ci        .isAsync = true,
1580485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_ASYNC_TYPE,
1590485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
1600485dae0Sopenharmony_ci        .isCloud = true,
1610485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
1620485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
1630485dae0Sopenharmony_ci        .extendLen = len,
1640485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
1650485dae0Sopenharmony_ci    };
1660485dae0Sopenharmony_ci
1670485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
1680485dae0Sopenharmony_ci    int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
1690485dae0Sopenharmony_ci    ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
1700485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
1710485dae0Sopenharmony_ci
1720485dae0Sopenharmony_ci    DataInfo inputInfo = {
1730485dae0Sopenharmony_ci        .data = reinterpret_cast<unsigned char*>(inputData),
1740485dae0Sopenharmony_ci        .length = len,
1750485dae0Sopenharmony_ci    };
1760485dae0Sopenharmony_ci
1770485dae0Sopenharmony_ci    DataInfo outputInfo = {
1780485dae0Sopenharmony_ci        .data = nullptr,
1790485dae0Sopenharmony_ci        .length = 0
1800485dae0Sopenharmony_ci    };
1810485dae0Sopenharmony_ci    ClientCallback callback = ClientCallback();
1820485dae0Sopenharmony_ci    int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, &callback);
1830485dae0Sopenharmony_ci    ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
1840485dae0Sopenharmony_ci    ASSERT_NE(outputInfo.data, nullptr);
1850485dae0Sopenharmony_ci
1860485dae0Sopenharmony_ci    AieClientRelease(clientInfo, algoInfo, inputInfo);
1870485dae0Sopenharmony_ci
1880485dae0Sopenharmony_ci    AieClientDestroy(clientInfo);
1890485dae0Sopenharmony_ci}
1900485dae0Sopenharmony_ci
1910485dae0Sopenharmony_ci/**
1920485dae0Sopenharmony_ci * @tc.name: TestInputInfo001
1930485dae0Sopenharmony_ci * @tc.desc: Test preparing execution of certain synchronous plugin
1940485dae0Sopenharmony_ci *           with 'inputInfo.data = nullptr' and 'outputInfo.data = nullptr'.
1950485dae0Sopenharmony_ci * @tc.type: FUNC
1960485dae0Sopenharmony_ci * @tc.require: AR000F77NN
1970485dae0Sopenharmony_ci */
1980485dae0Sopenharmony_ciHWTEST_F(PrepareFunctionTest, TestInputInfo001, TestSize.Level1)
1990485dae0Sopenharmony_ci{
2000485dae0Sopenharmony_ci    HILOGI("[Test]TestInputInfo001.");
2010485dae0Sopenharmony_ci    const char *str = PREPARE_INPUT_ASYNC;
2020485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
2030485dae0Sopenharmony_ci    int len = strlen(str) + 1;
2040485dae0Sopenharmony_ci
2050485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
2060485dae0Sopenharmony_ci
2070485dae0Sopenharmony_ci    ClientInfo clientInfo = {
2080485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
2090485dae0Sopenharmony_ci        .clientId = INVALID_CLIENT_ID,
2100485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
2110485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
2120485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
2130485dae0Sopenharmony_ci        .extendLen = len,
2140485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
2150485dae0Sopenharmony_ci    };
2160485dae0Sopenharmony_ci
2170485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
2180485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
2190485dae0Sopenharmony_ci        .isAsync = false,
2200485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_SYNC_TYPE,
2210485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
2220485dae0Sopenharmony_ci        .isCloud = true,
2230485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
2240485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
2250485dae0Sopenharmony_ci        .extendLen = len,
2260485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
2270485dae0Sopenharmony_ci    };
2280485dae0Sopenharmony_ci
2290485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
2300485dae0Sopenharmony_ci    int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
2310485dae0Sopenharmony_ci    ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
2320485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
2330485dae0Sopenharmony_ci
2340485dae0Sopenharmony_ci    DataInfo inputInfo = {
2350485dae0Sopenharmony_ci        .data = nullptr,
2360485dae0Sopenharmony_ci        .length = 0,
2370485dae0Sopenharmony_ci    };
2380485dae0Sopenharmony_ci
2390485dae0Sopenharmony_ci    DataInfo outputInfo = {
2400485dae0Sopenharmony_ci        .data = nullptr,
2410485dae0Sopenharmony_ci        .length = 0
2420485dae0Sopenharmony_ci    };
2430485dae0Sopenharmony_ci    int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, nullptr);
2440485dae0Sopenharmony_ci    ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
2450485dae0Sopenharmony_ci    ASSERT_NE(outputInfo.data, nullptr);
2460485dae0Sopenharmony_ci
2470485dae0Sopenharmony_ci    AieClientRelease(clientInfo, algoInfo, inputInfo);
2480485dae0Sopenharmony_ci
2490485dae0Sopenharmony_ci    AieClientDestroy(clientInfo);
2500485dae0Sopenharmony_ci}
2510485dae0Sopenharmony_ci
2520485dae0Sopenharmony_ci/**
2530485dae0Sopenharmony_ci * @tc.name: TestInputInfo002
2540485dae0Sopenharmony_ci * @tc.desc: Test preparing execution of certain asynchronous plugin
2550485dae0Sopenharmony_ci *           with 'inputInfo.data = nullptr' and 'outputInfo.data = nullptr'.
2560485dae0Sopenharmony_ci * @tc.type: FUNC
2570485dae0Sopenharmony_ci * @tc.require: AR000F77NJ
2580485dae0Sopenharmony_ci */
2590485dae0Sopenharmony_ciHWTEST_F(PrepareFunctionTest, TestInputInfo002, TestSize.Level1)
2600485dae0Sopenharmony_ci{
2610485dae0Sopenharmony_ci    HILOGI("[Test]TestInputInfo002.");
2620485dae0Sopenharmony_ci    const char *str = PREPARE_INPUT_ASYNC;
2630485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
2640485dae0Sopenharmony_ci    int len = strlen(str) + 1;
2650485dae0Sopenharmony_ci
2660485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
2670485dae0Sopenharmony_ci
2680485dae0Sopenharmony_ci    ClientInfo clientInfo = {
2690485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
2700485dae0Sopenharmony_ci        .clientId = INVALID_CLIENT_ID,
2710485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
2720485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
2730485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
2740485dae0Sopenharmony_ci        .extendLen = len,
2750485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
2760485dae0Sopenharmony_ci    };
2770485dae0Sopenharmony_ci
2780485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
2790485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
2800485dae0Sopenharmony_ci        .isAsync = true,
2810485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_ASYNC_TYPE,
2820485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
2830485dae0Sopenharmony_ci        .isCloud = true,
2840485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
2850485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
2860485dae0Sopenharmony_ci        .extendLen = len,
2870485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
2880485dae0Sopenharmony_ci    };
2890485dae0Sopenharmony_ci
2900485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
2910485dae0Sopenharmony_ci    int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
2920485dae0Sopenharmony_ci    ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
2930485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
2940485dae0Sopenharmony_ci
2950485dae0Sopenharmony_ci    DataInfo inputInfo = {
2960485dae0Sopenharmony_ci        .data = nullptr,
2970485dae0Sopenharmony_ci        .length = 0,
2980485dae0Sopenharmony_ci    };
2990485dae0Sopenharmony_ci
3000485dae0Sopenharmony_ci    DataInfo outputInfo = {
3010485dae0Sopenharmony_ci        .data = nullptr,
3020485dae0Sopenharmony_ci        .length = 0
3030485dae0Sopenharmony_ci    };
3040485dae0Sopenharmony_ci    ClientCallback callback = ClientCallback();
3050485dae0Sopenharmony_ci    int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, &callback);
3060485dae0Sopenharmony_ci    ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
3070485dae0Sopenharmony_ci    ASSERT_NE(outputInfo.data, nullptr);
3080485dae0Sopenharmony_ci
3090485dae0Sopenharmony_ci    AieClientRelease(clientInfo, algoInfo, inputInfo);
3100485dae0Sopenharmony_ci
3110485dae0Sopenharmony_ci    AieClientDestroy(clientInfo);
3120485dae0Sopenharmony_ci}
3130485dae0Sopenharmony_ci
3140485dae0Sopenharmony_ci/**
3150485dae0Sopenharmony_ci * @tc.name: TestCallback001
3160485dae0Sopenharmony_ci * @tc.desc: Test preparing execution of certain plugin
3170485dae0Sopenharmony_ci *           with 'isAsync = false' and 'callback != nullptr'.
3180485dae0Sopenharmony_ci * @tc.type: FUNC
3190485dae0Sopenharmony_ci * @tc.require: AR000F77NJ
3200485dae0Sopenharmony_ci */
3210485dae0Sopenharmony_ciHWTEST_F(PrepareFunctionTest, TestCallback001, TestSize.Level1)
3220485dae0Sopenharmony_ci{
3230485dae0Sopenharmony_ci    HILOGI("[Test]TestCallback001.");
3240485dae0Sopenharmony_ci    const char *str = PREPARE_INPUT_ASYNC;
3250485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
3260485dae0Sopenharmony_ci    int len = strlen(str) + 1;
3270485dae0Sopenharmony_ci
3280485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
3290485dae0Sopenharmony_ci
3300485dae0Sopenharmony_ci    ClientInfo clientInfo = {
3310485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
3320485dae0Sopenharmony_ci        .clientId = INVALID_CLIENT_ID,
3330485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
3340485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
3350485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
3360485dae0Sopenharmony_ci        .extendLen = len,
3370485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
3380485dae0Sopenharmony_ci    };
3390485dae0Sopenharmony_ci
3400485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
3410485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
3420485dae0Sopenharmony_ci        .isAsync = false,
3430485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_SYNC_TYPE,
3440485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
3450485dae0Sopenharmony_ci        .isCloud = true,
3460485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
3470485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
3480485dae0Sopenharmony_ci        .extendLen = len,
3490485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
3500485dae0Sopenharmony_ci    };
3510485dae0Sopenharmony_ci
3520485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
3530485dae0Sopenharmony_ci    int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
3540485dae0Sopenharmony_ci    ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
3550485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
3560485dae0Sopenharmony_ci
3570485dae0Sopenharmony_ci    DataInfo inputInfo = {
3580485dae0Sopenharmony_ci        .data = reinterpret_cast<unsigned char*>(inputData),
3590485dae0Sopenharmony_ci        .length = len,
3600485dae0Sopenharmony_ci    };
3610485dae0Sopenharmony_ci
3620485dae0Sopenharmony_ci    DataInfo outputInfo = {
3630485dae0Sopenharmony_ci        .data = nullptr,
3640485dae0Sopenharmony_ci        .length = 0
3650485dae0Sopenharmony_ci    };
3660485dae0Sopenharmony_ci    ClientCallback callback = ClientCallback();
3670485dae0Sopenharmony_ci    int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, &callback);
3680485dae0Sopenharmony_ci    ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
3690485dae0Sopenharmony_ci    ASSERT_NE(outputInfo.data, nullptr);
3700485dae0Sopenharmony_ci
3710485dae0Sopenharmony_ci    AieClientRelease(clientInfo, algoInfo, inputInfo);
3720485dae0Sopenharmony_ci
3730485dae0Sopenharmony_ci    AieClientDestroy(clientInfo);
3740485dae0Sopenharmony_ci}
3750485dae0Sopenharmony_ci
3760485dae0Sopenharmony_ci/**
3770485dae0Sopenharmony_ci * @tc.name: TestCallback002
3780485dae0Sopenharmony_ci * @tc.desc: Test preparing execution of certain plugin
3790485dae0Sopenharmony_ci *           with 'isAsync = true' and 'callback = nullptr'.
3800485dae0Sopenharmony_ci * @tc.type: FUNC
3810485dae0Sopenharmony_ci * @tc.require: AR000F77NJ
3820485dae0Sopenharmony_ci */
3830485dae0Sopenharmony_ciHWTEST_F(PrepareFunctionTest, TestCallback002, TestSize.Level1)
3840485dae0Sopenharmony_ci{
3850485dae0Sopenharmony_ci    HILOGI("[Test]TestCallback002.");
3860485dae0Sopenharmony_ci    const char *str = PREPARE_INPUT_ASYNC;
3870485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
3880485dae0Sopenharmony_ci    int len = strlen(str) + 1;
3890485dae0Sopenharmony_ci
3900485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
3910485dae0Sopenharmony_ci
3920485dae0Sopenharmony_ci    ClientInfo clientInfo = {
3930485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
3940485dae0Sopenharmony_ci        .clientId = INVALID_CLIENT_ID,
3950485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
3960485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
3970485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
3980485dae0Sopenharmony_ci        .extendLen = len,
3990485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
4000485dae0Sopenharmony_ci    };
4010485dae0Sopenharmony_ci
4020485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
4030485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
4040485dae0Sopenharmony_ci        .isAsync = true,
4050485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_ASYNC_TYPE,
4060485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
4070485dae0Sopenharmony_ci        .isCloud = true,
4080485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
4090485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
4100485dae0Sopenharmony_ci        .extendLen = len,
4110485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
4120485dae0Sopenharmony_ci    };
4130485dae0Sopenharmony_ci
4140485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
4150485dae0Sopenharmony_ci    int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
4160485dae0Sopenharmony_ci    ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
4170485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
4180485dae0Sopenharmony_ci
4190485dae0Sopenharmony_ci    DataInfo inputInfo = {
4200485dae0Sopenharmony_ci        .data = reinterpret_cast<unsigned char*>(inputData),
4210485dae0Sopenharmony_ci        .length = len,
4220485dae0Sopenharmony_ci    };
4230485dae0Sopenharmony_ci
4240485dae0Sopenharmony_ci    DataInfo outputInfo = {
4250485dae0Sopenharmony_ci        .data = nullptr,
4260485dae0Sopenharmony_ci        .length = 0
4270485dae0Sopenharmony_ci    };
4280485dae0Sopenharmony_ci    int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, nullptr);
4290485dae0Sopenharmony_ci    ASSERT_NE(prepareRetCode, RETCODE_SUCCESS);
4300485dae0Sopenharmony_ci    ASSERT_EQ(outputInfo.data, nullptr);
4310485dae0Sopenharmony_ci
4320485dae0Sopenharmony_ci    AieClientRelease(clientInfo, algoInfo, inputInfo);
4330485dae0Sopenharmony_ci
4340485dae0Sopenharmony_ci    AieClientDestroy(clientInfo);
4350485dae0Sopenharmony_ci}
4360485dae0Sopenharmony_ci
4370485dae0Sopenharmony_ci/**
4380485dae0Sopenharmony_ci * @tc.name: TestRegisterCallbackProxy001
4390485dae0Sopenharmony_ci * @tc.desc: Test preparing execution of certain plugin
4400485dae0Sopenharmony_ci *           with 'isAsync = true' and 'callback != nullptr'.
4410485dae0Sopenharmony_ci * @tc.type: FUNC
4420485dae0Sopenharmony_ci * @tc.require: AR000F77NJ
4430485dae0Sopenharmony_ci */
4440485dae0Sopenharmony_cistatic HWTEST_F(PrepareFunctionTest, TestRegisterCallbackProxy001, TestSize.Level1)
4450485dae0Sopenharmony_ci{
4460485dae0Sopenharmony_ci    HILOGI("[Test]TestRegisterCallbackProxy001.");
4470485dae0Sopenharmony_ci    const char *str = PREPARE_INPUT_ASYNC;
4480485dae0Sopenharmony_ci    char *inputData = const_cast<char*>(str);
4490485dae0Sopenharmony_ci    int len = strlen(str) + 1;
4500485dae0Sopenharmony_ci
4510485dae0Sopenharmony_ci    ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
4520485dae0Sopenharmony_ci
4530485dae0Sopenharmony_ci    ClientInfo clientInfo = {
4540485dae0Sopenharmony_ci        .clientVersion = CLIENT_INFO_VERSION,
4550485dae0Sopenharmony_ci        .clientId = INVALID_CLIENT_ID,
4560485dae0Sopenharmony_ci        .sessionId = SESSION_ID,
4570485dae0Sopenharmony_ci        .serverUid = INVALID_UID,
4580485dae0Sopenharmony_ci        .clientUid = INVALID_UID,
4590485dae0Sopenharmony_ci        .extendLen = len,
4600485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
4610485dae0Sopenharmony_ci    };
4620485dae0Sopenharmony_ci
4630485dae0Sopenharmony_ci    AlgorithmInfo algoInfo = {
4640485dae0Sopenharmony_ci        .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
4650485dae0Sopenharmony_ci        .isAsync = true,
4660485dae0Sopenharmony_ci        .algorithmType = ALGORITHM_ASYNC_TYPE,
4670485dae0Sopenharmony_ci        .algorithmVersion = ALGORITHM_VERSION,
4680485dae0Sopenharmony_ci        .isCloud = true,
4690485dae0Sopenharmony_ci        .operateId = OPERATE_ID,
4700485dae0Sopenharmony_ci        .requestId = REQUEST_ID,
4710485dae0Sopenharmony_ci        .extendLen = len,
4720485dae0Sopenharmony_ci        .extendMsg = reinterpret_cast<unsigned char*>(inputData),
4730485dae0Sopenharmony_ci    };
4740485dae0Sopenharmony_ci
4750485dae0Sopenharmony_ci    ServiceDeadCb cb = ServiceDeadCb();
4760485dae0Sopenharmony_ci    int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
4770485dae0Sopenharmony_ci    ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
4780485dae0Sopenharmony_ci    ASSERT_TRUE(clientInfo.clientId > 0);
4790485dae0Sopenharmony_ci
4800485dae0Sopenharmony_ci    DataInfo inputInfo = {
4810485dae0Sopenharmony_ci        .data = reinterpret_cast<unsigned char*>(inputData),
4820485dae0Sopenharmony_ci        .length = len,
4830485dae0Sopenharmony_ci    };
4840485dae0Sopenharmony_ci
4850485dae0Sopenharmony_ci    DataInfo outputInfo = {
4860485dae0Sopenharmony_ci        .data = nullptr,
4870485dae0Sopenharmony_ci        .length = 0
4880485dae0Sopenharmony_ci    };
4890485dae0Sopenharmony_ci    ClientCallback callback = ClientCallback();
4900485dae0Sopenharmony_ci    int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, &callback);
4910485dae0Sopenharmony_ci    ASSERT_NE(prepareRetCode, RETCODE_SUCCESS);
4920485dae0Sopenharmony_ci    ASSERT_EQ(outputInfo.data, nullptr);
4930485dae0Sopenharmony_ci
4940485dae0Sopenharmony_ci    AieClientRelease(clientInfo, algoInfo, inputInfo);
4950485dae0Sopenharmony_ci
4960485dae0Sopenharmony_ci    AieClientDestroy(clientInfo);
4970485dae0Sopenharmony_ci}
498