• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 "permission_manager_test.h"
17 
18 #include "string_ex.h"
19 
20 #include "accesstoken_kit.h"
21 #include "hilog/log.h"
22 #include "nativetoken_kit.h"
23 #include "ipc_skeleton.h"
24 #include "system_ability_definition.h"
25 #include "token_setproc.h"
26 
27 #include "location_log.h"
28 #include "location_sa_load_manager.h"
29 #include "permission_manager.h"
30 
31 using namespace testing::ext;
32 namespace OHOS {
33 namespace Location {
34 const int32_t LOCATION_PERM_NUM = 4;
35 const int32_t APPOXI_LOCATION_PERM_NUM = 3;
36 const int32_t ACC_LOCATION_PERM_NUM = 3;
SetUp()37 void PermissionManagerTest::SetUp()
38 {
39 }
40 
TearDown()41 void PermissionManagerTest::TearDown()
42 {
43 }
44 
MockNativePermission()45 void PermissionManagerTest::MockNativePermission()
46 {
47     const char *perms[] = {
48         ACCESS_LOCATION.c_str(), ACCESS_APPROXIMATELY_LOCATION.c_str(),
49         ACCESS_BACKGROUND_LOCATION.c_str(), MANAGE_SECURE_SETTINGS.c_str(),
50     };
51     NativeTokenInfoParams infoInstance = {
52         .dcapsNum = 0,
53         .permsNum = LOCATION_PERM_NUM,
54         .aclsNum = 0,
55         .dcaps = nullptr,
56         .perms = perms,
57         .acls = nullptr,
58         .processName = "PermissionManagerTest1",
59         .aplStr = "system_basic",
60     };
61     tokenId_ = GetAccessTokenId(&infoInstance);
62     SetSelfTokenID(tokenId_);
63     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
64 }
65 
MockNativeApproxiPermission()66 void PermissionManagerTest::MockNativeApproxiPermission()
67 {
68     const char *perms[] = {
69         ACCESS_APPROXIMATELY_LOCATION.c_str(), ACCESS_BACKGROUND_LOCATION.c_str(),
70         MANAGE_SECURE_SETTINGS.c_str(),
71     };
72     NativeTokenInfoParams infoInstance = {
73         .dcapsNum = 0,
74         .permsNum = APPOXI_LOCATION_PERM_NUM,
75         .aclsNum = 0,
76         .dcaps = nullptr,
77         .perms = perms,
78         .acls = nullptr,
79         .processName = "PermissionManagerTest2",
80         .aplStr = "system_basic",
81     };
82     tokenIdForApproxi_ = GetAccessTokenId(&infoInstance);
83     SetSelfTokenID(tokenIdForApproxi_);
84     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
85 }
86 
MockNativeAccurateLocation()87 void PermissionManagerTest::MockNativeAccurateLocation()
88 {
89     const char *perms[] = {
90         ACCESS_LOCATION.c_str(), ACCESS_BACKGROUND_LOCATION.c_str(),
91         MANAGE_SECURE_SETTINGS.c_str(),
92     };
93     NativeTokenInfoParams infoInstance = {
94         .dcapsNum = 0,
95         .permsNum = ACC_LOCATION_PERM_NUM,
96         .aclsNum = 0,
97         .dcaps = nullptr,
98         .perms = perms,
99         .acls = nullptr,
100         .processName = "PermissionManagerTest3",
101         .aplStr = "system_basic",
102     };
103     tokenIdForAcc_ = GetAccessTokenId(&infoInstance);
104     SetSelfTokenID(tokenIdForAcc_);
105     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
106 }
107 
108 HWTEST_F(PermissionManagerTest, GetRemoteObjectTest002, TestSize.Level1)
109 {
110     GTEST_LOG_(INFO)
111         << "PermissionManagerTest, GetRemoteObjectTest002, TestSize.Level1";
112     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetRemoteObjectTest002 begin");
113     uint32_t invalidTokenId = 0;
114     uint32_t firstTokenId = 0;
115     // invalid type
116     EXPECT_EQ(false, PermissionManager::CheckLocationPermission(invalidTokenId, firstTokenId));
117     EXPECT_EQ(false, PermissionManager::CheckApproximatelyPermission(invalidTokenId, firstTokenId));
118     EXPECT_EQ(false, PermissionManager::CheckBackgroundPermission(invalidTokenId, firstTokenId));
119     EXPECT_EQ(false, PermissionManager::CheckSecureSettings(invalidTokenId, firstTokenId));
120 
121     MockNativePermission(); // grant the location permissions
122     uint32_t tokenId = static_cast<uint32_t>(tokenId_);
123     PermissionManager::CheckLocationPermission(tokenId, 0);
124     EXPECT_EQ(true, PermissionManager::CheckApproximatelyPermission(tokenId, 0));
125     EXPECT_EQ(true, PermissionManager::CheckBackgroundPermission(tokenId, 0));
126     EXPECT_EQ(true, PermissionManager::CheckSecureSettings(tokenId, 0));
127 
128     // invalid first token id
129     EXPECT_EQ(false, PermissionManager::CheckLocationPermission(tokenId, 1));
130     EXPECT_EQ(false, PermissionManager::CheckApproximatelyPermission(tokenId, 1));
131     EXPECT_EQ(false, PermissionManager::CheckBackgroundPermission(tokenId, 1));
132     EXPECT_EQ(false, PermissionManager::CheckSecureSettings(tokenId, 1));
133 
134     // valid token id and first token id
135     EXPECT_EQ(true, PermissionManager::CheckLocationPermission(tokenId, tokenId));
136     EXPECT_EQ(true, PermissionManager::CheckApproximatelyPermission(tokenId, tokenId));
137     EXPECT_EQ(true, PermissionManager::CheckBackgroundPermission(tokenId, tokenId));
138     EXPECT_EQ(true, PermissionManager::CheckSecureSettings(tokenId, tokenId));
139     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetRemoteObjectTest002 end");
140 }
141 
142 HWTEST_F(PermissionManagerTest, GetPermissionLevelTest001, TestSize.Level1)
143 {
144     GTEST_LOG_(INFO)
145         << "PermissionManagerTest, GetPermissionLevelTest001, TestSize.Level1";
146     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetPermissionLevelTest001 begin");
147     EXPECT_EQ(PERMISSION_INVALID, PermissionManager::GetPermissionLevel(0, 0));
148     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetPermissionLevelTest001 end");
149 }
150 
151 HWTEST_F(PermissionManagerTest, GetPermissionLevelTest002, TestSize.Level1)
152 {
153     GTEST_LOG_(INFO)
154         << "PermissionManagerTest, GetPermissionLevelTest002, TestSize.Level1";
155     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetPermissionLevelTest002 begin");
156     MockNativePermission();
157     PermissionManager::GetPermissionLevel(tokenId_, 0);
158     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetPermissionLevelTest002 end");
159 }
160 
161 HWTEST_F(PermissionManagerTest, GetPermissionLevelTest003, TestSize.Level1)
162 {
163     GTEST_LOG_(INFO)
164         << "PermissionManagerTest, GetPermissionLevelTest003, TestSize.Level1";
165     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetPermissionLevelTest003 begin");
166     MockNativeAccurateLocation();
167     PermissionManager::GetPermissionLevel(tokenIdForAcc_, 0);
168     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetPermissionLevelTest003 end");
169 }
170 
171 HWTEST_F(PermissionManagerTest, GetPermissionLevelTest004, TestSize.Level1)
172 {
173     GTEST_LOG_(INFO)
174         << "PermissionManagerTest, GetPermissionLevelTest004, TestSize.Level1";
175     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetPermissionLevelTest004 begin");
176     MockNativeApproxiPermission();
177     PermissionManager::GetPermissionLevel(tokenIdForApproxi_, 0);
178     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] GetPermissionLevelTest004 end");
179 }
180 
181 HWTEST_F(PermissionManagerTest, CheckSystemPermissionTest001, TestSize.Level1)
182 {
183     GTEST_LOG_(INFO)
184         << "PermissionManagerTest, CheckSystemPermissionTest001, TestSize.Level1";
185     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] CheckSystemPermissionTest001 begin");
186     EXPECT_EQ(false, PermissionManager::CheckSystemPermission(0, 1));
187     MockNativePermission();
188     EXPECT_EQ(true, PermissionManager::CheckSystemPermission(tokenId_, 1));
189     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] CheckSystemPermissionTest001 end");
190 }
191 
192 HWTEST_F(PermissionManagerTest, CheckCallingPermissionTest001, TestSize.Level1)
193 {
194     GTEST_LOG_(INFO)
195         << "PermissionManagerTest, CheckCallingPermissionTest001, TestSize.Level1";
196     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] CheckCallingPermissionTest001 begin");
197     pid_t uid = 8888;
198     pid_t pid = 8888;
199     MessageParcel reply;
200     EXPECT_EQ(false, PermissionManager::CheckCallingPermission(uid, pid, reply));
201     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] CheckCallingPermissionTest001 end");
202 }
203 
204 HWTEST_F(PermissionManagerTest, CheckRssProcessName001, TestSize.Level1)
205 {
206     uint32_t invalidTokenId = 0;
207     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] CheckRssProcessName001 begin");
208     EXPECT_EQ(false, PermissionManager::CheckRssProcessName(invalidTokenId));
209     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] CheckRssProcessName001 end");
210 }
211 
212 HWTEST_F(PermissionManagerTest, CheckMockLocationPermissionTest001, TestSize.Level1)
213 {
214     GTEST_LOG_(INFO)
215         << "PermissionManagerTest, CheckMockLocationPermissionTest001, TestSize.Level1";
216     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] CheckMockLocationPermissionTest001 begin");
217     uint32_t invalidTokenId = 0;
218     uint32_t firstTokenId = 0;
219     EXPECT_EQ(false, PermissionManager::CheckMockLocationPermission(invalidTokenId, firstTokenId));
220     LBSLOGI(COMMON_UTILS, "[PermissionManagerTest] CheckMockLocationPermissionTest001 end");
221 }
222 } // namespace Location
223 } // namespace OHOS
224