• 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 "common_utils_test.h"
17 
18 #include <singleton.h>
19 #include "string_ex.h"
20 
21 #include "accesstoken_kit.h"
22 #include "hilog/log.h"
23 #include "nativetoken_kit.h"
24 #include "ipc_skeleton.h"
25 #include "system_ability_definition.h"
26 #include "token_setproc.h"
27 
28 #include "common_utils.h"
29 #include "location_log.h"
30 #include "location_sa_load_manager.h"
31 
32 using namespace testing::ext;
33 namespace OHOS {
34 namespace Location {
35 const int32_t LOCATION_PERM_NUM = 4;
36 const int32_t APPOXI_LOCATION_PERM_NUM = 3;
37 const int32_t ACC_LOCATION_PERM_NUM = 3;
38 const int UNKNOWN_SA_ID = -1;
39 const uint32_t CAPABILITY = 0x102;
40 const double NUM_ACC_E6 = 1.000001;
41 const double NUM_ACC_E7 = 1.0000001;
SetUp()42 void CommonUtilsTest::SetUp()
43 {
44     LoadSystemAbility();
45 }
46 
TearDown()47 void CommonUtilsTest::TearDown()
48 {
49 }
50 
MockNativePermission()51 void CommonUtilsTest::MockNativePermission()
52 {
53     const char *perms[] = {
54         ACCESS_LOCATION.c_str(), ACCESS_APPROXIMATELY_LOCATION.c_str(),
55         ACCESS_BACKGROUND_LOCATION.c_str(), MANAGE_SECURE_SETTINGS.c_str(),
56     };
57     NativeTokenInfoParams infoInstance = {
58         .dcapsNum = 0,
59         .permsNum = LOCATION_PERM_NUM,
60         .aclsNum = 0,
61         .dcaps = nullptr,
62         .perms = perms,
63         .acls = nullptr,
64         .processName = "CommonTest",
65         .aplStr = "system_basic",
66     };
67     tokenId_ = GetAccessTokenId(&infoInstance);
68     SetSelfTokenID(tokenId_);
69     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
70 }
71 
MockNativeApproxiPermission()72 void CommonUtilsTest::MockNativeApproxiPermission()
73 {
74     const char *perms[] = {
75         ACCESS_APPROXIMATELY_LOCATION.c_str(), ACCESS_BACKGROUND_LOCATION.c_str(),
76         MANAGE_SECURE_SETTINGS.c_str(),
77     };
78     NativeTokenInfoParams infoInstance = {
79         .dcapsNum = 0,
80         .permsNum = APPOXI_LOCATION_PERM_NUM,
81         .aclsNum = 0,
82         .dcaps = nullptr,
83         .perms = perms,
84         .acls = nullptr,
85         .processName = "CommonTest",
86         .aplStr = "system_basic",
87     };
88     tokenIdForApproxi_ = GetAccessTokenId(&infoInstance);
89     SetSelfTokenID(tokenIdForApproxi_);
90     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
91 }
92 
MockNativeAccurateLocation()93 void CommonUtilsTest::MockNativeAccurateLocation()
94 {
95     const char *perms[] = {
96         ACCESS_LOCATION.c_str(), ACCESS_BACKGROUND_LOCATION.c_str(),
97         MANAGE_SECURE_SETTINGS.c_str(),
98     };
99     NativeTokenInfoParams infoInstance = {
100         .dcapsNum = 0,
101         .permsNum = ACC_LOCATION_PERM_NUM,
102         .aclsNum = 0,
103         .dcaps = nullptr,
104         .perms = perms,
105         .acls = nullptr,
106         .processName = "CommonTest",
107         .aplStr = "system_basic",
108     };
109     tokenIdForAcc_ = GetAccessTokenId(&infoInstance);
110     SetSelfTokenID(tokenIdForAcc_);
111     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
112 }
113 
LoadSystemAbility()114 void CommonUtilsTest::LoadSystemAbility()
115 {
116     auto locationSaLoadManager = DelayedSingleton<LocationSaLoadManager>::GetInstance();
117     if (locationSaLoadManager == nullptr) {
118         return;
119     }
120     locationSaLoadManager->LoadLocationSa(LOCATION_LOCATOR_SA_ID);
121 #ifdef FEATURE_GNSS_SUPPORT
122     locationSaLoadManager->LoadLocationSa(LOCATION_GNSS_SA_ID);
123 #endif
124 #ifdef FEATURE_PASSIVE_SUPPORT
125     locationSaLoadManager->LoadLocationSa(LOCATION_NOPOWER_LOCATING_SA_ID);
126 #endif
127 #ifdef FEATURE_NETWORK_SUPPORT
128     locationSaLoadManager->LoadLocationSa(LOCATION_NETWORK_LOCATING_SA_ID);
129 #endif
130 #ifdef FEATURE_GEOCODE_SUPPORT
131     locationSaLoadManager->LoadLocationSa(LOCATION_GEO_CONVERT_SA_ID);
132 #endif
133 }
134 
135 HWTEST_F(CommonUtilsTest, AbilityConvertToIdTest001, TestSize.Level1)
136 {
137     GTEST_LOG_(INFO)
138         << "CommonUtilsTest, AbilityConvertToIdTest001, TestSize.Level1";
139     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] AbilityConvertToIdTest001 begin");
140     EXPECT_EQ(LOCATION_GNSS_SA_ID, CommonUtils::AbilityConvertToId(GNSS_ABILITY));
141     EXPECT_EQ(LOCATION_NETWORK_LOCATING_SA_ID, CommonUtils::AbilityConvertToId(NETWORK_ABILITY));
142     EXPECT_EQ(LOCATION_NOPOWER_LOCATING_SA_ID, CommonUtils::AbilityConvertToId(PASSIVE_ABILITY));
143     EXPECT_EQ(LOCATION_GEO_CONVERT_SA_ID, CommonUtils::AbilityConvertToId(GEO_ABILITY));
144     EXPECT_EQ(UNKNOWN_SA_ID, CommonUtils::AbilityConvertToId("unknown_ability"));
145     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] AbilityConvertToIdTest001 end");
146 }
147 
148 HWTEST_F(CommonUtilsTest, GetCapabilityTest001, TestSize.Level1)
149 {
150     GTEST_LOG_(INFO)
151         << "CommonUtilsTest, GetCapabilityTest001, TestSize.Level1";
152     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetCapabilityTest001 begin");
153     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapabilityToString("unknown_ability", CAPABILITY));
154     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapabilityToString(GNSS_ABILITY, CAPABILITY));
155     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapabilityToString(NETWORK_ABILITY, CAPABILITY));
156     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapabilityToString(PASSIVE_ABILITY, CAPABILITY));
157     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapabilityToString(GEO_ABILITY, CAPABILITY));
158 
159     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapability("unknown_ability"));
160     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapability(GNSS_ABILITY));
161     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapability(NETWORK_ABILITY));
162     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapability(PASSIVE_ABILITY));
163     EXPECT_NE(Str8ToStr16(""), CommonUtils::GetCapability(GEO_ABILITY));
164     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetCapabilityTest001 end");
165 }
166 
167 HWTEST_F(CommonUtilsTest, GetLabelTest001, TestSize.Level1)
168 {
169     GTEST_LOG_(INFO)
170         << "CommonUtilsTest, GetLabelTest001, TestSize.Level1";
171     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetLabelTest001 begin");
172     EXPECT_NE("", CommonUtils::GetLabel(GNSS_ABILITY).tag);
173     EXPECT_NE("", CommonUtils::GetLabel(NETWORK_ABILITY).tag);
174     EXPECT_NE("", CommonUtils::GetLabel(PASSIVE_ABILITY).tag);
175     EXPECT_NE("", CommonUtils::GetLabel(GEO_ABILITY).tag);
176     EXPECT_NE("", CommonUtils::GetLabel("unknown_ability").tag);
177     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetLabelTest001 end");
178 }
179 
180 HWTEST_F(CommonUtilsTest, GetRemoteObjectTest001, TestSize.Level1)
181 {
182     GTEST_LOG_(INFO)
183         << "CommonUtilsTest, GetRemoteObjectTest001, TestSize.Level1";
184     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetRemoteObjectTest001 begin");
185     // inert to map
186     EXPECT_NE(nullptr, CommonUtils::GetRemoteObject(LOCATION_GNSS_SA_ID));
187     EXPECT_NE(nullptr, CommonUtils::GetRemoteObject(LOCATION_NETWORK_LOCATING_SA_ID));
188     EXPECT_NE(nullptr, CommonUtils::GetRemoteObject(LOCATION_NOPOWER_LOCATING_SA_ID));
189     EXPECT_NE(nullptr, CommonUtils::GetRemoteObject(LOCATION_GEO_CONVERT_SA_ID));
190     EXPECT_EQ(nullptr, CommonUtils::GetRemoteObject(UNKNOWN_SA_ID));
191 
192     // read from map
193     EXPECT_NE(nullptr, CommonUtils::GetRemoteObject(LOCATION_GNSS_SA_ID));
194     EXPECT_NE(nullptr, CommonUtils::GetRemoteObject(LOCATION_NETWORK_LOCATING_SA_ID));
195     EXPECT_NE(nullptr, CommonUtils::GetRemoteObject(LOCATION_NOPOWER_LOCATING_SA_ID));
196     EXPECT_NE(nullptr, CommonUtils::GetRemoteObject(LOCATION_GEO_CONVERT_SA_ID));
197     EXPECT_EQ(nullptr, CommonUtils::GetRemoteObject(UNKNOWN_SA_ID));
198     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetRemoteObjectTest001 end");
199 }
200 
201 HWTEST_F(CommonUtilsTest, GetRemoteObjectTest002, TestSize.Level1)
202 {
203     GTEST_LOG_(INFO)
204         << "CommonUtilsTest, GetRemoteObjectTest002, TestSize.Level1";
205     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetRemoteObjectTest002 begin");
206     uint32_t invalidTokenId = 0;
207     uint32_t firstTokenId = 0;
208     // invalid type
209     EXPECT_EQ(false, CommonUtils::CheckLocationPermission(invalidTokenId, firstTokenId));
210     EXPECT_EQ(false, CommonUtils::CheckApproximatelyPermission(invalidTokenId, firstTokenId));
211     EXPECT_EQ(false, CommonUtils::CheckBackgroundPermission(invalidTokenId, firstTokenId));
212     EXPECT_EQ(false, CommonUtils::CheckSecureSettings(invalidTokenId, firstTokenId));
213 
214     // shell type
215     uint32_t callingTokenId = IPCSkeleton::GetCallingTokenID();
216     uint32_t callingFirstTokenid = IPCSkeleton::GetFirstTokenID();
217     EXPECT_EQ(false, CommonUtils::CheckLocationPermission(callingTokenId, callingFirstTokenid));
218     EXPECT_EQ(false, CommonUtils::CheckApproximatelyPermission(callingTokenId, callingFirstTokenid));
219     EXPECT_EQ(false, CommonUtils::CheckBackgroundPermission(callingTokenId, callingFirstTokenid));
220     EXPECT_EQ(false, CommonUtils::CheckSecureSettings(callingTokenId, callingFirstTokenid));
221 
222     MockNativePermission(); // grant the location permissions
223     uint32_t tokenId = static_cast<uint32_t>(tokenId_);
224     EXPECT_EQ(true, CommonUtils::CheckLocationPermission(tokenId, 0));
225     EXPECT_EQ(true, CommonUtils::CheckApproximatelyPermission(tokenId, 0));
226     EXPECT_EQ(true, CommonUtils::CheckBackgroundPermission(tokenId, 0));
227     EXPECT_EQ(true, CommonUtils::CheckSecureSettings(tokenId, 0));
228 
229     // invalid first token id
230     EXPECT_EQ(false, CommonUtils::CheckLocationPermission(tokenId, 1));
231     EXPECT_EQ(false, CommonUtils::CheckApproximatelyPermission(tokenId, 1));
232     EXPECT_EQ(false, CommonUtils::CheckBackgroundPermission(tokenId, 1));
233     EXPECT_EQ(false, CommonUtils::CheckSecureSettings(tokenId, 1));
234 
235     // valid token id and first token id
236     EXPECT_EQ(true, CommonUtils::CheckLocationPermission(tokenId, tokenId));
237     EXPECT_EQ(true, CommonUtils::CheckApproximatelyPermission(tokenId, tokenId));
238     EXPECT_EQ(true, CommonUtils::CheckBackgroundPermission(tokenId, tokenId));
239     EXPECT_EQ(true, CommonUtils::CheckSecureSettings(tokenId, tokenId));
240     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetRemoteObjectTest002 end");
241 }
242 
243 HWTEST_F(CommonUtilsTest, GetCurrentUserIdTest001, TestSize.Level1)
244 {
245     GTEST_LOG_(INFO)
246         << "CommonUtilsTest, GetCurrentUserIdTest001, TestSize.Level1";
247     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetCurrentUserIdTest001 begin");
248     int32_t userId = 0;
249     EXPECT_EQ(true, CommonUtils::GetCurrentUserId(userId));
250     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetCurrentUserIdTest001 end");
251 }
252 
253 HWTEST_F(CommonUtilsTest, Str16ToStr8Test001, TestSize.Level1)
254 {
255     GTEST_LOG_(INFO)
256         << "CommonUtilsTest, Str16ToStr8Test001, TestSize.Level1";
257     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] Str16ToStr8Test001 begin");
258     EXPECT_EQ(DEFAULT_STRING, CommonUtils::Str16ToStr8(DEFAULT_USTRING));
259     EXPECT_EQ("string16", CommonUtils::Str16ToStr8(u"string16"));
260     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] Str16ToStr8Test001 end");
261 }
262 
263 HWTEST_F(CommonUtilsTest, DoubleEqualTest001, TestSize.Level1)
264 {
265     GTEST_LOG_(INFO)
266         << "CommonUtilsTest, DoubleEqualTest001, TestSize.Level1";
267     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] DoubleEqualTest001 begin");
268     EXPECT_EQ(true, CommonUtils::DoubleEqual(1.0, 1.0));
269     EXPECT_EQ(true, CommonUtils::DoubleEqual(1.0, NUM_ACC_E7));
270     EXPECT_EQ(true, CommonUtils::DoubleEqual(1.0, NUM_ACC_E6));
271     EXPECT_EQ(false, CommonUtils::DoubleEqual(1.0, 2.0));
272     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] DoubleEqualTest001 end");
273 }
274 
275 HWTEST_F(CommonUtilsTest, CalculationTest001, TestSize.Level1)
276 {
277     GTEST_LOG_(INFO)
278         << "CommonUtilsTest, CalculationTest001, TestSize.Level1";
279     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] CalculationTest001 begin");
280     EXPECT_EQ(0, CommonUtils::CalDistance(1.0, 1.0, 1.0, 1.0));
281     EXPECT_NE(0, CommonUtils::CalDistance(1.0, 1.0, 1.0, NUM_ACC_E6));
282     EXPECT_NE(0, CommonUtils::CalDistance(1.0, 1.0, NUM_ACC_E6, 1.0));
283     EXPECT_NE(-1, CommonUtils::DoubleRandom(0.0, 1.0));
284     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] CalculationTest001 end");
285 }
286 
287 HWTEST_F(CommonUtilsTest, GetPermissionLevelTest001, TestSize.Level1)
288 {
289     GTEST_LOG_(INFO)
290         << "CommonUtilsTest, GetPermissionLevelTest001, TestSize.Level1";
291     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetPermissionLevelTest001 begin");
292     EXPECT_EQ(PERMISSION_INVALID, CommonUtils::GetPermissionLevel(0, 0));
293     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetPermissionLevelTest001 end");
294 }
295 
296 HWTEST_F(CommonUtilsTest, GetPermissionLevelTest002, TestSize.Level1)
297 {
298     GTEST_LOG_(INFO)
299         << "CommonUtilsTest, GetPermissionLevelTest002, TestSize.Level1";
300     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetPermissionLevelTest002 begin");
301     MockNativePermission();
302     EXPECT_EQ(PERMISSION_ACCURATE, CommonUtils::GetPermissionLevel(tokenId_, 0));
303     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetPermissionLevelTest002 end");
304 }
305 
306 HWTEST_F(CommonUtilsTest, GetPermissionLevelTest003, TestSize.Level1)
307 {
308     GTEST_LOG_(INFO)
309         << "CommonUtilsTest, GetPermissionLevelTest003, TestSize.Level1";
310     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetPermissionLevelTest003 begin");
311     MockNativeAccurateLocation();
312     EXPECT_EQ(PERMISSION_ACCURATE, CommonUtils::GetPermissionLevel(tokenIdForAcc_, 0));
313     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetPermissionLevelTest003 end");
314 }
315 
316 HWTEST_F(CommonUtilsTest, GetPermissionLevelTest004, TestSize.Level1)
317 {
318     GTEST_LOG_(INFO)
319         << "CommonUtilsTest, GetPermissionLevelTest004, TestSize.Level1";
320     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetPermissionLevelTest004 begin");
321     MockNativeApproxiPermission();
322     EXPECT_EQ(PERMISSION_APPROXIMATELY, CommonUtils::GetPermissionLevel(tokenIdForApproxi_, 0));
323     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetPermissionLevelTest004 end");
324 }
325 
326 HWTEST_F(CommonUtilsTest, CheckSystemPermissionTest001, TestSize.Level1)
327 {
328     GTEST_LOG_(INFO)
329         << "CommonUtilsTest, CheckSystemPermissionTest001, TestSize.Level1";
330     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] CheckSystemPermissionTest001 begin");
331     EXPECT_EQ(false, CommonUtils::CheckSystemPermission(0, 1));
332     MockNativePermission();
333     EXPECT_EQ(true, CommonUtils::CheckSystemPermission(tokenId_, 1));
334     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] CheckSystemPermissionTest001 end");
335 }
336 
337 HWTEST_F(CommonUtilsTest, GetBundleNameByUidTest001, TestSize.Level1)
338 {
339     GTEST_LOG_(INFO)
340         << "CommonUtilsTest, GetBundleNameByUidTest001, TestSize.Level1";
341     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetBundleNameByUidTest001 begin");
342     std::string bundleName;
343     EXPECT_EQ(false, CommonUtils::GetBundleNameByUid(SYSTEM_UID, bundleName));
344     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] GetBundleNameByUidTest001 end");
345 }
346 
347 HWTEST_F(CommonUtilsTest, CountDownLatchWaitTest001, TestSize.Level1)
348 {
349     auto latch = std::make_shared<CountDownLatch>();
350     latch->SetCount(0);
351     latch->Wait(0); // count is 0
352     EXPECT_EQ(0, latch->GetCount());
353 }
354 
355 HWTEST_F(CommonUtilsTest, CountDownLatchWaitTest002, TestSize.Level1)
356 {
357     auto latch = std::make_shared<CountDownLatch>();
358     latch->SetCount(1);
359     latch->Wait(0); // wait 0ms
360     EXPECT_EQ(1, latch->GetCount());
361 }
362 
363 HWTEST_F(CommonUtilsTest, CountDownLatchCountDownTest001, TestSize.Level1)
364 {
365     auto latch = std::make_shared<CountDownLatch>();
366     latch->SetCount(1);
367     latch->CountDown();
368     EXPECT_EQ(0, latch->GetCount());
369 }
370 
371 HWTEST_F(CommonUtilsTest, CountDownLatchCountDownTest002, TestSize.Level1)
372 {
373     auto latch = std::make_shared<CountDownLatch>();
374     latch->CountDown();
375     EXPECT_EQ(0, latch->GetCount());
376 }
377 
378 HWTEST_F(CommonUtilsTest, CountDownLatchCountDownTest003, TestSize.Level1)
379 {
380     auto latch = std::make_shared<CountDownLatch>();
381     latch->SetCount(5);
382     latch->CountDown();
383     EXPECT_EQ(4, latch->GetCount());
384 }
385 
386 HWTEST_F(CommonUtilsTest, CheckCallingPermissionTest001, TestSize.Level1)
387 {
388     GTEST_LOG_(INFO)
389         << "CommonUtilsTest, CheckCallingPermissionTest001, TestSize.Level1";
390     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] CheckCallingPermissionTest001 begin");
391     pid_t uid = 8888;
392     pid_t pid = 8888;
393     MessageParcel reply;
394     EXPECT_EQ(false, CommonUtils::CheckCallingPermission(uid, pid, reply));
395     LBSLOGI(COMMON_UTILS, "[CommonUtilsTest] CheckCallingPermissionTest001 end");
396 }
397 } // namespace Location
398 } // namespace OHOS
399