From 97a068f129dc016bb4eae4ad4ebbb3aa674616f4 Mon Sep 17 00:00:00 2001 From: libing23 Date: Wed, 23 Feb 2022 20:15:05 +0800 Subject: [PATCH 1/3] update tokensync unittest Signed-off-by: libing23 --- .../unittest/src/accesstoken_kit_test.cpp | 42 +- .../service/accesstoken_manager_service.cpp | 4 +- .../token_sync_service_test.cpp | 542 +++++++++++++----- 3 files changed, 430 insertions(+), 158 deletions(-) diff --git a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp index f2c4c6096..7f80666da 100644 --- a/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp +++ b/interfaces/innerkits/accesstoken/test/unittest/src/accesstoken_kit_test.cpp @@ -3044,22 +3044,58 @@ HWTEST_F(AccessTokenKitTest, AllocLocalTokenID001, TestSize.Level1) /** * @tc.name: GetAllNativeTokenInfo001 - * @tc.desc: get already mapping tokenInfo, makesure ipc right + * @tc.desc: get all native token with dcaps * @tc.type: FUNC * @tc.require:AR000GK6T6 */ HWTEST_F(AccessTokenKitTest, GetAllNativeTokenInfo001, TestSize.Level1) { ACCESSTOKEN_LOG_INFO(LABEL, "GetAllNativeTokenInfo001 start."); + + std::vector nativeTokenInfosRes; + int ret = AccessTokenKit::GetAllNativeTokenInfo(nativeTokenInfosRes); + ASSERT_EQ(ret, RET_SUCCESS); } /** * @tc.name: SetRemoteNativeTokenInfo001 - * @tc.desc: get already mapping tokenInfo, makesure ipc right + * @tc.desc: set already mapping tokenInfo * @tc.type: FUNC * @tc.require:AR000GK6T6 */ HWTEST_F(AccessTokenKitTest, SetRemoteNativeTokenInfo001, TestSize.Level1) { - ACCESSTOKEN_LOG_INFO(LABEL, "GetAllNativeTokenInfo001 start."); + ACCESSTOKEN_LOG_INFO(LABEL, "SetRemoteNativeTokenInfo001 start."); + std::string deviceID = "ea82205d1f9964346ee12e17ec0f362bb7203fca7c62d82899ffa917f9cbe6b2"; + + NativeTokenInfo native1 = { + .apl = APL_NORMAL, + .ver = 1, + .processName = "native_test1", + .dcap = {"SYSDCAP", "DMSDCAP"}, + .tokenID = 0x28000000, + .tokenAttr = 0 + }; + + std::vector nativeTokenInfoList; + nativeTokenInfoList.emplace_back(native1); + + int ret = AccessTokenKit::SetRemoteNativeTokenInfo(deviceID, nativeTokenInfoList); + ASSERT_EQ(ret, RET_SUCCESS); + + AccessTokenID mapID = AccessTokenKit::GetRemoteNativeTokenID(deviceID, 0x28000000); + ASSERT_NE(mapID, 0); + + NativeTokenInfo resultInfo; + ret = AccessTokenKit::GetNativeTokenInfo(mapID, resultInfo); + ASSERT_EQ(ret, RET_SUCCESS); + + ASSERT_EQ(resultInfo.apl, native1.apl); + ASSERT_EQ(resultInfo.ver, native1.ver); + ASSERT_EQ(resultInfo.processName, native1.processName); + ASSERT_EQ(resultInfo.dcap.size(), 2); + ASSERT_EQ(resultInfo.dcap[0], "SYSDCAP"); + ASSERT_EQ(resultInfo.dcap[1], "DMSDCAP"); + ASSERT_EQ(resultInfo.tokenID, mapID); + ASSERT_EQ(resultInfo.tokenAttr, native1.tokenAttr); } diff --git a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp index 7127e0086..db81f8d6e 100644 --- a/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp +++ b/services/accesstokenmanager/main/cpp/src/service/accesstoken_manager_service.cpp @@ -258,7 +258,7 @@ int AccessTokenManagerService::GetAllNativeTokenInfo(std::vector& nativeTokenInfoParcel) { - ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s called, deviceID: 0x%{public}s", __func__, deviceID.c_str()); + ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s called, deviceID: %{public}s", __func__, deviceID.c_str()); std::vector nativeList; 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 f27049517..51c4aa2aa 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 @@ -38,6 +38,15 @@ using namespace std; using namespace OHOS::Security::AccessToken; using namespace testing::ext; static std::vector threads_; +static std::shared_ptr g_ptrDeviceStateCallback = + std::make_shared(); +static std::string g_networkID = "deviceid-1"; +static DmDeviceInfo g_devInfo = { + // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 + .deviceId = "deviceid-1", + .deviceName = "remote_mock", + .deviceTypeId = 1 +}; namespace { static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, SECURITY_DOMAIN_ACCESSTOKEN, "AccessTokenKitTest"}; @@ -54,14 +63,18 @@ void TokenSyncServiceTest::SetUpTestCase() void TokenSyncServiceTest::TearDownTestCase() {} void TokenSyncServiceTest::SetUp() -{ -} +{} void TokenSyncServiceTest::TearDown() { for (auto it = threads_.begin(); it != threads_.end(); it++) { it->join(); } threads_.clear(); + + if (g_ptrDeviceStateCallback != nullptr) { + g_ptrDeviceStateCallback->OnDeviceOffline(g_devInfo); + sleep(1); + } } namespace { @@ -88,13 +101,14 @@ void SendTaskThread() CompressMock(sendJson, sendBuffer, sendLen); SoftBusSessionListener::OnBytesReceived(1, sendBuffer, sendLen); + free(sendBuffer); } /** * @tc.name: GetRemoteHapTokenInfo001 * @tc.desc: test remote hap send func * @tc.type: FUNC - * @tc.require:AR000GK6T5 + * @tc.require:AR000GK6T5 AR000GK6T9 */ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo001, TestSize.Level1) { @@ -112,31 +126,18 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo001, TestSize.Level1) threads_.emplace_back(std::thread(SendTaskThread)); - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - - ptrDeviceStateCallback->OnDeviceOnline(devInfo); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); int ret = OHOS::DelayedSingleton::GetInstance()->GetRemoteHapTokenInfo( - networkID, 0x20100000); + g_networkID, 0x20100000); ASSERT_EQ(ret, RET_SUCCESS); - AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkID, 0x20100000); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20100000); ASSERT_NE(mapID, (AccessTokenID)0); HapTokenInfo tokeInfo; ret = AccessTokenKit::GetHapTokenInfo(mapID, tokeInfo); ASSERT_EQ(ret, RET_SUCCESS); - - ptrDeviceStateCallback->OnDeviceOffline(devInfo); } static PermissionDef g_infoManagerTestPermDef1 = { @@ -195,7 +196,7 @@ static HapPolicyParams g_infoManagerTestPolicyPrams = { * @tc.name: GetRemoteHapTokenInfo002 * @tc.desc: test remote hap recv func * @tc.type: FUNC - * @tc.require:AR000GK6T5 + * @tc.require:AR000GK6T5 AR000GK6T9 */ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo002, TestSize.Level1) { @@ -210,7 +211,6 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo002, TestSize.Level1) tokenIdEx = AccessTokenKit::AllocHapToken(g_infoManagerTestInfoParms, g_infoManagerTestPolicyPrams); ASSERT_NE(0, tokenIdEx.tokenIdExStruct.tokenID); - // create recv message std::string jsonBefore = "{\"commandName\":\"SyncRemoteHapTokenCommand\",\"id\":\"0065e65f-\",\"jsonPayload\":" "\"{\\\"HapTokenInfo\\\":{\\\"apl\\\":1,\\\"appID\\\":\\\"\\\",\\\"bundleName\\\":\\\"\\\"," @@ -229,18 +229,7 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo002, TestSize.Level1) int recvLen = 0x1000; CompressMock(recvJson, recvBuffer, recvLen); - // device online - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - ptrDeviceStateCallback->OnDeviceOnline(devInfo); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); SoftBusSessionListener::OnBytesReceived(1, recvBuffer, recvLen); @@ -249,19 +238,18 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo002, TestSize.Level1) sleep(1); count ++; } + free(recvBuffer); ResetSendMessFlagMock(); std::string uuidMessage = GetUuidMock(); ASSERT_EQ(uuidMessage, "0065e65f-"); - - ptrDeviceStateCallback->OnDeviceOffline(devInfo); } /** * @tc.name: GetRemoteHapTokenInfo003 * @tc.desc: test remote hap send func, but get tokenInfo is wrong * @tc.type: FUNC - * @tc.require:AR000GK6T5 + * @tc.require:AR000GK6T5 AR000GK6T9 */ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo003, TestSize.Level1) { @@ -280,33 +268,20 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo003, TestSize.Level1) threads_.emplace_back(std::thread(SendTaskThread)); - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - - ptrDeviceStateCallback->OnDeviceOnline(devInfo); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); OHOS::DelayedSingleton::GetInstance()->GetRemoteHapTokenInfo( - networkID, 0x20100000); + g_networkID, 0x20100000); - AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkID, 0x20100000); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20100000); ASSERT_EQ(mapID, (AccessTokenID)0); - - ptrDeviceStateCallback->OnDeviceOffline(devInfo); } /** * @tc.name: GetRemoteHapTokenInfo004 * @tc.desc: test remote hap send func, but json payload lost parameter * @tc.type: FUNC - * @tc.require:AR000GK6T5 + * @tc.require:AR000GK6T5 AR000GK6T9 */ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo004, TestSize.Level1) { @@ -325,33 +300,20 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo004, TestSize.Level1) threads_.emplace_back(std::thread(SendTaskThread)); - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - - ptrDeviceStateCallback->OnDeviceOnline(devInfo); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); OHOS::DelayedSingleton::GetInstance()->GetRemoteHapTokenInfo( - networkID, 0x20100000); + g_networkID, 0x20100000); - AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkID, 0x20100000); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20100000); ASSERT_EQ(mapID, (AccessTokenID)0); - - ptrDeviceStateCallback->OnDeviceOffline(devInfo); } /** * @tc.name: GetRemoteHapTokenInfo005 * @tc.desc: test remote hap send func, but json payload parameter type is wrong * @tc.type: FUNC - * @tc.require:AR000GK6T5 + * @tc.require:AR000GK6T5 AR000GK6T9 */ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo005, TestSize.Level1) { @@ -371,33 +333,20 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo005, TestSize.Level1) threads_.emplace_back(std::thread(SendTaskThread)); - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - - ptrDeviceStateCallback->OnDeviceOnline(devInfo); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); OHOS::DelayedSingleton::GetInstance()->GetRemoteHapTokenInfo( - networkID, 0x20100000); + g_networkID, 0x20100000); - AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkID, 0x20100000); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20100000); ASSERT_EQ(mapID, (AccessTokenID)0); - - ptrDeviceStateCallback->OnDeviceOffline(devInfo); } /** * @tc.name: GetRemoteHapTokenInfo006 * @tc.desc: test remote hap send func, but json payload parameter format is wrong * @tc.type: FUNC - * @tc.require:AR000GK6T5 + * @tc.require:AR000GK6T5 AR000GK6T9 */ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo006, TestSize.Level1) { @@ -417,33 +366,20 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo006, TestSize.Level1) threads_.emplace_back(std::thread(SendTaskThread)); - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - - ptrDeviceStateCallback->OnDeviceOnline(devInfo); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); OHOS::DelayedSingleton::GetInstance()->GetRemoteHapTokenInfo( - networkID, 0x20100000); + g_networkID, 0x20100000); - AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkID, 0x20100000); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20100000); ASSERT_EQ(mapID, (AccessTokenID)0); - - ptrDeviceStateCallback->OnDeviceOffline(devInfo); } /** * @tc.name: GetRemoteHapTokenInfo007 * @tc.desc: test remote hap send func, statusCode is wrong * @tc.type: FUNC - * @tc.require:AR000GK6T5 + * @tc.require:AR000GK6T5 AR000GK6T9 */ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo007, TestSize.Level1) { @@ -464,33 +400,21 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo007, TestSize.Level1) threads_.emplace_back(std::thread(SendTaskThread)); - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - ptrDeviceStateCallback->OnDeviceOnline(devInfo); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); OHOS::DelayedSingleton::GetInstance()->GetRemoteHapTokenInfo( - networkID, 0x20100000); + g_networkID, 0x20100000); - AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkID, 0x20100000); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20100000); ASSERT_EQ(mapID, (AccessTokenID)0); - - ptrDeviceStateCallback->OnDeviceOffline(devInfo); } /** * @tc.name: GetRemoteHapTokenInfo008 * @tc.desc: test remote hap recv func, tokenID is not exist * @tc.type: FUNC - * @tc.require:AR000GK6T5 + * @tc.require:AR000GK6T5 AR000GK6T9 */ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo008, TestSize.Level1) { @@ -520,19 +444,7 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo008, TestSize.Level1) int recvLen = 0x1000; CompressMock(recvJson, recvBuffer, recvLen); - // device online - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - ptrDeviceStateCallback->OnDeviceOnline(devInfo); - + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); SoftBusSessionListener::OnBytesReceived(1, recvBuffer, recvLen); int count = 0; @@ -540,17 +452,16 @@ HWTEST_F(TokenSyncServiceTest, GetRemoteHapTokenInfo008, TestSize.Level1) sleep(1); count ++; } + free(recvBuffer); ResetSendMessFlagMock(); std::string uuidMessage = GetUuidMock(); ASSERT_EQ(uuidMessage, "0065e65f-"); - - ptrDeviceStateCallback->OnDeviceOffline(devInfo); } /** * @tc.name: SyncNativeTokens001 - * @tc.desc: when device is online, sync remote nativetokens which has dcap + * @tc.desc: when device is online, sync remote nativetokens which have dcap * @tc.type: FUNC * @tc.require:AR000GK6T6 */ @@ -560,9 +471,9 @@ HWTEST_F(TokenSyncServiceTest, SyncNativeTokens001, TestSize.Level1) g_jsonBefore = "{\"commandName\":\"SyncRemoteNativeTokenCommand\", \"id\":\""; g_jsonAfter = "\",\"jsonPayload\":\"{\\\"NativeTokenInfos\\\":[{\\\"apl\\\":3,\\\"processName\\\":\\\"attest\\\"," - "\\\"tokenAttr\\\":0,\\\"tokenId\\\":671836008,\\\"version\\\":1," + "\\\"tokenAttr\\\":0,\\\"tokenId\\\":671088640,\\\"version\\\":1," "\\\"dcaps\\\":[\\\"SYSDCAP\\\",\\\"DMSDCAP\\\"]}," - "{\\\"APL\\\":3,\\\"processName\\\":\\\"attest1\\\",\\\"tokenAttr\\\":0,\\\"tokenId\\\":671836018," + "{\\\"apl\\\":3,\\\"processName\\\":\\\"attest1\\\",\\\"tokenAttr\\\":0,\\\"tokenId\\\":671088641," "\\\"version\\\":1,\\\"dcaps\\\":[\\\"SYSDCAP\\\",\\\"DMSDCAP\\\"]}]," "\\\"commandName\\\":\\\"SyncRemoteNativeTokenCommand\\\"," "\\\"dstDeviceId\\\":\\\"deviceid-1\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," @@ -573,34 +484,359 @@ HWTEST_F(TokenSyncServiceTest, SyncNativeTokens001, TestSize.Level1) threads_.emplace_back(std::thread(SendTaskThread)); - std::string networkID = "deviceid-1"; - std::string deviceName = "remote_mock"; - // udid = deviceid-1:udid-001 uuid = deviceid-1:uuid-001 - DmDeviceInfo devInfo; - strcpy(devInfo.deviceId, networkID.c_str()); - strcpy(devInfo.deviceName, deviceName.c_str()); - devInfo.deviceTypeId = 1; - - std::shared_ptr ptrDeviceStateCallback = - std::make_shared(); - - ptrDeviceStateCallback->OnDeviceOnline(devInfo); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); sleep(6); - AccessTokenID mapID = AccessTokenKit::GetRemoteNativeTokenID(networkID, 0x280b6768); + AccessTokenID mapID = AccessTokenKit::GetRemoteNativeTokenID(g_networkID, 0x28000000); ASSERT_NE(mapID, (AccessTokenID)0); int ret = AccessTokenKit::CheckNativeDCap(mapID, "SYSDCAP"); ASSERT_EQ(ret, RET_SUCCESS); ret = AccessTokenKit::CheckNativeDCap(mapID, "DMSDCAP"); ASSERT_EQ(ret, RET_SUCCESS); - mapID = AccessTokenKit::GetRemoteNativeTokenID(networkID, 0x280b6772); + mapID = AccessTokenKit::GetRemoteNativeTokenID(g_networkID, 0x28000001); ASSERT_NE(mapID, (AccessTokenID)0); ret = AccessTokenKit::CheckNativeDCap(mapID, "SYSDCAP"); ASSERT_EQ(ret, RET_SUCCESS); ret = AccessTokenKit::CheckNativeDCap(mapID, "DMSDCAP"); ASSERT_EQ(ret, RET_SUCCESS); +} + +/** + * @tc.name: SyncNativeTokens002 + * @tc.desc: when device is online, sync remote nativetoken which has no dcaps + * @tc.type: FUNC + * @tc.require:AR000GK6T6 + */ +HWTEST_F(TokenSyncServiceTest, SyncNativeTokens002, TestSize.Level1) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "SyncNativeTokens002 start."); + g_jsonBefore = "{\"commandName\":\"SyncRemoteNativeTokenCommand\", \"id\":\""; + // 0x28000001 token has no dcaps + g_jsonAfter = + "\",\"jsonPayload\":\"{\\\"NativeTokenInfos\\\":[{\\\"apl\\\":3,\\\"processName\\\":\\\"attest\\\"," + "\\\"tokenAttr\\\":0,\\\"tokenId\\\":671088640,\\\"version\\\":1," + "\\\"dcaps\\\":[\\\"SYSDCAP\\\",\\\"DMSDCAP\\\"]}," + "{\\\"apl\\\":3,\\\"processName\\\":\\\"attest1\\\",\\\"tokenAttr\\\":0,\\\"tokenId\\\":671088641," + "\\\"version\\\":1,\\\"dcaps\\\":[]}]," + "\\\"commandName\\\":\\\"SyncRemoteNativeTokenCommand\\\"," + "\\\"dstDeviceId\\\":\\\"deviceid-1\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," + "\\\"requestVersion\\\":2,\\\"responseDeviceId\\\":\\\"deviceid-1:udid-001\\\"," + "\\\"responseVersion\\\":2,\\\"srcDeviceId\\\":\\\"local:udid-001\\\"," + "\\\"srcDeviceLevel\\\":\\\"\\\",\\\"statusCode\\\":0,\\\"uniqueId\\\":\\\"SyncRemoteNativeTokenCommand\\\"}\"," + "\"type\":\"response\"}"; + + threads_.emplace_back(std::thread(SendTaskThread)); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); + + sleep(6); + + AccessTokenID mapID = AccessTokenKit::GetRemoteNativeTokenID(g_networkID, 0x28000000); + ASSERT_NE(mapID, (AccessTokenID)0); + int ret = AccessTokenKit::CheckNativeDCap(mapID, "SYSDCAP"); + ASSERT_EQ(ret, RET_SUCCESS); + ret = AccessTokenKit::CheckNativeDCap(mapID, "DMSDCAP"); + ASSERT_EQ(ret, RET_SUCCESS); + + mapID = AccessTokenKit::GetRemoteNativeTokenID(g_networkID, 0x28000001); + ASSERT_EQ(mapID, (AccessTokenID)0); +} + +/** + * @tc.name: SyncNativeTokens003 + * @tc.desc: when device is online, sync remote nativetokens status failed + * @tc.type: FUNC + * @tc.require:AR000GK6T6 + */ +HWTEST_F(TokenSyncServiceTest, SyncNativeTokens003, TestSize.Level1) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "SyncNativeTokens003 start."); + g_jsonBefore = "{\"commandName\":\"SyncRemoteNativeTokenCommand\", \"id\":\""; + g_jsonAfter = + "\",\"jsonPayload\":\"{\\\"NativeTokenInfos\\\":[{\\\"apl\\\":3,\\\"processName\\\":\\\"attest\\\"," + "\\\"tokenAttr\\\":0,\\\"tokenId\\\":671088640,\\\"version\\\":1," + "\\\"dcaps\\\":[\\\"SYSDCAP\\\",\\\"DMSDCAP\\\"]}," + "{\\\"apl\\\":3,\\\"processName\\\":\\\"attest1\\\",\\\"tokenAttr\\\":0,\\\"tokenId\\\":671088641," + "\\\"version\\\":1,\\\"dcaps\\\":[\\\"SYSDCAP\\\",\\\"DMSDCAP\\\"]}]," + "\\\"commandName\\\":\\\"SyncRemoteNativeTokenCommand\\\"," + "\\\"dstDeviceId\\\":\\\"deviceid-1\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," + "\\\"requestVersion\\\":2,\\\"responseDeviceId\\\":\\\"deviceid-1:udid-001\\\"," + "\\\"responseVersion\\\":2,\\\"srcDeviceId\\\":\\\"local:udid-001\\\"," + "\\\"srcDeviceLevel\\\":\\\"\\\",\\\"statusCode\\\":-2," + "\\\"uniqueId\\\":\\\"SyncRemoteNativeTokenCommand\\\"}\",\"type\":\"response\"}"; + + + threads_.emplace_back(std::thread(SendTaskThread)); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); + + sleep(6); + + AccessTokenID mapID = AccessTokenKit::GetRemoteNativeTokenID(g_networkID, 0x28000000); + ASSERT_EQ(mapID, (AccessTokenID)0); + + mapID = AccessTokenKit::GetRemoteNativeTokenID(g_networkID, 0x28000001); + ASSERT_EQ(mapID, (AccessTokenID)0); +} + +/** + * @tc.name: SyncNativeTokens004 + * @tc.desc: when device is online, sync remote nativetokens which parameter is wrong + * @tc.type: FUNC + * @tc.require:AR000GK6T6 + */ +HWTEST_F(TokenSyncServiceTest, SyncNativeTokens004, TestSize.Level1) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "SyncNativeTokens004 start."); + g_jsonBefore = "{\"commandName\":\"SyncRemoteNativeTokenCommand\", \"id\":\""; + // apl is error + g_jsonAfter = + "\",\"jsonPayload\":\"{\\\"NativeTokenInfos\\\":[{\\\"apl\\\":11,\\\"processName\\\":\\\"attest\\\"," + "\\\"tokenAttr\\\":0,\\\"tokenId\\\":671088640,\\\"version\\\":1," + "\\\"dcaps\\\":[\\\"SYSDCAP\\\",\\\"DMSDCAP\\\"]}," + "{\\\"apl\\\":11,\\\"processName\\\":\\\"attest1\\\",\\\"tokenAttr\\\":0,\\\"tokenId\\\":671088641," + "\\\"version\\\":1,\\\"dcaps\\\":[\\\"SYSDCAP\\\",\\\"DMSDCAP\\\"]}]," + "\\\"commandName\\\":\\\"SyncRemoteNativeTokenCommand\\\"," + "\\\"dstDeviceId\\\":\\\"deviceid-1\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," + "\\\"requestVersion\\\":2,\\\"responseDeviceId\\\":\\\"deviceid-1:udid-001\\\"," + "\\\"responseVersion\\\":2,\\\"srcDeviceId\\\":\\\"local:udid-001\\\"," + "\\\"srcDeviceLevel\\\":\\\"\\\",\\\"statusCode\\\":0,\\\"uniqueId\\\":\\\"SyncRemoteNativeTokenCommand\\\"}\"," + "\"type\":\"response\"}"; + + threads_.emplace_back(std::thread(SendTaskThread)); + + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); + + sleep(6); + + AccessTokenID mapID = AccessTokenKit::GetRemoteNativeTokenID(g_networkID, 0x28000000); + ASSERT_EQ(mapID, (AccessTokenID)0); + + mapID = AccessTokenKit::GetRemoteNativeTokenID(g_networkID, 0x28000001); + ASSERT_EQ(mapID, (AccessTokenID)0); +} + +/** + * @tc.name: SyncNativeTokens005 + * @tc.desc: test remote hap recv func + * @tc.type: FUNC + * @tc.require:AR000GK6T5 + */ +HWTEST_F(TokenSyncServiceTest, SyncNativeTokens005, TestSize.Level1) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "SyncNativeTokens005 start."); + + std::string recvJson = + "{\"commandName\":\"SyncRemoteNativeTokenCommand\",\"id\":\"ec23cd2d-\",\"jsonPayload\":" + "\"{\\\"NativeTokenInfos\\\":null,\\\"commandName\\\":\\\"SyncRemoteNativeTokenCommand\\\"," + "\\\"dstDeviceId\\\":\\\"local:udid-001\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," + "\\\"requestTokenId\\\":,\\\"requestVersion\\\":2,\\\"responseDeviceId\\\":\\\"\\\",\\\"responseVersion\\\":2," + "\\\"srcDeviceId\\\":\\\"deviceid-1\\\",\\\"srcDeviceLevel\\\":\\\"\\\",\\\"statusCode\\\":100001," + "\\\"uniqueId\\\":\\\"SyncRemoteNativeTokenCommand\\\"}\",\"type\":\"request\"}"; + + unsigned char *recvBuffer = (unsigned char *)malloc(0x1000); + int recvLen = 0x1000; + CompressMock(recvJson, recvBuffer, recvLen); + + 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, "ec23cd2d-"); +} + +namespace { +PermissionStateFull g_infoManagerTestUpdateState1 = { + .grantFlags = {1}, + .grantStatus = {PermissionState::PERMISSION_DENIED}, + .isGeneral = true, + .permissionName = "ohos.permission.CAMERA", + .resDeviceID = {"local"} +}; + +PermissionStateFull g_infoManagerTestUpdateState2 = { + .permissionName = "ohos.permission.ANSWER_CALL", + .isGeneral = false, + .grantFlags = {1, 2}, + .grantStatus = {PermissionState::PERMISSION_DENIED, PermissionState::PERMISSION_DENIED}, + .resDeviceID = {"device 1", "device 2"} +}; + +HapTokenInfo g_remoteHapInfoBasic = { + .apl = APL_NORMAL, + .ver = 1, + .userID = 1, + .bundleName = "accesstoken_test", + .instIndex = 1, + .appID = "testtesttesttest", + .deviceID = "0", + .tokenID = 0x20000001, + .tokenAttr = 0 +}; + +HapTokenInfoForSync g_remoteHapInfo = { + .baseInfo = g_remoteHapInfoBasic, + .permStateList = {g_infoManagerTestUpdateState1, g_infoManagerTestUpdateState2} +}; +} + +/** + * @tc.name: UpdateRemoteHapTokenCommand001 + * @tc.desc: recv mapping hap token update message + * @tc.type: FUNC + * @tc.require:AR000GK6TB + */ +HWTEST_F(TokenSyncServiceTest, UpdateRemoteHapTokenCommand001, TestSize.Level1) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "UpdateRemoteHapTokenCommand001 start."); + sleep(1); + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); + sleep(6); + + int ret = AccessTokenKit::SetRemoteHapTokenInfo(g_networkID, g_remoteHapInfo); + ASSERT_EQ(ret, RET_SUCCESS); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20000001); + ASSERT_NE(mapID, 0); + + HapTokenInfo mapInfo; + ret = AccessTokenKit::GetHapTokenInfo(mapID, mapInfo); + ASSERT_EQ(ret, RET_SUCCESS); + + ret = AccessTokenKit::VerifyAccessToken(mapID, "ohos.permission.CAMERA"); + ASSERT_EQ(ret, PERMISSION_DENIED); + + std::string recvJson = + "{\"commandName\":\"UpdateRemoteHapTokenCommand\",\"id\":\"ec23cd2d-\",\"jsonPayload\":" + "\"{\\\"HapTokenInfos\\\":{\\\"apl\\\":1,\\\"appID\\\":\\\"testtesttesttest\\\"," + "\\\"bundleName\\\":\\\"accesstoken_test\\\",\\\"deviceID\\\":\\\"0\\\",\\\"instIndex\\\":0," + "\\\"permState\\\":[{\\\"grantConfig\\\":[{\\\"grantFlags\\\":2,\\\"grantStatus\\\":0," + "\\\"resDeviceID\\\":\\\"local\\\"}],\\\"isGeneral\\\":true," + "\\\"permissionName\\\":\\\"ohos.permission.CAMERA\\\"},{\\\"grantConfig\\\":[{\\\"grantFlags\\\":1," + "\\\"grantStatus\\\":-1,\\\"resDeviceID\\\":\\\"device 1\\\"},{\\\"grantFlags\\\":2,\\\"grantStatus\\\":-1," + "\\\"resDeviceID\\\":\\\"device 2\\\"}],\\\"isGeneral\\\":false," + "\\\"permissionName\\\":\\\"ohos.permission.ANSWER_CALL\\\"}],\\\"tokenAttr\\\":0,\\\"tokenID\\\":536870913," + "\\\"userID\\\":1,\\\"version\\\":1},\\\"commandName\\\":\\\"UpdateRemoteHapTokenCommand\\\"," + "\\\"dstDeviceId\\\":\\\"local:udid-001\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," + "\\\"requestTokenId\\\":536870913,\\\"requestVersion\\\":2,\\\"responseDeviceId\\\":\\\"\\\"," + "\\\"responseVersion\\\":2," + "\\\"srcDeviceId\\\":\\\"deviceid-1\\\",\\\"srcDeviceLevel\\\":\\\"\\\",\\\"statusCode\\\":100001," + "\\\"uniqueId\\\":\\\"UpdateRemoteHapTokenCommand\\\"}\",\"type\":\"request\"}"; + + unsigned char *recvBuffer = (unsigned char *)malloc(0x1000); + int recvLen = 0x1000; + CompressMock(recvJson, recvBuffer, recvLen); + SoftBusSessionListener::OnBytesReceived(1, recvBuffer, recvLen); + sleep(2); + + free(recvBuffer); + + ret = AccessTokenKit::VerifyAccessToken(mapID, "ohos.permission.CAMERA"); + + ASSERT_EQ(ret, PERMISSION_GRANTED); + + recvJson = + "{\"commandName\":\"UpdateRemoteHapTokenCommand\",\"id\":\"ec23cd2d-\",\"jsonPayload\":" + "\"{\\\"HapTokenInfos\\\":{\\\"apl\\\":2,\\\"appID\\\":\\\"testtesttesttest\\\"," + "\\\"bundleName\\\":\\\"accesstoken_test\\\",\\\"deviceID\\\":\\\"0\\\",\\\"instIndex\\\":0," + "\\\"permState\\\":[{\\\"grantConfig\\\":[{\\\"grantFlags\\\":2,\\\"grantStatus\\\":0," + "\\\"resDeviceID\\\":\\\"local\\\"}],\\\"isGeneral\\\":true," + "\\\"permissionName\\\":\\\"ohos.permission.CAMERA\\\"},{\\\"grantConfig\\\":[{\\\"grantFlags\\\":1," + "\\\"grantStatus\\\":-1,\\\"resDeviceID\\\":\\\"device 1\\\"},{\\\"grantFlags\\\":2,\\\"grantStatus\\\":-1," + "\\\"resDeviceID\\\":\\\"device 2\\\"}],\\\"isGeneral\\\":false," + "\\\"permissionName\\\":\\\"ohos.permission.ANSWER_CALL\\\"}],\\\"tokenAttr\\\":0,\\\"tokenID\\\":536870913," + "\\\"userID\\\":1,\\\"version\\\":1},\\\"commandName\\\":\\\"UpdateRemoteHapTokenCommand\\\"," + "\\\"dstDeviceId\\\":\\\"local:udid-001\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," + "\\\"requestTokenId\\\":536870913,\\\"requestVersion\\\":2,\\\"responseDeviceId\\\":\\\"\\\"," + "\\\"responseVersion\\\":2," + "\\\"srcDeviceId\\\":\\\"deviceid-1\\\",\\\"srcDeviceLevel\\\":\\\"\\\",\\\"statusCode\\\":100001," + "\\\"uniqueId\\\":\\\"UpdateRemoteHapTokenCommand\\\"}\",\"type\":\"request\"}"; + + recvBuffer = (unsigned char *)malloc(0x1000); + recvLen = 0x1000; + CompressMock(recvJson, recvBuffer, recvLen); + SoftBusSessionListener::OnBytesReceived(1, recvBuffer, recvLen); + sleep(2); + free(recvBuffer); + + ret = AccessTokenKit::GetHapTokenInfo(mapID, mapInfo); + ASSERT_EQ(ret, RET_SUCCESS); + ASSERT_EQ(mapInfo.apl, 2); +} + +/** + * @tc.name: DeleteRemoteTokenCommand001 + * @tc.desc: recv delete mapping hap token update message + * @tc.type: FUNC + * @tc.require:AR000GK6TC + */ +HWTEST_F(TokenSyncServiceTest, DeleteRemoteTokenCommand001, TestSize.Level1) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "DeleteRemoteTokenCommand001 start."); + + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); + + int ret = AccessTokenKit::SetRemoteHapTokenInfo(g_networkID, g_remoteHapInfo); + ASSERT_EQ(ret, RET_SUCCESS); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20000001); + ASSERT_NE(mapID, 0); + + HapTokenInfo mapInfo; + ret = AccessTokenKit::GetHapTokenInfo(mapID, mapInfo); + ASSERT_EQ(ret, RET_SUCCESS); + + // create recv message + std::string recvJson = + "{\"commandName\":\"DeleteRemoteTokenCommand\",\"id\":\"9ff19cdf-\",\"jsonPayload\":" + "\"{\\\"commandName\\\":\\\"DeleteRemoteTokenCommand\\\"," + "\\\"dstDeviceId\\\":\\\"local:udid-001\\\",\\\"dstDeviceLevel\\\":\\\"\\\",\\\"message\\\":\\\"success\\\"," + "\\\"requestTokenId\\\":536870913,\\\"requestVersion\\\":2,\\\"responseDeviceId\\\":\\\"\\\"," + "\\\"responseVersion\\\":2," + "\\\"srcDeviceId\\\":\\\"deviceid-1\\\",\\\"srcDeviceLevel\\\":\\\"\\\",\\\"statusCode\\\":100001," + "\\\"tokenId\\\":536870913,\\\"uniqueId\\\":\\\"DeleteRemoteTokenCommand\\\"}\",\"type\":\"request\"}"; + + unsigned char *recvBuffer = (unsigned char *)malloc(0x1000); + int recvLen = 0x1000; + CompressMock(recvJson, recvBuffer, recvLen); + SoftBusSessionListener::OnBytesReceived(1, recvBuffer, recvLen); + sleep(2); + free(recvBuffer); + ret = AccessTokenKit::GetHapTokenInfo(mapID, mapInfo); + ASSERT_EQ(ret, RET_FAILED); +} + +/** + * @tc.name: DeviceOffline001 + * @tc.desc: test device offline, will delete + * @tc.type: FUNC + * @tc.require:AR000GK6TB + */ +HWTEST_F(TokenSyncServiceTest, DeviceOffline001, TestSize.Level1) +{ + ACCESSTOKEN_LOG_INFO(LABEL, "DeviceOffline001 start."); + + // device online + g_ptrDeviceStateCallback->OnDeviceOnline(g_devInfo); + + int ret = AccessTokenKit::SetRemoteHapTokenInfo(g_networkID, g_remoteHapInfo); + ASSERT_EQ(ret, RET_SUCCESS); + AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(g_networkID, 0x20000001); + ASSERT_NE(mapID, 0); + + HapTokenInfo mapInfo; + ret = AccessTokenKit::GetHapTokenInfo(mapID, mapInfo); + ASSERT_EQ(ret, RET_SUCCESS); + + g_ptrDeviceStateCallback->OnDeviceOffline(g_devInfo); + sleep(1); - ptrDeviceStateCallback->OnDeviceOffline(devInfo); + ret = AccessTokenKit::GetHapTokenInfo(mapID, mapInfo); + ASSERT_EQ(ret, RET_FAILED); } -- Gitee From 5841e5a5f42b000ce3702d11a04426182a0ab194 Mon Sep 17 00:00:00 2001 From: libing23 Date: Mon, 28 Feb 2022 15:14:39 +0800 Subject: [PATCH 2/3] push --- entry-release-standard-ark-signed.hap | Bin 0 -> 25237 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 entry-release-standard-ark-signed.hap diff --git a/entry-release-standard-ark-signed.hap b/entry-release-standard-ark-signed.hap new file mode 100644 index 0000000000000000000000000000000000000000..6cba508f33a33422fbfdf823c00df581055b876f GIT binary patch literal 25237 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 literal 0 HcmV?d00001 -- Gitee From 678fc7174ffea0a96789c771e77010daa59149ca Mon Sep 17 00:00:00 2001 From: libing23 Date: Tue, 1 Mar 2022 15:51:11 +0800 Subject: [PATCH 3/3] sync performance log --- interfaces/innerkits/accesstoken/BUILD.gn | 2 +- interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp | 7 +++++++ services/tokensyncmanager/BUILD.gn | 2 +- services/tokensyncmanager/src/remote/soft_bus_channel.cpp | 7 ++++++- services/tokensyncmanager/src/remote/soft_bus_manager.cpp | 7 +++++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/interfaces/innerkits/accesstoken/BUILD.gn b/interfaces/innerkits/accesstoken/BUILD.gn index 95c8b1f17..3680e7ae5 100644 --- a/interfaces/innerkits/accesstoken/BUILD.gn +++ b/interfaces/innerkits/accesstoken/BUILD.gn @@ -57,5 +57,5 @@ ohos_shared_library("libaccesstoken_sdk") { "samgr_standard:samgr_proxy", ] - cflags_cc = [ "-DHILOG_ENABLE" ] + cflags_cc = [ "-DHILOG_ENABLE", "-DDEBUG_API_PERFORMANCE" ] } diff --git a/interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp b/interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp index 17e4e4622..706781b3c 100644 --- a/interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp +++ b/interfaces/innerkits/accesstoken/src/accesstoken_kit.cpp @@ -47,7 +47,14 @@ AccessTokenID AccessTokenKit::AllocLocalTokenID(const std::string& remoteDeviceI { ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s called, deviceID=%{public}s tokenID=%{public}d", __func__, remoteDeviceID.c_str(), remoteTokenID); +#ifdef DEBUG_API_PERFORMANCE + ACCESSTOKEN_LOG_INFO(LABEL, "api_performance:start call"); + AccessTokenID resID = AccessTokenManagerClient::GetInstance().AllocLocalTokenID(remoteDeviceID, remoteTokenID); + ACCESSTOKEN_LOG_INFO(LABEL, "api_performance:end call"); + return resID; +#else return AccessTokenManagerClient::GetInstance().AllocLocalTokenID(remoteDeviceID, remoteTokenID); +#endif } int AccessTokenKit::UpdateHapToken(AccessTokenID tokenID, const std::string& appIDDesc, const HapPolicyParams& policy) diff --git a/services/tokensyncmanager/BUILD.gn b/services/tokensyncmanager/BUILD.gn index 000a1b457..fb09e889e 100644 --- a/services/tokensyncmanager/BUILD.gn +++ b/services/tokensyncmanager/BUILD.gn @@ -61,7 +61,7 @@ ohos_shared_library("token_sync_manager_service") { "src/service/token_sync_manager_stub.cpp", ] - cflags_cc = [ "-DHILOG_ENABLE" ] + cflags_cc = [ "-DHILOG_ENABLE", "-DDEBUG_API_PERFORMANCE" ] deps = [ "//base/security/access_token/frameworks/accesstoken:accesstoken_communication_adapter_cxx", diff --git a/services/tokensyncmanager/src/remote/soft_bus_channel.cpp b/services/tokensyncmanager/src/remote/soft_bus_channel.cpp index 97e028db7..7fe78a6d1 100644 --- a/services/tokensyncmanager/src/remote/soft_bus_channel.cpp +++ b/services/tokensyncmanager/src/remote/soft_bus_channel.cpp @@ -184,7 +184,9 @@ std::string SoftBusChannel::ExecuteCommand(const std::string &commandName, const void SoftBusChannel::HandleDataReceived(int session, const unsigned char *bytes, int length) { ACCESSTOKEN_LOG_DEBUG(LABEL, "HandleDataReceived"); - +#ifdef DEBUG_API_PERFORMANCE + ACCESSTOKEN_LOG_INFO(LABEL, "api_performance:recieve message from softbus"); +#endif if (session <= 0 || length <= 0) { ACCESSTOKEN_LOG_ERROR(LABEL, "invalid params: session: %{public}d, data length: %{public}d", session, length); return; @@ -294,6 +296,9 @@ int SoftBusChannel::SendRequestBytes(const unsigned char *bytes, const int bytes } ACCESSTOKEN_LOG_DEBUG(LABEL, "send len (after compress len)= %{public}d", bytesLength); +#ifdef DEBUG_API_PERFORMANCE + ACCESSTOKEN_LOG_INFO(LABEL, "api_performance:send command to softbus"); +#endif int result = ::SendBytes(session_, bytes, bytesLength); if (result != Constant::SUCCESS) { ACCESSTOKEN_LOG_ERROR(LABEL, "fail to send! result= %{public}d", result); diff --git a/services/tokensyncmanager/src/remote/soft_bus_manager.cpp b/services/tokensyncmanager/src/remote/soft_bus_manager.cpp index 33e22c8a4..fae3e97dd 100644 --- a/services/tokensyncmanager/src/remote/soft_bus_manager.cpp +++ b/services/tokensyncmanager/src/remote/soft_bus_manager.cpp @@ -154,6 +154,10 @@ void SoftBusManager::Destroy() int32_t SoftBusManager::OpenSession(const std::string &deviceId) { +#ifdef DEBUG_API_PERFORMANCE + ACCESSTOKEN_LOG_INFO(LABEL, "api_performance:start open session"); +#endif + DeviceInfo info; bool result = DeviceInfoManager::GetInstance().GetDeviceInfo(deviceId, DeviceIdType::UNKNOWN, info); if (result == false) { @@ -185,6 +189,9 @@ int32_t SoftBusManager::OpenSession(const std::string &deviceId) } break; } +#ifdef DEBUG_API_PERFORMANCE + ACCESSTOKEN_LOG_INFO(LABEL, "api_performance:start open session success"); +#endif int64_t state = SoftBusSessionListener::GetSessionState(sessionId); if (state < 0) { ACCESSTOKEN_LOG_ERROR(LABEL, "openSession, timeout, session: %{public}" PRId64, state); -- Gitee