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