• 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 "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