diff --git a/interfaces/innerkits/accesstoken/test/unittest/src/remote_token_kit_test.cpp b/interfaces/innerkits/accesstoken/test/unittest/src/remote_token_kit_test.cpp index 53ceb84d910ba89f87d5c7d130a51009472b9fcb..41e4f85206aaab813f7ccbb5727bdbce598f91d1 100644 --- a/interfaces/innerkits/accesstoken/test/unittest/src/remote_token_kit_test.cpp +++ b/interfaces/innerkits/accesstoken/test/unittest/src/remote_token_kit_test.cpp @@ -119,8 +119,7 @@ HapPolicyParams g_infoManagerTestPolicyPramsBak = { void NativeTokenGet() { - uint64_t tokenId; - tokenId = AccessTokenKit::GetNativeTokenId("token_sync_service"); + uint32_t tokenId = AccessTokenKit::GetNativeTokenId("token_sync_service"); ASSERT_NE(tokenId, 0); SetSelfTokenID(tokenId); } @@ -1222,4 +1221,4 @@ HWTEST_F(RemoteTokenKitTest, SetRemoteNativeTokenInfo001, TestSize.Level1) ASSERT_EQ(resultInfo.tokenID, mapID); ASSERT_EQ(resultInfo.tokenAttr, native1.baseInfo.tokenAttr); } -#endif \ No newline at end of file +#endif diff --git a/interfaces/innerkits/nativetoken/include/nativetoken.h b/interfaces/innerkits/nativetoken/include/nativetoken.h index 4506309b4afb2ca1a21995380107ca38e351496b..2aa5194fde02fe7029e0265c75ce2dee94f1a8ee 100644 --- a/interfaces/innerkits/nativetoken/include/nativetoken.h +++ b/interfaces/innerkits/nativetoken/include/nativetoken.h @@ -93,8 +93,9 @@ typedef struct StrArrayAttribute { } StrArrayAttr; extern int32_t GetFileBuff(const char *cfg, char **retBuff); +extern int32_t AtlibInit(); #ifdef __cplusplus } #endif -#endif // NATIVE_TOKEN_H \ No newline at end of file +#endif // NATIVE_TOKEN_H diff --git a/interfaces/innerkits/nativetoken/src/nativetoken.c b/interfaces/innerkits/nativetoken/src/nativetoken.c index ae9cc4186d68a36b75bf63ea36a6199933ebd3a7..5ff69c455839caf122b12a1e5c22a6e9c4e4b425 100644 --- a/interfaces/innerkits/nativetoken/src/nativetoken.c +++ b/interfaces/innerkits/nativetoken/src/nativetoken.c @@ -219,7 +219,7 @@ static int32_t CreateCfgFile(void) return ATRET_SUCCESS; } -static int32_t AtlibInit(void) +int32_t AtlibInit(void) { g_tokenListHead = (NativeTokenList *)malloc(sizeof(NativeTokenList)); if (g_tokenListHead == NULL) { diff --git a/interfaces/innerkits/nativetoken/src/nativetoken_json_oper.c b/interfaces/innerkits/nativetoken/src/nativetoken_json_oper.c index f4198f3e529bfabbcc30b5aec0a64247ca88a803..38ad52b813074eae13ca12cd8896c87f55323fb4 100644 --- a/interfaces/innerkits/nativetoken/src/nativetoken_json_oper.c +++ b/interfaces/innerkits/nativetoken/src/nativetoken_json_oper.c @@ -284,7 +284,7 @@ uint32_t UpdateGoalItemFromRecord(const NativeTokenList *tokenNode, cJSON *recor return ATRET_FAILED; } cJSON *processNameJson = cJSON_GetObjectItem(cjsonItem, PROCESS_KEY_NAME); - if ((processNameJson == NULL) || (processNameJson->valuestring == NULL)) { + if ((processNameJson == NULL) || (processNameJson->valuestring == NULL)) { AT_LOG_ERROR("[ATLIB-%s]:processNameJson is null.", __func__); return ATRET_FAILED; } diff --git a/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp b/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp index d9f9827e0a267992c43f97d8ae1ede2235d44ff2..e1956ebca6d3f5a4e0c93929502293927886c34a 100644 --- a/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp +++ b/interfaces/innerkits/nativetoken/test/unittest/src/nativetoken_kit_test.cpp @@ -19,6 +19,7 @@ #include #include "securec.h" #include "nativetoken.h" +#include "nativetoken_json_oper.h" #include "nativetoken_kit.h" using namespace testing::ext; @@ -27,6 +28,7 @@ using namespace OHOS::Security; extern NativeTokenList *g_tokenListHead; extern int32_t g_isNativeTokenInited; extern int32_t GetFileBuff(const char *cfg, char **retBuff); +extern int32_t AtlibInit(void); void TokenLibKitTest::SetUpTestCase() {} @@ -49,6 +51,101 @@ void TokenLibKitTest::TearDown() } } +static void WriteContentToFile(const cJSON *root) +{ + char *jsonString = nullptr; + jsonString = cJSON_PrintUnformatted(root); + if (jsonString == nullptr) { + return; + } + + do { + int32_t fd = open(TOKEN_ID_CFG_FILE_PATH, O_RDWR | O_CREAT | O_TRUNC, + S_IRUSR | S_IWUSR | S_IRGRP); + if (fd < 0) { + break; + } + size_t strLen = strlen(jsonString); + ssize_t writtenLen = write(fd, (void *)jsonString, (size_t)strLen); + close(fd); + if (writtenLen < 0 || (size_t)writtenLen != strLen) { + break; + } + } while (0); + + cJSON_free(jsonString); + return; +} + +void DeleteGoalItemFromRecord(const char *processName, cJSON *record) +{ + cJSON *rec = nullptr; + int32_t index = -1; + bool isFound = false; + cJSON_ArrayForEach(rec, record) { + index++; + cJSON *innerProcessName = cJSON_GetObjectItemCaseSensitive(rec, PROCESS_KEY_NAME); + if ((cJSON_IsString(innerProcessName)) && (innerProcessName->valuestring != nullptr)) { + if (strcmp(innerProcessName->valuestring, processName) == 0) { + isFound = true; + break; + } + } + } + if (isFound) { + cJSON_DeleteItemFromArray(record, index); + } +} + +int32_t DeleteNodeInFile(const char *processName) +{ + cJSON *record = nullptr; + char *fileBuff = nullptr; + + if (GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff) != ATRET_SUCCESS) { + return ATRET_FAILED; + } + + if (fileBuff == nullptr) { + record = cJSON_CreateArray(); + } else { + record = cJSON_Parse(fileBuff); + free(fileBuff); + fileBuff = nullptr; + } + + if (record == nullptr) { + return ATRET_FAILED; + } + + DeleteGoalItemFromRecord(processName, record); + WriteContentToFile(record); + cJSON_Delete(record); + + return ATRET_SUCCESS; +} + +int32_t DeleteAccessTokenId(const char *processName) +{ + int32_t result = 0; + + if ((g_isNativeTokenInited == 0) && (AtlibInit() != ATRET_SUCCESS)) { + return INVALID_TOKEN_ID; + } + NativeTokenList *tokenNode = g_tokenListHead; + while (tokenNode->next != nullptr) { + if (strcmp(tokenNode->next->processName, processName) == 0) { + result = DeleteNodeInFile(processName); + NativeTokenList *tokenNodeA = tokenNode->next; + tokenNode->next = tokenNode->next->next; + free(tokenNodeA); + break; + } + tokenNode = tokenNode->next; + } + return result; +} + int32_t Start(const char *processName) { const char **dcaps = new const char *[2]; @@ -120,12 +217,14 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId001, TestSize.Level1) infoInstance.processName = validProcName01.c_str(); tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); /* 256 is valid processName length */ const std::string validProcName02 (256, 'x'); infoInstance.processName = validProcName02.c_str(); tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); delete[] dcaps; delete[] perms; } @@ -171,6 +270,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId002, TestSize.Level1) infoInstance.processName = "GetAccessTokenId002_01"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); /* 31 is valid dcapNum */ dcapNum = 31; @@ -178,6 +278,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId002, TestSize.Level1) infoInstance.processName = "GetAccessTokenId002_02"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); delete[] dcaps; } @@ -214,6 +315,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId003, TestSize.Level1) infoInstance.processName = "GetAccessTokenId003_01"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); dcapNum = 2; /* 1025 is invalid dcap length */ @@ -233,6 +335,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId003, TestSize.Level1) infoInstance.processName = "GetAccessTokenId003_03"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); /* 1023 is valid dcap length */ const std::string validDcap02 (1023, 'x'); @@ -242,6 +345,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId003, TestSize.Level1) infoInstance.processName = "GetAccessTokenId003_04"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); delete[] dcaps; } @@ -293,6 +397,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId005, TestSize.Level1) ASSERT_NE(tokenId02, 0); ASSERT_EQ(tokenId01, tokenId02); + ASSERT_EQ(DeleteAccessTokenId("GetAccessTokenId005"), 0); } /** @@ -313,6 +418,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId006, TestSize.Level1) string s = "GetAccessTokenId006"; char *pos = strstr(fileBuff, s.c_str()); ASSERT_NE(pos, nullptr); + ASSERT_EQ(DeleteAccessTokenId("GetAccessTokenId006"), 0); } /** @@ -356,12 +462,14 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId007, TestSize.Level1) infoInstance.processName = "GetAccessTokenId007_01"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId("GetAccessTokenId007_01"), 0); permsNum = MAX_PERM_NUM - 1; infoInstance.permsNum = permsNum; infoInstance.processName = "GetAccessTokenId007_02"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId("GetAccessTokenId007_02"), 0); delete[] perms; } @@ -396,6 +504,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId008, TestSize.Level1) }; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId("GetAccessTokenId008"), 0); delete[] perms; delete[] dcaps; @@ -433,6 +542,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId009, TestSize.Level1) infoInstance.processName = "GetAccessTokenId009_01"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId("GetAccessTokenId009_01"), 0); permsNum = 2; /* 1025 is invalid dcap length */ @@ -451,6 +561,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId009, TestSize.Level1) infoInstance.processName = "GetAccessTokenId009_03"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId("GetAccessTokenId009_03"), 0); const std::string validDcap02 (MAX_PERM_LEN - 1, 'x'); perms[0] = validDcap02.c_str(); @@ -459,6 +570,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId009, TestSize.Level1) infoInstance.processName = "GetAccessTokenId009_04"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId("GetAccessTokenId009_04"), 0); delete[] perms; } @@ -488,6 +600,9 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId010, TestSize.Level1) ASSERT_NE(pos, nullptr); } free(fileBuff); + for (int32_t i = 0; i < 200; i++) { + ASSERT_EQ(DeleteAccessTokenId(processName[i]), 0); + } } /** @@ -500,20 +615,6 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId011, TestSize.Level1) { Start("process1"); Start("process2"); - Start("process3"); - Start("process4"); - Start("process5"); - Start("foundation"); - Start("process6"); - Start("process7"); - Start("process8"); - Start("process9"); - Start("process10"); - Start("process15"); - Start("process16"); - Start("process17"); - Start("process18"); - Start("process19"); char *fileBuff = nullptr; int32_t ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); @@ -522,20 +623,17 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId011, TestSize.Level1) ASSERT_NE(pos, nullptr); pos = strstr(fileBuff, "process2"); ASSERT_NE(pos, nullptr); - pos = strstr(fileBuff, "process3"); - ASSERT_NE(pos, nullptr); - pos = strstr(fileBuff, "process4"); - ASSERT_NE(pos, nullptr); - pos = strstr(fileBuff, "process5"); - ASSERT_NE(pos, nullptr); - pos = strstr(fileBuff, "process6"); - ASSERT_NE(pos, nullptr); - pos = strstr(fileBuff, "process7"); - ASSERT_NE(pos, nullptr); - pos = strstr(fileBuff, "process8"); - ASSERT_NE(pos, nullptr); - pos = strstr(fileBuff, "process9"); - ASSERT_NE(pos, nullptr); + free(fileBuff); + + DeleteAccessTokenId("process1"); + DeleteAccessTokenId("process2"); + fileBuff = nullptr; + ret = GetFileBuff(TOKEN_ID_CFG_FILE_PATH, &fileBuff); + ASSERT_EQ(ret, 0); + pos = strstr(fileBuff, "process1"); + ASSERT_EQ(pos, nullptr); + pos = strstr(fileBuff, "process2"); + ASSERT_EQ(pos, nullptr); free(fileBuff); } @@ -608,6 +706,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId013, TestSize.Level1) infoInstance.processName = "GetAccessTokenId013_01"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); aclsNum = 1; const std::string invalidAcl (MAX_PERM_LEN + 1, 'x'); @@ -625,6 +724,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId013, TestSize.Level1) infoInstance.processName = "GetAccessTokenId013_03"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); const std::string validcAcl02 (MAX_PERM_LEN - 1, 'x'); acls[0] = validcAcl02.c_str(); @@ -633,6 +733,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId013, TestSize.Level1) infoInstance.processName = "GetAccessTokenId013_04"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); delete[] acls; } @@ -665,12 +766,14 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId014, TestSize.Level0) infoInstance.processName = "GetAccessTokenId014_01"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); infoInstance.acls = acls; infoInstance.aclsNum = 1; infoInstance.processName = "GetAccessTokenId014_02"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); delete[] perms; delete[] acls; @@ -719,6 +822,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId015, TestSize.Level1) infoInstance.processName = "GetAccessTokenId015_01"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); permsNum = MAX_PERM_NUM - 1; infoInstance.permsNum = permsNum; @@ -726,6 +830,7 @@ HWTEST_F(TokenLibKitTest, GetAccessTokenId015, TestSize.Level1) infoInstance.processName = "GetAccessTokenId015_02"; tokenId = GetAccessTokenId(&infoInstance); ASSERT_NE(tokenId, 0); + ASSERT_EQ(DeleteAccessTokenId(infoInstance.processName), 0); permsNum = MAX_PERM_NUM - 1; infoInstance.permsNum = permsNum; diff --git a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_stub.cpp b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_stub.cpp index a9d6572b1b2f275d6e6c1c297f1178a43c3304d0..dc3424362c0ddd50a599a248e100c481f308ea0a 100644 --- a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_stub.cpp +++ b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_stub.cpp @@ -552,7 +552,7 @@ bool AccessTokenManagerStub::IsFoundationCalling() const bool AccessTokenManagerStub::IsAccessTokenCalling() { - int tokenCaller = IPCSkeleton::GetCallingTokenID(); + uint32_t tokenCaller = IPCSkeleton::GetCallingTokenID(); if (tokenSyncId_ == 0) { tokenSyncId_ = this->GetNativeTokenId("token_sync_service"); } diff --git a/services/privacymanager/src/sensitive/sensitive_resource_manager.cpp b/services/privacymanager/src/sensitive/sensitive_resource_manager.cpp index 6d5ed16147c1d1bbdc30e922380fc44daa2f7de7..b162928a63cd5e1fc154ac8ac89a2f644d801464 100644 --- a/services/privacymanager/src/sensitive/sensitive_resource_manager.cpp +++ b/services/privacymanager/src/sensitive/sensitive_resource_manager.cpp @@ -96,7 +96,7 @@ bool SensitiveResourceManager::GetAppStatus(const std::string& pkgName, int32_t& status = PERM_ACTIVE_IN_BACKGROUND; if (std::any_of(foreGroundAppList.begin(), foreGroundAppList.end(), [pkgName](const auto& foreGroundApp) { return foreGroundApp.bundleName == pkgName; })) { - status = PERM_ACTIVE_IN_FOREGROUND; + status = PERM_ACTIVE_IN_FOREGROUND; } return true; } diff --git a/services/tokensyncmanager/src/service/token_sync_manager_stub.cpp b/services/tokensyncmanager/src/service/token_sync_manager_stub.cpp index f178222bd1e84656037dbced28e9f5b23bf707fd..045b28dc56ddbbd8ff5b86d80ea2e055c83ab94c 100644 --- a/services/tokensyncmanager/src/service/token_sync_manager_stub.cpp +++ b/services/tokensyncmanager/src/service/token_sync_manager_stub.cpp @@ -57,7 +57,7 @@ int32_t TokenSyncManagerStub::OnRemoteRequest( bool TokenSyncManagerStub::IsNativeProcessCalling() const { AccessTokenID tokenCaller = IPCSkeleton::GetCallingTokenID(); - int type = (reinterpret_cast(&tokenCaller))->type; + uint32_t type = (reinterpret_cast(&tokenCaller))->type; ACCESSTOKEN_LOG_DEBUG(LABEL, "Calling type: %{public}d", type); return type == TOKEN_NATIVE; } diff --git a/services/tokensyncmanager/test/unittest/token_sync_service/token_sync_service_test.cpp b/services/tokensyncmanager/test/unittest/token_sync_service/token_sync_service_test.cpp index d640891fbc28623cee52c961bfad8d4c304ddf34..0689a475324c9f4cc2ec85ef77af9dbc6c2e4fec 100644 --- a/services/tokensyncmanager/test/unittest/token_sync_service/token_sync_service_test.cpp +++ b/services/tokensyncmanager/test/unittest/token_sync_service/token_sync_service_test.cpp @@ -70,8 +70,7 @@ TokenSyncServiceTest::~TokenSyncServiceTest() void NativeTokenGet() { - uint64_t tokenId; - tokenId = AccessTokenKit::GetNativeTokenId("token_sync_service"); + uint64_t tokenId = AccessTokenKit::GetNativeTokenId("token_sync_service"); ASSERT_NE(tokenId, 0); SetSelfTokenID(tokenId); } @@ -421,6 +420,56 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo007, TestSize.Level1) ASSERT_EQ(mapID, (AccessTokenID)0); } +/** + * @tc.name: GetRemoteHapTokenInfo008 + * @tc.desc: test remote hap recv func, tokenID is not exist + * @tc.type: FUNC + * @tc.require:AR000GK6T5 AR000GK6T9 + */ +HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo008, TestSize.Level1) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "GetRemoteHapTokenInfo008 start."); + // create local token + AccessTokenID tokenID = AccessTokenKit::GetHapTokenID(g_infoManagerTestInfoParms.userID, + g_infoManagerTestInfoParms.bundleName, + g_infoManagerTestInfoParms.instIndex); + AccessTokenKit::DeleteToken(tokenID); + + // tokenID is not exist + std::string jsonBefore = + "{\"commandName\":\"SyncRemoteHapTokenCommand\",\"id\":\"0065e65f-\",\"jsonPayload\":" + "\"{\\\"HapTokenInfo\\\":{\\\"apl\\\":1,\\\"appID\\\":\\\"\\\",\\\"bundleName\\\":\\\"\\\"," + "\\\"deviceID\\\":\\\"\\\",\\\"instIndex\\\":0,\\\"permState\\\":null,\\\"tokenAttr\\\":0," + "\\\"tokenID\\\":0,\\\"userID\\\":0,\\\"version\\\":1},\\\"commandName\\\":\\\"SyncRemoteHapTokenCommand\\\"," + "\\\"dstDeviceId\\\":\\\"local:udid-001\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," + "\\\"requestTokenId\\\":"; + std::string tokenJsonStr = std::to_string(tokenID); + std::string jsonAfter = ",\\\"requestVersion\\\":2,\\\"responseDeviceId\\\":\\\"\\\",\\\"responseVersion\\\":2," + "\\\"srcDeviceId\\\":\\\"deviceid-1:udid-001\\\",\\\"srcDeviceLevel\\\":\\\"\\\",\\\"statusCode\\\":100001," + "\\\"uniqueId\\\":\\\"SyncRemoteHapTokenCommand\\\"}\",\"type\":\"request\"}"; + + // create recv message + std::string recvJson = jsonBefore + tokenJsonStr + jsonAfter; + unsigned char *recvBuffer = (unsigned char *)malloc(0x1000); + int recvLen = 0x1000; + CompressMock(recvJson, recvBuffer, recvLen); + + ResetSendMessFlagMock(); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); + SoftBusSessionListener::OnBytesReceived(1, recvBuffer, recvLen); + + int count = 0; + while (!GetSendMessFlagMock() && count < 10) { + sleep(1); + count ++; + } + free(recvBuffer); + + ResetSendMessFlagMock(); + std::string uuidMessage = GetUuidMock(); + ASSERT_EQ(uuidMessage, "0065e65f-"); +} + /** * @tc.name: SyncNativeTokens001 * @tc.desc: when device is online, sync remote nativetokens which have dcap @@ -680,4 +729,4 @@ HapTokenInfoForSync g_remoteHapInfo = { } } // namespace AccessToken } // namespace Security -} // namespace OHOS \ No newline at end of file +} // namespace OHOS