/* * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "iam_hat_test.h" #include "user_auth_hdi_test.h" using namespace std; using namespace testing::ext; using namespace OHOS::UserIam::Common; using namespace OHOS::HDI::UserAuth; using namespace OHOS::HDI::UserAuth::V1_2; static const uint32_t MAX_FUZZ_STRUCT_LEN = 20; static UserAuthInterfaceService g_service; int32_t Expectedvalue = 0; static OHOS::Parcel parcel; struct HdiBeginEnrollmentV1_1List { int32_t userId[4] = {12345, 1234, 12345, 12345}; int32_t authType[4] = {1, 0, 2, 4}; uint32_t executorSensorHint[4] = {0, 65535, 1, 0}; }; struct HdiBeginAuthenticationV1_1List { uint32_t authType[4] = {0, 1, 2, 4}; uint32_t userId[4] = {356581, 1}; }; struct HdiBeginIdentificationV1_1List { uint32_t addExecutor[2] = {0, 1}; uint32_t authType[4] = {0, 1, 2, 4}; }; void UserIamUserAuthTestAdditional::SetUpTestCase() {} void UserIamUserAuthTestAdditional::TearDownTestCase() {} void UserIamUserAuthTestAdditional::SetUp() { EXPECT_EQ(g_service.Init(), 0); } void UserIamUserAuthTestAdditional::TearDown() {} static void FillEnrollParam(Parcel &parcel, EnrollParam &enrollParam) { enrollParam.authType = static_cast(parcel.ReadInt32()); enrollParam.executorSensorHint = parcel.ReadUint32(); } static void FillExecutorRegisterInfo(Parcel &parcel, ExecutorRegisterInfo &executorRegisterInfo) { executorRegisterInfo.authType = static_cast(parcel.ReadInt32()); executorRegisterInfo.executorRole = static_cast(parcel.ReadInt32()); executorRegisterInfo.executorSensorHint = parcel.ReadUint32(); executorRegisterInfo.executorMatcher = parcel.ReadUint32(); executorRegisterInfo.esl = static_cast(parcel.ReadInt32()); FillTestUint8Vector(parcel, executorRegisterInfo.publicKey); } static void FillExecutorInfo(Parcel &parcel, ExecutorInfo &executorInfo) { executorInfo.executorIndex = parcel.ReadUint64(); FillExecutorRegisterInfo(parcel, executorInfo.info); } static void FillExecutorInfoVector(Parcel &parcel, vector &vector) { uint32_t len = parcel.ReadInt32() % MAX_FUZZ_STRUCT_LEN; vector.resize(len); for (uint32_t i = 0; i < len; i++) { FillExecutorInfo(parcel, vector[i]); } } static void FillScheduleInfo(Parcel &parcel, ScheduleInfo &scheduleInfo) { scheduleInfo.scheduleId = parcel.ReadUint64(); FillTestUint64Vector(parcel, scheduleInfo.templateIds); scheduleInfo.authType = static_cast(parcel.ReadInt32()); scheduleInfo.executorMatcher = parcel.ReadUint32(); scheduleInfo.scheduleMode = static_cast(parcel.ReadInt32()); FillExecutorInfoVector(parcel, scheduleInfo.executors); } static void FillCredentialInfo(Parcel &parcel, CredentialInfo &credentialInfo) { credentialInfo.credentialId = parcel.ReadUint64(); credentialInfo.executorIndex = parcel.ReadUint64(); credentialInfo.templateId = parcel.ReadUint64(); credentialInfo.authType = static_cast(parcel.ReadInt32()); credentialInfo.executorMatcher = parcel.ReadUint32(); credentialInfo.executorSensorHint = parcel.ReadUint32(); } static void FillEnrolledInfo(Parcel &parcel, EnrolledInfo &enrolledInfo) { enrolledInfo.enrolledId = parcel.ReadUint64(); enrolledInfo.authType = static_cast(parcel.ReadInt32()); } static void FillCredentialInfoVector(Parcel &parcel, vector &vector) { uint32_t len = parcel.ReadInt32() % MAX_FUZZ_STRUCT_LEN; vector.resize(len); for (uint32_t i = 0; i < len; i++) { FillCredentialInfo(parcel, vector[i]); } } static void FillEnrolledInfoVector(Parcel &parcel, vector &vector) { uint32_t len = parcel.ReadInt32() % MAX_FUZZ_STRUCT_LEN; vector.resize(len); for (uint32_t i = 0; i < len; i++) { FillEnrolledInfo(parcel, vector[i]); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_0200 * @tc.name : testAddExecutor001 * @tc.desc : First input parameter being the ExecutorRegisterInfo structure ->authType value being * ALL/PIN/FACE/FINGERPRINT */ HWTEST_F(UserIamUserAuthTestAdditional, testAddExecutor001, Function | MediumTest | Level1) { uint32_t i = 0; uint32_t authType[4] = {0, 1, 2, 4}; ExecutorRegisterInfo info = {}; uint64_t index = 0; std::vector publicKey; std::vector templateIds; for (i = 0; i < 4; i++) { info.authType = static_cast(authType[i]); info.publicKey.resize(32); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_1800 * @tc.name : testDeleteExecutor001 * @tc.desc : Delete call without adding an authentication executor */ HWTEST_F(UserIamUserAuthTestAdditional, testDeleteExecutor001, Function | MediumTest | Level2) { cout << "start DeleteExecutor" << endl; uint64_t index = -1; auto ret = g_service.DeleteExecutor(index); cout << "ret is " << ret << endl; ASSERT_EQ(ret != Expectedvalue, true); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_1900 * @tc.name : testDeleteExecutor002 * @tc.desc : First call the AddExecutor function to add an authentication executor, * and then call the DeleteExecutor function to delete it */ HWTEST_F(UserIamUserAuthTestAdditional, testDeleteExecutor002, Function | MediumTest | Level1) { cout << "start DeleteExecutor" << endl; ExecutorRegisterInfo info = {}; info.authType = AuthType::ALL; info.publicKey.resize(32); uint64_t index = 0; std::vector publicKey; std::vector templateIds; EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); auto ret = g_service.DeleteExecutor(index); cout << "ret is " << ret << endl; EXPECT_EQ(ret, 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_2000 * @tc.name : testDeleteExecutor003 * @tc.desc : Call the AddExecutor function to add an authentication executor, * and then call the DeleteExecutor function to pass in different parameters for deletion */ HWTEST_F(UserIamUserAuthTestAdditional, testDeleteExecutor003, Function | MediumTest | Level2) { cout << "start DeleteExecutor" << endl; ExecutorRegisterInfo info = {}; info.authType = AuthType::ALL; info.publicKey.resize(32); uint64_t index = 0; std::vector publicKey; std::vector templateIds; EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_NE(index, 0); index = 0; auto ret = g_service.DeleteExecutor(index); cout << "ret is " << ret << endl; EXPECT_NE(ret, 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_2200 * @tc.name : testOpenSession002 * @tc.desc : Call the OpenSession function with the parameter userId = -1/0/1 */ HWTEST_F(UserIamUserAuthTestAdditional, testOpenSession002, Function | MediumTest | Level1) { cout << "start OpenSession" << endl; uint32_t i = 0; int32_t userId[3] = {-1, 0, 1}; std::vector challenge; for (i = 0; i < 3; i++) { FillTestUint8Vector(parcel, challenge); EXPECT_EQ(g_service.OpenSession(userId[i], challenge), 0); EXPECT_EQ(g_service.CloseSession(userId[i]), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_2500 * @tc.name : testCloseSession002 * @tc.desc : Close unopened authentication credential management sessions */ HWTEST_F(UserIamUserAuthTestAdditional, testCloseSession002, Function | MediumTest | Level2) { cout << "start CloseSession" << endl; uint32_t i = 0; uint32_t ret = 0; int32_t userId[2] = {-1, 1000}; for (i = 0; i < 2; i++) { EXPECT_NE(g_service.CloseSession(userId[i]), 0); } cout << "ret is " << ret << endl; } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_2600 * @tc.name : testCloseSession003 * @tc.desc : Close unopened authentication credential management sessions */ HWTEST_F(UserIamUserAuthTestAdditional, testCloseSession003, Function | MediumTest | Level2) { cout << "start CloseSession" << endl; int32_t userId = 1000; int32_t i = 0; while (i < 50) { EXPECT_NE(g_service.CloseSession(userId), 0); i++; } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_2700 * @tc.name : testBeginEnrollment001 * @tc.desc : Directly call the BeginEnrollment function without preprocessing */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginEnrollment001, Function | MediumTest | Level2) { cout << "start BeginEnrollment" << endl; int32_t userId = -1; std::vector authToken; FillTestUint8Vector(parcel, authToken); EnrollParam param; FillEnrollParam(parcel, param); ScheduleInfo info; FillScheduleInfo(parcel, info); auto ret = g_service.BeginEnrollment(userId, authToken, param, info); cout << "ret is " << ret << endl; EXPECT_NE(ret, 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_2800 * @tc.name : testBeginEnrollment002 * @tc.desc : Call the OpenSession function and AddExecutor function, then call the BeginEnrollment function * and test different authTypes */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginEnrollment002, Function | MediumTest | Level1) { int32_t userId = 12345; uint32_t i = 0; uint64_t index = 0; std::vector challenge; std::vector authToken; std::vector publicKey; std::vector templateIds; ScheduleInfo scheduleInfo = {}; ExecutorRegisterInfo info = {}; EnrollParam param = {}; uint32_t authType[4] = {0, 1, 2, 4}; for (i = 0; i < 4; i++) { EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); info.authType = static_cast(authType[i]); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); param.authType = static_cast(authType[i]); if (i == 1) { EXPECT_EQ(g_service.BeginEnrollment(userId, authToken, param, scheduleInfo), 0); EXPECT_EQ(g_service.CancelEnrollment(userId), 0); } else { EXPECT_NE(g_service.BeginEnrollment(userId, authToken, param, scheduleInfo), 0); } EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.CloseSession(userId), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_3200 * @tc.name : testCancelEnrollment001 * @tc.desc : Call the CancelEnrollment function with userId=-123 as the input parameter */ HWTEST_F(UserIamUserAuthTestAdditional, testCancelEnrollment001, Function | MediumTest | Level1) { cout << "start CancelEnrollment" << endl; int32_t userId = -123; auto ret = g_service.CancelEnrollment(userId); cout << "ret is " << ret << endl; EXPECT_EQ(ret, 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_3300 * @tc.name : testCancelEnrollment002 * @tc.desc : The BeginEnrollment function is invoked to register the authentication credentials, * and then the CancelEnrollment function is invoked to cancel the registration */ HWTEST_F(UserIamUserAuthTestAdditional, testCancelEnrollment002, Function | MediumTest | Level1) { uint32_t i = 0; int32_t userId[3] = {-12345, 0, 1}; std::vector challenge; ExecutorRegisterInfo info = {}; uint64_t index = 0; std::vector publicKey; std::vector templateIds; std::vector authToken; EnrollParam param = {}; ScheduleInfo scheduleInfo = {}; for (i = 0; i < 3; i++) { EXPECT_EQ(g_service.OpenSession(userId[i], challenge), 0); info.authType = AuthType::PIN; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); param.authType = AuthType::PIN; EXPECT_EQ(g_service.BeginEnrollment(userId[i], authToken, param, scheduleInfo), 0); EXPECT_EQ(g_service.CancelEnrollment(userId[i]), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.CloseSession(userId[i]), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_3700 * @tc.name : testCancelEnrollment006 * @tc.desc : Call the BeginEnrollment function to register the authentication credentials, * then call the CancelEnrollment function to cancel, and then continue to cancel 50 times */ HWTEST_F(UserIamUserAuthTestAdditional, testCancelEnrollment006, Function | MediumTest | Level1) { int32_t userId = 1; int32_t i = 0; std::vector challenge; EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); ExecutorRegisterInfo info = {}; info.authType = AuthType::PIN; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); uint64_t index = 0; std::vector publicKey; std::vector templateIds; EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); std::vector authToken; EnrollParam param = {}; param.authType = AuthType::PIN; ScheduleInfo scheduleInfo = {}; EXPECT_EQ(g_service.BeginEnrollment(userId, authToken, param, scheduleInfo), 0); EXPECT_EQ(g_service.CancelEnrollment(userId), 0); while (i < 50) { EXPECT_EQ(g_service.CancelEnrollment(userId), 0); i++; } EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.CloseSession(userId), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_3800 * @tc.name : testGetCredential001 * @tc.desc : Call the GetCredential function, with the first input parameter being userId=-1、0、1 */ HWTEST_F(UserIamUserAuthTestAdditional, testGetCredential001, Function | MediumTest | Level1) { cout << "start GetCredential" << endl; uint32_t i = 0; uint32_t userId[3] = {-1, 0, 1}; AuthType authType = static_cast(parcel.ReadInt32()); std::vector infos; for (i = 0; i < 3; i++) { FillCredentialInfoVector(parcel, infos); EXPECT_EQ(g_service.GetCredential(userId[i], authType, infos), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_3900 * @tc.name : testGetCredential002 * @tc.desc : Pass the authType authentication type to all types and determine the result of the function */ HWTEST_F(UserIamUserAuthTestAdditional, testGetCredential002, Function | MediumTest | Level1) { cout << "start GetCredential" << endl; uint32_t i = 0; int32_t userId = parcel.ReadInt32(); uint32_t authType[4] = {0, 1, 2, 4}; std::vector infos; for (i = 0; i < 4; i++) { FillCredentialInfoVector(parcel, infos); EXPECT_EQ(g_service.GetCredential(userId, static_cast(authType[i]), infos), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_4500 * @tc.name : testGetUserInfo001 * @tc.desc : Pass the wrong userId to the function to determine the result of the function */ HWTEST_F(UserIamUserAuthTestAdditional, testGetUserInfo001, Function | MediumTest | Level2) { cout << "start GetUserInfo" << endl; uint32_t i = 0; int userId[2] = {6789, -6789}; uint64_t secureUid = parcel.ReadUint64(); PinSubType pinSubType = static_cast(parcel.ReadUint32()); std::vector infos; for (i = 0; i < 2; i++) { FillEnrolledInfoVector(parcel, infos); EXPECT_NE(g_service.GetUserInfo(userId[i], secureUid, pinSubType, infos), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_4700 * @tc.name : testDeleteUser001 * @tc.desc : Call the DeleteUser function, with the first input parameter * being userId=-1 and the second parameter being empty */ HWTEST_F(UserIamUserAuthTestAdditional, testDeleteUser001, Function | MediumTest | Level2) { cout << "start DeleteUser" << endl; int32_t userId = -1; std::vector challenge; EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); ExecutorRegisterInfo info = {}; info.authType = AuthType::PIN; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); std::vector publicKey; std::vector templateIds; uint64_t index = 0; EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); std::vector authToken; std::vector deletedInfos; auto ret = g_service.DeleteUser(userId, authToken, deletedInfos); cout << "ret is " << ret << endl; EXPECT_NE(ret, 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_4800 * @tc.name : testDeleteUser002 * @tc.desc : Call the DeleteUser function, with the second input parameter being authToken=-1、0 */ HWTEST_F(UserIamUserAuthTestAdditional, testDeleteUser002, Function | MediumTest | Level2) { cout << "start DeleteUser" << endl; uint32_t i = 0; uint32_t num[2] = {-1, 0}; std::vector deletedInfos; int32_t userId = parcel.ReadInt32(); std::vector authToken(1); FillTestUint8Vector(parcel, authToken); for (i = 0; i < 2; i++) { authToken[0] = num[i]; EXPECT_NE(g_service.DeleteUser(userId, authToken, deletedInfos), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_5000 * @tc.name : testEnforceDeleteUser001 * @tc.desc : Directly call the EnforceDeleteUser function, with the first input parameter being userId=-1,65535 */ HWTEST_F(UserIamUserAuthTestAdditional, testEnforceDeleteUser001, Function | MediumTest | Level2) { cout << "start EnforceDeleteUser" << endl; uint32_t i = 0; int32_t userId[2] = {-1, 65535}; std::vector deletedInfos; for (i = 0; i < 2; i++) { EXPECT_NE(g_service.EnforceDeleteUser(userId[i], deletedInfos), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_5200 * @tc.name : testBeginAuthentication001 * @tc.desc : When the registration results are not updated and the registration is completed, * The first entry is contextId = 1/0/-1, the second entry is the AuthSolution structure ->userId = 365861, * authTrustLevel = 10000,authType = PIN,executorSensorHint = 1 */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginAuthentication001, Function | MediumTest | Level2) { uint32_t i = 0; int32_t userId = 365861; uint64_t contextId[3] = {1, 0, -1}; AuthType authType = AuthType::PIN; std::vector challenge; ExecutorRegisterInfo info = {}; std::vector publicKey; std::vector templateIds; uint64_t index = 0; ScheduleInfo scheduleInfo = {}; std::vector authToken; EnrollParam enrollParam = {}; AuthSolution authParam = {}; std::vector scheduleInfos; for (i = 0; i < 3; i++) { EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); info.authType = authType; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); enrollParam.authType = authType; EXPECT_EQ(g_service.BeginEnrollment(userId, authToken, enrollParam, scheduleInfo), 0); authParam.userId = userId; authParam.authTrustLevel = 10000; authParam.authType = authType; authParam.executorSensorHint = 1; authParam.challenge = challenge; EXPECT_NE(g_service.BeginAuthentication(contextId[i], authParam, scheduleInfos), 0); EXPECT_EQ(g_service.CancelEnrollment(userId), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.CloseSession(userId), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_5500 * @tc.name : testBeginAuthentication004 * @tc.desc : The first input parameter is contextId=1, the second input parameter is the * AuthSolution structure->userId=0, authTrustLevel=-1、0、1000, authType=PIN, executorSensorHint=1 */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginAuthentication004, Function | MediumTest | Level2) { uint32_t i = 0; int32_t userId = 0; uint64_t index = 0; uint64_t contextId = 1; uint32_t authTrustLevel[3] = {-1, 0, 1000}; AuthSolution authParam = {}; ExecutorRegisterInfo info = {}; AuthType authType = AuthType::PIN; std::vector challenge; std::vector publicKey; std::vector templateIds; std::vector scheduleInfos; for (i = 0; i < 3; i++) { EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); info.authType = authType; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); authParam.userId = userId; authParam.authTrustLevel = authTrustLevel[i]; authParam.authType = authType; authParam.executorSensorHint = 1; authParam.challenge = challenge; EXPECT_NE(g_service.BeginAuthentication(contextId, authParam, scheduleInfos), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.CloseSession(userId), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_6200 * @tc.name : testUpdateAuthenticationResult001 * @tc.desc : The first input parameter is contextId=-1、0、1234567, and the second input parameter * is scheduleResult is empty */ HWTEST_F(UserIamUserAuthTestAdditional, testUpdateAuthenticationResult001, Function | MediumTest | Level2) { uint32_t i = 0; uint64_t contextId[3] = {-1, 0, 1234567}; std::vector scheduleResult; AuthResultInfo authResultInfo = {}; for (i = 0; i < 3; i++) { EXPECT_NE(g_service.UpdateAuthenticationResult(contextId[i], scheduleResult, authResultInfo), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_6500 * @tc.name : testUpdateAuthenticationResult004 * @tc.desc : The first input is contextId = 1, the second input is scheduleResult The size is 100, * and all inputs are initialized to 1 and 0 */ HWTEST_F(UserIamUserAuthTestAdditional, testUpdateAuthenticationResult004, Function | MediumTest | Level2) { uint32_t i = 0; uint64_t contextId = 1; uint64_t num[2] = {1, 0}; std::vector scheduleResult(100); AuthResultInfo authResultInfo = {}; for (i = 0; i < 2; i++) { scheduleResult.insert(scheduleResult.begin(), 100, num[i]); EXPECT_NE(g_service.UpdateAuthenticationResult(contextId, scheduleResult, authResultInfo), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_6700 * @tc.name : testCancelAuthentication001 * @tc.desc : Verify the CancelAuthentication function with the first input being contextId = 0、-1、1000 */ HWTEST_F(UserIamUserAuthTestAdditional, testCancelAuthentication001, Function | MediumTest | Level2) { cout << "start CancelAuthentication" << endl; uint32_t i = 0; uint64_t contextId[3] = {0, -1, 1000}; for (i = 0; i < 3; i++) { EXPECT_NE(g_service.CancelAuthentication(contextId[i]), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_7000 * @tc.name : testBeginIdentification001 * @tc.desc : The AddExecutor function is called first to add the authentication actuator, * and then the BeginIdentification function is called to start the identification */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginIdentification001, Function | MediumTest | Level1) { uint32_t i = 0; uint64_t index = 0; uint64_t contextId = 123456; uint32_t authType[3] = {0, 2, 4}; ExecutorRegisterInfo info = {}; std::vector challenge; uint32_t executorSensorHint = 0; ScheduleInfo scheduleInfo = {}; std::vector publicKey; std::vector templateIds; for (i = 0; i < 3; i++) { info.authType = static_cast(authType[i]); info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_EQ(g_service.BeginIdentification(contextId, static_cast(authType[i]), challenge, executorSensorHint, scheduleInfo), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.Init(), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_8000 * @tc.name : testBeginIdentification011 * @tc.desc : The AddExecutor function is called first to add the authentication actuator, * and then the BeginIdentification function is called to start the identification */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginIdentification011, Function | MediumTest | Level2) { uint32_t i = 0; ExecutorRegisterInfo info = {}; uint64_t index = 0; std::vector publicKey; std::vector templateIds; uint64_t contextId = 123456; AuthType authType = AuthType::FACE; std::vector challenge; uint32_t executorSensorHint[2] = {-1234, 1234}; ScheduleInfo scheduleInfo = {}; for (i = 0; i < 2; i++) { info.authType = AuthType::FACE; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_NE(g_service.BeginIdentification(contextId, authType, challenge, executorSensorHint[i], scheduleInfo), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_8200 * @tc.name : testBeginIdentification013 * @tc.desc : The AddExecutor function is called to add the authentication actuator, * and then the BeginIdentification function is called 50 times to start the identification */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginIdentification013, Function | MediumTest | Level2) { int i = 0; ExecutorRegisterInfo info = {}; info.authType = AuthType::FACE; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); uint64_t index = 0; std::vector publicKey; std::vector templateIds; EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); uint64_t contextId = 123456; AuthType authType = AuthType::FACE; std::vector challenge; uint32_t executorSensorHint = 0; ScheduleInfo scheduleInfo = {}; EXPECT_EQ(g_service.BeginIdentification(contextId, authType, challenge, executorSensorHint, scheduleInfo), 0); while (i < 50) { EXPECT_NE(g_service.BeginIdentification(contextId, authType, challenge, executorSensorHint, scheduleInfo), 0); cout << "i = " << i << endl; i++; } EXPECT_EQ(g_service.DeleteExecutor(index), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_8300 * @tc.name : testUpdateIdentificationResult001 * @tc.desc : Call the BeginIdentification function to start recognition, * and then call the UpdateIdenticationResult function to update the recognition result */ HWTEST_F(UserIamUserAuthTestAdditional, testUpdateIdentificationResult001, Function | MediumTest | Level2) { int size[2] = {0, 32}; uint32_t i = 0; ExecutorRegisterInfo info = {}; uint64_t index = 0; std::vector publicKey; std::vector templateIds; uint64_t contextId = 123456; std::vector scheduleResult; std::vector challenge; uint32_t executorSensorHint = 0; ScheduleInfo scheduleInfo = {}; AuthType authType = AuthType::FACE; IdentifyResultInfo identityResultInfo = {}; for (i = 0; i < 2; i++) { info.authType = AuthType::FACE; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_EQ(g_service.BeginIdentification(contextId, authType, challenge, executorSensorHint, scheduleInfo), 0); scheduleResult.resize(size[i]); EXPECT_NE(g_service.UpdateIdentificationResult(contextId, scheduleResult, identityResultInfo), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.Init(), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_8800 * @tc.name : testCancelIdentification003 * @tc.desc : Cancel by calling the CancelIdentification function directly */ HWTEST_F(UserIamUserAuthTestAdditional, testCancelIdentification003, Function | MediumTest | Level2) { uint64_t contextId = 1000; EXPECT_NE(g_service.CancelIdentification(contextId), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_8900 * @tc.name : testCancelIdentification004 * @tc.desc : Cancel by calling the CancelIdentification function directly */ HWTEST_F(UserIamUserAuthTestAdditional, testCancelIdentification004, Function | MediumTest | Level2) { uint64_t contextId = 123456; AuthType authType = AuthType::FACE; std::vector challenge; uint32_t executorSensorHint = 0; ScheduleInfo scheduleInfo = {}; EXPECT_NE(g_service.BeginIdentification(contextId, authType, challenge, executorSensorHint, scheduleInfo), 0); EXPECT_NE(g_service.CancelIdentification(contextId), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_9000 * @tc.name : testGetAuthTrustLevel001 * @tc.desc : Directly call the GetAuthTrustLevel function, with the first input parameter * being userId=1000 and the second input parameter being all authType */ HWTEST_F(UserIamUserAuthTestAdditional, testGetAuthTrustLevel001, Function | MediumTest | Level2) { uint32_t i = 0; int32_t userId = 1000; uint32_t authType[] = {0, 1, 2, 4}; uint32_t authTrustLevel = 0; for (i = 0; i < 4; i++) { EXPECT_NE(g_service.GetAuthTrustLevel(userId, static_cast(authType[i]), authTrustLevel), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_9400 * @tc.name : testGetAuthTrustLevel005 * @tc.desc : Call the BeginEnrollment function without calling the UpdateEnrollmentResult function to update and * enroll the result, and then call the GetAuthTrustLevel function, * with the first entry being userId = 12345. The second entry is authType = PIN */ HWTEST_F(UserIamUserAuthTestAdditional, testGetAuthTrustLevel005, Function | MediumTest | Level2) { int32_t userId = 12345; std::vector challenge; EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); ExecutorRegisterInfo info = {}; info.authType = AuthType::PIN; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); uint64_t index = 0; std::vector publicKey; std::vector templateIds; EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); std::vector authToken; EnrollParam param = {}; param.authType = AuthType::PIN; ScheduleInfo scheduleInfo = {}; EXPECT_EQ(g_service.BeginEnrollment(userId, authToken, param, scheduleInfo), 0); AuthType authType = AuthType::PIN; uint32_t authTrustLevel = 0; EXPECT_NE(g_service.GetAuthTrustLevel(userId, authType, authTrustLevel), 0); EXPECT_EQ(g_service.CancelEnrollment(userId), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.CloseSession(userId), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_9500 * @tc.name : testBeginEnrollmentV1_1_001 * @tc.desc : Call the HDI-encapsulated BeginEnrollmentV1_1 function, and use a loop to assign the parameters * in the HdiBeginEnrollmentV1_1List struct to the BeginEnrollmentV1_1 function */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginEnrollmentV1_1_001, Function | MediumTest | Level2) { uint32_t i = 0; HdiBeginEnrollmentV1_1List g_hdiBeginEnrollmentV1_1List; uint32_t userId = g_hdiBeginEnrollmentV1_1List.userId[i]; std::vector challenge; EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); ExecutorRegisterInfo info = {}; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); uint64_t index = 0; std::vector publicKey; std::vector templateIds; std::vector authToken; EnrollParam param = {}; ScheduleInfoV1_1 scheduleInfo = {}; for (i = 0; i < 4; i++) { info.authType = static_cast(g_hdiBeginEnrollmentV1_1List.authType[i]); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); param.authType = static_cast(g_hdiBeginEnrollmentV1_1List.authType[i]); param.executorSensorHint = g_hdiBeginEnrollmentV1_1List.executorSensorHint[i]; userId = g_hdiBeginEnrollmentV1_1List.userId[i]; if (i == 0) { EXPECT_EQ(g_service.BeginEnrollmentV1_1(userId, authToken, param, scheduleInfo), 0); } else { EXPECT_NE(g_service.BeginEnrollmentV1_1(userId, authToken, param, scheduleInfo), 0); } EXPECT_EQ(g_service.CancelEnrollment(userId), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); } EXPECT_EQ(g_service.CloseSession(userId), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_0250 * @tc.name : testBeginAuthenticationV1_1_001 * @tc.desc : Call the HDI-encapsulated BeginAuthenticationV1_1 function, and use a loop to assign the parameters * in the HdiBeginAuthenticationV1_1List structure to the BeginAuthenticationV1_1 function */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginAuthenticationV1_1_001, Function | MediumTest | Level2) { uint32_t i = 0; uint32_t j; HdiBeginAuthenticationV1_1List g_hdiBeginAuthenticationV1_1List; uint32_t userId = g_hdiBeginAuthenticationV1_1List.userId[i]; std::vector challenge; EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); ExecutorRegisterInfo info = {}; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); std::vector publicKey; std::vector templateIds; uint64_t index = 0; uint64_t contextId = 1; AuthSolution authParam = {}; authParam.authTrustLevel = 0; authParam.executorSensorHint = 0; authParam.challenge = challenge; std::vector scheduleInfos; for (i = 0; i < 4; i++) { info.authType = static_cast(g_hdiBeginAuthenticationV1_1List.authType[i]); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); for (j = 4; j > 0; j--) { authParam.userId = g_hdiBeginAuthenticationV1_1List.userId[0]; authParam.authType = static_cast(g_hdiBeginAuthenticationV1_1List.authType[j - 1]); EXPECT_NE(g_service.BeginAuthenticationV1_1(contextId, authParam, scheduleInfos), 0); } EXPECT_EQ(g_service.DeleteExecutor(index), 0); } for (i = 1; i < 2; i++) { info.authType = static_cast(g_hdiBeginAuthenticationV1_1List.authType[i]); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); authParam.userId = g_hdiBeginAuthenticationV1_1List.userId[i]; authParam.authType = static_cast(g_hdiBeginAuthenticationV1_1List.authType[i]); EXPECT_NE(g_service.BeginAuthenticationV1_1(contextId, authParam, scheduleInfos), 0); } EXPECT_EQ(g_service.CloseSession(userId), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_0550 * @tc.name : testBeginIdentificationV1_1_001 * @tc.desc : The AddExecutor function is called first to add the authentication actuator, * and then the BeginIdentificationV1_1 function is called to start the identification */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginIdentificationV1_1_001, Function | MediumTest | Level2) { uint32_t i = 0; uint32_t j = 0; HdiBeginIdentificationV1_1List g_hdiBeginIdentificationV1_1List; ExecutorRegisterInfo info = {}; info.authType = AuthType::FACE; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); uint64_t index = 0; std::vector publicKey; std::vector templateIds; uint64_t contextId = 123456; AuthType authType = AuthType::FACE; std::vector challenge; uint32_t executorSensorHint = 0; ScheduleInfoV1_1 scheduleInfo = {}; for (i = 0; i < 2; i++) { for (j = 0; j < 4; j++) { authType = static_cast(g_hdiBeginIdentificationV1_1List.authType[j]); if (i == 1 && authType == AuthType::FACE) { EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_EQ( g_service.BeginIdentificationV1_1(contextId, authType, challenge, executorSensorHint, scheduleInfo), 0); } else { EXPECT_NE( g_service.BeginIdentificationV1_1(contextId, authType, challenge, executorSensorHint, scheduleInfo), 0); } } } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_0890 * @tc.name : testGetAllUserInfo001 * @tc.desc : Call the GetAllUserInfo function to get the information */ HWTEST_F(UserIamUserAuthTestAdditional, testGetAllUserInfo001, Function | MediumTest | Level1) { std::vector userInfos; EXPECT_EQ(g_service.GetAllUserInfo(userInfos), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_0910 * @tc.name : testInit001 * @tc.desc : Call the Init function for initialization */ HWTEST_F(UserIamUserAuthTestAdditional, testInit001, Function | MediumTest | Level1) { cout << "start Init" << endl; EXPECT_EQ(g_service.Init(), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_0920 * @tc.name : testBeginIdentification014 * @tc.desc : Verify that the function BeginIdentification returns a failure when the first entry structure of the * function AddExecutor is ExecutorRegisterInfo->executorRole = COLLECTOR/VERIFIER/ALL_IN_ONE */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginIdentification014, Function | MediumTest | Level2) { uint32_t i = 0; uint64_t index = 0; std::vector publicKey; std::vector templateIds; uint32_t executorRole[3] = {1, 2, 3}; ExecutorRegisterInfo info = {}; uint64_t contextId = 123456; std::vector challenge; uint32_t executorSensorHint = 0; ScheduleInfo scheduleInfo = {}; for (i = 0; i < 3; i++) { info.authType = AuthType::FACE; info.executorRole = static_cast(executorRole[i]); info.esl = ExecutorSecureLevel::ESL0; info.publicKey.resize(32); if (executorRole[i] == ExecutorRole::ALL_IN_ONE) { EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_EQ( g_service.BeginIdentification(contextId, AuthType::FACE, challenge, executorSensorHint, scheduleInfo), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); } else { EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_NE( g_service.BeginIdentification(contextId, AuthType::FACE, challenge, executorSensorHint, scheduleInfo), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); } } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_0940 * @tc.name : testBeginIdentification016 * @tc.desc : Verify that the function BeginIdentification returns a success when the first entry structure of the * function AddExecutor is ExecutorRegisterInfo->esl = ESL0\ESL1\ESL2\ESL3 */ HWTEST_F(UserIamUserAuthTestAdditional, testBeginIdentification016, Function | MediumTest | Level1) { uint32_t i = 0; uint64_t index = 0; std::vector publicKey; std::vector templateIds; uint32_t esl[4] = {0, 1, 2, 3}; ExecutorRegisterInfo info = {}; uint64_t contextId = 123456; std::vector challenge; uint32_t executorSensorHint = 0; ScheduleInfo scheduleInfo = {}; for (i = 0; i < 4; i++) { info.authType = AuthType::FACE; info.executorRole = ExecutorRole::ALL_IN_ONE; info.esl = static_cast(esl[i]); info.publicKey.resize(32); EXPECT_EQ(g_service.AddExecutor(info, index, publicKey, templateIds), 0); EXPECT_EQ(g_service.BeginIdentification(contextId, AuthType::FACE, challenge, executorSensorHint, scheduleInfo), 0); EXPECT_EQ(g_service.DeleteExecutor(index), 0); EXPECT_EQ(g_service.Init(), 0); } } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_1110 * @tc.name : testGetValidSolution001 * @tc.desc : Call the GetValidSolution function to get the the authentication information */ HWTEST_F(UserIamUserAuthTestAdditional, testGetValidSolution001, Function | MediumTest | Level2) { int32_t userId = parcel.ReadInt32(); std::vector authTypes = {AuthType::ALL, AuthType::PIN, AuthType::FACE, AuthType::FINGERPRINT}; uint32_t authTrustLevel = 0; std::vector validTypes; EXPECT_NE(g_service.GetValidSolution(userId, authTypes, authTrustLevel, validTypes), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_1120 * @tc.name : testDeleteCredential001 * @tc.desc : Call the DeleteCredential function to deletes credential information */ HWTEST_F(UserIamUserAuthTestAdditional, testDeleteCredential001, Function | MediumTest | Level2) { int32_t userId = parcel.ReadInt32(); uint64_t credentialId = parcel.ReadUint64(); std::vector authToken; CredentialInfo info; EXPECT_NE(g_service.DeleteCredential(userId, credentialId, authToken, info), 0); } /** * @tc.number: SUB_Security_IAM_UserAuth_HDI_FUNC_1130 * @tc.name : testUpdateEnrollmentResult001 * @tc.desc : Call the UpdateEnrollmentResult function directly to update and enroll the result */ HWTEST_F(UserIamUserAuthTestAdditional, testUpdateEnrollmentResult001, Function | MediumTest | Level2) { int32_t userId = 12345; std::vector challenge; EXPECT_EQ(g_service.OpenSession(userId, challenge), 0); std::vector scheduleResult(1); scheduleResult[0] = 1; EnrollResultInfo enrolledResultInfo = {}; EXPECT_NE(g_service.UpdateEnrollmentResult(userId, scheduleResult, enrolledResultInfo), 0); EXPECT_EQ(g_service.CloseSession(userId), 0); }