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 "location_approximately_permission_test.h"
17
18 #include "accesstoken_kit.h"
19 #include "message_parcel.h"
20 #include "nativetoken_kit.h"
21 #include "token_setproc.h"
22
23 #include "common_utils.h"
24 #include "constant_definition.h"
25 #include "location.h"
26
27 using namespace testing::ext;
28 namespace OHOS {
29 namespace Location {
30 const int32_t LOCATION_APPROXIMATELY_PERM = 3;
SetUp()31 void LocationApproximatelyPermissionTest::SetUp()
32 {
33 MockNativePermission();
34 reportManager_ = DelayedSingleton<ReportManager>::GetInstance();
35 EXPECT_NE(nullptr, reportManager_);
36 }
37
TearDown()38 void LocationApproximatelyPermissionTest::TearDown()
39 {
40 }
41
MockNativePermission()42 void LocationApproximatelyPermissionTest::MockNativePermission()
43 {
44 const char *perms[] = {
45 ACCESS_APPROXIMATELY_LOCATION.c_str(), ACCESS_BACKGROUND_LOCATION.c_str(),
46 MANAGE_SECURE_SETTINGS.c_str()
47 };
48 NativeTokenInfoParams infoInstance = {
49 .dcapsNum = 0,
50 .permsNum = LOCATION_APPROXIMATELY_PERM,
51 .aclsNum = 0,
52 .dcaps = nullptr,
53 .perms = perms,
54 .acls = nullptr,
55 .processName = "LocatorApproximatePermissionTest",
56 .aplStr = "system_basic",
57 };
58 tokenId_ = GetAccessTokenId(&infoInstance);
59 SetSelfTokenID(tokenId_);
60 Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
61 }
62
63 HWTEST_F(LocationApproximatelyPermissionTest, ReportManagerApproximatelyLocationTest001, TestSize.Level1)
64 {
65 EXPECT_EQ(nullptr, reportManager_->GetPermittedLocation(tokenId_, 0, nullptr));
66 MessageParcel parcel;
67 parcel.WriteDouble(MAX_LATITUDE + 1.0); // latitude is out of range
68 parcel.WriteDouble(MAX_LONGITUDE + 1.0); // longitude is out of range
69 parcel.WriteDouble(14.0); // altitude
70 parcel.WriteDouble(1000.0); // accuracy
71 parcel.WriteDouble(10.0); // speed
72 parcel.WriteDouble(90.0); // direction
73 parcel.WriteInt64(1000000000); // timeStamp
74 parcel.WriteInt64(1000000000); // timeSinceBoot
75 parcel.WriteString16(u"additions"); // additions
76 parcel.WriteInt64(1); // additionSize
77 parcel.WriteBool(false); // isFromMock
78 parcel.WriteInt32(1); // source type
79 parcel.WriteInt32(0); // floor no.
80 parcel.WriteDouble(1000.0); // floor acc
81 std::unique_ptr<Location> location = std::make_unique<Location>();
82 location->ReadFromParcel(parcel);
83 auto newLocation = reportManager_->GetPermittedLocation(tokenId_, 0, location);
84 EXPECT_NE(nullptr, newLocation);
85 EXPECT_EQ(MAX_LATITUDE, newLocation->GetLatitude());
86 EXPECT_EQ(MAX_LONGITUDE, newLocation->GetLongitude());
87 EXPECT_EQ(DEFAULT_APPROXIMATELY_ACCURACY, newLocation->GetAccuracy());
88 }
89
90 HWTEST_F(LocationApproximatelyPermissionTest, ReportManagerApproximatelyLocationTest002, TestSize.Level1)
91 {
92 EXPECT_EQ(nullptr, reportManager_->GetPermittedLocation(tokenId_, 0, nullptr));
93 MessageParcel parcel;
94 parcel.WriteDouble(-MAX_LATITUDE - 1.0); // latitude
95 parcel.WriteDouble(-MAX_LONGITUDE - 1.0); // longitude
96 parcel.WriteDouble(14.0); // altitude
97 parcel.WriteDouble(1000.0); // accuracy
98 parcel.WriteDouble(10.0); // speed
99 parcel.WriteDouble(90.0); // direction
100 parcel.WriteInt64(1000000000); // timeStamp
101 parcel.WriteInt64(1000000000); // timeSinceBoot
102 parcel.WriteString16(u"additions"); // additions
103 parcel.WriteInt64(1); // additionSize
104 parcel.WriteBool(false); // isFromMock
105 parcel.WriteInt32(1); // source type
106 parcel.WriteInt32(0); // floor no.
107 parcel.WriteDouble(1000.0); // floor acc
108 std::unique_ptr<Location> location = std::make_unique<Location>();
109 location->ReadFromParcel(parcel);
110 auto newLocation = reportManager_->GetPermittedLocation(tokenId_, 0, location);
111 EXPECT_NE(nullptr, newLocation);
112 EXPECT_EQ(-MAX_LATITUDE, newLocation->GetLatitude());
113 EXPECT_EQ(-MAX_LONGITUDE, newLocation->GetLongitude());
114 EXPECT_EQ(DEFAULT_APPROXIMATELY_ACCURACY, newLocation->GetAccuracy());
115 }
116 } // namespace Location
117 } // namespace OHOS