1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include <gtest/gtest.h> 17094332d3Sopenharmony_ci 18094332d3Sopenharmony_ci#include "idm_database.h" 19094332d3Sopenharmony_ci#include "securec.h" 20094332d3Sopenharmony_ci 21094332d3Sopenharmony_citypedef bool (*DuplicateCheckFunc)(LinkedList *collection, uint64_t value); 22094332d3Sopenharmony_ci 23094332d3Sopenharmony_ciextern "C" { 24094332d3Sopenharmony_ci extern LinkedList *g_userInfoList; 25094332d3Sopenharmony_ci extern UserInfo *g_currentUser; 26094332d3Sopenharmony_ci extern GlobalConfigInfo g_globalConfigArray[MAX_GLOBAL_CONFIG_NUM]; 27094332d3Sopenharmony_ci extern bool MatchUserInfo(const void *data, const void *condition); 28094332d3Sopenharmony_ci extern bool IsUserInfoValid(UserInfo *userInfo); 29094332d3Sopenharmony_ci extern UserInfo *QueryUserInfo(int32_t userId); 30094332d3Sopenharmony_ci extern bool IsSecureUidDuplicate(LinkedList *userInfoList, uint64_t secureUid); 31094332d3Sopenharmony_ci extern UserInfo *CreateUser(int32_t userId, int32_t userType); 32094332d3Sopenharmony_ci extern ResultCode DeleteUser(int32_t userId); 33094332d3Sopenharmony_ci extern bool IsCredentialIdDuplicate(LinkedList *userInfoList, uint64_t credentialId); 34094332d3Sopenharmony_ci extern bool IsEnrolledIdDuplicate(LinkedList *enrolledList, uint64_t enrolledId); 35094332d3Sopenharmony_ci extern ResultCode GenerateDeduplicateUint64(LinkedList *collection, uint64_t *destValue, DuplicateCheckFunc func); 36094332d3Sopenharmony_ci extern ResultCode UpdateEnrolledId(LinkedList *enrolledList, uint32_t authType); 37094332d3Sopenharmony_ci extern ResultCode AddCredentialToUser(UserInfo *user, CredentialInfoHal *credentialInfo); 38094332d3Sopenharmony_ci extern ResultCode AddUser(int32_t userId, CredentialInfoHal *credentialInfo, int32_t userType); 39094332d3Sopenharmony_ci extern bool MatchCredentialById(const void *data, const void *condition); 40094332d3Sopenharmony_ci extern bool MatchEnrolledInfoByType(const void *data, const void *condition); 41094332d3Sopenharmony_ci extern CredentialInfoHal *QueryCredentialById(uint64_t credentialId, LinkedList *credentialList); 42094332d3Sopenharmony_ci extern CredentialInfoHal *QueryCredentialByAuthType(uint32_t authType, LinkedList *credentialList); 43094332d3Sopenharmony_ci extern bool IsCredMatch(const CredentialCondition *limit, const CredentialInfoHal *credentialInfo); 44094332d3Sopenharmony_ci extern bool IsUserMatch(const CredentialCondition *limit, const UserInfo *user); 45094332d3Sopenharmony_ci extern ResultCode TraverseCredentialList(const CredentialCondition *limit, const LinkedList *credentialList, 46094332d3Sopenharmony_ci LinkedList *credListGet); 47094332d3Sopenharmony_ci extern void RemoveCachePin(UserInfo *user, bool *isRemoved); 48094332d3Sopenharmony_ci} 49094332d3Sopenharmony_ci 50094332d3Sopenharmony_cinamespace OHOS { 51094332d3Sopenharmony_cinamespace UserIam { 52094332d3Sopenharmony_cinamespace UserAuth { 53094332d3Sopenharmony_ciusing namespace testing; 54094332d3Sopenharmony_ciusing namespace testing::ext; 55094332d3Sopenharmony_ci 56094332d3Sopenharmony_ciclass IdmDatabaseTest : public testing::Test { 57094332d3Sopenharmony_cipublic: 58094332d3Sopenharmony_ci static void SetUpTestCase() {}; 59094332d3Sopenharmony_ci 60094332d3Sopenharmony_ci static void TearDownTestCase() {}; 61094332d3Sopenharmony_ci 62094332d3Sopenharmony_ci void SetUp() {}; 63094332d3Sopenharmony_ci 64094332d3Sopenharmony_ci void TearDown() {}; 65094332d3Sopenharmony_ci}; 66094332d3Sopenharmony_ci 67094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestInitUserInfoList_001, TestSize.Level0) 68094332d3Sopenharmony_ci{ 69094332d3Sopenharmony_ci EXPECT_EQ(InitUserInfoList(), RESULT_SUCCESS); 70094332d3Sopenharmony_ci DestroyUserInfoList(); 71094332d3Sopenharmony_ci} 72094332d3Sopenharmony_ci 73094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestInitUserInfoList_002, TestSize.Level0) 74094332d3Sopenharmony_ci{ 75094332d3Sopenharmony_ci constexpr int32_t userType = 1024; 76094332d3Sopenharmony_ci UserInfo *userInfo = InitUserInfoNode(); 77094332d3Sopenharmony_ci EXPECT_EQ(InitUserInfoList(), RESULT_SUCCESS); 78094332d3Sopenharmony_ci EXPECT_NE(userInfo->userType, userType); 79094332d3Sopenharmony_ci DestroyUserInfoNode(userInfo); 80094332d3Sopenharmony_ci DestroyUserInfoList(); 81094332d3Sopenharmony_ci} 82094332d3Sopenharmony_ci 83094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestMatchUserInfo, TestSize.Level0) 84094332d3Sopenharmony_ci{ 85094332d3Sopenharmony_ci EXPECT_FALSE(MatchUserInfo(nullptr, nullptr)); 86094332d3Sopenharmony_ci int32_t condition = 4526; 87094332d3Sopenharmony_ci constexpr int32_t userId = 1133; 88094332d3Sopenharmony_ci UserInfo info = {}; 89094332d3Sopenharmony_ci info.userId = userId; 90094332d3Sopenharmony_ci EXPECT_FALSE(MatchUserInfo(static_cast<void *>(&info), static_cast<void *>(&condition))); 91094332d3Sopenharmony_ci} 92094332d3Sopenharmony_ci 93094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestIsUserInfoValid, TestSize.Level0) 94094332d3Sopenharmony_ci{ 95094332d3Sopenharmony_ci UserInfo info = {}; 96094332d3Sopenharmony_ci info.credentialInfoList = nullptr; 97094332d3Sopenharmony_ci info.enrolledInfoList = nullptr; 98094332d3Sopenharmony_ci EXPECT_FALSE(IsUserInfoValid(&info)); 99094332d3Sopenharmony_ci info.credentialInfoList = new LinkedList(); 100094332d3Sopenharmony_ci EXPECT_FALSE(IsUserInfoValid(&info)); 101094332d3Sopenharmony_ci delete info.credentialInfoList; 102094332d3Sopenharmony_ci} 103094332d3Sopenharmony_ci 104094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetSecureUid, TestSize.Level0) 105094332d3Sopenharmony_ci{ 106094332d3Sopenharmony_ci constexpr int32_t userId = 1133; 107094332d3Sopenharmony_ci EXPECT_EQ(GetSecureUid(userId, nullptr), RESULT_BAD_PARAM); 108094332d3Sopenharmony_ci} 109094332d3Sopenharmony_ci 110094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetEnrolledInfoAuthType_001, TestSize.Level0) 111094332d3Sopenharmony_ci{ 112094332d3Sopenharmony_ci g_userInfoList = nullptr; 113094332d3Sopenharmony_ci constexpr int32_t userId = 1166; 114094332d3Sopenharmony_ci constexpr uint32_t authType = 1; 115094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledInfoAuthType(userId, authType, nullptr), RESULT_BAD_PARAM); 116094332d3Sopenharmony_ci EnrolledInfoHal info = {}; 117094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledInfoAuthType(userId, authType, &info), RESULT_NOT_FOUND); 118094332d3Sopenharmony_ci} 119094332d3Sopenharmony_ci 120094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetEnrolledInfoAuthType_002, TestSize.Level0) 121094332d3Sopenharmony_ci{ 122094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 123094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 124094332d3Sopenharmony_ci UserInfo userInfo = {}; 125094332d3Sopenharmony_ci constexpr int32_t userId = 1135; 126094332d3Sopenharmony_ci constexpr uint32_t authType = 1; 127094332d3Sopenharmony_ci userInfo.userId = userId; 128094332d3Sopenharmony_ci userInfo.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 129094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 130094332d3Sopenharmony_ci EnrolledInfoHal info = {}; 131094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledInfoAuthType(userId, authType, &info), RESULT_NOT_FOUND); 132094332d3Sopenharmony_ci} 133094332d3Sopenharmony_ci 134094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetEnrolledInfoAuthType_003, TestSize.Level0) 135094332d3Sopenharmony_ci{ 136094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 137094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 138094332d3Sopenharmony_ci UserInfo userInfo = {}; 139094332d3Sopenharmony_ci constexpr int32_t userId = 1135; 140094332d3Sopenharmony_ci constexpr uint32_t authType1 = 1; 141094332d3Sopenharmony_ci constexpr uint32_t authType2 = 2; 142094332d3Sopenharmony_ci userInfo.userId = userId; 143094332d3Sopenharmony_ci userInfo.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 144094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 145094332d3Sopenharmony_ci EnrolledInfoHal enrolledInfo = {}; 146094332d3Sopenharmony_ci enrolledInfo.authType = authType2; 147094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 148094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, nullptr); 149094332d3Sopenharmony_ci EnrolledInfoHal info = {}; 150094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledInfoAuthType(userId, authType1, &info), RESULT_NOT_FOUND); 151094332d3Sopenharmony_ci} 152094332d3Sopenharmony_ci 153094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetEnrolledInfo, TestSize.Level0) 154094332d3Sopenharmony_ci{ 155094332d3Sopenharmony_ci constexpr int32_t userId = 1211; 156094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledInfo(userId, nullptr, nullptr), RESULT_BAD_PARAM); 157094332d3Sopenharmony_ci g_userInfoList = nullptr; 158094332d3Sopenharmony_ci g_currentUser = nullptr; 159094332d3Sopenharmony_ci EnrolledInfoHal *enrolledInfos = nullptr; 160094332d3Sopenharmony_ci uint32_t num = 0; 161094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledInfo(userId, &enrolledInfos, &num), RESULT_NOT_FOUND); 162094332d3Sopenharmony_ci} 163094332d3Sopenharmony_ci 164094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestDeleteUserInfo, TestSize.Level0) 165094332d3Sopenharmony_ci{ 166094332d3Sopenharmony_ci constexpr int32_t userId = 1155; 167094332d3Sopenharmony_ci EXPECT_EQ(DeleteUserInfo(userId, nullptr), RESULT_BAD_PARAM); 168094332d3Sopenharmony_ci} 169094332d3Sopenharmony_ci 170094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryUserInfo_001, TestSize.Level0) 171094332d3Sopenharmony_ci{ 172094332d3Sopenharmony_ci g_userInfoList = nullptr; 173094332d3Sopenharmony_ci constexpr int32_t userId1 = 123; 174094332d3Sopenharmony_ci constexpr int32_t userId2 = 1123; 175094332d3Sopenharmony_ci UserInfo userInfo = {}; 176094332d3Sopenharmony_ci userInfo.userId = userId1; 177094332d3Sopenharmony_ci g_currentUser = &userInfo; 178094332d3Sopenharmony_ci EXPECT_NE(QueryUserInfo(userId1), nullptr); 179094332d3Sopenharmony_ci userInfo.userId = userId2; 180094332d3Sopenharmony_ci EXPECT_EQ(QueryUserInfo(userId1), nullptr); 181094332d3Sopenharmony_ci} 182094332d3Sopenharmony_ci 183094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryUserInfo_002, TestSize.Level0) 184094332d3Sopenharmony_ci{ 185094332d3Sopenharmony_ci g_currentUser = nullptr; 186094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 187094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 188094332d3Sopenharmony_ci constexpr int32_t userId1 = 123; 189094332d3Sopenharmony_ci constexpr int32_t userId2 = 1336; 190094332d3Sopenharmony_ci UserInfo userInfo1 = {}; 191094332d3Sopenharmony_ci userInfo1.userId = userId1; 192094332d3Sopenharmony_ci userInfo1.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 193094332d3Sopenharmony_ci userInfo1.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 194094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo1)); 195094332d3Sopenharmony_ci UserInfo userInfo2 = {}; 196094332d3Sopenharmony_ci userInfo2.userId = userId2; 197094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo2)); 198094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, nullptr); 199094332d3Sopenharmony_ci EXPECT_NE(QueryUserInfo(userId1), nullptr); 200094332d3Sopenharmony_ci} 201094332d3Sopenharmony_ci 202094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestIsSecureUidDuplicate, TestSize.Level0) 203094332d3Sopenharmony_ci{ 204094332d3Sopenharmony_ci constexpr uint64_t secUid = 1221; 205094332d3Sopenharmony_ci constexpr uint64_t secUid1 = 111; 206094332d3Sopenharmony_ci constexpr uint64_t secUid2 = 222; 207094332d3Sopenharmony_ci EXPECT_FALSE(IsSecureUidDuplicate(nullptr, secUid)); 208094332d3Sopenharmony_ci LinkedList *userInfoList = CreateLinkedList(DestroyUserInfoNode); 209094332d3Sopenharmony_ci EXPECT_NE(userInfoList, nullptr); 210094332d3Sopenharmony_ci EXPECT_FALSE(IsSecureUidDuplicate(userInfoList, secUid)); 211094332d3Sopenharmony_ci UserInfo info1 = {}; 212094332d3Sopenharmony_ci info1.secUid = secUid1; 213094332d3Sopenharmony_ci userInfoList->insert(userInfoList, static_cast<void *>(&info1)); 214094332d3Sopenharmony_ci UserInfo info2 = info1; 215094332d3Sopenharmony_ci info2.secUid = secUid2; 216094332d3Sopenharmony_ci userInfoList->insert(userInfoList, static_cast<void *>(&info2)); 217094332d3Sopenharmony_ci userInfoList->insert(userInfoList, nullptr); 218094332d3Sopenharmony_ci EXPECT_TRUE(IsSecureUidDuplicate(userInfoList, secUid1)); 219094332d3Sopenharmony_ci} 220094332d3Sopenharmony_ci 221094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestCreateUser, TestSize.Level0) 222094332d3Sopenharmony_ci{ 223094332d3Sopenharmony_ci g_userInfoList = nullptr; 224094332d3Sopenharmony_ci constexpr int32_t userId = 123; 225094332d3Sopenharmony_ci EXPECT_EQ(CreateUser(userId, 0), nullptr); 226094332d3Sopenharmony_ci} 227094332d3Sopenharmony_ci 228094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestDeleteUser, TestSize.Level0) 229094332d3Sopenharmony_ci{ 230094332d3Sopenharmony_ci g_userInfoList = nullptr; 231094332d3Sopenharmony_ci constexpr int32_t userId = 123; 232094332d3Sopenharmony_ci EXPECT_EQ(DeleteUser(userId), RESULT_BAD_PARAM); 233094332d3Sopenharmony_ci} 234094332d3Sopenharmony_ci 235094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestIsCredentialIdDuplicate, TestSize.Level0) 236094332d3Sopenharmony_ci{ 237094332d3Sopenharmony_ci g_userInfoList = nullptr; 238094332d3Sopenharmony_ci constexpr uint64_t credentialId1 = 1221; 239094332d3Sopenharmony_ci constexpr uint64_t credentialId2 = 10; 240094332d3Sopenharmony_ci EXPECT_TRUE(IsCredentialIdDuplicate(nullptr, credentialId1)); 241094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 242094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 243094332d3Sopenharmony_ci UserInfo info = {}; 244094332d3Sopenharmony_ci info.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 245094332d3Sopenharmony_ci EXPECT_NE(info.credentialInfoList, nullptr); 246094332d3Sopenharmony_ci CredentialInfoHal credInfo = {}; 247094332d3Sopenharmony_ci credInfo.credentialId = credentialId2; 248094332d3Sopenharmony_ci info.credentialInfoList->insert(info.credentialInfoList, static_cast<void *>(&credInfo)); 249094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, &info); 250094332d3Sopenharmony_ci EXPECT_FALSE(IsCredentialIdDuplicate(nullptr, credentialId2)); 251094332d3Sopenharmony_ci} 252094332d3Sopenharmony_ci 253094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestIsEnrolledIdDuplicate, TestSize.Level0) 254094332d3Sopenharmony_ci{ 255094332d3Sopenharmony_ci constexpr uint64_t enrolledId1 = 111; 256094332d3Sopenharmony_ci constexpr uint64_t enrolledId2 = 222; 257094332d3Sopenharmony_ci LinkedList *enrolledList = CreateLinkedList(DestroyEnrolledNode); 258094332d3Sopenharmony_ci EXPECT_NE(enrolledList, nullptr); 259094332d3Sopenharmony_ci EnrolledInfoHal info1 = {}; 260094332d3Sopenharmony_ci info1.enrolledId = enrolledId1; 261094332d3Sopenharmony_ci enrolledList->insert(enrolledList, static_cast<void *>(&info1)); 262094332d3Sopenharmony_ci EnrolledInfoHal info2 = {}; 263094332d3Sopenharmony_ci info2.enrolledId = enrolledId2; 264094332d3Sopenharmony_ci enrolledList->insert(enrolledList, static_cast<void *>(&info2)); 265094332d3Sopenharmony_ci enrolledList->insert(enrolledList, nullptr); 266094332d3Sopenharmony_ci EXPECT_TRUE(IsEnrolledIdDuplicate(enrolledList, enrolledId1)); 267094332d3Sopenharmony_ci} 268094332d3Sopenharmony_ci 269094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGenerateDeduplicateUint64, TestSize.Level0) 270094332d3Sopenharmony_ci{ 271094332d3Sopenharmony_ci EXPECT_EQ(GenerateDeduplicateUint64(nullptr, nullptr, IsEnrolledIdDuplicate), RESULT_BAD_PARAM); 272094332d3Sopenharmony_ci} 273094332d3Sopenharmony_ci 274094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestUpdateEnrolledId, TestSize.Level0) 275094332d3Sopenharmony_ci{ 276094332d3Sopenharmony_ci constexpr uint32_t authType1 = 1; 277094332d3Sopenharmony_ci constexpr uint32_t authType2 = 2; 278094332d3Sopenharmony_ci LinkedList *enrolledList = CreateLinkedList(DestroyEnrolledNode); 279094332d3Sopenharmony_ci EXPECT_NE(enrolledList, nullptr); 280094332d3Sopenharmony_ci EnrolledInfoHal info1 = {}; 281094332d3Sopenharmony_ci info1.authType = authType1; 282094332d3Sopenharmony_ci enrolledList->insert(enrolledList, static_cast<void *>(&info1)); 283094332d3Sopenharmony_ci EnrolledInfoHal info2 = {}; 284094332d3Sopenharmony_ci info2.authType = authType2; 285094332d3Sopenharmony_ci enrolledList->insert(enrolledList, static_cast<void *>(&info2)); 286094332d3Sopenharmony_ci enrolledList->insert(enrolledList, nullptr); 287094332d3Sopenharmony_ci EXPECT_EQ(UpdateEnrolledId(enrolledList, authType1), RESULT_SUCCESS); 288094332d3Sopenharmony_ci} 289094332d3Sopenharmony_ci 290094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestAddCredentialToUser, TestSize.Level0) 291094332d3Sopenharmony_ci{ 292094332d3Sopenharmony_ci g_userInfoList = nullptr; 293094332d3Sopenharmony_ci EXPECT_EQ(AddCredentialToUser(nullptr, nullptr), RESULT_NEED_INIT); 294094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 295094332d3Sopenharmony_ci UserInfo userInfo = {}; 296094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 297094332d3Sopenharmony_ci EXPECT_NE(userInfo.credentialInfoList, nullptr); 298094332d3Sopenharmony_ci userInfo.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 299094332d3Sopenharmony_ci CredentialInfoHal credInfo = {}; 300094332d3Sopenharmony_ci constexpr uint32_t credNum = 102; 301094332d3Sopenharmony_ci for (uint32_t i = 0; i < credNum; ++i) { 302094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(&credInfo)); 303094332d3Sopenharmony_ci } 304094332d3Sopenharmony_ci EXPECT_EQ(AddCredentialToUser(&userInfo, nullptr), RESULT_EXCEED_LIMIT); 305094332d3Sopenharmony_ci} 306094332d3Sopenharmony_ci 307094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestAddUser, TestSize.Level0) 308094332d3Sopenharmony_ci{ 309094332d3Sopenharmony_ci g_currentUser = nullptr; 310094332d3Sopenharmony_ci g_userInfoList = nullptr; 311094332d3Sopenharmony_ci EXPECT_EQ(AddUser(111, nullptr, 0), RESULT_NEED_INIT); 312094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 313094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 314094332d3Sopenharmony_ci constexpr uint32_t userNum = 1002; 315094332d3Sopenharmony_ci UserInfo info = {}; 316094332d3Sopenharmony_ci for (uint32_t i = 0; i < userNum; ++i) { 317094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&info)); 318094332d3Sopenharmony_ci } 319094332d3Sopenharmony_ci EXPECT_EQ(AddUser(111, nullptr, 0), RESULT_EXCEED_LIMIT); 320094332d3Sopenharmony_ci} 321094332d3Sopenharmony_ci 322094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestAddCredentialInfo_001, TestSize.Level0) 323094332d3Sopenharmony_ci{ 324094332d3Sopenharmony_ci EXPECT_EQ(AddCredentialInfo(111, nullptr, 0), RESULT_BAD_PARAM); 325094332d3Sopenharmony_ci} 326094332d3Sopenharmony_ci 327094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestAddCredentialInfo_002, TestSize.Level0) 328094332d3Sopenharmony_ci{ 329094332d3Sopenharmony_ci g_currentUser = nullptr; 330094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 331094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 332094332d3Sopenharmony_ci constexpr int32_t userId = 100; 333094332d3Sopenharmony_ci constexpr int32_t userType = 2; 334094332d3Sopenharmony_ci constexpr uint32_t authType = 1; 335094332d3Sopenharmony_ci UserInfo *user = QueryUserInfo(userId); 336094332d3Sopenharmony_ci EXPECT_EQ(user, nullptr); 337094332d3Sopenharmony_ci user = CreateUser(userId, userType); 338094332d3Sopenharmony_ci EXPECT_NE(user->userType, 0); 339094332d3Sopenharmony_ci 340094332d3Sopenharmony_ci CredentialInfoHal credInfo = {}; 341094332d3Sopenharmony_ci credInfo.authType = authType; 342094332d3Sopenharmony_ci EXPECT_EQ(AddUser(userId, &credInfo, userType), RESULT_SUCCESS); 343094332d3Sopenharmony_ci 344094332d3Sopenharmony_ci EXPECT_EQ(AddCredentialInfo(userId, &credInfo, userType), RESULT_SUCCESS); 345094332d3Sopenharmony_ci} 346094332d3Sopenharmony_ci 347094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestMatchCredentialById, TestSize.Level0) 348094332d3Sopenharmony_ci{ 349094332d3Sopenharmony_ci EXPECT_FALSE(MatchCredentialById(nullptr, nullptr)); 350094332d3Sopenharmony_ci constexpr uint64_t credentialId = 10; 351094332d3Sopenharmony_ci CredentialInfoHal info = {}; 352094332d3Sopenharmony_ci info.credentialId = credentialId; 353094332d3Sopenharmony_ci uint64_t condition = credentialId; 354094332d3Sopenharmony_ci EXPECT_TRUE(MatchCredentialById(static_cast<void *>(&info), static_cast<void *>(&condition))); 355094332d3Sopenharmony_ci condition = 20; 356094332d3Sopenharmony_ci EXPECT_FALSE(MatchCredentialById(static_cast<void *>(&info), static_cast<void *>(&condition))); 357094332d3Sopenharmony_ci} 358094332d3Sopenharmony_ci 359094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestMatchEnrolledInfoByType, TestSize.Level0) 360094332d3Sopenharmony_ci{ 361094332d3Sopenharmony_ci EXPECT_FALSE(MatchEnrolledInfoByType(nullptr, nullptr)); 362094332d3Sopenharmony_ci constexpr uint32_t authType = 1; 363094332d3Sopenharmony_ci EnrolledInfoHal info = {}; 364094332d3Sopenharmony_ci info.authType = authType; 365094332d3Sopenharmony_ci uint32_t condition = 1; 366094332d3Sopenharmony_ci EXPECT_TRUE(MatchEnrolledInfoByType(static_cast<void *>(&info), static_cast<void *>(&condition))); 367094332d3Sopenharmony_ci condition = 2; 368094332d3Sopenharmony_ci EXPECT_FALSE(MatchEnrolledInfoByType(static_cast<void *>(&info), static_cast<void *>(&condition))); 369094332d3Sopenharmony_ci} 370094332d3Sopenharmony_ci 371094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestDeleteCredentialInfo_001, TestSize.Level0) 372094332d3Sopenharmony_ci{ 373094332d3Sopenharmony_ci EXPECT_EQ(DeleteCredentialInfo(1, 1, nullptr), RESULT_BAD_PARAM); 374094332d3Sopenharmony_ci CredentialInfoHal credInfo = {}; 375094332d3Sopenharmony_ci EXPECT_EQ(DeleteCredentialInfo(1, 1, &credInfo), RESULT_BAD_PARAM); 376094332d3Sopenharmony_ci} 377094332d3Sopenharmony_ci 378094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestDeleteCredentialInfo_002, TestSize.Level0) 379094332d3Sopenharmony_ci{ 380094332d3Sopenharmony_ci g_currentUser = nullptr; 381094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 382094332d3Sopenharmony_ci constexpr int32_t userId = 112; 383094332d3Sopenharmony_ci constexpr uint64_t credentialId = 1; 384094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 385094332d3Sopenharmony_ci UserInfo userInfo = {}; 386094332d3Sopenharmony_ci userInfo.userId = userId; 387094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 388094332d3Sopenharmony_ci userInfo.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 389094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 390094332d3Sopenharmony_ci CredentialInfoHal credInfo = {}; 391094332d3Sopenharmony_ci EXPECT_EQ(DeleteCredentialInfo(userId, credentialId, &credInfo), RESULT_UNKNOWN); 392094332d3Sopenharmony_ci} 393094332d3Sopenharmony_ci 394094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestDeleteCredentialInfo_003, TestSize.Level0) 395094332d3Sopenharmony_ci{ 396094332d3Sopenharmony_ci g_currentUser = nullptr; 397094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 398094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 399094332d3Sopenharmony_ci constexpr int32_t userId = 113; 400094332d3Sopenharmony_ci constexpr uint64_t credentialId = 10; 401094332d3Sopenharmony_ci UserInfo userInfo = {}; 402094332d3Sopenharmony_ci userInfo.userId = userId; 403094332d3Sopenharmony_ci userInfo.enrolledInfoList = nullptr; 404094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 405094332d3Sopenharmony_ci userInfo.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 406094332d3Sopenharmony_ci EXPECT_NE(userInfo.credentialInfoList, nullptr); 407094332d3Sopenharmony_ci auto *credInfo = static_cast<CredentialInfoHal *>(Malloc(sizeof(CredentialInfoHal))); 408094332d3Sopenharmony_ci credInfo->credentialId = credentialId; 409094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(credInfo)); 410094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 411094332d3Sopenharmony_ci CredentialInfoHal info = {}; 412094332d3Sopenharmony_ci EXPECT_EQ(DeleteCredentialInfo(userId, credentialId, &info), RESULT_SUCCESS); 413094332d3Sopenharmony_ci} 414094332d3Sopenharmony_ci 415094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestDeleteCredentialInfo_004, TestSize.Level0) 416094332d3Sopenharmony_ci{ 417094332d3Sopenharmony_ci g_currentUser = nullptr; 418094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 419094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 420094332d3Sopenharmony_ci constexpr int32_t userId = 115; 421094332d3Sopenharmony_ci constexpr uint32_t authType = 2; 422094332d3Sopenharmony_ci constexpr uint64_t credentialId1 = 10; 423094332d3Sopenharmony_ci constexpr uint64_t credentialId2 = 20; 424094332d3Sopenharmony_ci UserInfo userInfo = {}; 425094332d3Sopenharmony_ci userInfo.userId = userId; 426094332d3Sopenharmony_ci userInfo.enrolledInfoList = nullptr; 427094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 428094332d3Sopenharmony_ci userInfo.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 429094332d3Sopenharmony_ci EXPECT_NE(userInfo.credentialInfoList, nullptr); 430094332d3Sopenharmony_ci auto *credInfo1 = static_cast<CredentialInfoHal *>(Malloc(sizeof(CredentialInfoHal))); 431094332d3Sopenharmony_ci credInfo1->credentialId = credentialId1; 432094332d3Sopenharmony_ci credInfo1->authType = authType; 433094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(credInfo1)); 434094332d3Sopenharmony_ci auto *credInfo2 = static_cast<CredentialInfoHal *>(Malloc(sizeof(CredentialInfoHal))); 435094332d3Sopenharmony_ci credInfo2->credentialId = credentialId2; 436094332d3Sopenharmony_ci credInfo2->authType = authType; 437094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(credInfo2)); 438094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 439094332d3Sopenharmony_ci CredentialInfoHal info = {}; 440094332d3Sopenharmony_ci EXPECT_EQ(DeleteCredentialInfo(userId, credentialId1, &info), RESULT_SUCCESS); 441094332d3Sopenharmony_ci Free(credInfo2); 442094332d3Sopenharmony_ci} 443094332d3Sopenharmony_ci 444094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestClearCachePin, TestSize.Level0) 445094332d3Sopenharmony_ci{ 446094332d3Sopenharmony_ci constexpr int32_t userId = 115; 447094332d3Sopenharmony_ci ClearCachePin(userId); 448094332d3Sopenharmony_ci g_currentUser = nullptr; 449094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 450094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 451094332d3Sopenharmony_ci constexpr uint64_t credentialId1 = 10; 452094332d3Sopenharmony_ci UserInfo userInfo = {}; 453094332d3Sopenharmony_ci userInfo.userId = userId; 454094332d3Sopenharmony_ci userInfo.enrolledInfoList = nullptr; 455094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 456094332d3Sopenharmony_ci EXPECT_NE(userInfo.credentialInfoList, nullptr); 457094332d3Sopenharmony_ci auto *credInfo1 = static_cast<CredentialInfoHal *>(Malloc(sizeof(CredentialInfoHal))); 458094332d3Sopenharmony_ci credInfo1->credentialId = credentialId1; 459094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(credInfo1)); 460094332d3Sopenharmony_ci ClearCachePin(userId); 461094332d3Sopenharmony_ci} 462094332d3Sopenharmony_ci 463094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryCredentialById, TestSize.Level0) 464094332d3Sopenharmony_ci{ 465094332d3Sopenharmony_ci constexpr uint64_t credentialId = 111; 466094332d3Sopenharmony_ci constexpr uint64_t credentialId1 = 10; 467094332d3Sopenharmony_ci constexpr uint64_t credentialId2 = 20; 468094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialById(credentialId, nullptr), nullptr); 469094332d3Sopenharmony_ci LinkedList *credentialList = CreateLinkedList(DestroyCredentialNode); 470094332d3Sopenharmony_ci EXPECT_NE(credentialList, nullptr); 471094332d3Sopenharmony_ci CredentialInfoHal credInfo1 = {}; 472094332d3Sopenharmony_ci credInfo1.credentialId = credentialId1; 473094332d3Sopenharmony_ci credentialList->insert(credentialList, static_cast<void *>(&credInfo1)); 474094332d3Sopenharmony_ci CredentialInfoHal credInfo2 = {}; 475094332d3Sopenharmony_ci credInfo2.credentialId = credentialId2; 476094332d3Sopenharmony_ci credentialList->insert(credentialList, static_cast<void *>(&credInfo2)); 477094332d3Sopenharmony_ci credentialList->insert(credentialList, nullptr); 478094332d3Sopenharmony_ci EXPECT_NE(QueryCredentialById(credentialId1, credentialList), nullptr); 479094332d3Sopenharmony_ci} 480094332d3Sopenharmony_ci 481094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryCredentialByAuthType, TestSize.Level0) 482094332d3Sopenharmony_ci{ 483094332d3Sopenharmony_ci constexpr uint32_t authType1 = 1; 484094332d3Sopenharmony_ci constexpr uint32_t authType2 = 2; 485094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialByAuthType(1, nullptr), nullptr); 486094332d3Sopenharmony_ci LinkedList *credentialList = CreateLinkedList(DestroyCredentialNode); 487094332d3Sopenharmony_ci EXPECT_NE(credentialList, nullptr); 488094332d3Sopenharmony_ci CredentialInfoHal credInfo1 = {}; 489094332d3Sopenharmony_ci credInfo1.authType = authType1; 490094332d3Sopenharmony_ci credentialList->insert(credentialList, static_cast<void *>(&credInfo1)); 491094332d3Sopenharmony_ci CredentialInfoHal credInfo2 = {}; 492094332d3Sopenharmony_ci credInfo2.authType = authType2; 493094332d3Sopenharmony_ci credentialList->insert(credentialList, static_cast<void *>(&credInfo2)); 494094332d3Sopenharmony_ci credentialList->insert(credentialList, nullptr); 495094332d3Sopenharmony_ci EXPECT_NE(QueryCredentialByAuthType(authType1, credentialList), nullptr); 496094332d3Sopenharmony_ci} 497094332d3Sopenharmony_ci 498094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestIsCredMatch_001, TestSize.Level0) 499094332d3Sopenharmony_ci{ 500094332d3Sopenharmony_ci constexpr uint64_t templateId1 = 20; 501094332d3Sopenharmony_ci constexpr uint64_t templateId2 = 10; 502094332d3Sopenharmony_ci CredentialInfoHal credInfo = {}; 503094332d3Sopenharmony_ci credInfo.templateId = templateId1; 504094332d3Sopenharmony_ci CredentialCondition limit = {}; 505094332d3Sopenharmony_ci SetCredentialConditionTemplateId(&limit, templateId2); 506094332d3Sopenharmony_ci EXPECT_FALSE(IsCredMatch(&limit, &credInfo)); 507094332d3Sopenharmony_ci} 508094332d3Sopenharmony_ci 509094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestIsCredMatch_002, TestSize.Level0) 510094332d3Sopenharmony_ci{ 511094332d3Sopenharmony_ci constexpr uint32_t excutorSensorHint1 = 10; 512094332d3Sopenharmony_ci constexpr uint32_t excutorSensorHint2 = 20; 513094332d3Sopenharmony_ci CredentialInfoHal credInfo = {}; 514094332d3Sopenharmony_ci credInfo.executorSensorHint = excutorSensorHint2; 515094332d3Sopenharmony_ci CredentialCondition limit = {}; 516094332d3Sopenharmony_ci SetCredentialConditionExecutorSensorHint(&limit, 0); 517094332d3Sopenharmony_ci EXPECT_FALSE(IsCredMatch(&limit, &credInfo)); 518094332d3Sopenharmony_ci SetCredentialConditionExecutorSensorHint(&limit, excutorSensorHint1); 519094332d3Sopenharmony_ci EXPECT_FALSE(IsCredMatch(&limit, &credInfo)); 520094332d3Sopenharmony_ci SetCredentialConditionExecutorSensorHint(&limit, excutorSensorHint2); 521094332d3Sopenharmony_ci EXPECT_FALSE(IsCredMatch(&limit, &credInfo)); 522094332d3Sopenharmony_ci} 523094332d3Sopenharmony_ci 524094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestIsCredMatch_003, TestSize.Level0) 525094332d3Sopenharmony_ci{ 526094332d3Sopenharmony_ci constexpr uint32_t executorMatcher1 = 10; 527094332d3Sopenharmony_ci constexpr uint32_t executorMatcher2 = 20; 528094332d3Sopenharmony_ci CredentialInfoHal credInfo = {}; 529094332d3Sopenharmony_ci credInfo.executorMatcher = executorMatcher2; 530094332d3Sopenharmony_ci CredentialCondition limit = {}; 531094332d3Sopenharmony_ci EXPECT_FALSE(IsCredMatch(&limit, &credInfo)); 532094332d3Sopenharmony_ci SetCredentialConditionExecutorMatcher(&limit, executorMatcher1); 533094332d3Sopenharmony_ci EXPECT_FALSE(IsCredMatch(&limit, &credInfo)); 534094332d3Sopenharmony_ci SetCredentialConditionExecutorMatcher(&limit, executorMatcher2); 535094332d3Sopenharmony_ci EXPECT_FALSE(IsCredMatch(&limit, &credInfo)); 536094332d3Sopenharmony_ci SetCredentiaConditionNeedCachePin(nullptr); 537094332d3Sopenharmony_ci EXPECT_FALSE(IsCredMatch(&limit, &credInfo)); 538094332d3Sopenharmony_ci SetCredentiaConditionNeedCachePin(&limit); 539094332d3Sopenharmony_ci EXPECT_TRUE(IsCredMatch(&limit, &credInfo)); 540094332d3Sopenharmony_ci} 541094332d3Sopenharmony_ci 542094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestIsUserMatch, TestSize.Level0) 543094332d3Sopenharmony_ci{ 544094332d3Sopenharmony_ci constexpr int32_t userId1 = 20; 545094332d3Sopenharmony_ci constexpr int32_t userId2 = 10; 546094332d3Sopenharmony_ci UserInfo userInfo = {}; 547094332d3Sopenharmony_ci userInfo.userId = userId1; 548094332d3Sopenharmony_ci CredentialCondition limit = {}; 549094332d3Sopenharmony_ci SetCredentialConditionUserId(&limit, userId2); 550094332d3Sopenharmony_ci EXPECT_FALSE(IsUserMatch(&limit, &userInfo)); 551094332d3Sopenharmony_ci} 552094332d3Sopenharmony_ci 553094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestTraverseCredentialList, TestSize.Level0) 554094332d3Sopenharmony_ci{ 555094332d3Sopenharmony_ci EXPECT_EQ(TraverseCredentialList(nullptr, nullptr, nullptr), RESULT_GENERAL_ERROR); 556094332d3Sopenharmony_ci LinkedList *credentialList = CreateLinkedList(DestroyCredentialNode); 557094332d3Sopenharmony_ci EXPECT_NE(credentialList, nullptr); 558094332d3Sopenharmony_ci credentialList->insert(credentialList, nullptr); 559094332d3Sopenharmony_ci EXPECT_EQ(TraverseCredentialList(nullptr, credentialList, nullptr), RESULT_UNKNOWN); 560094332d3Sopenharmony_ci} 561094332d3Sopenharmony_ci 562094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryCredentialLimit_001, TestSize.Level0) 563094332d3Sopenharmony_ci{ 564094332d3Sopenharmony_ci g_userInfoList = nullptr; 565094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialLimit(nullptr), nullptr); 566094332d3Sopenharmony_ci CredentialCondition limit = {}; 567094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialLimit(&limit), nullptr); 568094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 569094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 570094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, nullptr); 571094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialLimit(&limit), nullptr); 572094332d3Sopenharmony_ci} 573094332d3Sopenharmony_ci 574094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryCredentialLimit_002, TestSize.Level0) 575094332d3Sopenharmony_ci{ 576094332d3Sopenharmony_ci constexpr int32_t userId1 = 1001; 577094332d3Sopenharmony_ci constexpr int32_t userId2 = 1002; 578094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 579094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 580094332d3Sopenharmony_ci UserInfo userInfo1 = {}; 581094332d3Sopenharmony_ci userInfo1.userId = userId1; 582094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo1)); 583094332d3Sopenharmony_ci UserInfo userInfo2 = {}; 584094332d3Sopenharmony_ci userInfo2.userId = userId2; 585094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo2)); 586094332d3Sopenharmony_ci CredentialCondition limit = {}; 587094332d3Sopenharmony_ci SetCredentialConditionUserId(&limit, userId1); 588094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialLimit(&limit), nullptr); 589094332d3Sopenharmony_ci} 590094332d3Sopenharmony_ci 591094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryCredentialUserId_001, TestSize.Level0) 592094332d3Sopenharmony_ci{ 593094332d3Sopenharmony_ci constexpr int32_t userId1 = 1001; 594094332d3Sopenharmony_ci constexpr uint64_t credentialId = 10; 595094332d3Sopenharmony_ci g_userInfoList = nullptr; 596094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialUserId(credentialId, nullptr), RESULT_BAD_PARAM); 597094332d3Sopenharmony_ci int32_t userId = userId1; 598094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialUserId(credentialId, &userId), RESULT_NEED_INIT); 599094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 600094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 601094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialUserId(credentialId, &userId), RESULT_NOT_FOUND); 602094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, nullptr); 603094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialUserId(credentialId, &userId), RESULT_UNKNOWN); 604094332d3Sopenharmony_ci} 605094332d3Sopenharmony_ci 606094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryCredentialUserId_002, TestSize.Level0) 607094332d3Sopenharmony_ci{ 608094332d3Sopenharmony_ci constexpr int32_t userId1 = 1002; 609094332d3Sopenharmony_ci constexpr int32_t userId2 = 1001; 610094332d3Sopenharmony_ci constexpr uint64_t credentialId = 10; 611094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 612094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 613094332d3Sopenharmony_ci UserInfo userInfo = {}; 614094332d3Sopenharmony_ci userInfo.userId = userId1; 615094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 616094332d3Sopenharmony_ci int32_t userId = userId2; 617094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialUserId(credentialId, &userId), RESULT_UNKNOWN); 618094332d3Sopenharmony_ci} 619094332d3Sopenharmony_ci 620094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestQueryCredentialUserId_003, TestSize.Level0) 621094332d3Sopenharmony_ci{ 622094332d3Sopenharmony_ci constexpr int32_t userId1 = 1002; 623094332d3Sopenharmony_ci constexpr int32_t userId2 = 1001; 624094332d3Sopenharmony_ci constexpr uint64_t credentialId = 10; 625094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 626094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 627094332d3Sopenharmony_ci UserInfo userInfo = {}; 628094332d3Sopenharmony_ci userInfo.userId = userId1; 629094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 630094332d3Sopenharmony_ci EXPECT_NE(userInfo.credentialInfoList, nullptr); 631094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 632094332d3Sopenharmony_ci int32_t userId = userId2; 633094332d3Sopenharmony_ci EXPECT_EQ(QueryCredentialUserId(credentialId, &userId), RESULT_NOT_FOUND); 634094332d3Sopenharmony_ci} 635094332d3Sopenharmony_ci 636094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestSetPinSubType, TestSize.Level0) 637094332d3Sopenharmony_ci{ 638094332d3Sopenharmony_ci g_userInfoList = nullptr; 639094332d3Sopenharmony_ci g_currentUser = nullptr; 640094332d3Sopenharmony_ci constexpr int32_t userId = 1003; 641094332d3Sopenharmony_ci constexpr uint64_t pinSubType = 10000; 642094332d3Sopenharmony_ci EXPECT_EQ(SetPinSubType(userId, pinSubType), RESULT_NOT_FOUND); 643094332d3Sopenharmony_ci} 644094332d3Sopenharmony_ci 645094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetPinSubType, TestSize.Level0) 646094332d3Sopenharmony_ci{ 647094332d3Sopenharmony_ci g_userInfoList = nullptr; 648094332d3Sopenharmony_ci g_currentUser = nullptr; 649094332d3Sopenharmony_ci constexpr int32_t userId = 1005; 650094332d3Sopenharmony_ci constexpr uint64_t pinSubType = 10000; 651094332d3Sopenharmony_ci EXPECT_EQ(GetPinSubType(userId, nullptr), RESULT_BAD_PARAM); 652094332d3Sopenharmony_ci uint64_t subType = pinSubType; 653094332d3Sopenharmony_ci EXPECT_EQ(GetPinSubType(userId, &subType), RESULT_NOT_FOUND); 654094332d3Sopenharmony_ci} 655094332d3Sopenharmony_ci 656094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestSetCredentialConditionCredentialId, TestSize.Level0) 657094332d3Sopenharmony_ci{ 658094332d3Sopenharmony_ci constexpr uint64_t credentialId = 10; 659094332d3Sopenharmony_ci SetCredentialConditionCredentialId(nullptr, credentialId); 660094332d3Sopenharmony_ci CredentialCondition condition = {}; 661094332d3Sopenharmony_ci SetCredentialConditionCredentialId(&condition, credentialId); 662094332d3Sopenharmony_ci EXPECT_EQ(condition.credentialId, credentialId); 663094332d3Sopenharmony_ci EXPECT_EQ(condition.conditionFactor & CREDENTIAL_CONDITION_CREDENTIAL_ID, CREDENTIAL_CONDITION_CREDENTIAL_ID); 664094332d3Sopenharmony_ci} 665094332d3Sopenharmony_ci 666094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestSetCredentialConditionTemplateId, TestSize.Level0) 667094332d3Sopenharmony_ci{ 668094332d3Sopenharmony_ci constexpr uint64_t templateId = 20; 669094332d3Sopenharmony_ci SetCredentialConditionTemplateId(nullptr, templateId); 670094332d3Sopenharmony_ci CredentialCondition condition = {}; 671094332d3Sopenharmony_ci SetCredentialConditionTemplateId(&condition, templateId); 672094332d3Sopenharmony_ci EXPECT_EQ(condition.templateId, templateId); 673094332d3Sopenharmony_ci EXPECT_EQ(condition.conditionFactor & CREDENTIAL_CONDITION_TEMPLATE_ID, CREDENTIAL_CONDITION_TEMPLATE_ID); 674094332d3Sopenharmony_ci} 675094332d3Sopenharmony_ci 676094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestSetCredentialConditionAuthType, TestSize.Level0) 677094332d3Sopenharmony_ci{ 678094332d3Sopenharmony_ci constexpr uint32_t authType = 2; 679094332d3Sopenharmony_ci SetCredentialConditionAuthType(nullptr, authType); 680094332d3Sopenharmony_ci CredentialCondition condition = {}; 681094332d3Sopenharmony_ci SetCredentialConditionAuthType(&condition, authType); 682094332d3Sopenharmony_ci EXPECT_EQ(condition.authType, authType); 683094332d3Sopenharmony_ci EXPECT_EQ(condition.conditionFactor & CREDENTIAL_CONDITION_AUTH_TYPE, CREDENTIAL_CONDITION_AUTH_TYPE); 684094332d3Sopenharmony_ci} 685094332d3Sopenharmony_ci 686094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestSetCredentialConditionExecutorSensorHint, TestSize.Level0) 687094332d3Sopenharmony_ci{ 688094332d3Sopenharmony_ci constexpr uint32_t executorSensorHint = 20; 689094332d3Sopenharmony_ci SetCredentialConditionExecutorSensorHint(nullptr, executorSensorHint); 690094332d3Sopenharmony_ci CredentialCondition condition = {}; 691094332d3Sopenharmony_ci SetCredentialConditionExecutorSensorHint(&condition, executorSensorHint); 692094332d3Sopenharmony_ci EXPECT_EQ(condition.executorSensorHint, executorSensorHint); 693094332d3Sopenharmony_ci EXPECT_EQ(condition.conditionFactor & CREDENTIAL_CONDITION_SENSOR_HINT, CREDENTIAL_CONDITION_SENSOR_HINT); 694094332d3Sopenharmony_ci} 695094332d3Sopenharmony_ci 696094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestSetCredentialConditionExecutorMatcher, TestSize.Level0) 697094332d3Sopenharmony_ci{ 698094332d3Sopenharmony_ci constexpr uint32_t executorMatcher = 20; 699094332d3Sopenharmony_ci SetCredentialConditionExecutorMatcher(nullptr, executorMatcher); 700094332d3Sopenharmony_ci CredentialCondition condition = {}; 701094332d3Sopenharmony_ci SetCredentialConditionExecutorMatcher(&condition, executorMatcher); 702094332d3Sopenharmony_ci EXPECT_EQ(condition.executorMatcher, executorMatcher); 703094332d3Sopenharmony_ci EXPECT_EQ(condition.conditionFactor & CREDENTIAL_CONDITION_EXECUTOR_MATCHER, CREDENTIAL_CONDITION_EXECUTOR_MATCHER); 704094332d3Sopenharmony_ci} 705094332d3Sopenharmony_ci 706094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestSetCredentialConditionUserId, TestSize.Level0) 707094332d3Sopenharmony_ci{ 708094332d3Sopenharmony_ci constexpr int32_t userId = 50; 709094332d3Sopenharmony_ci SetCredentialConditionUserId(nullptr, userId); 710094332d3Sopenharmony_ci CredentialCondition condition = {}; 711094332d3Sopenharmony_ci SetCredentialConditionUserId(&condition, userId); 712094332d3Sopenharmony_ci EXPECT_EQ(condition.userId, userId); 713094332d3Sopenharmony_ci EXPECT_EQ(condition.conditionFactor & CREDENTIAL_CONDITION_USER_ID, CREDENTIAL_CONDITION_USER_ID); 714094332d3Sopenharmony_ci} 715094332d3Sopenharmony_ci 716094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetEnrolledState_001, TestSize.Level0) 717094332d3Sopenharmony_ci{ 718094332d3Sopenharmony_ci constexpr int32_t userId = 1; 719094332d3Sopenharmony_ci constexpr uint32_t authType = 1; 720094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 721094332d3Sopenharmony_ci UserInfo userInfo = {}; 722094332d3Sopenharmony_ci userInfo.userId = userId; 723094332d3Sopenharmony_ci userInfo.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 724094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 725094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 726094332d3Sopenharmony_ci 727094332d3Sopenharmony_ci EnrolledStateHal enrolledState = {}; 728094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledState(0, authType, &enrolledState), RESULT_NOT_ENROLLED); 729094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledState(userId, authType, &enrolledState), RESULT_NOT_ENROLLED); 730094332d3Sopenharmony_ci} 731094332d3Sopenharmony_ci 732094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetEnrolledState_002, TestSize.Level0) 733094332d3Sopenharmony_ci{ 734094332d3Sopenharmony_ci constexpr static int32_t expectCredentialCount = 2; 735094332d3Sopenharmony_ci constexpr static int32_t testEnrolledId = 2; 736094332d3Sopenharmony_ci constexpr int32_t userId = 1; 737094332d3Sopenharmony_ci constexpr uint32_t authType = 1; 738094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 739094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 740094332d3Sopenharmony_ci 741094332d3Sopenharmony_ci UserInfo userInfo = {}; 742094332d3Sopenharmony_ci userInfo.userId = userId; 743094332d3Sopenharmony_ci userInfo.enrolledInfoList = CreateLinkedList(DestroyEnrolledNode); 744094332d3Sopenharmony_ci EnrolledInfoHal enrolledInfo = {1, testEnrolledId}; 745094332d3Sopenharmony_ci userInfo.enrolledInfoList->insert(userInfo.enrolledInfoList, static_cast<void *>(&enrolledInfo)); 746094332d3Sopenharmony_ci 747094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 748094332d3Sopenharmony_ci CredentialInfoHal credentialInfo = {0, 0, 1, 0, 0, 0}; 749094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(&credentialInfo)); 750094332d3Sopenharmony_ci CredentialInfoHal credentialInfo1 = {1, 1, 1, 1, 1, 1}; 751094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(&credentialInfo1)); 752094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 753094332d3Sopenharmony_ci 754094332d3Sopenharmony_ci EnrolledStateHal enrolledState = {}; 755094332d3Sopenharmony_ci EXPECT_EQ(GetEnrolledState(userId, authType, &enrolledState), RESULT_SUCCESS); 756094332d3Sopenharmony_ci EXPECT_EQ(enrolledState.credentialDigest, testEnrolledId); 757094332d3Sopenharmony_ci EXPECT_EQ(enrolledState.credentialCount, expectCredentialCount); 758094332d3Sopenharmony_ci} 759094332d3Sopenharmony_ci 760094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestRemoveCachePin_001, TestSize.Level0) 761094332d3Sopenharmony_ci{ 762094332d3Sopenharmony_ci constexpr int32_t userId = 1; 763094332d3Sopenharmony_ci UserInfo userInfo = {}; 764094332d3Sopenharmony_ci userInfo.userId = userId; 765094332d3Sopenharmony_ci bool removed = false; 766094332d3Sopenharmony_ci 767094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 768094332d3Sopenharmony_ci CredentialInfoHal credentialInfo = {0, 0, 2, 2, 3, 4}; 769094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(&credentialInfo)); 770094332d3Sopenharmony_ci CredentialInfoHal credentialInfo1 = {1, 1, 1, 1, 1, 1}; 771094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(&credentialInfo1)); 772094332d3Sopenharmony_ci 773094332d3Sopenharmony_ci RemoveCachePin(&userInfo, &removed); 774094332d3Sopenharmony_ci EXPECT_EQ(removed, false); 775094332d3Sopenharmony_ci} 776094332d3Sopenharmony_ci 777094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestSaveGlobalConfigParam, TestSize.Level0) 778094332d3Sopenharmony_ci{ 779094332d3Sopenharmony_ci memset_s(g_globalConfigArray, sizeof(GlobalConfigInfo) * MAX_GLOBAL_CONFIG_NUM, 0, 780094332d3Sopenharmony_ci sizeof(GlobalConfigInfo) * MAX_GLOBAL_CONFIG_NUM); 781094332d3Sopenharmony_ci EXPECT_EQ(SaveGlobalConfigParam(nullptr), RESULT_BAD_PARAM); 782094332d3Sopenharmony_ci 783094332d3Sopenharmony_ci GlobalConfigParamHal param = {}; 784094332d3Sopenharmony_ci param.type = ENABLE_STATUS; 785094332d3Sopenharmony_ci param.value.enableStatus = true; 786094332d3Sopenharmony_ci param.userIdNum = 1; 787094332d3Sopenharmony_ci param.userIds[0] = 1; 788094332d3Sopenharmony_ci param.authTypeNum = 1; 789094332d3Sopenharmony_ci param.authTypes[0] = 1; 790094332d3Sopenharmony_ci EXPECT_EQ(SaveGlobalConfigParam(¶m), RESULT_SUCCESS); 791094332d3Sopenharmony_ci EXPECT_EQ(SaveGlobalConfigParam(¶m), RESULT_SUCCESS); 792094332d3Sopenharmony_ci param.authTypeNum = MAX_AUTH_TYPE_LEN + 1; 793094332d3Sopenharmony_ci EXPECT_EQ(SaveGlobalConfigParam(¶m), RESULT_BAD_PARAM); 794094332d3Sopenharmony_ci param.userIdNum = MAX_USER + 1; 795094332d3Sopenharmony_ci EXPECT_EQ(SaveGlobalConfigParam(¶m), RESULT_BAD_PARAM); 796094332d3Sopenharmony_ci 797094332d3Sopenharmony_ci GlobalConfigParamHal param1 = {}; 798094332d3Sopenharmony_ci param1.type = PIN_EXPIRED_PERIOD; 799094332d3Sopenharmony_ci param1.value.pinExpiredPeriod = 1; 800094332d3Sopenharmony_ci EXPECT_EQ(SaveGlobalConfigParam(¶m1), RESULT_BAD_PARAM); 801094332d3Sopenharmony_ci 802094332d3Sopenharmony_ci GlobalConfigParamHal param2 = {}; 803094332d3Sopenharmony_ci EXPECT_EQ(SaveGlobalConfigParam(¶m2), RESULT_BAD_PARAM); 804094332d3Sopenharmony_ci} 805094332d3Sopenharmony_ci 806094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetPinExpiredInfo, TestSize.Level0) 807094332d3Sopenharmony_ci{ 808094332d3Sopenharmony_ci int32_t userId = 1; 809094332d3Sopenharmony_ci EXPECT_EQ(GetPinExpiredInfo(userId, nullptr), RESULT_BAD_PARAM); 810094332d3Sopenharmony_ci 811094332d3Sopenharmony_ci PinExpiredInfo info = {}; 812094332d3Sopenharmony_ci EXPECT_EQ(GetPinExpiredInfo(userId, &info), RESULT_SUCCESS); 813094332d3Sopenharmony_ci 814094332d3Sopenharmony_ci g_globalConfigArray[0].type = PIN_EXPIRED_PERIOD; 815094332d3Sopenharmony_ci g_globalConfigArray[0].value.pinExpiredPeriod = 1; 816094332d3Sopenharmony_ci g_currentUser = nullptr; 817094332d3Sopenharmony_ci g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 818094332d3Sopenharmony_ci EXPECT_NE(g_userInfoList, nullptr); 819094332d3Sopenharmony_ci UserInfo userInfo = {}; 820094332d3Sopenharmony_ci userInfo.userId = 1; 821094332d3Sopenharmony_ci userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 822094332d3Sopenharmony_ci CredentialInfoHal credentialInfo1 = {1, 1, 1, 1, 0, 1, 0}; 823094332d3Sopenharmony_ci userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(&credentialInfo1)); 824094332d3Sopenharmony_ci g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 825094332d3Sopenharmony_ci EXPECT_EQ(GetPinExpiredInfo(userId, &info), RESULT_SUCCESS); 826094332d3Sopenharmony_ci} 827094332d3Sopenharmony_ci 828094332d3Sopenharmony_ciHWTEST_F(IdmDatabaseTest, TestGetEnableStatus, TestSize.Level0) 829094332d3Sopenharmony_ci{ 830094332d3Sopenharmony_ci int32_t userId = 1; 831094332d3Sopenharmony_ci uint32_t authType = 1; 832094332d3Sopenharmony_ci EXPECT_EQ(GetEnableStatus(userId, authType), true); 833094332d3Sopenharmony_ci 834094332d3Sopenharmony_ci g_globalConfigArray[0].type = PIN_EXPIRED_PERIOD; 835094332d3Sopenharmony_ci g_globalConfigArray[0].value.pinExpiredPeriod = 1; 836094332d3Sopenharmony_ci EXPECT_EQ(GetEnableStatus(userId, authType), true); 837094332d3Sopenharmony_ci 838094332d3Sopenharmony_ci g_globalConfigArray[0].type = ENABLE_STATUS; 839094332d3Sopenharmony_ci g_globalConfigArray[0].value.enableStatus = false; 840094332d3Sopenharmony_ci g_globalConfigArray[0].authType = 0; 841094332d3Sopenharmony_ci g_globalConfigArray[0].userIds[0] = 0; 842094332d3Sopenharmony_ci EXPECT_EQ(GetEnableStatus(userId, authType), true); 843094332d3Sopenharmony_ci 844094332d3Sopenharmony_ci g_globalConfigArray[0].authType = 1; 845094332d3Sopenharmony_ci EXPECT_EQ(GetEnableStatus(userId, authType), false); 846094332d3Sopenharmony_ci} 847094332d3Sopenharmony_ci} // namespace UserAuth 848094332d3Sopenharmony_ci} // namespace UserIam 849094332d3Sopenharmony_ci} // namespace OHOS 850