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);
__anon7ec405770202(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))
__anon7ec405770302(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))
__anon7ec405770402(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))
__anon7ec405770502(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))
__anon7ec405770602(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))
__anon7ec405770702(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))
__anon7ec405770802(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,
__anon7ec405770902(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,
__anon7ec405770a02(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,
__anon7ec405770b02(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,
__anon7ec405770c02(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))
__anon7ec405770d02(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);
__anon7ec405770e02(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,
__anon7ec405770f02(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,
__anon7ec405771002(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