1 /* 2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <gtest/gtest.h> 17 18 #include "securec.h" 19 20 #include "adaptor_memory.h" 21 #include "coauth.h" 22 #include "executor_message.h" 23 #include "idm_common.h" 24 25 extern "C" { 26 extern LinkedList *g_poolList; 27 extern LinkedList *g_scheduleList; 28 extern LinkedList *g_userInfoList; 29 extern void DestroyUserInfoList(void); 30 extern ResultCode SignData(const Uint8Array *dataTlv, Uint8Array *signDataTlv, SignParam signParam); 31 extern ResultCode GetAttributeDataAndSignTlv(const Attribute *attribute, Uint8Array *retDataAndSignTlv, 32 SignParam signParam); 33 extern ResultCode Ed25519VerifyData(uint64_t scheduleId, Uint8Array dataTlv, Uint8Array signTlv); 34 extern ResultCode VerifyDataTlvSignature(const Attribute *dataAndSignAttribute, const Uint8Array dataTlv, 35 SignParam signParam); 36 extern Attribute *CreateAttributeFromDataAndSignTlv(const Uint8Array dataAndSignTlv, SignParam signParam); 37 extern Attribute *CreateAttributeFromExecutorMsg(const Uint8Array msg, SignParam signParam); 38 extern void GetRootSecretFromAttribute(const Attribute *attribute, ExecutorResultInfo *resultInfo); 39 extern ResultCode GetExecutorResultInfoFromAttribute(const Attribute *attribute, ExecutorResultInfo *resultInfo); 40 extern Buffer *CreateExecutorMsg(uint32_t authType, uint32_t authPropertyMode, 41 const Uint64Array *templateIds); 42 extern void DestoryExecutorMsg(void *data); 43 extern ResultCode GetExecutorTemplateList( 44 int32_t userId, const ExecutorInfoHal *executorNode, Uint64Array *templateIds); 45 extern ResultCode AssemblyMessage( 46 int32_t userId, const ExecutorInfoHal *executorNode, uint32_t authPropertyMode, LinkedList *executorMsg); 47 extern ResultCode TraverseExecutor( 48 int32_t userId, uint32_t executorRole, uint32_t authPropertyMode, LinkedList *executorMsg); 49 } 50 51 namespace OHOS { 52 namespace UserIam { 53 namespace UserAuth { 54 using namespace testing; 55 using namespace testing::ext; 56 57 class ExecutorMessageTest : public testing::Test { 58 public: SetUpTestCase()59 static void SetUpTestCase() {}; 60 TearDownTestCase()61 static void TearDownTestCase() {}; 62 SetUp()63 void SetUp() {}; 64 TearDown()65 void TearDown() {}; 66 }; 67 68 HWTEST_F(ExecutorMessageTest, TestSignData, TestSize.Level0) 69 { 70 constexpr uint32_t len = 32; 71 uint8_t dataTlvBuffer[len] = { 0 }; 72 Uint8Array dataTlv = { dataTlvBuffer, len }; 73 uint8_t signDataBuffer[len] = { 0 }; 74 Uint8Array signData = { signDataBuffer, len }; 75 dataTlv.len = 0; 76 SignParam signParam = { .needSignature = true, .keyType = KEY_TYPE_EXECUTOR }; 77 ResultCode result = SignData(&dataTlv, &signData, signParam); 78 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 79 (void)memset_s(dataTlv.data, dataTlv.len, 1, dataTlv.len); 80 dataTlv.len = len; 81 result = SignData(&dataTlv, &signData, signParam); 82 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 83 } 84 85 HWTEST_F(ExecutorMessageTest, TestGetAttributeDataAndSignTlv, TestSize.Level0) 86 { 87 Uint8Array retData = { (uint8_t *)Malloc(MAX_EXECUTOR_MSG_LEN), MAX_EXECUTOR_MSG_LEN }; 88 Attribute *attribute = CreateEmptyAttribute(); 89 EXPECT_NE(attribute, nullptr); 90 SignParam signParam = { .needSignature = false }; 91 ResultCode result = GetAttributeDataAndSignTlv(nullptr, &retData, signParam); 92 EXPECT_EQ(result, RESULT_BAD_PARAM); 93 94 constexpr uint32_t testUint32 = 123; 95 constexpr int32_t testInt32 = 123; 96 constexpr uint64_t testUint64 = 456; 97 uint8_t testUint8Buffer[] = { 'a', 'b', 'c' }; 98 uint64_t testUint64Buffer[] = { 123, 456, 789 }; 99 Uint8Array testUint8Array = { testUint8Buffer, sizeof(testUint8Buffer) }; 100 Uint64Array testUint64Array = { testUint64Buffer, sizeof(testUint64Buffer) }; 101 result = SetAttributeUint32(attribute, ATTR_IDENTIFY_MODE, testUint32); 102 EXPECT_EQ(result, RESULT_SUCCESS); 103 result = SetAttributeInt32(attribute, ATTR_RESULT_CODE, testInt32); 104 EXPECT_EQ(result, RESULT_SUCCESS); 105 result = SetAttributeUint64(attribute, ATTR_SCHEDULE_ID, testUint64); 106 EXPECT_EQ(result, RESULT_SUCCESS); 107 result = SetAttributeUint8Array(attribute, ATTR_SIGNATURE, testUint8Array); 108 EXPECT_EQ(result, RESULT_SUCCESS); 109 result = SetAttributeUint64Array(attribute, ATTR_TEMPLATE_ID_LIST, testUint64Array); 110 EXPECT_EQ(result, RESULT_SUCCESS); 111 112 result = GetAttributeDataAndSignTlv(attribute, &retData, signParam); 113 EXPECT_EQ(result, RESULT_SUCCESS); 114 signParam = { .needSignature = true, .keyType = KEY_TYPE_EXECUTOR }; 115 result = GetAttributeDataAndSignTlv(attribute, &retData, signParam); 116 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 117 Free(retData.data); 118 FreeAttribute(&attribute); 119 } 120 121 HWTEST_F(ExecutorMessageTest, TestGetAttributeExecutorMsg, TestSize.Level0) 122 { 123 Uint8Array retData = { (uint8_t *)Malloc(MAX_EXECUTOR_MSG_LEN), MAX_EXECUTOR_MSG_LEN }; 124 Attribute *attribute = CreateEmptyAttribute(); 125 EXPECT_NE(attribute, nullptr); 126 SignParam signParam = { .needSignature = false }; 127 ResultCode result = GetAttributeExecutorMsg(nullptr, &retData, signParam); 128 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 129 result = GetAttributeExecutorMsg(attribute, nullptr, signParam); 130 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 131 retData.len = 0; 132 result = GetAttributeExecutorMsg(attribute, &retData, signParam); 133 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 134 135 constexpr uint32_t testUint32 = 123; 136 constexpr int32_t testInt32 = 123; 137 constexpr uint64_t testUint64 = 456; 138 uint8_t testUint8Buffer[] = { 'a', 'b', 'c' }; 139 uint64_t testUint64Buffer[] = { 123, 456, 789 }; 140 Uint8Array testUint8Array = { testUint8Buffer, sizeof(testUint8Buffer) }; 141 Uint64Array testUint64Array = { testUint64Buffer, sizeof(testUint64Buffer) }; 142 result = SetAttributeUint32(attribute, ATTR_IDENTIFY_MODE, testUint32); 143 EXPECT_EQ(result, RESULT_SUCCESS); 144 result = SetAttributeInt32(attribute, ATTR_RESULT_CODE, testInt32); 145 EXPECT_EQ(result, RESULT_SUCCESS); 146 result = SetAttributeUint64(attribute, ATTR_SCHEDULE_ID, testUint64); 147 EXPECT_EQ(result, RESULT_SUCCESS); 148 result = SetAttributeUint8Array(attribute, ATTR_SIGNATURE, testUint8Array); 149 EXPECT_EQ(result, RESULT_SUCCESS); 150 result = SetAttributeUint64Array(attribute, ATTR_TEMPLATE_ID_LIST, testUint64Array); 151 EXPECT_EQ(result, RESULT_SUCCESS); 152 153 result = GetAttributeExecutorMsg(attribute, &retData, signParam); 154 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 155 signParam = { .needSignature = true, .keyType = KEY_TYPE_EXECUTOR }; 156 result = GetAttributeExecutorMsg(attribute, &retData, signParam); 157 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 158 Free(retData.data); 159 FreeAttribute(&attribute); 160 } 161 162 HWTEST_F(ExecutorMessageTest, TestEd25519VerifyData, TestSize.Level0) 163 { 164 uint64_t scheduleId = 0; 165 uint8_t testUint8Buffer[] = { 'a', 'b', 'c' }; 166 Uint8Array dataTlv = { testUint8Buffer, sizeof(testUint8Buffer) }; 167 Uint8Array signData = { testUint8Buffer, sizeof(testUint8Buffer) }; 168 ResultCode result = Ed25519VerifyData(scheduleId, dataTlv, signData); 169 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 170 } 171 172 HWTEST_F(ExecutorMessageTest, TestVerifyDataTlvSignature, TestSize.Level0) 173 { 174 Attribute *attribute = CreateEmptyAttribute(); 175 EXPECT_NE(attribute, nullptr); 176 constexpr uint32_t dataLen = 12; 177 uint8_t array[dataLen] = { 1, 2, 3, 4, 5, 6 }; 178 Uint8Array dataTlv = { &array[0], dataLen }; 179 ResultCode result = SetAttributeUint8Array(attribute, ATTR_SIGNATURE, dataTlv); 180 EXPECT_EQ(result, RESULT_SUCCESS); 181 result = SetAttributeUint8Array(attribute, ATTR_DATA, dataTlv); 182 EXPECT_EQ(result, RESULT_SUCCESS); 183 uint64_t scheduleId = 10; 184 result = SetAttributeUint64(attribute, ATTR_SCHEDULE_ID, scheduleId); 185 EXPECT_EQ(result, RESULT_SUCCESS); 186 187 SignParam signParam = { .needSignature = false }; 188 result = VerifyDataTlvSignature(nullptr, dataTlv, signParam); 189 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 190 FreeAttribute(&attribute); 191 } 192 193 HWTEST_F(ExecutorMessageTest, TestCreateAttributeFromDataAndSignTlv, TestSize.Level0) 194 { 195 uint8_t retInfoBuffer[MAX_EXECUTOR_SIZE] = { 0 }; 196 Uint8Array retInfo = { retInfoBuffer, MAX_EXECUTOR_SIZE }; 197 SignParam signParam = { .needSignature = true, .keyType = KEY_TYPE_EXECUTOR }; 198 Attribute *retAttribute = CreateAttributeFromDataAndSignTlv(retInfo, signParam); 199 EXPECT_EQ(retAttribute, nullptr); 200 retInfo.len = 0; 201 retAttribute = CreateAttributeFromDataAndSignTlv(retInfo, signParam); 202 EXPECT_EQ(retAttribute, nullptr); 203 constexpr int32_t resultCode = 123; 204 constexpr uint32_t authType1 = 1; 205 constexpr uint64_t templateId = 456; 206 Attribute *attribute = CreateEmptyAttribute(); 207 EXPECT_NE(attribute, nullptr); 208 ResultCode result = SetAttributeInt32(attribute, ATTR_RESULT_CODE, resultCode); 209 EXPECT_EQ(result, RESULT_SUCCESS); 210 result = SetAttributeUint32(attribute, ATTR_TYPE, authType1); 211 EXPECT_EQ(result, RESULT_SUCCESS); 212 result = SetAttributeUint64(attribute, ATTR_TEMPLATE_ID, templateId); 213 EXPECT_EQ(result, RESULT_SUCCESS); 214 result = GetAttributeExecutorMsg(attribute, &retInfo, signParam); 215 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 216 217 Uint8Array dataAndSignTlv = { (uint8_t *)Malloc(MAX_EXECUTOR_MSG_LEN), MAX_EXECUTOR_MSG_LEN }; 218 EXPECT_NE(dataAndSignTlv.data, nullptr); 219 Attribute *msgAttribute = CreateAttributeFromSerializedMsg(retInfo); 220 EXPECT_EQ(msgAttribute, nullptr); 221 result = GetAttributeUint8Array(msgAttribute, ATTR_ROOT, &dataAndSignTlv); 222 EXPECT_EQ(result, RESULT_BAD_PARAM); 223 retAttribute = CreateAttributeFromDataAndSignTlv(dataAndSignTlv, signParam); 224 EXPECT_EQ(retAttribute, nullptr); 225 signParam = { .needSignature = false }; 226 retAttribute = CreateAttributeFromDataAndSignTlv(dataAndSignTlv, signParam); 227 EXPECT_EQ(retAttribute, nullptr); 228 229 FreeAttribute(&retAttribute); 230 FreeAttribute(&msgAttribute); 231 Free(dataAndSignTlv.data); 232 FreeAttribute(&attribute); 233 } 234 235 HWTEST_F(ExecutorMessageTest, TestCreateAttributeFromExecutorMsg, TestSize.Level0) 236 { 237 Uint8Array msg = { (uint8_t *)Malloc(MAX_EXECUTOR_MSG_LEN), MAX_EXECUTOR_MSG_LEN }; 238 SignParam signParam = { .needSignature = true, .keyType = KEY_TYPE_EXECUTOR }; 239 Attribute *retAttribute = CreateAttributeFromExecutorMsg(msg, signParam); 240 EXPECT_EQ(retAttribute, nullptr); 241 constexpr int32_t resultCode = 1; 242 Attribute *attribute = CreateEmptyAttribute(); 243 EXPECT_NE(attribute, nullptr); 244 ResultCode result = SetAttributeInt32(attribute, ATTR_RESULT_CODE, resultCode); 245 EXPECT_EQ(result, RESULT_SUCCESS); 246 result = GetAttributeExecutorMsg(attribute, &msg, signParam); 247 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 248 249 SignParam signParam1 = { .needSignature = false }; 250 retAttribute = CreateAttributeFromExecutorMsg(msg, signParam1); 251 EXPECT_EQ(retAttribute, nullptr); 252 retAttribute = CreateAttributeFromExecutorMsg(msg, signParam); 253 EXPECT_EQ(retAttribute, nullptr); 254 int32_t retCode; 255 result = GetAttributeInt32(attribute, ATTR_RESULT_CODE, &retCode); 256 EXPECT_EQ(result, RESULT_SUCCESS); 257 EXPECT_EQ(retCode, resultCode); 258 FreeAttribute(&retAttribute); 259 FreeAttribute(&attribute); 260 Free(msg.data); 261 } 262 263 HWTEST_F(ExecutorMessageTest, TestGetRootSecretFromAttribute, TestSize.Level0) 264 { 265 Attribute *attribute = CreateEmptyAttribute(); 266 EXPECT_NE(attribute, nullptr); 267 ExecutorResultInfo resultInfo= {}; 268 GetRootSecretFromAttribute(attribute, &resultInfo); 269 uint8_t testUint8Buffer[] = { 'a', 'b', 'c' }; 270 Uint8Array rootSecret = { testUint8Buffer, sizeof(testUint8Buffer) }; 271 ResultCode result = SetAttributeUint8Array(attribute, ATTR_ROOT_SECRET, rootSecret); 272 EXPECT_EQ(result, RESULT_SUCCESS); 273 GetRootSecretFromAttribute(attribute, &resultInfo); 274 FreeAttribute(&attribute); 275 } 276 277 HWTEST_F(ExecutorMessageTest, TestGetExecutorResultInfoFromAttribute, TestSize.Level0) 278 { 279 Attribute *attribute = CreateEmptyAttribute(); 280 EXPECT_NE(attribute, nullptr); 281 ExecutorResultInfo resultInfo= {}; 282 ResultCode result = GetExecutorResultInfoFromAttribute(attribute, &resultInfo); 283 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 284 constexpr int32_t resultCode = 0; 285 result = SetAttributeInt32(attribute, ATTR_RESULT_CODE, resultCode); 286 EXPECT_EQ(result, RESULT_SUCCESS); 287 result = GetExecutorResultInfoFromAttribute(attribute, &resultInfo); 288 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 289 constexpr uint64_t templateId = 123; 290 result = SetAttributeUint64(attribute, ATTR_TEMPLATE_ID, templateId); 291 EXPECT_EQ(result, RESULT_SUCCESS); 292 result = GetExecutorResultInfoFromAttribute(attribute, &resultInfo); 293 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 294 constexpr uint64_t scheduleId = 234; 295 result = SetAttributeUint64(attribute, ATTR_SCHEDULE_ID, scheduleId); 296 EXPECT_EQ(result, RESULT_SUCCESS); 297 result = GetExecutorResultInfoFromAttribute(attribute, &resultInfo); 298 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 299 constexpr uint64_t subType = 0; 300 result = SetAttributeUint64(attribute, ATTR_PIN_SUB_TYPE, subType); 301 EXPECT_EQ(result, RESULT_SUCCESS); 302 result = GetExecutorResultInfoFromAttribute(attribute, &resultInfo); 303 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 304 constexpr int32_t remainTimes = 10; 305 result = SetAttributeInt32(attribute, ATTR_REMAIN_ATTEMPTS, remainTimes); 306 EXPECT_EQ(result, RESULT_SUCCESS); 307 result = GetExecutorResultInfoFromAttribute(attribute, &resultInfo); 308 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 309 constexpr int32_t freezingTime = 0; 310 result = SetAttributeInt32(attribute, ATTR_LOCKOUT_DURATION, freezingTime); 311 EXPECT_EQ(result, RESULT_SUCCESS); 312 result = GetExecutorResultInfoFromAttribute(attribute, &resultInfo); 313 EXPECT_EQ(result, RESULT_GENERAL_ERROR); 314 constexpr uint32_t capabilityLevel = 2; 315 result = SetAttributeUint32(attribute, ATTR_CAPABILITY_LEVEL, capabilityLevel); 316 EXPECT_EQ(result, RESULT_SUCCESS); 317 uint8_t testUint8Buffer[] = { 'a', 'b', 'c' }; 318 Uint8Array rootSecret = { testUint8Buffer, sizeof(testUint8Buffer) }; 319 result = SetAttributeUint8Array(attribute, ATTR_ROOT_SECRET, rootSecret); 320 EXPECT_EQ(result, RESULT_SUCCESS); 321 result = GetExecutorResultInfoFromAttribute(attribute, &resultInfo); 322 EXPECT_EQ(resultInfo.result, resultCode); 323 EXPECT_EQ(resultInfo.templateId, templateId); 324 EXPECT_EQ(resultInfo.remainTimes, remainTimes); 325 EXPECT_EQ(resultInfo.capabilityLevel, capabilityLevel); 326 FreeAttribute(&attribute); 327 } 328 329 HWTEST_F(ExecutorMessageTest, TestCreateExecutorResultInfo, TestSize.Level0) 330 { 331 Buffer *tlv = NULL; 332 ExecutorResultInfo *resultInfo = CreateExecutorResultInfo(tlv); 333 EXPECT_EQ(resultInfo, nullptr); 334 Attribute *attribute = CreateEmptyAttribute(); 335 EXPECT_NE(attribute, nullptr); 336 constexpr int32_t resultCode = 0; 337 ResultCode result = SetAttributeInt32(attribute, ATTR_RESULT_CODE, resultCode); 338 EXPECT_EQ(result, RESULT_SUCCESS); 339 constexpr uint64_t templateId = 123; 340 result = SetAttributeUint64(attribute, ATTR_TEMPLATE_ID, templateId); 341 EXPECT_EQ(result, RESULT_SUCCESS); 342 constexpr uint64_t scheduleId = 234; 343 result = SetAttributeUint64(attribute, ATTR_SCHEDULE_ID, scheduleId); 344 EXPECT_EQ(result, RESULT_SUCCESS); 345 constexpr uint64_t subType = 0; 346 result = SetAttributeUint64(attribute, ATTR_PIN_SUB_TYPE, subType); 347 EXPECT_EQ(result, RESULT_SUCCESS); 348 constexpr int32_t remainTimes = 10; 349 result = SetAttributeInt32(attribute, ATTR_REMAIN_ATTEMPTS, remainTimes); 350 EXPECT_EQ(result, RESULT_SUCCESS); 351 constexpr int32_t freezingTime = 0; 352 result = SetAttributeInt32(attribute, ATTR_LOCKOUT_DURATION, freezingTime); 353 EXPECT_EQ(result, RESULT_SUCCESS); 354 constexpr uint32_t capabilityLevel = 2; 355 result = SetAttributeUint32(attribute, ATTR_CAPABILITY_LEVEL, capabilityLevel); 356 EXPECT_EQ(result, RESULT_SUCCESS); 357 constexpr uint32_t dataLen = 120; 358 std::vector<uint8_t> data; 359 data.resize(dataLen); 360 Uint8Array retExtraInfo = { data.data(), data.size() }; 361 SignParam signParam = { .needSignature = false }; 362 result = GetAttributeExecutorMsg(attribute, &retExtraInfo, signParam); 363 EXPECT_EQ(result, RESULT_SUCCESS); 364 Buffer *buf = CreateBufferByData(retExtraInfo.data, retExtraInfo.len); 365 EXPECT_NE(buf, nullptr); 366 resultInfo = CreateExecutorResultInfo(buf); 367 EXPECT_EQ(resultInfo, nullptr); 368 DestoryBuffer(buf); 369 FreeAttribute(&attribute); 370 } 371 372 HWTEST_F(ExecutorMessageTest, TestDestroyExecutorResultInfo, TestSize.Level0) 373 { 374 DestroyExecutorResultInfo(nullptr); 375 ExecutorResultInfo *info1 = new ExecutorResultInfo(); 376 EXPECT_NE(info1, nullptr); 377 info1->rootSecret = CreateBufferBySize(10); 378 DestroyExecutorResultInfo(info1); 379 ExecutorResultInfo *info2 = new ExecutorResultInfo(); 380 EXPECT_NE(info2, nullptr); 381 info2->rootSecret = nullptr; 382 DestroyExecutorResultInfo(info2); 383 } 384 385 HWTEST_F(ExecutorMessageTest, TestCreateExecutorMsg, TestSize.Level0) 386 { 387 EXPECT_EQ(CreateExecutorMsg(1, 0, nullptr), nullptr); 388 constexpr uint32_t dataLen = 1; 389 Uint64Array array = {}; 390 array.len = dataLen; 391 array.data = nullptr; 392 EXPECT_EQ(CreateExecutorMsg(1, 0, &array), nullptr); 393 } 394 395 HWTEST_F(ExecutorMessageTest, TestDestoryExecutorMsg, TestSize.Level0) 396 { 397 DestoryExecutorMsg(nullptr); 398 ExecutorMsg *msg = (ExecutorMsg *)Malloc(sizeof(ExecutorMsg)); 399 EXPECT_NE(msg, nullptr); 400 ASSERT_NE(msg, nullptr); 401 (void)memset_s(msg, sizeof(ExecutorMsg), 0, sizeof(ExecutorMsg)); 402 DestoryExecutorMsg(msg); 403 } 404 405 HWTEST_F(ExecutorMessageTest, TestGetExecutorTemplateList, TestSize.Level0) 406 { 407 constexpr uint32_t authType1 = 1; 408 constexpr uint32_t authType2 = 2; 409 constexpr uint32_t executorSensorHint = 10; 410 g_userInfoList = nullptr; 411 ExecutorInfoHal info = {}; 412 info.authType = authType1; 413 info.executorSensorHint = executorSensorHint; 414 Uint64Array array = {}; 415 EXPECT_EQ(GetExecutorTemplateList(0, &info, &array), RESULT_UNKNOWN); 416 g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 417 EXPECT_NE(g_userInfoList, nullptr); 418 UserInfo userInfo = {}; 419 userInfo.credentialInfoList = CreateLinkedList(DestroyCredentialNode); 420 EXPECT_NE(userInfo.credentialInfoList, nullptr); 421 CredentialInfoHal credInfo = {}; 422 credInfo.authType = authType1; 423 credInfo.executorSensorHint = executorSensorHint; 424 constexpr uint32_t credNum = 102; 425 for (uint32_t i = 0; i < credNum; ++i) { 426 userInfo.credentialInfoList->insert(userInfo.credentialInfoList, static_cast<void *>(&credInfo)); 427 } 428 g_userInfoList->insert(g_userInfoList, static_cast<void *>(&userInfo)); 429 EXPECT_EQ(GetExecutorTemplateList(0, &info, &array), RESULT_REACH_LIMIT); 430 info.authType = authType2; 431 EXPECT_EQ(GetExecutorTemplateList(0, &info, &array), RESULT_SUCCESS); 432 } 433 434 HWTEST_F(ExecutorMessageTest, TestAssemblyMessage_001, TestSize.Level0) 435 { 436 constexpr uint32_t authType = 2; 437 constexpr uint32_t executorSensorHint = 10; 438 g_userInfoList = nullptr; 439 ExecutorInfoHal info = {}; 440 info.authType = authType; 441 info.executorSensorHint = executorSensorHint; 442 EXPECT_EQ(AssemblyMessage(0, &info, 2, nullptr), RESULT_UNKNOWN); 443 } 444 445 HWTEST_F(ExecutorMessageTest, TestAssemblyMessage_002, TestSize.Level0) 446 { 447 constexpr uint32_t authType = 1; 448 constexpr uint32_t executorSensorHint_1 = 10; 449 constexpr uint32_t executorSensorHint_2 = 20; 450 g_userInfoList = CreateLinkedList(DestroyUserInfoNode); 451 EXPECT_NE(g_userInfoList, nullptr); 452 UserInfo *userInfo = static_cast<UserInfo *>(malloc(sizeof(UserInfo))); 453 EXPECT_NE(userInfo, nullptr); 454 static_cast<void>(memset_s(userInfo, sizeof(UserInfo), 0, sizeof(UserInfo))); 455 userInfo->credentialInfoList = CreateLinkedList(DestroyCredentialNode); 456 EXPECT_NE(userInfo->credentialInfoList, nullptr); 457 CredentialInfoHal *credInfo = static_cast<CredentialInfoHal *>(malloc(sizeof(CredentialInfoHal))); 458 EXPECT_NE(credInfo, nullptr); 459 static_cast<void>(memset_s(credInfo, sizeof(CredentialInfoHal), 0, sizeof(CredentialInfoHal))); 460 credInfo->authType = authType; 461 credInfo->executorSensorHint = executorSensorHint_1; 462 userInfo->credentialInfoList->insert(userInfo->credentialInfoList, static_cast<void *>(credInfo)); 463 g_userInfoList->insert(g_userInfoList, static_cast<void *>(userInfo)); 464 465 ExecutorInfoHal info = {}; 466 info.authType = authType; 467 info.executorSensorHint = executorSensorHint_2; 468 LinkedList *executorMsg = CreateLinkedList(DestoryExecutorMsg); 469 EXPECT_EQ(AssemblyMessage(0, &info, 2, executorMsg), RESULT_SUCCESS); 470 DestroyLinkedList(executorMsg); 471 472 executorMsg = CreateLinkedList(DestoryExecutorMsg); 473 info.executorSensorHint = executorSensorHint_1; 474 EXPECT_EQ(AssemblyMessage(0, &info, 2, executorMsg), RESULT_SUCCESS); 475 DestroyLinkedList(executorMsg); 476 DestroyUserInfoList(); 477 } 478 479 HWTEST_F(ExecutorMessageTest, TestTraverseExecutor, TestSize.Level0) 480 { 481 constexpr uint32_t authType = 2; 482 g_poolList = nullptr; 483 g_userInfoList = nullptr; 484 EXPECT_EQ(TraverseExecutor(0, 1, 0, nullptr), RESULT_UNKNOWN); 485 InitResourcePool(); 486 ExecutorInfoHal info = {}; 487 info.executorRole = VERIFIER; 488 info.authType = authType; 489 g_poolList->insert(g_poolList, static_cast<void *>(&info)); 490 LinkedList *executorMsg = new LinkedList(); 491 EXPECT_EQ(TraverseExecutor(0, 2, 0, executorMsg), RESULT_UNKNOWN); 492 delete executorMsg; 493 } 494 495 HWTEST_F(ExecutorMessageTest, TestGetExecutorMsgList, TestSize.Level0) 496 { 497 constexpr uint32_t authType = 1; 498 g_poolList = nullptr; 499 g_userInfoList = nullptr; 500 EXPECT_EQ(GetExecutorMsgList(1, 2, nullptr), RESULT_BAD_PARAM); 501 LinkedList *executorMsg = nullptr; 502 EXPECT_EQ(GetExecutorMsgList(1, 0, &executorMsg), RESULT_UNKNOWN); 503 InitResourcePool(); 504 ExecutorInfoHal info = {}; 505 info.executorRole = VERIFIER; 506 info.authType = authType; 507 g_poolList->insert(g_poolList, static_cast<void *>(&info)); 508 EXPECT_EQ(GetExecutorMsgList(1, 4, &executorMsg), RESULT_SUCCESS); 509 } 510 } // namespace UserAuth 511 } // namespace UserIam 512 } // namespace OHOS 513