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