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 "delete_remote_device_tokens_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 #include "test_common.h"
26
27 using namespace testing::ext;
28 using namespace OHOS::Security::AccessToken;
29
30 namespace {
31 static const std::string TEST_BUNDLE_NAME = "ohos";
32 static const std::string TEST_PKG_NAME = "com.softbus.test";
33 static uint64_t g_selfTokenId = 0;
34 static AccessTokenID g_testTokenId1 = 0x20100000;
35 static AccessTokenID g_testTokenId2 = 0x20100001;
36
37 HapTokenInfo g_baseInfo = {
38 .ver = 1,
39 .userID = 1,
40 .bundleName = "com.ohos.access_token",
41 .instIndex = 1,
42 .tokenID = g_testTokenId1,
43 .tokenAttr = 0
44 };
45
46 #ifdef TOKEN_SYNC_ENABLE
47 static const int32_t FAKE_SYNC_RET = 0xabcdef;
48 class TokenSyncCallbackImpl : public TokenSyncKitInterface {
49 public:
~TokenSyncCallbackImpl()50 ~TokenSyncCallbackImpl()
51 {}
52
GetRemoteHapTokenInfo(const std::string & deviceID,AccessTokenID tokenID) const53 int32_t GetRemoteHapTokenInfo(const std::string& deviceID, AccessTokenID tokenID) const override
54 {
55 LOGI(ATM_DOMAIN, ATM_TAG, "GetRemoteHapTokenInfo called.");
56 return FAKE_SYNC_RET;
57 };
58
DeleteRemoteHapTokenInfo(AccessTokenID tokenID) const59 int32_t DeleteRemoteHapTokenInfo(AccessTokenID tokenID) const override
60 {
61 LOGI(ATM_DOMAIN, ATM_TAG, "DeleteRemoteHapTokenInfo called.");
62 return FAKE_SYNC_RET;
63 };
64
UpdateRemoteHapTokenInfo(const HapTokenInfoForSync & tokenInfo) const65 int32_t UpdateRemoteHapTokenInfo(const HapTokenInfoForSync& tokenInfo) const override
66 {
67 LOGI(ATM_DOMAIN, ATM_TAG, "UpdateRemoteHapTokenInfo called.");
68 return FAKE_SYNC_RET;
69 };
70 };
71 #endif
72 }
73
SetUpTestCase()74 void DeleteRemoteDeviceTokensTest::SetUpTestCase()
75 {
76 g_selfTokenId = GetSelfTokenID();
77 TestCommon::SetTestEvironment(g_selfTokenId);
78
79 #ifdef TOKEN_SYNC_ENABLE
80 {
81 MockNativeToken mock("foundation");
82 std::shared_ptr<TestDmInitCallback> ptrDmInitCallback = std::make_shared<TestDmInitCallback>();
83 int32_t res =
84 DistributedHardware::DeviceManager::GetInstance().InitDeviceManager(TEST_PKG_NAME, ptrDmInitCallback);
85 ASSERT_EQ(res, RET_SUCCESS);
86 }
87 #endif
88 }
89
TearDownTestCase()90 void DeleteRemoteDeviceTokensTest::TearDownTestCase()
91 {
92 #ifdef TOKEN_SYNC_ENABLE
93 {
94 MockNativeToken mock("foundation");
95 int32_t res = DistributedHardware::DeviceManager::GetInstance().UnInitDeviceManager(TEST_PKG_NAME);
96 ASSERT_EQ(res, RET_SUCCESS);
97 }
98 #endif
99 EXPECT_EQ(0, SetSelfTokenID(g_selfTokenId));
100 TestCommon::ResetTestEvironment();
101 }
102
SetUp()103 void DeleteRemoteDeviceTokensTest::SetUp()
104 {
105 #ifdef TOKEN_SYNC_ENABLE
106 MockNativeToken mock("foundation");
107 DistributedHardware::DmDeviceInfo deviceInfo;
108 int32_t res = DistributedHardware::DeviceManager::GetInstance().GetLocalDeviceInfo(TEST_PKG_NAME, deviceInfo);
109 ASSERT_EQ(res, RET_SUCCESS);
110
111 networkId_ = std::string(deviceInfo.networkId);
112 ASSERT_NE(networkId_, "");
113
114 res = DistributedHardware::DeviceManager::GetInstance().GetUdidByNetworkId(TEST_PKG_NAME, networkId_, udid_);
115 ASSERT_EQ(res, RET_SUCCESS);
116 ASSERT_NE(udid_, "");
117 #endif
118 LOGI(ATM_DOMAIN, ATM_TAG, "SetUp ok.");
119 }
120
TearDown()121 void DeleteRemoteDeviceTokensTest::TearDown()
122 {
123 udid_.clear();
124 networkId_.clear();
125 }
126
127 #ifdef TOKEN_SYNC_ENABLE
128 /**
129 * @tc.name: DeleteRemoteDeviceTokensFuncTest001
130 * @tc.desc: delete all mapping tokens of exist device
131 * @tc.type: FUNC
132 * @tc.require:issue I5R4UF
133 */
134 HWTEST_F(DeleteRemoteDeviceTokensTest, DeleteRemoteDeviceTokensFuncTest001, TestSize.Level0)
135 {
136 MockNativeToken mock("token_sync_service");
137 LOGI(ATM_DOMAIN, ATM_TAG, "DeleteRemoteDeviceTokensFuncTest001 start.");
138 std::string deviceID1 = udid_;
139 AccessTokenKit::DeleteRemoteToken(deviceID1, g_testTokenId1);
140 AccessTokenKit::DeleteRemoteToken(deviceID1, g_testTokenId2);
141 PermissionStatus infoManagerTestState4 = {
142 .permissionName = "ohos.permission.test1",
143 .grantStatus = PermissionState::PERMISSION_GRANTED,
144 .grantFlag = PermissionFlag::PERMISSION_USER_SET};
145 std::vector<PermissionStatus> permStateList1;
146 permStateList1.emplace_back(infoManagerTestState4);
147
148 HapTokenInfoForSync remoteTokenInfo1 = {
149 .baseInfo = g_baseInfo,
150 .permStateList = permStateList1
151 };
152
153 int ret = AccessTokenKit::SetRemoteHapTokenInfo(deviceID1, remoteTokenInfo1);
154 ASSERT_EQ(ret, RET_SUCCESS);
155
156 HapTokenInfoForSync remoteTokenInfo2 = remoteTokenInfo1;
157 remoteTokenInfo2.baseInfo.tokenID = g_testTokenId2;
158 remoteTokenInfo2.baseInfo.bundleName = "com.ohos.access_token1";
159 ret = AccessTokenKit::SetRemoteHapTokenInfo(deviceID1, remoteTokenInfo2);
160 ASSERT_EQ(ret, RET_SUCCESS);
161
162 AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkId_, g_testTokenId1);
163 ASSERT_NE(mapID, 0);
164 AccessTokenID mapID1 = AccessTokenKit::AllocLocalTokenID(networkId_, g_testTokenId2);
165 ASSERT_NE(mapID1, 0);
166
167 ret = AccessTokenKit::DeleteRemoteDeviceTokens(deviceID1);
168 ASSERT_EQ(ret, RET_SUCCESS);
169
170 HapTokenInfo info;
171 ret = AccessTokenKit::GetHapTokenInfo(mapID, info);
172 ASSERT_NE(ret, RET_SUCCESS);
173 ret = AccessTokenKit::GetHapTokenInfo(mapID1, info);
174 ASSERT_NE(ret, RET_SUCCESS);
175 }
176
177 /**
178 * @tc.name: DeleteRemoteDeviceTokensFuncTest002
179 * @tc.desc: delete all mapping tokens of NOT exist device
180 * @tc.type: FUNC
181 * @tc.require:issue I5R4UF
182 */
183 HWTEST_F(DeleteRemoteDeviceTokensTest, DeleteRemoteDeviceTokensFuncTest002, TestSize.Level0)
184 {
185 MockNativeToken mock("token_sync_service");
186 LOGI(ATM_DOMAIN, ATM_TAG, "DeleteRemoteDeviceTokensFuncTest002 start.");
187 std::string deviceID2 = udid_;
188 AccessTokenKit::DeleteRemoteToken(deviceID2, g_testTokenId1);
189 AccessTokenKit::DeleteRemoteToken(deviceID2, g_testTokenId2);
190 PermissionStatus infoManagerTestState2 = {
191 .permissionName = "ohos.permission.test1",
192 .grantStatus = PermissionState::PERMISSION_GRANTED,
193 .grantFlag = PermissionFlag::PERMISSION_USER_SET};
194 std::vector<PermissionStatus> permStateList2;
195 permStateList2.emplace_back(infoManagerTestState2);
196
197 HapTokenInfoForSync remoteTokenInfo2 = {
198 .baseInfo = g_baseInfo,
199 .permStateList = permStateList2
200 };
201
202 int ret = AccessTokenKit::SetRemoteHapTokenInfo(deviceID2, remoteTokenInfo2);
203 ASSERT_EQ(ret, RET_SUCCESS);
204
205 HapTokenInfoForSync remoteTokenInfo1 = remoteTokenInfo2;
206 remoteTokenInfo1.baseInfo.tokenID = g_testTokenId2;
207 remoteTokenInfo1.baseInfo.bundleName = "com.ohos.access_token1";
208 ret = AccessTokenKit::SetRemoteHapTokenInfo(deviceID2, remoteTokenInfo1);
209 ASSERT_EQ(ret, RET_SUCCESS);
210
211 AccessTokenID mapID = AccessTokenKit::AllocLocalTokenID(networkId_, g_testTokenId1);
212 ASSERT_NE(mapID, 0);
213 AccessTokenID mapID1 = AccessTokenKit::AllocLocalTokenID(networkId_, g_testTokenId2);
214 ASSERT_NE(mapID1, 0);
215
216 ret = AccessTokenKit::DeleteRemoteDeviceTokens("1111111");
217 ASSERT_NE(ret, RET_SUCCESS);
218
219 AccessTokenKit::DeleteRemoteToken(deviceID2, g_testTokenId1);
220 AccessTokenKit::DeleteRemoteToken(deviceID2, g_testTokenId2);
221 }
222
223 /**
224 * @tc.name: DeleteRemoteDeviceTokensAbnormalTest001
225 * @tc.desc: call DeleteRemoteDeviceTokens with other native process(not accesstoken uid, permission denied)
226 * @tc.type: FUNC
227 * @tc.require:
228 */
229 HWTEST_F(DeleteRemoteDeviceTokensTest, DeleteRemoteDeviceTokensAbnormalTest001, TestSize.Level0)
230 {
231 LOGI(ATM_DOMAIN, ATM_TAG, "DeleteRemoteDeviceTokensAbnormalTest001 start.");
232 SetSelfTokenID(g_selfTokenId);
233 std::string device = "device";
234 ASSERT_EQ(AccessTokenError::ERR_PERMISSION_DENIED, AccessTokenKit::DeleteRemoteDeviceTokens(device));
235 }
236 #endif