From e704d3b8e2fe853e0b82001d51a6998068c2c0ce Mon Sep 17 00:00:00 2001 From: chen0088 Date: Mon, 29 Aug 2022 18:06:28 +0800 Subject: [PATCH] fix: add permissions to ut Signed-off-by: chen0088 --- .../client/test/sample/BUILD.gn | 4 +- .../client/test/sample/main.cpp | 99 +++++++++++++++---- 2 files changed, 85 insertions(+), 18 deletions(-) diff --git a/services/cameraservice/cameraoperator/client/test/sample/BUILD.gn b/services/cameraservice/cameraoperator/client/test/sample/BUILD.gn index 9f98ea1e..608412ca 100644 --- a/services/cameraservice/cameraoperator/client/test/sample/BUILD.gn +++ b/services/cameraservice/cameraoperator/client/test/sample/BUILD.gn @@ -18,7 +18,7 @@ import( config("module_private_config") { include_dirs = [ - "//base/security/access_token/interfaces/innerkits/nativetoken/include", + "//base/security/access_token/interfaces/innerkits/accesstoken/include", "//base/security/access_token/interfaces/innerkits/token_setproc/include", "//drivers/peripheral/camera/interfaces/metadata/include", "//third_party/jsoncpp/include", @@ -79,6 +79,8 @@ ohos_executable("dcamera_client_demo") { ] external_deps = [ + "access_token:libaccesstoken_sdk", + "access_token:libtoken_setproc", "c_utils:utils", "drivers_interface_distributed_camera:libdistributed_camera_provider_proxy_1.0", "hiviewdfx_hilog_native:libhilog", diff --git a/services/cameraservice/cameraoperator/client/test/sample/main.cpp b/services/cameraservice/cameraoperator/client/test/sample/main.cpp index 277a0a22..b1974bac 100644 --- a/services/cameraservice/cameraoperator/client/test/sample/main.cpp +++ b/services/cameraservice/cameraoperator/client/test/sample/main.cpp @@ -15,7 +15,10 @@ #include "dcamera_client_demo.h" -#include "nativetoken_kit.h" +#include "access_token.h" +#include "accesstoken_kit.h" +#include "hap_token_info.h" +#include "ipc_skeleton.h" #include "token_setproc.h" using namespace OHOS; @@ -196,24 +199,86 @@ static std::shared_ptr ConfigPhotoCaptureSetting() return photoCaptureSettings; } +static std::string permissionName = "ohos.permission.CAMERA"; +static OHOS::Security::AccessToken::HapInfoParams g_infoManagerTestInfoParms = { + .userID = 1, + .bundleName = permissionName, + .instIndex = 0, + .appIDDesc = "testtesttesttest" +}; + +static OHOS::Security::AccessToken::PermissionDef g_infoManagerTestPermDef1 = { + .permissionName = "ohos.permission.CAMERA", + .bundleName = "ohos.permission.CAMERA", + .grantMode = 1, + .availableLevel = OHOS::Security::AccessToken::ATokenAplEnum::APL_NORMAL, + .label = "label", + .labelId = 1, + .description = "dcamera client test", + .descriptionId = 1 +}; + +static OHOS::Security::AccessToken::PermissionStateFull g_infoManagerTestState1 = { + .permissionName = "ohos.permission.CAMERA", + .isGeneral = true, + .resDeviceID = {"local"}, + .grantStatus = {OHOS::Security::AccessToken::PermissionState::PERMISSION_GRANTED}, + .grantFlags = {1} +}; + +static OHOS::Security::AccessToken::HapPolicyParams g_infoManagerTestPolicyPrams = { + .apl = OHOS::Security::AccessToken::ATokenAplEnum::APL_NORMAL, + .domain = "test.domain", + .permList = {g_infoManagerTestPermDef1}, + .permStateList = {g_infoManagerTestState1} +}; + int main() { - uint64_t tokenId; - const char *perms[2]; - perms[0] = "ohos.permission.DISTRIBUTED_DATASYNC"; - perms[1] = "ohos.permission.CAMERA"; - NativeTokenInfoParams infoInstance = { - .dcapsNum = 0, - .permsNum = 2, - .aclsNum = 0, - .dcaps = NULL, - .perms = perms, - .acls = NULL, - .processName = "dcamera_client_demo", - .aplStr = "system_basic", - }; - tokenId = GetAccessTokenId(&infoInstance); - SetSelfTokenID(tokenId); + /* Grant the permission so that create camera test can be success */ + int32_t rc = -1; + OHOS::Security::AccessToken::AccessTokenIDEx tokenIdEx = {0}; + tokenIdEx = OHOS::Security::AccessToken::AccessTokenKit::AllocHapToken( + g_infoManagerTestInfoParms, + g_infoManagerTestPolicyPrams); + if (tokenIdEx.tokenIdExStruct.tokenID == 0) { + unsigned int tokenIdOld = 0; + DHLOGI("Alloc TokenID failure, cleaning the old token ID \n"); + tokenIdOld = OHOS::Security::AccessToken::AccessTokenKit::GetHapTokenID( + 1, permissionName, 0); + if (tokenIdOld == 0) { + DHLOGI("Unable to get the Old Token ID, need to reflash the board"); + return 0; + } + rc = OHOS::Security::AccessToken::AccessTokenKit::DeleteToken(tokenIdOld); + if (rc != 0) { + DHLOGI("Unable to delete the Old Token ID, need to reflash the board"); + return 0; + } + + /* Retry the token allocation again */ + tokenIdEx = OHOS::Security::AccessToken::AccessTokenKit::AllocHapToken( + g_infoManagerTestInfoParms, + g_infoManagerTestPolicyPrams); + if (tokenIdEx.tokenIdExStruct.tokenID == 0) { + DHLOGI("Alloc TokenID failure, need to reflash the board \n"); + return 0; + } + } + + (void)SetSelfTokenID(tokenIdEx.tokenIdExStruct.tokenID); + + rc = Security::AccessToken::AccessTokenKit::GrantPermission( + tokenIdEx.tokenIdExStruct.tokenID, + permissionName, OHOS::Security::AccessToken::PERMISSION_USER_FIXED); + if (rc != 0) { + DHLOGI("GrantPermission() failed"); + (void)OHOS::Security::AccessToken::AccessTokenKit::DeleteToken( + tokenIdEx.tokenIdExStruct.tokenID); + return 0; + } else { + DHLOGI("GrantPermission() success"); + } DHLOGI("========== Distributed Camera Demo Start =========="); int32_t ret = InitCameraStandard(); -- Gitee