• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 "alloc_local_token_id_test.h"
17 #include <thread>
18 
19 #include "accesstoken_kit.h"
20 #include "accesstoken_common_log.h"
21 #include "access_token_error.h"
22 #include "nativetoken_kit.h"
23 #include "test_common.h"
24 #include "token_setproc.h"
25 
26 using namespace testing::ext;
27 using namespace OHOS::Security::AccessToken;
28 
29 namespace {
30 static const std::string TEST_BUNDLE_NAME = "ohos";
31 static const std::string TEST_PKG_NAME = "com.softbus.test";
32 static uint64_t g_selfTokenId = 0;
33 static AccessTokenID g_testTokenId = 0x20100000;
34 
35 HapTokenInfo g_baseInfo = {
36     .ver = 1,
37     .userID = 1,
38     .bundleName = "com.ohos.access_token",
39     .instIndex = 1,
40     .tokenID = g_testTokenId,
41     .tokenAttr = 0
42 };
43 
44 #ifdef TOKEN_SYNC_ENABLE
45 static const int32_t FAKE_SYNC_RET = 0xabcdef;
46 class TokenSyncCallbackImpl : public TokenSyncKitInterface {
47 public:
~TokenSyncCallbackImpl()48     ~TokenSyncCallbackImpl()
49     {}
50 
GetRemoteHapTokenInfo(const std::string & deviceID,AccessTokenID tokenID) const51     int32_t GetRemoteHapTokenInfo(const std::string& deviceID, AccessTokenID tokenID) const override
52     {
53         LOGI(ATM_DOMAIN, ATM_TAG, "GetRemoteHapTokenInfo called.");
54         return FAKE_SYNC_RET;
55     };
56 
DeleteRemoteHapTokenInfo(AccessTokenID tokenID) const57     int32_t DeleteRemoteHapTokenInfo(AccessTokenID tokenID) const override
58     {
59         LOGI(ATM_DOMAIN, ATM_TAG, "DeleteRemoteHapTokenInfo called.");
60         return FAKE_SYNC_RET;
61     };
62 
UpdateRemoteHapTokenInfo(const HapTokenInfoForSync & tokenInfo) const63     int32_t UpdateRemoteHapTokenInfo(const HapTokenInfoForSync& tokenInfo) const override
64     {
65         LOGI(ATM_DOMAIN, ATM_TAG, "UpdateRemoteHapTokenInfo called.");
66         return FAKE_SYNC_RET;
67     };
68 };
69 #endif
70 }
71 
SetUpTestCase()72 void AllocLocalTokenIDTest::SetUpTestCase()
73 {
74     g_selfTokenId = GetSelfTokenID();
75     TestCommon::SetTestEvironment(g_selfTokenId);
76 #ifdef TOKEN_SYNC_ENABLE
77     {
78         MockNativeToken mock("foundation");
79         std::shared_ptr<TestDmInitCallback> ptrDmInitCallback = std::make_shared<TestDmInitCallback>();
80         int32_t res =
81             DistributedHardware::DeviceManager::GetInstance().InitDeviceManager(TEST_PKG_NAME, ptrDmInitCallback);
82         ASSERT_EQ(res, RET_SUCCESS);
83     }
84 #endif
85 }
86 
TearDownTestCase()87 void AllocLocalTokenIDTest::TearDownTestCase()
88 {
89 #ifdef TOKEN_SYNC_ENABLE
90     {
91         MockNativeToken mock("foundation");
92         int32_t res = DistributedHardware::DeviceManager::GetInstance().UnInitDeviceManager(TEST_PKG_NAME);
93         ASSERT_EQ(res, RET_SUCCESS);
94     }
95 #endif
96     EXPECT_EQ(0, SetSelfTokenID(g_selfTokenId));
97     TestCommon::ResetTestEvironment();
98 }
99 
SetUp()100 void AllocLocalTokenIDTest::SetUp()
101 {
102 #ifdef TOKEN_SYNC_ENABLE
103     MockNativeToken mock("foundation");
104     DistributedHardware::DmDeviceInfo deviceInfo;
105     int32_t res = DistributedHardware::DeviceManager::GetInstance().GetLocalDeviceInfo(TEST_PKG_NAME, deviceInfo);
106     ASSERT_EQ(res, RET_SUCCESS);
107 
108     networkId_ = std::string(deviceInfo.networkId);
109     ASSERT_NE(networkId_, "");
110 
111     res = DistributedHardware::DeviceManager::GetInstance().GetUdidByNetworkId(TEST_PKG_NAME, networkId_, udid_);
112     ASSERT_EQ(res, RET_SUCCESS);
113     ASSERT_NE(udid_, "");
114 #endif
115 
116     LOGI(ATM_DOMAIN, ATM_TAG, "SetUp ok.");
117 }
118 
TearDown()119 void AllocLocalTokenIDTest::TearDown()
120 {
121     EXPECT_EQ(0, SetSelfTokenID(g_selfTokenId));
122     udid_.clear();
123     networkId_.clear();
124 }
125 
126 #ifdef TOKEN_SYNC_ENABLE
127 /**
128  * @tc.name: AllocLocalTokenIDFuncTest001
129  * @tc.desc: test call AllocLocalTokenID by hap token(permission denied)
130  * @tc.type: FUNC
131  * @tc.require:issue I5R4UF
132  */
133 HWTEST_F(AllocLocalTokenIDTest, AllocLocalTokenIDFuncTest001, TestSize.Level1)
134 {
135     LOGI(ATM_DOMAIN, ATM_TAG, "AllocLocalTokenIDFuncTest001 start.");
136     HapInfoParams infoParms = {
137         .userID = 1,
138         .bundleName = "GetHapTokenInfoFromRemoteTest",
139         .instIndex = 0,
140         .appIDDesc = "test.bundle",
141         .apiVersion = 8,
142         .appDistributionType = "enterprise_mdm"
143     };
144 
145     HapPolicyParams policyPrams = {
146         .apl = APL_NORMAL,
147         .domain = "test.domain",
148     };
149     AccessTokenIDEx tokenIdEx = {0};
150     ASSERT_EQ(RET_SUCCESS, TestCommon::AllocTestHapToken(infoParms, policyPrams, tokenIdEx));
151     AccessTokenID tokenId = tokenIdEx.tokenIdExStruct.tokenID;
152     ASSERT_NE(tokenId, INVALID_TOKENID);
153     EXPECT_EQ(0, SetSelfTokenID(tokenIdEx.tokenIDEx));  // set self hap token
154 
155     AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkId_, g_testTokenId);
156     EXPECT_EQ(mapID, 0);
157 
158     EXPECT_EQ(RET_SUCCESS, TestCommon::DeleteTestHapToken(tokenId));
159 }
160 
161 /**
162  * @tc.name: AllocLocalTokenIDFuncTest002
163  * @tc.desc: get already mapping tokenInfo, makesure ipc right, by native token(permission pass)
164  * @tc.type: FUNC
165  * @tc.require:issue I5R4UF
166  */
167 HWTEST_F(AllocLocalTokenIDTest, AllocLocalTokenIDFuncTest002, TestSize.Level1)
168 {
169     LOGI(ATM_DOMAIN, ATM_TAG, "AllocLocalTokenIDFuncTest002 start.");
170     MockNativeToken mock("token_sync_service");
171     std::string deviceID1 = udid_;
172     AccessTokenKit::DeleteRemoteToken(deviceID1, g_testTokenId);
173     PermissionStatus infoManagerTestState_1 = {
174         .permissionName = "ohos.permission.test1",
175         .grantStatus = PermissionState::PERMISSION_GRANTED,
176         .grantFlag = PermissionFlag::PERMISSION_USER_SET};
177     std::vector<PermissionStatus> permStateList1;
178     permStateList1.emplace_back(infoManagerTestState_1);
179 
180     HapTokenInfoForSync remoteTokenInfo1 = {
181         .baseInfo = g_baseInfo,
182         .permStateList = permStateList1
183     };
184 
185     int ret = AccessTokenKit::SetRemoteHapTokenInfo(deviceID1, remoteTokenInfo1);
186     ASSERT_EQ(ret, RET_SUCCESS);
187 
188     AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkId_, g_testTokenId);
189     ASSERT_NE(mapID, 0);
190 }
191 #endif