• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-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 "UTTest_permission_manager.h"
17 #include "accesstoken_kit.h"
18 #include "nativetoken_kit.h"
19 #include "token_setproc.h"
20 #include "access_token.h"
21 
22 using namespace testing;
23 using namespace testing::ext;
24 namespace OHOS {
25 namespace DistributedHardware {
SetUp()26 void PermissionManagerTest::SetUp()
27 {
28     const int32_t permsNum = 2;
29     const int32_t indexZero = 0;
30     const int32_t indexOne = 1;
31     uint64_t tokenId;
32     const char *perms[permsNum];
33     perms[indexZero] = "ohos.permission.ACCESS_SERVICE_DM";
34     perms[indexOne] = "ohos.permission.DISTRIBUTED_DATASYNC";
35     NativeTokenInfoParams infoInstance = {
36         .dcapsNum = 0,
37         .permsNum = permsNum,
38         .aclsNum = 0,
39         .dcaps = NULL,
40         .perms = perms,
41         .acls = NULL,
42         .processName = "dsoftbus_service",
43         .aplStr = "system_core",
44     };
45     tokenId = GetAccessTokenId(&infoInstance);
46     SetSelfTokenID(tokenId);
47     OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
48 }
49 constexpr int32_t PAKAGE_NAME_SIZE_MAX = 256;
50 
51 #define SYSTEM_SA_WHITE_LIST_NUM (4)
52 constexpr const static char SYSTEM_SA_WHITE_LIST[SYSTEM_SA_WHITE_LIST_NUM][PAKAGE_NAME_SIZE_MAX] = {
53     "Samgr_Networking",
54     "ohos.distributeddata.service",
55     "ohos.dslm",
56     "ohos.deviceprofile",
57 };
58 
TearDown()59 void PermissionManagerTest::TearDown()
60 {
61 }
62 
SetUpTestCase()63 void PermissionManagerTest::SetUpTestCase()
64 {
65     DMIPCSkeleton::dmIpcSkeleton_ = ipcSkeletonMock_;
66     DmAccessTokenKit::accessToken_ = accessTokenKitMock_;
67 }
68 
TearDownTestCase()69 void PermissionManagerTest::TearDownTestCase()
70 {
71     DMIPCSkeleton::dmIpcSkeleton_ = nullptr;
72     ipcSkeletonMock_ = nullptr;
73     DmAccessTokenKit::accessToken_ = nullptr;
74     accessTokenKitMock_ = nullptr;
75 }
76 
77 namespace {
78 
79 /**
80  * @tc.name: PinAuthUi::CheckPermission_001
81  * @tc.desc: the return value is true
82  * @tc.type: FUNC
83  * @tc.require: AR000GHSJK
84  */
85 HWTEST_F(PermissionManagerTest, CheckPermission_001, testing::ext::TestSize.Level0)
86 {
87     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(0));
88     bool ret = PermissionManager::GetInstance().CheckPermission();
89     ASSERT_FALSE(ret);
90 
91     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(10));
92     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_TYPE_BUTT));
93     ret = PermissionManager::GetInstance().CheckPermission();
94     ASSERT_TRUE(ret);
95 
96     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(10));
97     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_HAP));
98     EXPECT_CALL(*accessTokenKitMock_, VerifyAccessToken(_, _))
99         .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_DENIED));
100     ret = PermissionManager::GetInstance().CheckPermission();
101     ASSERT_FALSE(ret);
102 
103     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(10));
104     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_HAP));
105     EXPECT_CALL(*accessTokenKitMock_, VerifyAccessToken(_, _))
106         .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_GRANTED));
107     ret = PermissionManager::GetInstance().CheckPermission();
108     ASSERT_TRUE(ret);
109 }
110 
111 /**
112  * @tc.name: PinAuthUi::CheckWhiteListSystemSA_001
113  * @tc.desc: the return value is false
114  * @tc.type:FUNC
115  * @tc.require: AR000GHSJK
116 */
117 HWTEST_F(PermissionManagerTest, CheckWhiteListSystemSA_001, testing::ext::TestSize.Level0)
118 {
119     std::string pkgName;
120     bool ret = PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName);
121     ASSERT_EQ(ret, false);
122     pkgName = "pkgName";
123     ret = PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName);
124     ASSERT_EQ(ret, false);
125 }
126 
127 /**
128  * @tc.name: PinAuthUi::CheckWhiteListSystemSA_002
129  * @tc.desc: the return value is true
130  * @tc.type:FUNC
131  * @tc.require: AR000GHSJK
132 */
133 HWTEST_F(PermissionManagerTest, CheckWhiteListSystemSA_002, testing::ext::TestSize.Level0)
134 {
135     std::string pkgName1(SYSTEM_SA_WHITE_LIST[0]);
136     bool ret = PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName1);
137     ASSERT_EQ(ret, true);
138     std::string pkgName2(SYSTEM_SA_WHITE_LIST[1]);
139     ret = PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName2);
140     ASSERT_EQ(ret, true);
141     std::string pkgName3(SYSTEM_SA_WHITE_LIST[2]);
142     ret = PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName3);
143     ASSERT_EQ(ret, true);
144     std::string pkgName4(SYSTEM_SA_WHITE_LIST[3]);
145     ret = PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName4);
146     ASSERT_EQ(ret, true);
147 }
148 
149 HWTEST_F(PermissionManagerTest, CheckWhiteListSystemSA_101, testing::ext::TestSize.Level0)
150 {
151     std::string pkgName = "pkgName";
152     bool ret = PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName);
153     ASSERT_FALSE(ret);
154 }
155 
156 HWTEST_F(PermissionManagerTest, CheckWhiteListSystemSA_102, testing::ext::TestSize.Level0)
157 {
158     std::string pkgName = "ohos.dhardware";
159     bool ret = PermissionManager::GetInstance().CheckWhiteListSystemSA(pkgName);
160     ASSERT_TRUE(ret);
161 }
162 
163 HWTEST_F(PermissionManagerTest, CheckMonitorPermission_001, testing::ext::TestSize.Level0)
164 {
165     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(0));
166     bool ret = PermissionManager::GetInstance().CheckMonitorPermission();
167     ASSERT_FALSE(ret);
168 
169     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
170     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_TYPE_BUTT));
171     ret = PermissionManager::GetInstance().CheckMonitorPermission();
172     ASSERT_TRUE(ret);
173 
174     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
175     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_NATIVE));
176     EXPECT_CALL(*accessTokenKitMock_, VerifyAccessToken(_, _))
177         .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_DENIED));
178     ret = PermissionManager::GetInstance().CheckMonitorPermission();
179     ASSERT_FALSE(ret);
180 
181     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
182     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_NATIVE));
183     EXPECT_CALL(*accessTokenKitMock_, VerifyAccessToken(_, _))
184         .WillOnce(Return(Security::AccessToken::PermissionState::PERMISSION_GRANTED));
185     ret = PermissionManager::GetInstance().CheckMonitorPermission();
186     ASSERT_TRUE(ret);
187 }
188 
189 HWTEST_F(PermissionManagerTest, GetWhiteListSystemSA_001, testing::ext::TestSize.Level0)
190 {
191     auto ret = PermissionManager::GetInstance().GetWhiteListSystemSA();
192     ASSERT_FALSE(ret.empty());
193 }
194 
195 HWTEST_F(PermissionManagerTest, CheckSystemSA_001, testing::ext::TestSize.Level0)
196 {
197     std::string pkgName = "pkgName";
198     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(0));
199     bool ret = PermissionManager::GetInstance().CheckSystemSA(pkgName);
200     ASSERT_FALSE(ret);
201 
202     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
203     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_NATIVE));
204     ret = PermissionManager::GetInstance().CheckSystemSA(pkgName);
205     ASSERT_TRUE(ret);
206 
207     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1002));
208     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_TYPE_BUTT));
209     ret = PermissionManager::GetInstance().CheckSystemSA(pkgName);
210     ASSERT_FALSE(ret);
211 }
212 
213 HWTEST_F(PermissionManagerTest, GetCallerProcessName_002, testing::ext::TestSize.Level0)
214 {
215     std::string processName;
216     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(0));
217     int32_t ret = PermissionManager::GetInstance().GetCallerProcessName(processName);
218     ASSERT_EQ(ret, ERR_DM_FAILED);
219 
220     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
221     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_HAP));
222     EXPECT_CALL(*accessTokenKitMock_, GetHapTokenInfo(_, _)).WillOnce(Return(ERR_DM_FAILED));
223     ret = PermissionManager::GetInstance().GetCallerProcessName(processName);
224     ASSERT_EQ(ret, ERR_DM_FAILED);
225 
226     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
227     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_HAP));
228     EXPECT_CALL(*accessTokenKitMock_, GetHapTokenInfo(_, _)).WillOnce(Return(DM_OK));
229     ret = PermissionManager::GetInstance().GetCallerProcessName(processName);
230     ASSERT_EQ(ret, ERR_DM_FAILED);
231 
232     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
233     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_NATIVE));
234     EXPECT_CALL(*accessTokenKitMock_, GetNativeTokenInfo(_, _)).WillOnce(Return(ERR_DM_FAILED));
235     ret = PermissionManager::GetInstance().GetCallerProcessName(processName);
236     ASSERT_EQ(ret, ERR_DM_FAILED);
237 
238     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
239     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_NATIVE));
240     EXPECT_CALL(*accessTokenKitMock_, GetNativeTokenInfo(_, _)).WillOnce(Return(DM_OK));
241     ret = PermissionManager::GetInstance().GetCallerProcessName(processName);
242     ASSERT_EQ(ret, DM_OK);
243 
244     EXPECT_CALL(*ipcSkeletonMock_, GetCallingTokenID()).WillOnce(Return(1001));
245     EXPECT_CALL(*accessTokenKitMock_, GetTokenTypeFlag(_)).WillOnce(Return(ATokenTypeEnum::TOKEN_TYPE_BUTT));
246     ret = PermissionManager::GetInstance().GetCallerProcessName(processName);
247     ASSERT_EQ(ret, ERR_DM_FAILED);
248 }
249 
250 HWTEST_F(PermissionManagerTest, CheckProcessNameValidOnGetDeviceInfo_001, testing::ext::TestSize.Level0)
251 {
252     std::string processName = "";
253     auto ret = PermissionManager::GetInstance().CheckProcessNameValidOnGetDeviceInfo(processName);
254     ASSERT_FALSE(ret);
255 
256     processName = "processName";
257     ret = PermissionManager::GetInstance().CheckProcessNameValidOnGetDeviceInfo(processName);
258     ASSERT_FALSE(ret);
259 
260     processName = "gameservice_server";
261     ret = PermissionManager::GetInstance().CheckProcessNameValidOnGetDeviceInfo(processName);
262     ASSERT_TRUE(ret);
263 }
264 }
265 } // namespace DistributedHardware
266 } // namespace OHOS