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