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
32using namespace testing;
33using namespace testing::ext;
34
35namespace OHOS {
36namespace Location {
37using HDI::Location::Gnss::V2_0::IGnssCallback;
38using HDI::Location::Gnss::V2_0::LocationInfo;
39using HDI::Location::Gnss::V2_0::ConstellationCategory;
40const int32_t LOCATION_PERM_NUM = 6;
41const std::string MANAGER_SETTINGS = "ohos.permission.MANAGE_SETTINGS";
42void GnssEventCallbackTest::SetUp()
43{
44    MockNativePermission();
45}
46
47void GnssEventCallbackTest::TearDown()
48{}
49
50void 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
72HWTEST_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
92HWTEST_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
104HWTEST_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
116HWTEST_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
127HWTEST_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
138HWTEST_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
150HWTEST_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
162HWTEST_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
175HWTEST_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
206HWTEST_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
218HWTEST_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
229HWTEST_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
251HWTEST_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
263HWTEST_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