• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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 
18 #include "hdf_base.h"
19 #include "iam_logger.h"
20 #include "iam_ptr.h"
21 
22 #include "face_auth_defines.h"
23 #include "face_auth_executor_hdi.h"
24 #include "mock_iexecute_callback.h"
25 #include "mock_iexecutor.h"
26 
27 #define LOG_LABEL OHOS::UserIam::Common::LABEL_FACE_AUTH_SA
28 
29 using namespace testing;
30 using namespace testing::ext;
31 using namespace OHOS::UserIam::Common;
32 namespace FaceHdi = OHOS::HDI::FaceAuth::V1_0;
33 
34 namespace OHOS {
35 namespace UserIam {
36 namespace FaceAuth {
37 using IamResultCode = OHOS::UserIam::UserAuth::ResultCode;
38 using IamExecutorRole = OHOS::UserIam::UserAuth::ExecutorRole;
39 using IamExecutorInfo = OHOS::UserIam::UserAuth::ExecutorInfo;
40 using IamAuthType = OHOS::UserIam::UserAuth::AuthType;
41 using IamExecutorSecureLevel = OHOS::UserIam::UserAuth::ExecutorSecureLevel;
42 using IamPropertyMode = OHOS::UserIam::UserAuth::PropertyMode;
43 namespace {
44 static const std::map<HDF_STATUS, IamResultCode> RESULT_CODE_MAP = {
45     {HDF_SUCCESS, IamResultCode::SUCCESS},
46     {HDF_FAILURE, IamResultCode::GENERAL_ERROR},
47     {HDF_ERR_TIMEOUT, IamResultCode::TIMEOUT},
48     {HDF_ERR_QUEUE_FULL, IamResultCode::BUSY},
49     {HDF_ERR_DEVICE_BUSY, IamResultCode::BUSY},
50     {static_cast<HDF_STATUS>(HDF_ERR_DEVICE_BUSY - 1), IamResultCode::GENERAL_ERROR},
51     {static_cast<HDF_STATUS>(HDF_SUCCESS + 1), IamResultCode::GENERAL_ERROR},
52 };
53 }
54 
55 class FaceAuthExecutorHdiUnitTest : public testing::Test {
56 public:
57     static void SetUpTestCase();
58     static void TearDownTestCase();
59     void SetUp();
60     void TearDown();
61 };
62 
SetUpTestCase()63 void FaceAuthExecutorHdiUnitTest::SetUpTestCase()
64 {
65 }
66 
TearDownTestCase()67 void FaceAuthExecutorHdiUnitTest::TearDownTestCase()
68 {
69 }
70 
SetUp()71 void FaceAuthExecutorHdiUnitTest::SetUp()
72 {
73 }
74 
TearDown()75 void FaceAuthExecutorHdiUnitTest::TearDown()
76 {
77 }
78 
79 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetExecutorInfo_001, TestSize.Level0)
80 {
81     auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
82     ASSERT_TRUE(executorProxy != nullptr);
__anon8efcb2d70202(FaceHdi::ExecutorInfo &info) 83     EXPECT_CALL(*executorProxy, GetExecutorInfo(_)).Times(Exactly(1)).WillOnce([](FaceHdi::ExecutorInfo &info) {
84         info = {
85             .executorRole = FaceHdi::ExecutorRole::ALL_IN_ONE,
86             .authType = FaceHdi::FACE,
87             .esl = FaceHdi::ExecutorSecureLevel::ESL0,
88         };
89         return HDF_SUCCESS;
90     });
91     FaceAuthExecutorHdi executorHdi(executorProxy);
92     IamExecutorInfo info = {};
93     auto ret = executorHdi.GetExecutorInfo(info);
94     EXPECT_TRUE(info.executorRole == IamExecutorRole::ALL_IN_ONE);
95     EXPECT_TRUE(info.authType == IamAuthType::FACE);
96     EXPECT_TRUE(info.esl == IamExecutorSecureLevel::ESL0);
97     EXPECT_TRUE(ret == IamResultCode::SUCCESS);
98 }
99 
100 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetExecutorInfo_002, TestSize.Level0)
101 {
102     for (const auto &pair : RESULT_CODE_MAP) {
103         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
104         ASSERT_TRUE(executorProxy != nullptr);
105         EXPECT_CALL(*executorProxy, GetExecutorInfo(_))
106             .Times(Exactly(1))
__anon8efcb2d70302(FaceHdi::ExecutorInfo &info) 107             .WillOnce([&pair](FaceHdi::ExecutorInfo &info) {
108                 info = {
109                     .executorRole = FaceHdi::ExecutorRole::ALL_IN_ONE,
110                     .authType = FaceHdi::FACE,
111                     .esl = FaceHdi::ExecutorSecureLevel::ESL0,
112                 };
113                 return static_cast<int32_t>(pair.first);
114             });
115         FaceAuthExecutorHdi executorHdi(executorProxy);
116         IamExecutorInfo info = {};
117         auto ret = executorHdi.GetExecutorInfo(info);
118         EXPECT_TRUE(ret == pair.second);
119     }
120 }
121 
122 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetExecutorInfo_003, TestSize.Level0)
123 {
124     static const std::map<FaceHdi::AuthType, pair<IamAuthType, IamResultCode>> data = {
125         {FaceHdi::FACE, {IamAuthType::FACE, IamResultCode::SUCCESS}},
126         {static_cast<FaceHdi::AuthType>(FaceHdi::FACE + 1),
127             {IamAuthType::FACE, IamResultCode::GENERAL_ERROR}},
128         {static_cast<FaceHdi::AuthType>(FaceHdi::FACE - 1),
129             {IamAuthType::FACE, IamResultCode::GENERAL_ERROR}},
130     };
131     for (const auto &pair : data) {
132         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
133         ASSERT_TRUE(executorProxy != nullptr);
134         EXPECT_CALL(*executorProxy, GetExecutorInfo(_))
135             .Times(Exactly(1))
__anon8efcb2d70402(FaceHdi::ExecutorInfo &info) 136             .WillOnce([&pair](FaceHdi::ExecutorInfo &info) {
137                 info = {
138                     .executorRole = FaceHdi::ExecutorRole::ALL_IN_ONE,
139                     .authType = pair.first,
140                     .esl = FaceHdi::ExecutorSecureLevel::ESL0,
141                 };
142                 return HDF_SUCCESS;
143             });
144         FaceAuthExecutorHdi executorHdi(executorProxy);
145         IamExecutorInfo info = {};
146         auto ret = executorHdi.GetExecutorInfo(info);
147         EXPECT_TRUE(ret == pair.second.second);
148         if (ret == IamResultCode::SUCCESS) {
149             EXPECT_TRUE(info.authType == pair.second.first);
150         }
151     }
152 }
153 
154 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetExecutorInfo_004, TestSize.Level0)
155 {
156     static const std::map<FaceHdi::ExecutorRole, pair<IamExecutorRole, IamResultCode>> data = {
157         {FaceHdi::ExecutorRole::COLLECTOR, {IamExecutorRole::COLLECTOR, IamResultCode::SUCCESS}},
158         {FaceHdi::ExecutorRole::VERIFIER, {IamExecutorRole::VERIFIER, IamResultCode::SUCCESS}},
159         {FaceHdi::ExecutorRole::ALL_IN_ONE, {IamExecutorRole::ALL_IN_ONE, IamResultCode::SUCCESS}},
160         {static_cast<FaceHdi::ExecutorRole>(FaceHdi::ExecutorRole::COLLECTOR - 1),
161             {IamExecutorRole::ALL_IN_ONE, IamResultCode::GENERAL_ERROR}},
162         {static_cast<FaceHdi::ExecutorRole>(FaceHdi::ExecutorRole::ALL_IN_ONE + 1),
163             {IamExecutorRole::ALL_IN_ONE, IamResultCode::GENERAL_ERROR}},
164     };
165     for (const auto &pair : data) {
166         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
167         ASSERT_TRUE(executorProxy != nullptr);
168         EXPECT_CALL(*executorProxy, GetExecutorInfo(_))
169             .Times(Exactly(1))
__anon8efcb2d70502(FaceHdi::ExecutorInfo &info) 170             .WillOnce([&pair](FaceHdi::ExecutorInfo &info) {
171                 info = {
172                     .executorRole = pair.first,
173                     .authType = FaceHdi::FACE,
174                     .esl = FaceHdi::ExecutorSecureLevel::ESL0,
175                 };
176                 return HDF_SUCCESS;
177             });
178         FaceAuthExecutorHdi executorHdi(executorProxy);
179         IamExecutorInfo info = {};
180         auto ret = executorHdi.GetExecutorInfo(info);
181         EXPECT_TRUE(ret == pair.second.second);
182         if (ret == IamResultCode::SUCCESS) {
183             EXPECT_TRUE(info.executorRole == pair.second.first);
184         }
185     }
186 }
187 
188 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetExecutorInfo_005, TestSize.Level0)
189 {
190     static const std::map<FaceHdi::ExecutorSecureLevel, pair<IamExecutorSecureLevel, IamResultCode>> data =
191         {
192             {FaceHdi::ExecutorSecureLevel::ESL0, {IamExecutorSecureLevel::ESL0, IamResultCode::SUCCESS}},
193             {FaceHdi::ExecutorSecureLevel::ESL1, {IamExecutorSecureLevel::ESL1, IamResultCode::SUCCESS}},
194             {FaceHdi::ExecutorSecureLevel::ESL2, {IamExecutorSecureLevel::ESL2, IamResultCode::SUCCESS}},
195             {FaceHdi::ExecutorSecureLevel::ESL3, {IamExecutorSecureLevel::ESL3, IamResultCode::SUCCESS}},
196             {static_cast<FaceHdi::ExecutorSecureLevel>(FaceHdi::ExecutorSecureLevel::ESL0 - 1),
197                 {IamExecutorSecureLevel::ESL3, IamResultCode::GENERAL_ERROR}},
198             {static_cast<FaceHdi::ExecutorSecureLevel>(FaceHdi::ExecutorSecureLevel::ESL3 + 1),
199                 {IamExecutorSecureLevel::ESL3, IamResultCode::GENERAL_ERROR}},
200         };
201     for (const auto &pair : data) {
202         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
203         ASSERT_TRUE(executorProxy != nullptr);
204         EXPECT_CALL(*executorProxy, GetExecutorInfo(_))
205             .Times(Exactly(1))
__anon8efcb2d70602(FaceHdi::ExecutorInfo &info) 206             .WillOnce([&pair](FaceHdi::ExecutorInfo &info) {
207                 info = {
208                     .executorRole = FaceHdi::ExecutorRole::ALL_IN_ONE,
209                     .authType = FaceHdi::FACE,
210                     .esl = pair.first,
211                 };
212                 return HDF_SUCCESS;
213             });
214         FaceAuthExecutorHdi executorHdi(executorProxy);
215         IamExecutorInfo info = {};
216         auto ret = executorHdi.GetExecutorInfo(info);
217         EXPECT_TRUE(ret == pair.second.second);
218         if (ret == IamResultCode::SUCCESS) {
219             EXPECT_TRUE(info.esl == pair.second.first);
220         }
221     }
222 }
223 
224 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetExecutorInfo_006, TestSize.Level0)
225 {
226     FaceAuthExecutorHdi executorHdi(nullptr);
227     IamExecutorInfo info = {};
228     auto ret = executorHdi.GetExecutorInfo(info);
229     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
230 }
231 
232 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetTemplateInfo_001, TestSize.Level0)
233 {
234     const UserAuth::TemplateInfo data = {.executorType = 1,
235         .freezingTime = 2,
236         .remainTimes = 3,
237         .extraInfo = {4, 5, 6}};
238     auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
239     ASSERT_TRUE(executorProxy != nullptr);
240     EXPECT_CALL(*executorProxy, GetTemplateInfo(_, _))
241         .Times(Exactly(1))
__anon8efcb2d70702(uint64_t templateId, FaceHdi::TemplateInfo &info) 242         .WillOnce([&data](uint64_t templateId, FaceHdi::TemplateInfo &info) {
243             info = {.executorType = data.executorType,
244                 .lockoutDuration = data.freezingTime,
245                 .remainAttempts = data.remainTimes,
246                 .extraInfo = data.extraInfo};
247             return HDF_SUCCESS;
248         });
249     FaceAuthExecutorHdi executorHdi(executorProxy);
250     UserAuth::TemplateInfo info = {};
251     auto ret = executorHdi.GetTemplateInfo(0, info);
252     EXPECT_TRUE(ret == IamResultCode::SUCCESS);
253     EXPECT_TRUE(info.executorType == data.executorType);
254     EXPECT_TRUE(info.freezingTime == data.freezingTime);
255     EXPECT_TRUE(info.remainTimes == data.remainTimes);
256     EXPECT_TRUE(info.extraInfo == data.extraInfo);
257 }
258 
259 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetTemplateInfo_002, TestSize.Level0)
260 {
261     for (const auto &pair : RESULT_CODE_MAP) {
262         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
263         ASSERT_TRUE(executorProxy != nullptr);
264         EXPECT_CALL(*executorProxy, GetTemplateInfo(_, _))
265             .Times(Exactly(1))
__anon8efcb2d70802(uint64_t templateId, FaceHdi::TemplateInfo &info) 266             .WillOnce([&pair](uint64_t templateId, FaceHdi::TemplateInfo &info) { return pair.first; });
267         FaceAuthExecutorHdi executorHdi(executorProxy);
268         UserAuth::TemplateInfo info = {};
269         auto ret = executorHdi.GetTemplateInfo(0, info);
270         EXPECT_TRUE(ret == pair.second);
271     }
272 }
273 
274 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_GetTemplateInfo_003, TestSize.Level0)
275 {
276     FaceAuthExecutorHdi executorHdi(nullptr);
277     UserAuth::TemplateInfo info = {};
278     auto ret = executorHdi.GetTemplateInfo(0, info);
279     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
280 }
281 
282 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_OnRegisterFinish_001, TestSize.Level0)
283 {
284     for (const auto &pair : RESULT_CODE_MAP) {
285         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
286         ASSERT_TRUE(executorProxy != nullptr);
287         EXPECT_CALL(*executorProxy, OnRegisterFinish(_, _, _))
288             .Times(Exactly(1))
289             .WillOnce(
290                 [&pair](const std::vector<uint64_t> &templateIdList, const std::vector<uint8_t> &frameworkPublicKey,
__anon8efcb2d70902(const std::vector<uint64_t> &templateIdList, const std::vector<uint8_t> &frameworkPublicKey, const std::vector<uint8_t> &extraInfo) 291                     const std::vector<uint8_t> &extraInfo) { return pair.first; });
292         FaceAuthExecutorHdi executorHdi(executorProxy);
293         UserAuth::TemplateInfo info = {};
294         auto ret =
295             executorHdi.OnRegisterFinish(std::vector<uint64_t>(), std::vector<uint8_t>(), std::vector<uint8_t>());
296         EXPECT_TRUE(ret == pair.second);
297     }
298 }
299 
300 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_OnRegisterFinish_002, TestSize.Level0)
301 {
302     FaceAuthExecutorHdi executorHdi(nullptr);
303     auto ret = executorHdi.OnRegisterFinish(std::vector<uint64_t>(), std::vector<uint8_t>(), std::vector<uint8_t>());
304     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
305 }
306 
307 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Enroll_001, TestSize.Level0)
308 {
309     for (const auto &pair : RESULT_CODE_MAP) {
310         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
311         ASSERT_TRUE(executorProxy != nullptr);
312         EXPECT_CALL(*executorProxy, Enroll(_, _, _))
313             .Times(Exactly(1))
314             .WillOnce([&pair](uint64_t scheduleId, const std::vector<uint8_t> &extraInfo,
__anon8efcb2d70a02(uint64_t scheduleId, const std::vector<uint8_t> &extraInfo, const sptr<FaceHdi::IExecutorCallback> &callbackObj) 315                           const sptr<FaceHdi::IExecutorCallback> &callbackObj) { return pair.first; });
316         FaceAuthExecutorHdi executorHdi(executorProxy);
317         auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
318         ASSERT_TRUE(executeCallback != nullptr);
319         auto ret = executorHdi.Enroll(0, 0, std::vector<uint8_t>(), executeCallback);
320         EXPECT_TRUE(ret == pair.second);
321     }
322 }
323 
324 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Enroll_002, TestSize.Level0)
325 {
326     auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
327     ASSERT_TRUE(executorProxy != nullptr);
328     EXPECT_CALL(*executorProxy, Enroll(_, _, _)).Times(Exactly(0));
329     FaceAuthExecutorHdi executorHdi(executorProxy);
330     auto ret = executorHdi.Enroll(0, 0, std::vector<uint8_t>(), nullptr);
331     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
332 }
333 
334 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Enroll_003, TestSize.Level0)
335 {
336     FaceAuthExecutorHdi executorHdi(nullptr);
337     auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
338     ASSERT_TRUE(executeCallback != nullptr);
339     auto ret = executorHdi.Enroll(0, 0, std::vector<uint8_t>(), executeCallback);
340     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
341 }
342 
343 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Authenticate_001, TestSize.Level0)
344 {
345     for (const auto &pair : RESULT_CODE_MAP) {
346         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
347         ASSERT_TRUE(executorProxy != nullptr);
348         EXPECT_CALL(*executorProxy, Authenticate(_, _, _, _))
349             .Times(Exactly(1))
350             .WillOnce([&pair](uint64_t scheduleId, const std::vector<uint64_t> &templateIdList,
351                           const std::vector<uint8_t> &extraInfo,
__anon8efcb2d70b02(uint64_t scheduleId, const std::vector<uint64_t> &templateIdList, const std::vector<uint8_t> &extraInfo, const sptr<FaceHdi::IExecutorCallback> &callbackObj) 352                           const sptr<FaceHdi::IExecutorCallback> &callbackObj) { return pair.first; });
353         FaceAuthExecutorHdi executorHdi(executorProxy);
354         auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
355         ASSERT_TRUE(executeCallback != nullptr);
356         auto ret = executorHdi.Authenticate(0, 0, std::vector<uint64_t>(), std::vector<uint8_t>(), executeCallback);
357         EXPECT_TRUE(ret == pair.second);
358     }
359 }
360 
361 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Authenticate_002, TestSize.Level0)
362 {
363     auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
364     ASSERT_TRUE(executorProxy != nullptr);
365     EXPECT_CALL(*executorProxy, Authenticate(_, _, _, _)).Times(Exactly(0));
366     FaceAuthExecutorHdi executorHdi(executorProxy);
367     auto ret = executorHdi.Authenticate(0, 0, std::vector<uint64_t>(), std::vector<uint8_t>(), nullptr);
368     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
369 }
370 
371 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Authenticate_003, TestSize.Level0)
372 {
373     FaceAuthExecutorHdi executorHdi(nullptr);
374     auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
375     ASSERT_TRUE(executeCallback != nullptr);
376     auto ret = executorHdi.Authenticate(0, 0, std::vector<uint64_t>(), std::vector<uint8_t>(), executeCallback);
377     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
378 }
379 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Identify_001, TestSize.Level0)
380 {
381     for (const auto &pair : RESULT_CODE_MAP) {
382         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
383         ASSERT_TRUE(executorProxy != nullptr);
384         EXPECT_CALL(*executorProxy, Identify(_, _, _))
385             .Times(Exactly(1))
386             .WillOnce([&pair](uint64_t scheduleId, const std::vector<uint8_t> &extraInfo,
__anon8efcb2d70c02(uint64_t scheduleId, const std::vector<uint8_t> &extraInfo, const sptr<FaceHdi::IExecutorCallback> &callbackObj) 387                           const sptr<FaceHdi::IExecutorCallback> &callbackObj) { return pair.first; });
388         FaceAuthExecutorHdi executorHdi(executorProxy);
389         auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
390         ASSERT_TRUE(executeCallback != nullptr);
391         auto ret = executorHdi.Identify(0, 0, std::vector<uint8_t>(), executeCallback);
392         EXPECT_TRUE(ret == pair.second);
393     }
394 }
395 
396 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Identify_002, TestSize.Level0)
397 {
398     auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
399     ASSERT_TRUE(executorProxy != nullptr);
400     EXPECT_CALL(*executorProxy, Identify(_, _, _)).Times(Exactly(0));
401     FaceAuthExecutorHdi executorHdi(executorProxy);
402     auto ret = executorHdi.Identify(0, 0, std::vector<uint8_t>(), nullptr);
403     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
404 }
405 
406 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Identify_003, TestSize.Level0)
407 {
408     FaceAuthExecutorHdi executorHdi(nullptr);
409     auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
410     ASSERT_TRUE(executeCallback != nullptr);
411     auto ret = executorHdi.Identify(0, 0, std::vector<uint8_t>(), executeCallback);
412     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
413 }
414 
415 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Delete_001, TestSize.Level0)
416 {
417     for (const auto &pair : RESULT_CODE_MAP) {
418         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
419         ASSERT_TRUE(executorProxy != nullptr);
420         EXPECT_CALL(*executorProxy, Delete(_))
421             .Times(Exactly(1))
__anon8efcb2d70d02(const std::vector<uint64_t> &templateIdList) 422             .WillOnce([&pair](const std::vector<uint64_t> &templateIdList) { return pair.first; });
423         FaceAuthExecutorHdi executorHdi(executorProxy);
424         auto ret = executorHdi.Delete(std::vector<uint64_t>());
425         EXPECT_TRUE(ret == pair.second);
426     }
427 }
428 
429 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Delete_002, TestSize.Level0)
430 {
431     FaceAuthExecutorHdi executorHdi(nullptr);
432     auto ret = executorHdi.Delete(std::vector<uint64_t>());
433     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
434 }
435 
436 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Cancel_001, TestSize.Level0)
437 {
438     for (const auto &pair : RESULT_CODE_MAP) {
439         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
440         ASSERT_TRUE(executorProxy != nullptr);
__anon8efcb2d70e02(uint64_t scheduleId) 441         EXPECT_CALL(*executorProxy, Cancel(_)).Times(Exactly(1)).WillOnce([&pair](uint64_t scheduleId) {
442             return pair.first;
443         });
444         FaceAuthExecutorHdi executorHdi(executorProxy);
445         auto ret = executorHdi.Cancel(0);
446         EXPECT_TRUE(ret == pair.second);
447     }
448 }
449 
450 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_Cancel_002, TestSize.Level0)
451 {
452     FaceAuthExecutorHdi executorHdi(nullptr);
453     auto ret = executorHdi.Cancel(0);
454     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
455 }
456 
457 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_SendCommand_001, TestSize.Level0)
458 {
459     FaceAuthExecutorHdi executorHdi(nullptr);
460     auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
461     ASSERT_TRUE(executeCallback != nullptr);
462     auto ret =
463         executorHdi.SendCommand(IamPropertyMode::PROPERTY_MODE_FREEZE, std::vector<uint8_t>(), executeCallback);
464     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
465 }
466 
467 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_SendCommand_002, TestSize.Level0)
468 {
469     auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
470     ASSERT_TRUE(executorProxy != nullptr);
471     EXPECT_CALL(*executorProxy, SendCommand(_, _, _)).Times(Exactly(0));
472     FaceAuthExecutorHdi executorHdi(executorProxy);
473 
474     auto ret = executorHdi.SendCommand(IamPropertyMode::PROPERTY_MODE_FREEZE, std::vector<uint8_t>(), nullptr);
475     EXPECT_TRUE(ret == IamResultCode::GENERAL_ERROR);
476 }
477 
478 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_SendCommand_003, TestSize.Level0)
479 {
480     static const std::map<IamPropertyMode, pair<FaceHdi::CommandId, IamResultCode>> data = {
481         {IamPropertyMode::PROPERTY_MODE_FREEZE,
482             {FaceHdi::CommandId::LOCK_TEMPLATE, IamResultCode::SUCCESS}},
483         {IamPropertyMode::PROPERTY_MODE_UNFREEZE,
484             {FaceHdi::CommandId::UNLOCK_TEMPLATE, IamResultCode::SUCCESS}},
485         {static_cast<IamPropertyMode>(IamPropertyMode::PROPERTY_MODE_FREEZE - 1),
486             {FaceHdi::CommandId::UNLOCK_TEMPLATE, IamResultCode::INVALID_PARAMETERS}},
487         {static_cast<IamPropertyMode>(IamPropertyMode::PROPERTY_MODE_UNFREEZE + 1),
488             {FaceHdi::CommandId::UNLOCK_TEMPLATE, IamResultCode::INVALID_PARAMETERS}},
489         {static_cast<IamPropertyMode>(FaceHdi::VENDOR_COMMAND_BEGIN),
490             {FaceHdi::CommandId::UNLOCK_TEMPLATE, IamResultCode::INVALID_PARAMETERS}},
491         {static_cast<IamPropertyMode>(FaceHdi::VENDOR_COMMAND_BEGIN + 1),
492             {static_cast<FaceHdi::CommandId>(FaceHdi::VENDOR_COMMAND_BEGIN + 1), IamResultCode::SUCCESS}}};
493     for (const auto &pair : data) {
494         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
495         ASSERT_TRUE(executorProxy != nullptr);
496         if (pair.second.second == IamResultCode::SUCCESS) {
497             EXPECT_CALL(*executorProxy, SendCommand(_, _, _))
498                 .Times(Exactly(1))
499                 .WillOnce([&pair](int32_t commandId, const std::vector<uint8_t> &extraInfo,
__anon8efcb2d70f02(int32_t commandId, const std::vector<uint8_t> &extraInfo, const sptr<FaceHdi::IExecutorCallback> &callbackObj) 500                               const sptr<FaceHdi::IExecutorCallback> &callbackObj) {
501                     EXPECT_TRUE(commandId == pair.second.first);
502                     return HDF_SUCCESS;
503                 });
504         } else {
505             EXPECT_CALL(*executorProxy, SendCommand(_, _, _)).Times(Exactly(0));
506         }
507         FaceAuthExecutorHdi executorHdi(executorProxy);
508         auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
509         ASSERT_TRUE(executeCallback != nullptr);
510         auto ret = executorHdi.SendCommand(pair.first, std::vector<uint8_t>(), executeCallback);
511         EXPECT_TRUE(ret == pair.second.second);
512     }
513 }
514 
515 HWTEST_F(FaceAuthExecutorHdiUnitTest, FaceAuthExecutorHdi_SendCommand_004, TestSize.Level0)
516 {
517     for (const auto &pair : RESULT_CODE_MAP) {
518         auto executorProxy = new (std::nothrow) FaceHdi::MockIExecutor();
519         ASSERT_TRUE(executorProxy != nullptr);
520         EXPECT_CALL(*executorProxy, SendCommand(_, _, _))
521             .Times(Exactly(1))
522             .WillOnce([&pair](int32_t commandId, const std::vector<uint8_t> &extraInfo,
__anon8efcb2d71002(int32_t commandId, const std::vector<uint8_t> &extraInfo, const sptr<FaceHdi::IExecutorCallback> &callbackObj) 523                           const sptr<FaceHdi::IExecutorCallback> &callbackObj) { return pair.first; });
524         FaceAuthExecutorHdi executorHdi(executorProxy);
525         auto executeCallback = MakeShared<UserIam::UserAuth::MockIExecuteCallback>();
526         ASSERT_TRUE(executeCallback != nullptr);
527         auto ret = executorHdi.SendCommand(
528             IamPropertyMode::PROPERTY_MODE_FREEZE, std::vector<uint8_t>(), executeCallback);
529         EXPECT_TRUE(ret == pair.second);
530     }
531 }
532 } // namespace FaceAuth
533 } // namespace UserIam
534 } // namespace OHOS
535