• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <cstring>
17 #include <unistd.h>
18 
19 #include "gtest/gtest.h"
20 
21 #include "client_executor/include/i_aie_client.inl"
22 #include "protocol/retcode_inner/aie_retcode_inner.h"
23 #include "server_executor/include/server_executor.h"
24 #include "service_dead_cb.h"
25 #include "utils/aie_macros.h"
26 #include "utils/constants/constants.h"
27 #include "utils/log/aie_log.h"
28 
29 using namespace OHOS::AI;
30 using namespace testing::ext;
31 
32 namespace {
33     const int REQUEST_ID = 1;
34     const int OPERATE_ID = 2;
35     const long long CLIENT_INFO_VERSION = 1;
36     const int SESSION_ID = -1;
37     const long long ALGORITHM_INFO_CLIENT_VERSION = 1;
38     const int ALGORITHM_SYNC_TYPE = 0;
39     const int ALGORITHM_ASYNC_TYPE = 1;
40     const long long ALGORITHM_VERSION = 1;
41     const char * const CONFIG_DESCRIPTION = "Prepare config information";
42     const char * const PREPARE_INPUT_SYNC = "Sync prepare inputData";
43     const char * const PREPARE_INPUT_ASYNC = "Async prepare inputData";
44 }
45 
46 class ClientCallback : public IClientCb {
47 public:
48     ClientCallback() = default;
49     ~ClientCallback() override = default;
OnResult(const DataInfo & result,int resultCode,int requestId)50     void OnResult(const DataInfo &result, int resultCode, int requestId) override
51     {
52         HILOGI("[Test]TestAieClientAsyncProcess execute ClientCallbackOnResult."\
53             " resultCode[%d], requestId[%d], resultData[%s], resultLength[%d].",
54             resultCode, requestId, result.data, result.length);
55     }
56 };
57 
58 class PrepareFunctionTest : public testing::Test {
59 public:
60     // SetUpTestCase:The preset action of the test suite is executed before the first TestCase
SetUpTestCase()61     static void SetUpTestCase() {};
62 
63     // TearDownTestCase:The test suite cleanup action is executed after the last TestCase
TearDownTestCase()64     static void TearDownTestCase() {};
65 
66     // SetUp:Execute before each test case
SetUp()67     void SetUp() {};
68 
69     // TearDown:Execute after each test case
TearDown()70     void TearDown() {};
71 };
72 
73 /**
74  * @tc.name: TestAlgorithmInfo001
75  * @tc.desc: Test preparing execution of certain synchronous plugin.
76  * @tc.type: FUNC
77  * @tc.require: AR000F77NN
78  */
79 HWTEST_F(PrepareFunctionTest, TestAlgorithmInfo001, TestSize.Level1)
80 {
81     HILOGI("[Test]TestAlgorithmInfo001.");
82     const char *str = PREPARE_INPUT_SYNC;
83     char *inputData = const_cast<char*>(str);
84     int len = strlen(str) + 1;
85 
86     ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
87 
88     ClientInfo clientInfo = {
89         .clientVersion = CLIENT_INFO_VERSION,
90         .clientId = INVALID_CLIENT_ID,
91         .sessionId = SESSION_ID,
92         .serverUid = INVALID_UID,
93         .clientUid = INVALID_UID,
94         .extendLen = len,
95         .extendMsg = (unsigned char*)inputData,
96     };
97 
98     AlgorithmInfo algoInfo = {
99         .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
100         .isAsync = false,
101         .algorithmType = ALGORITHM_SYNC_TYPE,
102         .algorithmVersion = ALGORITHM_VERSION,
103         .isCloud = true,
104         .operateId = OPERATE_ID,
105         .requestId = REQUEST_ID,
106         .extendLen = len,
107         .extendMsg = (unsigned char*)inputData,
108     };
109 
110     ServiceDeadCb cb = ServiceDeadCb();
111     int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
112     ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
113     ASSERT_TRUE(clientInfo.clientId > 0);
114 
115     DataInfo inputInfo = {
116         .data = (unsigned char*)inputData,
117         .length = len,
118     };
119 
120     DataInfo outputInfo;
121     int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, nullptr);
122     ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
123     ASSERT_NE(outputInfo.data, nullptr);
124 
125     AieClientRelease(clientInfo, algoInfo, inputInfo);
126 
127     AieClientDestroy(clientInfo);
128 }
129 
130 /**
131  * @tc.name: TestAlgorithmInfo002
132  * @tc.desc: Test preparing execution of certain asynchronous plugin.
133  * @tc.type: FUNC
134  * @tc.require: AR000F77NN
135  */
136 HWTEST_F(PrepareFunctionTest, TestAlgorithmInfo002, TestSize.Level1)
137 {
138     HILOGI("[Test]TestAlgorithmInfo002.");
139     const char *str = PREPARE_INPUT_ASYNC;
140     char *inputData = const_cast<char*>(str);
141     int len = strlen(str) + 1;
142 
143     ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
144 
145     ClientInfo clientInfo = {
146         .clientVersion = CLIENT_INFO_VERSION,
147         .clientId = INVALID_CLIENT_ID,
148         .sessionId = SESSION_ID,
149         .serverUid = INVALID_UID,
150         .clientUid = INVALID_UID,
151         .extendLen = len,
152         .extendMsg = (unsigned char*)inputData,
153     };
154 
155     AlgorithmInfo algoInfo = {
156         .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
157         .isAsync = true,
158         .algorithmType = ALGORITHM_ASYNC_TYPE,
159         .algorithmVersion = ALGORITHM_VERSION,
160         .isCloud = true,
161         .operateId = OPERATE_ID,
162         .requestId = REQUEST_ID,
163         .extendLen = len,
164         .extendMsg = (unsigned char*)inputData,
165     };
166 
167     ServiceDeadCb cb = ServiceDeadCb();
168     int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
169     ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
170     ASSERT_TRUE(clientInfo.clientId > 0);
171 
172     DataInfo inputInfo = {
173         .data = (unsigned char*)inputData,
174         .length = len,
175     };
176 
177     DataInfo outputInfo = {
178         .data = nullptr,
179         .length = 0
180     };
181     ClientCallback callback = ClientCallback();
182     int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, &callback);
183     ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
184     ASSERT_NE(outputInfo.data, nullptr);
185 
186     AieClientRelease(clientInfo, algoInfo, inputInfo);
187 
188     AieClientDestroy(clientInfo);
189 }
190 
191 /**
192  * @tc.name: TestInputInfo001
193  * @tc.desc: Test preparing execution of certain synchronous plugin
194  *           with 'inputInfo.data = nullptr' and 'outputInfo.data = nullptr'.
195  * @tc.type: FUNC
196  * @tc.require: AR000F77NN
197  */
198 HWTEST_F(PrepareFunctionTest, TestInputInfo001, TestSize.Level1)
199 {
200     HILOGI("[Test]TestInputInfo001.");
201     const char *str = PREPARE_INPUT_ASYNC;
202     char *inputData = const_cast<char*>(str);
203     int len = strlen(str) + 1;
204 
205     ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
206 
207     ClientInfo clientInfo = {
208         .clientVersion = CLIENT_INFO_VERSION,
209         .clientId = INVALID_CLIENT_ID,
210         .sessionId = SESSION_ID,
211         .serverUid = INVALID_UID,
212         .clientUid = INVALID_UID,
213         .extendLen = len,
214         .extendMsg = (unsigned char*)inputData,
215     };
216 
217     AlgorithmInfo algoInfo = {
218         .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
219         .isAsync = false,
220         .algorithmType = ALGORITHM_SYNC_TYPE,
221         .algorithmVersion = ALGORITHM_VERSION,
222         .isCloud = true,
223         .operateId = OPERATE_ID,
224         .requestId = REQUEST_ID,
225         .extendLen = len,
226         .extendMsg = (unsigned char*)inputData,
227     };
228 
229     ServiceDeadCb cb = ServiceDeadCb();
230     int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
231     ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
232     ASSERT_TRUE(clientInfo.clientId > 0);
233 
234     DataInfo inputInfo = {
235         .data = nullptr,
236         .length = 0,
237     };
238 
239     DataInfo outputInfo = {
240         .data = nullptr,
241         .length = 0
242     };
243     int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, nullptr);
244     ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
245     ASSERT_NE(outputInfo.data, nullptr);
246 
247     AieClientRelease(clientInfo, algoInfo, inputInfo);
248 
249     AieClientDestroy(clientInfo);
250 }
251 
252 /**
253  * @tc.name: TestInputInfo002
254  * @tc.desc: Test preparing execution of certain asynchronous plugin
255  *           with 'inputInfo.data = nullptr' and 'outputInfo.data = nullptr'.
256  * @tc.type: FUNC
257  * @tc.require: AR000F77NJ
258  */
259 HWTEST_F(PrepareFunctionTest, TestInputInfo002, TestSize.Level1)
260 {
261     HILOGI("[Test]TestInputInfo002.");
262     const char *str = PREPARE_INPUT_ASYNC;
263     char *inputData = const_cast<char*>(str);
264     int len = strlen(str) + 1;
265 
266     ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
267 
268     ClientInfo clientInfo = {
269         .clientVersion = CLIENT_INFO_VERSION,
270         .clientId = INVALID_CLIENT_ID,
271         .sessionId = SESSION_ID,
272         .serverUid = INVALID_UID,
273         .clientUid = INVALID_UID,
274         .extendLen = len,
275         .extendMsg = (unsigned char*)inputData,
276     };
277 
278     AlgorithmInfo algoInfo = {
279         .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
280         .isAsync = true,
281         .algorithmType = ALGORITHM_ASYNC_TYPE,
282         .algorithmVersion = ALGORITHM_VERSION,
283         .isCloud = true,
284         .operateId = OPERATE_ID,
285         .requestId = REQUEST_ID,
286         .extendLen = len,
287         .extendMsg = (unsigned char*)inputData,
288     };
289 
290     ServiceDeadCb cb = ServiceDeadCb();
291     int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
292     ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
293     ASSERT_TRUE(clientInfo.clientId > 0);
294 
295     DataInfo inputInfo = {
296         .data = nullptr,
297         .length = 0,
298     };
299 
300     DataInfo outputInfo = {
301         .data = nullptr,
302         .length = 0
303     };
304     ClientCallback callback = ClientCallback();
305     int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, &callback);
306     ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
307     ASSERT_NE(outputInfo.data, nullptr);
308 
309     AieClientRelease(clientInfo, algoInfo, inputInfo);
310 
311     AieClientDestroy(clientInfo);
312 }
313 
314 /**
315  * @tc.name: TestCallback001
316  * @tc.desc: Test preparing execution of certain plugin
317  *           with 'isAsync = false' and 'callback != nullptr'.
318  * @tc.type: FUNC
319  * @tc.require: AR000F77NJ
320  */
321 HWTEST_F(PrepareFunctionTest, TestCallback001, TestSize.Level1)
322 {
323     HILOGI("[Test]TestCallback001.");
324     const char *str = PREPARE_INPUT_ASYNC;
325     char *inputData = const_cast<char*>(str);
326     int len = strlen(str) + 1;
327 
328     ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
329 
330     ClientInfo clientInfo = {
331         .clientVersion = CLIENT_INFO_VERSION,
332         .clientId = INVALID_CLIENT_ID,
333         .sessionId = SESSION_ID,
334         .serverUid = INVALID_UID,
335         .clientUid = INVALID_UID,
336         .extendLen = len,
337         .extendMsg = (unsigned char*)inputData,
338     };
339 
340     AlgorithmInfo algoInfo = {
341         .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
342         .isAsync = false,
343         .algorithmType = ALGORITHM_SYNC_TYPE,
344         .algorithmVersion = ALGORITHM_VERSION,
345         .isCloud = true,
346         .operateId = OPERATE_ID,
347         .requestId = REQUEST_ID,
348         .extendLen = len,
349         .extendMsg = (unsigned char*)inputData,
350     };
351 
352     ServiceDeadCb cb = ServiceDeadCb();
353     int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
354     ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
355     ASSERT_TRUE(clientInfo.clientId > 0);
356 
357     DataInfo inputInfo = {
358         .data = (unsigned char*)inputData,
359         .length = len,
360     };
361 
362     DataInfo outputInfo = {
363         .data = nullptr,
364         .length = 0
365     };
366     ClientCallback callback = ClientCallback();
367     int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, &callback);
368     ASSERT_EQ(prepareRetCode, RETCODE_SUCCESS);
369     ASSERT_NE(outputInfo.data, nullptr);
370 
371     AieClientRelease(clientInfo, algoInfo, inputInfo);
372 
373     AieClientDestroy(clientInfo);
374 }
375 
376 /**
377  * @tc.name: TestCallback002
378  * @tc.desc: Test preparing execution of certain plugin
379  *           with 'isAsync = true' and 'callback = nullptr'.
380  * @tc.type: FUNC
381  * @tc.require: AR000F77NJ
382  */
383 HWTEST_F(PrepareFunctionTest, TestCallback002, TestSize.Level1)
384 {
385     HILOGI("[Test]TestCallback002.");
386     const char *str = PREPARE_INPUT_ASYNC;
387     char *inputData = const_cast<char*>(str);
388     int len = strlen(str) + 1;
389 
390     ConfigInfo configInfo {.description = CONFIG_DESCRIPTION};
391 
392     ClientInfo clientInfo = {
393         .clientVersion = CLIENT_INFO_VERSION,
394         .clientId = INVALID_CLIENT_ID,
395         .sessionId = SESSION_ID,
396         .serverUid = INVALID_UID,
397         .clientUid = INVALID_UID,
398         .extendLen = len,
399         .extendMsg = (unsigned char*)inputData,
400     };
401 
402     AlgorithmInfo algoInfo = {
403         .clientVersion = ALGORITHM_INFO_CLIENT_VERSION,
404         .isAsync = true,
405         .algorithmType = ALGORITHM_ASYNC_TYPE,
406         .algorithmVersion = ALGORITHM_VERSION,
407         .isCloud = true,
408         .operateId = OPERATE_ID,
409         .requestId = REQUEST_ID,
410         .extendLen = len,
411         .extendMsg = (unsigned char*)inputData,
412     };
413 
414     ServiceDeadCb cb = ServiceDeadCb();
415     int initRetCode = AieClientInit(configInfo, clientInfo, algoInfo, &cb);
416     ASSERT_EQ(initRetCode, RETCODE_SUCCESS);
417     ASSERT_TRUE(clientInfo.clientId > 0);
418 
419     DataInfo inputInfo = {
420         .data = (unsigned char*)inputData,
421         .length = len,
422     };
423 
424     DataInfo outputInfo = {
425         .data = nullptr,
426         .length = 0
427     };
428     int prepareRetCode = AieClientPrepare(clientInfo, algoInfo, inputInfo, outputInfo, nullptr);
429     ASSERT_NE(prepareRetCode, RETCODE_SUCCESS);
430     ASSERT_EQ(outputInfo.data, nullptr);
431 
432     AieClientRelease(clientInfo, algoInfo, inputInfo);
433 
434     AieClientDestroy(clientInfo);
435 }
436