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 #ifdef FEATURE_GNSS_SUPPORT
17 #include "gnss_event_callback_test.h"
18 
19 #include <cstdlib>
20 
21 #include "gnss_event_callback.h"
22 #include "accesstoken_kit.h"
23 #include "message_parcel.h"
24 #include "nativetoken_kit.h"
25 #include "token_setproc.h"
26 #include "agnss_ni_manager.h"
27 #include "common_utils.h"
28 #include "constant_definition.h"
29 #include "location.h"
30 #include "permission_manager.h"
31 
32 using namespace testing;
33 using namespace testing::ext;
34 
35 namespace OHOS {
36 namespace Location {
37 using HDI::Location::Gnss::V2_0::IGnssCallback;
38 using HDI::Location::Gnss::V2_0::LocationInfo;
39 using HDI::Location::Gnss::V2_0::ConstellationCategory;
40 const int32_t LOCATION_PERM_NUM = 6;
41 const std::string MANAGER_SETTINGS = "ohos.permission.MANAGE_SETTINGS";
SetUp()42 void GnssEventCallbackTest::SetUp()
43 {
44     MockNativePermission();
45 }
46 
TearDown()47 void GnssEventCallbackTest::TearDown()
48 {}
49 
MockNativePermission()50 void GnssEventCallbackTest::MockNativePermission()
51 {
52     const char *perms[] = {
53         ACCESS_LOCATION.c_str(), ACCESS_APPROXIMATELY_LOCATION.c_str(),
54         ACCESS_BACKGROUND_LOCATION.c_str(), MANAGE_SECURE_SETTINGS.c_str(),
55         MANAGER_SETTINGS.c_str(), ACCESS_CONTROL_LOCATION_SWITCH.c_str(),
56     };
57     NativeTokenInfoParams infoInstance = {
58         .dcapsNum = 0,
59         .permsNum = LOCATION_PERM_NUM,
60         .aclsNum = 0,
61         .dcaps = nullptr,
62         .perms = perms,
63         .acls = nullptr,
64         .processName = "GnssEventCallbackTest",
65         .aplStr = "system_basic",
66     };
67     uint64_t tokenId = GetAccessTokenId(&infoInstance);
68     SetSelfTokenID(tokenId);
69     Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
70 }
71 
72 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportLocation001, TestSize.Level1)
73 {
74     GTEST_LOG_(INFO)
75         << "GnssEventCallbackTest, GnssEventCallbackReportLocation001, TestSize.Level1";
76     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportLocation001 begin");
77     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
78     EXPECT_NE(nullptr, gnssCallback);
79     LocationInfo locationInfo;
80     locationInfo.latitude = 1.0;
81     locationInfo.longitude = 2.0;
82     locationInfo.altitude = 1.0;
83     locationInfo.horizontalAccuracy = 1.0;
84     locationInfo.speed = 1.0;
85     locationInfo.bearing= 1.0;
86     locationInfo.timeForFix = 1000000000;
87     locationInfo.timeSinceBoot = 1000000000;
88     gnssCallback->ReportLocation(locationInfo);
89     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportLocation001 end");
90 }
91 
92 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportGnssWorkingStatus001, TestSize.Level1)
93 {
94     GTEST_LOG_(INFO)
95         << "GnssEventCallbackTest, GnssEventCallbackReportGnssWorkingStatus001, TestSize.Level1";
96     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportGnssWorkingStatus001 begin");
97     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
98     EXPECT_NE(nullptr, gnssCallback);
99     GnssWorkingStatus status = HDI::Location::Gnss::V2_0::GNSS_WORKING_STATUS_NONE;
100     gnssCallback->ReportGnssWorkingStatus(status);
101     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportGnssWorkingStatus001 end");
102 }
103 
104 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportGnssWorkingStatus002, TestSize.Level1)
105 {
106     GTEST_LOG_(INFO)
107         << "GnssEventCallbackTest, GnssEventCallbackReportGnssWorkingStatus002, TestSize.Level1";
108     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportGnssWorkingStatus002 begin");
109     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
110     EXPECT_NE(nullptr, gnssCallback);
111     GnssWorkingStatus status = HDI::Location::Gnss::V2_0::GNSS_WORKING_STATUS_NONE;
112     gnssCallback->ReportGnssWorkingStatus(status);
113     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportGnssWorkingStatus002 end");
114 }
115 
116 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportNmea001, TestSize.Level1)
117 {
118     GTEST_LOG_(INFO)
119         << "GnssEventCallbackTest, GnssEventCallbackReportNmea001, TestSize.Level1";
120     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportNmea001 begin");
121     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
122     EXPECT_NE(nullptr, gnssCallback);
123     gnssCallback->ReportNmea(0, "nmea", 0);
124     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportNmea001 end");
125 }
126 
127 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportNmea002, TestSize.Level1)
128 {
129     GTEST_LOG_(INFO)
130         << "GnssEventCallbackTest, GnssEventCallbackReportNmea002, TestSize.Level1";
131     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportNmea002 begin");
132     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
133     EXPECT_NE(nullptr, gnssCallback);
134     gnssCallback->ReportNmea(0, "nmea", 0);
135     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportNmea002 end");
136 }
137 
138 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportGnssCapabilities001, TestSize.Level1)
139 {
140     GTEST_LOG_(INFO)
141         << "GnssEventCallbackTest, GnssEventCallbackReportGnssCapabilities001, TestSize.Level1";
142     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportGnssCapabilities001 begin");
143     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
144     EXPECT_NE(nullptr, gnssCallback);
145     GnssCapabilities capabilities = HDI::Location::Gnss::V2_0::GNSS_CAP_SUPPORT_MSB;
146     EXPECT_EQ(ERR_OK, gnssCallback->ReportGnssCapabilities(capabilities));
147     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportGnssCapabilities001 end");
148 }
149 
150 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportGnssCapabilities002, TestSize.Level1)
151 {
152     GTEST_LOG_(INFO)
153         << "GnssEventCallbackTest, GnssEventCallbackReportGnssCapabilities002, TestSize.Level1";
154     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportGnssCapabilities002 begin");
155     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
156     EXPECT_NE(nullptr, gnssCallback);
157     GnssCapabilities capabilities = HDI::Location::Gnss::V2_0::GNSS_CAP_SUPPORT_MSB;
158     EXPECT_EQ(ERR_OK, gnssCallback->ReportGnssCapabilities(capabilities));
159     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportGnssCapabilities002 end");
160 }
161 
162 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportSatelliteStatusInfo002, TestSize.Level1)
163 {
164     GTEST_LOG_(INFO)
165         << "GnssEventCallbackTest, GnssEventCallbackReportSatelliteStatusInfo002, TestSize.Level1";
166     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportSatelliteStatusInfo002 begin");
167     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
168     EXPECT_NE(nullptr, gnssCallback);
169     SatelliteStatusInfo statusInfo;
170     statusInfo.satellitesNumber = 0;
171     EXPECT_EQ(ERR_OK, gnssCallback->ReportSatelliteStatusInfo(statusInfo));
172     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportSatelliteStatusInfo002 end");
173 }
174 
175 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportSatelliteStatusInfo003, TestSize.Level1)
176 {
177     GTEST_LOG_(INFO)
178         << "GnssEventCallbackTest, GnssEventCallbackReportSatelliteStatusInfo003, TestSize.Level1";
179     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportSatelliteStatusInfo003 begin");
180     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
181     EXPECT_NE(nullptr, gnssCallback);
182     SatelliteStatusInfo statusInfo;
183     statusInfo.satellitesNumber = 1;
184     statusInfo.elevation.push_back(12);
185     statusInfo.azimuths.push_back(30);
186     statusInfo.carrierFrequencies.push_back(40);
187     statusInfo.carrierToNoiseDensitys.push_back(40);
188     statusInfo.satelliteIds.push_back(1);
189     statusInfo.constellation.push_back(static_cast<ConstellationCategory>(1));
190     statusInfo.additionalInfo.push_back(
191         HDI::Location::Gnss::V2_0::SATELLITES_ADDITIONAL_INFO_EPHEMERIS_DATA_EXIST);
192     EXPECT_EQ(ERR_OK, gnssCallback->ReportSatelliteStatusInfo(statusInfo));
193     LocationInfo locationInfo;
194     locationInfo.latitude = 1.0;
195     locationInfo.longitude = 2.0;
196     locationInfo.altitude = 1.0;
197     locationInfo.horizontalAccuracy = 1.0;
198     locationInfo.speed = 1.0;
199     locationInfo.bearing= 1.0;
200     locationInfo.timeForFix = 1000000000;
201     locationInfo.timeSinceBoot = 1000000000;
202     EXPECT_EQ(ERR_OK, gnssCallback->ReportLocation(locationInfo));
203     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportSatelliteStatusInfo003 end");
204 }
205 
206 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackRequestGnssReferenceInfo001, TestSize.Level1)
207 {
208     GTEST_LOG_(INFO)
209         << "GnssEventCallbackTest, GnssEventCallbackRequestGnssReferenceInfo001, TestSize.Level1";
210     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackRequestGnssReferenceInfo001 begin");
211     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
212     EXPECT_NE(nullptr, gnssCallback);
213     GnssRefInfoType type = HDI::Location::Gnss::V2_0::GNSS_REF_INFO_TIME;
214     gnssCallback->RequestGnssReferenceInfo(type);
215     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackRequestGnssReferenceInfo001 end");
216 }
217 
218 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackRequestPredictGnssData001, TestSize.Level1)
219 {
220     GTEST_LOG_(INFO)
221         << "GnssEventCallbackTest, GnssEventCallbackRequestPredictGnssData001, TestSize.Level1";
222     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackRequestPredictGnssData001 begin");
223     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
224     EXPECT_NE(nullptr, gnssCallback);
225     gnssCallback->RequestPredictGnssData();
226     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackRequestPredictGnssData001 end");
227 }
228 
229 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackReportCachedLocation001, TestSize.Level1)
230 {
231     GTEST_LOG_(INFO)
232         << "GnssEventCallbackTest, GnssEventCallbackReportCachedLocation001, TestSize.Level1";
233     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportCachedLocation001 begin");
234     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
235     EXPECT_NE(nullptr, gnssCallback);
236     std::vector<LocationInfo> gnssLocations;
237     LocationInfo locationInfo;
238     locationInfo.latitude = 1.0;
239     locationInfo.longitude = 2.0;
240     locationInfo.altitude = 1.0;
241     locationInfo.horizontalAccuracy = 1.0;
242     locationInfo.speed = 1.0;
243     locationInfo.bearing= 1.0;
244     locationInfo.timeForFix = 1000000000;
245     locationInfo.timeSinceBoot = 1000000000;
246     gnssLocations.push_back(locationInfo);
247     gnssCallback->ReportCachedLocation(gnssLocations);
248     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackReportCachedLocation001 end");
249 }
250 
251 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackRequestGnssReferenceInfo002, TestSize.Level1)
252 {
253     GTEST_LOG_(INFO)
254         << "GnssEventCallbackTest, GnssEventCallbackRequestGnssReferenceInfo002, TestSize.Level1";
255     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackRequestGnssReferenceInfo002 begin");
256     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
257     EXPECT_NE(nullptr, gnssCallback);
258     GnssRefInfoType type = HDI::Location::Gnss::V2_0::GNSS_REF_INFO_LOCATION;
259     gnssCallback->RequestGnssReferenceInfo(type);
260     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackRequestGnssReferenceInfo002 end");
261 }
262 
263 HWTEST_F(GnssEventCallbackTest, GnssEventCallbackRequestGnssReferenceInfo003, TestSize.Level1)
264 {
265     GTEST_LOG_(INFO)
266         << "GnssEventCallbackTest, GnssEventCallbackRequestGnssReferenceInfo003, TestSize.Level1";
267     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackRequestGnssReferenceInfo003 begin");
268     sptr<IGnssCallback> gnssCallback = new (std::nothrow) GnssEventCallback();
269     EXPECT_NE(nullptr, gnssCallback);
270     GnssRefInfoType type = HDI::Location::Gnss::V2_0::GNSS_REF_INFO_BEST_LOCATION;
271     gnssCallback->RequestGnssReferenceInfo(type);
272     LBSLOGI(GNSS_TEST, "[GnssEventCallbackTest] GnssEventCallbackRequestGnssReferenceInfo003 end");
273 }
274 
275 }  // namespace Location
276 }  // namespace OHOS
277 #endif // FEATURE_GNSS_SUPPORT
278