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