1 /*
2 * Copyright (C) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "gtest/gtest.h"
17 #include <cstdlib>
18 #include <cstring>
19 #include <ctime>
20 #include <string>
21
22 #include "client_executor/include/i_aie_client.inl"
23 #include "utils/aie_client_common.h"
24 #include "utils/aie_client_const.h"
25 #include "utils/service_dead_cb.h"
26 #include "utils/utils.h"
27
28 using namespace ::testing;
29 using namespace testing::ext;
30 using namespace OHOS::AI;
31
32 namespace {
33 const int DESCRIPTION_LENGTH_20 = 21;
34 const int DESCRIPTION_LENGTH_128 = 129;
35 }
36
37 class AieClientInitFunctionTest : public testing::Test {};
38
39 /**
40 * Tests AieClientInit.
41 *
42 * configDesc The value or the input parameter ConfigInfo.description of AieClientInit.
43 * isAsync The value or the input parameter AlgorithmInfo.isAsync of AieClientInit.
44 * bool isDeadCbNotNull Whether the dead callback parameter is not null.
45 */
TestAieClientInit(const char * configDesc,bool isAsync,bool isDeadCbNotNull)46 static void TestAieClientInit(const char *configDesc, bool isAsync, bool isDeadCbNotNull)
47 {
48 // Step 0: Defines variables.
49 ConfigInfo configInfo;
50 GetConfigInfo2(configInfo, configDesc);
51
52 ClientInfo clientInfo;
53 GetClientInfo(clientInfo);
54
55 AlgorithmInfo algorithmInfo;
56 int algorithmType = isAsync ? ALGORITHM_TYPE_ASYNC : ALGORITHM_TYPE_SYNC;
57 GetSyncAlgorithmInfo(algorithmInfo, isAsync, algorithmType);
58
59 ServiceDeadCb *cb = nullptr;
60 if (isDeadCbNotNull) {
61 AIE_NEW(cb, ServiceDeadCb());
62 }
63
64 // Step 1: Invokes AieClientInit.
65 int initReturnCode = AieClientInit(configInfo, clientInfo, algorithmInfo, cb);
66 EXPECT_EQ(RETCODE_SUCCESS, initReturnCode) << "AieClientInit is failed!";
67 EXPECT_EQ(true, clientInfo.clientId > 0) << "clientId(" << std::to_string(clientInfo.clientId) << ") is incorrect!";
68 EXPECT_EQ(true, clientInfo.sessionId > 0) << "sessionId(" << std::to_string(clientInfo.sessionId)
69 << ") is incorrect!";
70
71 // Step 2: Invoke AieClientDestroy().
72 int destroyReturnCode = AieClientDestroy(clientInfo);
73 EXPECT_EQ(RETCODE_SUCCESS, destroyReturnCode) << "AieClientDestroy is failed!";
74
75 AIE_DELETE(cb);
76 }
77
78 /**
79 * @tc.number : SUB_AI_AIDistributedAbility_HiAiEngine_Lite_Function_HiAiAPI_AIEClient_AieClientInit_configInfo_0100
80 * @tc.name : 01. configInfo中的description设置为20位字符串,调用AieClientInit返回成功
81 * @tc.desc : [C- SOFTWARE -0200]
82 */
83 HWTEST_F(AieClientInitFunctionTest, testAieClientInitFunction0101, Function | MediumTest | Level1)
84 {
85 HILOGI("[Test]testAieClientInitFunction0101.");
86 char configDesc[DESCRIPTION_LENGTH_20];
87 GetRandomString(DESCRIPTION_LENGTH_20, configDesc);
88 bool isAsync = GetRandomBool();
89 TestAieClientInit(configDesc, isAsync, true);
90 }
91
92 /**
93 * @tc.number : SUB_AI_AIDistributedAbility_HiAiEngine_Lite_Function_HiAiAPI_AIEClient_AieClientInit_configInfo_0200
94 * @tc.name : 02. configInfo中的description设置为128位字符串,调用AieClientInit返回成功
95 * @tc.desc : [C- SOFTWARE -0200]
96 */
97 HWTEST_F(AieClientInitFunctionTest, testAieClientInitFunction0102, Function | MediumTest | Level3)
98 {
99 HILOGI("[Test]testAieClientInitFunction0102.");
100 char configDesc[DESCRIPTION_LENGTH_128];
101 GetRandomString(DESCRIPTION_LENGTH_128, configDesc);
102 bool isAsync = GetRandomBool();
103 TestAieClientInit(configDesc, isAsync, true);
104 }
105
106 /**
107 * @tc.number : SUB_AI_AIDistributedAbility_HiAiEngine_Lite_Function_HiAiAPI_AIEClient_AieClientInit_configInfo_0300
108 * @tc.name : 03. configInfo中的description设置为空,调用AieClientInit返回成功
109 * @tc.desc : [C- SOFTWARE -0200]
110 */
111 HWTEST_F(AieClientInitFunctionTest, testAieClientInitFunction0103, Function | MediumTest | Level3)
112 {
113 HILOGI("[Test]testAieClientInitFunction0103.");
114 const char* configDesc = "";
115 bool isAsync = GetRandomBool();
116 TestAieClientInit(configDesc, isAsync, true);
117 }
118
119 /**
120 * @tc.number : SUB_AI_AIDistributedAbility_HiAiEngine_Lite_Function_HiAiAPI_AIEClient_AieClientInit_algorithmInfo_0100
121 * @tc.name : 01. algorithmInfo中isAsync=false,调用AieClientInit返回成功
122 * @tc.desc : [C- SOFTWARE -0200]
123 */
124 HWTEST_F(AieClientInitFunctionTest, testAieClientInitFunction0201, Function | MediumTest | Level3)
125 {
126 HILOGI("[Test]testAieClientInitFunction0201.");
127 TestAieClientInit(CONFIG_DESCRIPTION, false, true);
128 }
129
130 /**
131 * @tc.number : SUB_AI_AIDistributedAbility_HiAiEngine_Lite_Function_HiAiAPI_AIEClient_AieClientInit_algorithmInfo_0200
132 * @tc.name : 02. algorithmInfo中isAsync=true,调用AieClientInit返回成功
133 * @tc.desc : [C- SOFTWARE -0200]
134 */
135 HWTEST_F(AieClientInitFunctionTest, testAieClientInitFunction0202, Function | MediumTest | Level3)
136 {
137 HILOGI("[Test]testAieClientInitFunction0202.");
138 TestAieClientInit(CONFIG_DESCRIPTION, true, true);
139 }
140
141 /**
142 * @tc.number : SUB_AI_AIDistributedAbility_HiAiEngine_Lite_Function_HiAiAPI_AIEClient_AieClientInit_cb_0100
143 * @tc.name : 01. cb=空,调用AieClientInit返回成功
144 * @tc.desc : [C- SOFTWARE -0200]
145 */
146 HWTEST_F(AieClientInitFunctionTest, testAieClientInitFunction0301, Function | MediumTest | Level3)
147 {
148 HILOGI("[Test]testAieClientInitFunction0301.");
149 bool isAsync = GetRandomBool();
150 TestAieClientInit(CONFIG_DESCRIPTION, isAsync, false);
151 }
152