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 "report_manager_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 "i_locator_callback.h"
24 #include "location.h"
25 #include "locator.h"
26 #include "locator_ability.h"
27 #include "locator_callback_host.h"
28 #include "locator_callback_proxy.h"
29 #include "report_manager.h"
30 #include "request.h"
31 #include "request_manager.h"
32
33 using namespace testing::ext;
34 namespace OHOS {
35 namespace Location {
36 const int32_t LOCATION_PERM_NUM = 4;
37 const std::string UNKNOWN_ABILITY = "unknown_ability";
SetUp()38 void ReportManagerTest::SetUp()
39 {
40 MockNativePermission();
41 reportManager_ = DelayedSingleton<ReportManager>::GetInstance();
42 EXPECT_NE(nullptr, reportManager_);
43 }
44
TearDown()45 void ReportManagerTest::TearDown()
46 {
47 }
48
MockNativePermission()49 void ReportManagerTest::MockNativePermission()
50 {
51 const char *perms[] = {
52 ACCESS_LOCATION.c_str(), ACCESS_APPROXIMATELY_LOCATION.c_str(),
53 ACCESS_BACKGROUND_LOCATION.c_str(), MANAGE_SECURE_SETTINGS.c_str(),
54 };
55 NativeTokenInfoParams infoInstance = {
56 .dcapsNum = 0,
57 .permsNum = LOCATION_PERM_NUM,
58 .aclsNum = 0,
59 .dcaps = nullptr,
60 .perms = perms,
61 .acls = nullptr,
62 .processName = "ReportManagerTest",
63 .aplStr = "system_basic",
64 };
65 tokenId_ = GetAccessTokenId(&infoInstance);
66 SetSelfTokenID(tokenId_);
67 Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
68 }
69
70 HWTEST_F(ReportManagerTest, ReportRemoteCallbackTest001, TestSize.Level1)
71 {
72 GTEST_LOG_(INFO)
73 << "ReportManagerTest, ReportRemoteCallbackTest001, TestSize.Level1";
74 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] ReportRemoteCallbackTest001 begin");
75 std::unique_ptr<Location> location = std::make_unique<Location>();
76 auto locatorCallbackHostForTest =
77 sptr<LocatorCallbackHost>(new (std::nothrow) LocatorCallbackHost());
78 sptr<ILocatorCallback> locatorCallback =
79 sptr<ILocatorCallback>(locatorCallbackHostForTest);
80 EXPECT_EQ(true, reportManager_->
81 ReportRemoteCallback(locatorCallback, ILocatorCallback::RECEIVE_LOCATION_STATUS_EVENT, 1));
82 EXPECT_EQ(true, reportManager_->
83 ReportRemoteCallback(locatorCallback, ILocatorCallback::RECEIVE_ERROR_INFO_EVENT, 1));
84 EXPECT_EQ(false, reportManager_->
85 ReportRemoteCallback(locatorCallback, ILocatorCallback::RECEIVE_LOCATION_INFO_EVENT, 1));
86 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] ReportRemoteCallbackTest001 end");
87 }
88
89 HWTEST_F(ReportManagerTest, ResultCheckTest001, TestSize.Level1)
90 {
91 GTEST_LOG_(INFO)
92 << "ReportManagerTest, ResultCheckTest001, TestSize.Level1";
93 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] ResultCheckTest001 begin");
94 std::shared_ptr<Request> request = std::make_shared<Request>();
95 request->SetUid(1000);
96 request->SetPid(0);
97 request->SetTokenId(tokenId_);
98 request->SetFirstTokenId(0);
99 request->SetPackageName("ReportManagerTest");
100 std::unique_ptr<Location> location = std::make_unique<Location>();
101 MessageParcel parcel;
102 parcel.WriteDouble(12.0); // latitude
103 parcel.WriteDouble(13.0); // longitude
104 parcel.WriteDouble(14.0); // altitude
105 parcel.WriteDouble(1000.0); // accuracy
106 parcel.WriteDouble(10.0); // speed
107 parcel.WriteDouble(90.0); // direction
108 parcel.WriteInt64(1000000000); // timeStamp
109 parcel.WriteInt64(1000000000); // timeSinceBoot
110 parcel.WriteString16(u"additions"); // additions
111 parcel.WriteInt64(1); // additionSize
112 parcel.WriteBool(true); // isFromMock
113 parcel.WriteInt32(1); // source type
114 parcel.WriteInt32(0); // floor no.
115 parcel.WriteDouble(1000.0); // floor acc
116 location->ReadFromParcel(parcel);
117 EXPECT_EQ(true, reportManager_->ResultCheck(location, request));
118 EXPECT_EQ(false, reportManager_->ResultCheck(nullptr, request)); // no location
119 EXPECT_EQ(false, reportManager_->ResultCheck(location, nullptr)); // no request
120 EXPECT_EQ(false, reportManager_->ResultCheck(nullptr, nullptr)); // no location & no request
121
122 auto requestConfig = std::make_unique<RequestConfig>();
123 EXPECT_NE(nullptr, requestConfig);
124 requestConfig->SetPriority(PRIORITY_FAST_FIRST_FIX);
125 requestConfig->SetMaxAccuracy(1000.0);
126 requestConfig->SetFixNumber(1);
127 request->SetRequestConfig(*requestConfig);
128 EXPECT_EQ(true, reportManager_->ResultCheck(location, request)); // no last location
129
130 request->SetLastLocation(location);
131 EXPECT_EQ(true, reportManager_->ResultCheck(location, request));
132 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] ResultCheckTest001 end");
133 }
134
135 HWTEST_F(ReportManagerTest, SetLastLocationTest001, TestSize.Level1)
136 {
137 GTEST_LOG_(INFO)
138 << "ReportManagerTest, SetLastLocationTest001, TestSize.Level1";
139 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] SetLastLocationTest001 begin");
140 EXPECT_EQ(nullptr, reportManager_->GetLastLocation());
141 MessageParcel parcel;
142 parcel.WriteDouble(12.0); // latitude
143 parcel.WriteDouble(13.0); // longitude
144 parcel.WriteDouble(14.0); // altitude
145 parcel.WriteDouble(1000.0); // accuracy
146 parcel.WriteDouble(10.0); // speed
147 parcel.WriteDouble(90.0); // direction
148 parcel.WriteInt64(1000000000); // timeStamp
149 parcel.WriteInt64(1000000000); // timeSinceBoot
150 parcel.WriteString16(u"additions"); // additions
151 parcel.WriteInt64(1); // additionSize
152 parcel.WriteBool(true); // isFromMock
153 parcel.WriteInt32(1); // source type
154 parcel.WriteInt32(0); // floor no.
155 parcel.WriteDouble(1000.0); // floor acc
156 std::unique_ptr<Location> location = std::make_unique<Location>();
157 location->ReadFromParcel(parcel);
158 reportManager_->SetLastLocation(location);
159 EXPECT_NE(nullptr, reportManager_->GetLastLocation());
160 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] SetLastLocationTest001 end");
161 }
162
163 HWTEST_F(ReportManagerTest, GetPermittedLocationTest001, TestSize.Level1)
164 {
165 GTEST_LOG_(INFO)
166 << "ReportManagerTest, GetPermittedLocationTest001, TestSize.Level1";
167 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] GetPermittedLocationTest001 begin");
168 EXPECT_EQ(nullptr, reportManager_->GetPermittedLocation(tokenId_, 0, nullptr));
169 MessageParcel parcel;
170 parcel.WriteDouble(12.0); // latitude
171 parcel.WriteDouble(13.0); // longitude
172 parcel.WriteDouble(14.0); // altitude
173 parcel.WriteDouble(1000.0); // accuracy
174 parcel.WriteDouble(10.0); // speed
175 parcel.WriteDouble(90.0); // direction
176 parcel.WriteInt64(1000000000); // timeStamp
177 parcel.WriteInt64(1000000000); // timeSinceBoot
178 parcel.WriteString16(u"additions"); // additions
179 parcel.WriteInt64(1); // additionSize
180 parcel.WriteBool(true); // isFromMock
181 parcel.WriteInt32(1); // source type
182 parcel.WriteInt32(0); // floor no.
183 parcel.WriteDouble(1000.0); // floor acc
184 std::unique_ptr<Location> location = std::make_unique<Location>();
185 location->ReadFromParcel(parcel);
186 auto newLocation = reportManager_->GetPermittedLocation(tokenId_, 0, location);
187 EXPECT_NE(nullptr, newLocation);
188 EXPECT_EQ(12.0, newLocation->GetLatitude());
189 EXPECT_EQ(13.0, newLocation->GetLongitude());
190 EXPECT_EQ(1000.0, newLocation->GetAccuracy());
191 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] GetPermittedLocationTest001 end");
192 }
193
194 HWTEST_F(ReportManagerTest, UpdateRandomTest001, TestSize.Level1)
195 {
196 GTEST_LOG_(INFO)
197 << "ReportManagerTest, UpdateRandomTest001, TestSize.Level1";
198 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] UpdateRandomTest001 begin");
199 reportManager_->UpdateRandom();
200 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] UpdateRandomTest001 end");
201 }
202
203 HWTEST_F(ReportManagerTest, OnReportLocationTest001, TestSize.Level1)
204 {
205 GTEST_LOG_(INFO)
206 << "ReportManagerTest, OnReportLocationTest001, TestSize.Level1";
207 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] OnReportLocationTest001 begin");
208 MessageParcel parcel;
209 parcel.WriteDouble(12.0); // latitude
210 parcel.WriteDouble(13.0); // longitude
211 parcel.WriteDouble(14.0); // altitude
212 parcel.WriteDouble(1000.0); // accuracy
213 parcel.WriteDouble(10.0); // speed
214 parcel.WriteDouble(90.0); // direction
215 parcel.WriteInt64(1000000000); // timeStamp
216 parcel.WriteInt64(1000000000); // timeSinceBoot
217 parcel.WriteString16(u"additions"); // additions
218 parcel.WriteInt64(1); // additionSize
219 parcel.WriteBool(false); // isFromMock
220 parcel.WriteInt32(1); // source type
221 parcel.WriteInt32(0); // floor no.
222 parcel.WriteDouble(1000.0); // floor acc
223 std::unique_ptr<Location> location = std::make_unique<Location>();
224 location->ReadFromParcel(parcel);
225
226 EXPECT_EQ(false, reportManager_->OnReportLocation(location, UNKNOWN_ABILITY));
227 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] OnReportLocationTest001 end");
228 }
229
230 HWTEST_F(ReportManagerTest, OnReportLocationTest002, TestSize.Level1)
231 {
232 GTEST_LOG_(INFO)
233 << "ReportManagerTest, OnReportLocationTest002, TestSize.Level1";
234 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] OnReportLocationTest002 begin");
235 MessageParcel parcel;
236 parcel.WriteDouble(12.0); // latitude
237 parcel.WriteDouble(13.0); // longitude
238 parcel.WriteDouble(14.0); // altitude
239 parcel.WriteDouble(1000.0); // accuracy
240 parcel.WriteDouble(10.0); // speed
241 parcel.WriteDouble(90.0); // direction
242 parcel.WriteInt64(1000000000); // timeStamp
243 parcel.WriteInt64(1000000000); // timeSinceBoot
244 parcel.WriteString16(u"additions"); // additions
245 parcel.WriteInt64(1); // additionSize
246 parcel.WriteBool(false); // isFromMock
247 parcel.WriteInt32(1); // source type
248 parcel.WriteInt32(0); // floor no.
249 parcel.WriteDouble(1000.0); // floor acc
250 std::unique_ptr<Location> location = std::make_unique<Location>();
251 location->ReadFromParcel(parcel);
252 EXPECT_EQ(true, reportManager_->OnReportLocation(location, GNSS_ABILITY)); // is not requesting
253 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] OnReportLocationTest002 end");
254 }
255
256 HWTEST_F(ReportManagerTest, OnReportLocationTest003, TestSize.Level1)
257 {
258 GTEST_LOG_(INFO)
259 << "ReportManagerTest, OnReportLocationTest003, TestSize.Level1";
260 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] OnReportLocationTest003 begin");
261 MessageParcel parcel;
262 parcel.WriteDouble(12.0); // latitude
263 parcel.WriteDouble(13.0); // longitude
264 parcel.WriteDouble(14.0); // altitude
265 parcel.WriteDouble(1000.0); // accuracy
266 parcel.WriteDouble(10.0); // speed
267 parcel.WriteDouble(90.0); // direction
268 parcel.WriteInt64(1000000000); // timeStamp
269 parcel.WriteInt64(1000000000); // timeSinceBoot
270 parcel.WriteString16(u"additions"); // additions
271 parcel.WriteInt64(1); // additionSize
272 parcel.WriteBool(false); // isFromMock
273 parcel.WriteInt32(1); // source type
274 parcel.WriteInt32(0); // floor no.
275 parcel.WriteDouble(1000.0); // floor acc
276 std::unique_ptr<Location> location = std::make_unique<Location>();
277 location->ReadFromParcel(parcel);
278
279 std::unique_ptr<RequestConfig> requestConfig = std::make_unique<RequestConfig>();
280 requestConfig->SetPriority(PRIORITY_ACCURACY);
281 requestConfig->SetFixNumber(0);
282 requestConfig->SetTimeInterval(1);
283 std::unique_ptr<Locator> locatorImpl = Locator::GetInstance();
284 sptr<ILocatorCallback> callbackStub = new (std::nothrow) LocatorCallbackStub();
285 locatorImpl->EnableAbility(true);
286 locatorImpl->StartLocating(requestConfig, callbackStub); // start locating
287 sleep(1);
288 EXPECT_EQ(true, reportManager_->OnReportLocation(location, GNSS_ABILITY)); // report location successfully
289 EXPECT_EQ(true,
290 reportManager_->OnReportLocation(location, GNSS_ABILITY)); // report the same location, result check is false
291 locatorImpl->StopLocating(callbackStub);
292 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] OnReportLocationTest003 end");
293 }
294
295 HWTEST_F(ReportManagerTest, OnReportLocationTest004, TestSize.Level1)
296 {
297 GTEST_LOG_(INFO)
298 << "ReportManagerTest, OnReportLocationTest004, TestSize.Level1";
299 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] OnReportLocationTest004 begin");
300 MessageParcel parcel;
301 parcel.WriteDouble(12.0); // latitude
302 parcel.WriteDouble(13.0); // longitude
303 parcel.WriteDouble(14.0); // altitude
304 parcel.WriteDouble(1000.0); // accuracy
305 parcel.WriteDouble(10.0); // speed
306 parcel.WriteDouble(90.0); // direction
307 parcel.WriteInt64(1000000000); // timeStamp
308 parcel.WriteInt64(1000000000); // timeSinceBoot
309 parcel.WriteString16(u"additions"); // additions
310 parcel.WriteInt64(1); // additionSize
311 parcel.WriteBool(false); // isFromMock
312 parcel.WriteInt32(1); // source type
313 parcel.WriteInt32(0); // floor no.
314 parcel.WriteDouble(1000.0); // floor acc
315 std::unique_ptr<Location> location = std::make_unique<Location>();
316 location->ReadFromParcel(parcel);
317
318 std::unique_ptr<RequestConfig> requestConfig = std::make_unique<RequestConfig>();
319 requestConfig->SetPriority(PRIORITY_ACCURACY);
320 requestConfig->SetFixNumber(1); // locating once
321 requestConfig->SetTimeOut(120000);
322 std::unique_ptr<Locator> locatorImpl = Locator::GetInstance();
323 sptr<ILocatorCallback> callbackStub = new (std::nothrow) LocatorCallbackStub();
324 locatorImpl->EnableAbility(true);
325 locatorImpl->StartLocating(requestConfig, callbackStub); // start locating
326 sleep(1);
327 EXPECT_EQ(true, reportManager_->OnReportLocation(location, GNSS_ABILITY)); // will resolve deadRequests
328 locatorImpl->StopLocating(callbackStub);
329 LBSLOGI(REPORT_MANAGER, "[ReportManagerTest] OnReportLocationTest004 end");
330 }
331 } // namespace Location
332 } // namespace OHOS