• 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 "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