19762338dSopenharmony_ci/* 29762338dSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 39762338dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49762338dSopenharmony_ci * you may not use this file except in compliance with the License. 59762338dSopenharmony_ci * You may obtain a copy of the License at 69762338dSopenharmony_ci * 79762338dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89762338dSopenharmony_ci * 99762338dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109762338dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119762338dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129762338dSopenharmony_ci * See the License for the specific language governing permissions and 139762338dSopenharmony_ci * limitations under the License. 149762338dSopenharmony_ci */ 159762338dSopenharmony_ci 169762338dSopenharmony_ci#include "idevmgr_hdi.h" 179762338dSopenharmony_ci#include <iostream> 189762338dSopenharmony_ci#include <cmath> 199762338dSopenharmony_ci#include <cstdio> 209762338dSopenharmony_ci#include <unistd.h> 219762338dSopenharmony_ci#include <gtest/gtest.h> 229762338dSopenharmony_ci#include <securec.h> 239762338dSopenharmony_ci#ifdef HDF_DRIVERS_INTERFACE_GEOFENCE_ENABLE 249762338dSopenharmony_ci#include <osal_mem.h> 259762338dSopenharmony_ci#include "osal_time.h" 269762338dSopenharmony_ci#include "hdf_sbuf.h" 279762338dSopenharmony_ci#include "hdf_base.h" 289762338dSopenharmony_ci#include "hdf_log.h" 299762338dSopenharmony_ci#include "v2_0/igeofence_interface.h" 309762338dSopenharmony_ci#include "geofence_callback_impl.h" 319762338dSopenharmony_ci 329762338dSopenharmony_ciusing namespace OHOS::HDI::Location::Geofence::V2_0; 339762338dSopenharmony_ci#endif 349762338dSopenharmony_ciusing namespace std; 359762338dSopenharmony_ciusing namespace testing::ext; 369762338dSopenharmony_ci 379762338dSopenharmony_cinamespace { 389762338dSopenharmony_ci #ifdef HDF_DRIVERS_INTERFACE_GEOFENCE_ENABLE 399762338dSopenharmony_ci sptr<IGeofenceInterface> g_igeofenceHci = nullptr; 409762338dSopenharmony_ci constexpr const char *AGNSS_SERVICE_NAME = "agnss_interface_service"; 419762338dSopenharmony_ci constexpr const char *GNSS_SERVICE_NAME = "gnss_interface_service"; 429762338dSopenharmony_ci constexpr const char *GEOFENCE_SERVICE_NAME = "geofence_interface_service"; 439762338dSopenharmony_ci #endif 449762338dSopenharmony_ci} 459762338dSopenharmony_ci 469762338dSopenharmony_ciclass LocationGeofenceTest: public testing::Test { 479762338dSopenharmony_cipublic: 489762338dSopenharmony_ci static void SetUpTestCase(); 499762338dSopenharmony_ci static void TearDownTestCase(); 509762338dSopenharmony_ci void SetUp(); 519762338dSopenharmony_ci void TearDown(); 529762338dSopenharmony_ci}; 539762338dSopenharmony_ci 549762338dSopenharmony_ci#ifdef HDF_DRIVERS_INTERFACE_GEOFENCE_ENABLE 559762338dSopenharmony_ciint32_t GeofenceCallbackImpl::ReportGeofenceAvailability(bool isAvailable) 569762338dSopenharmony_ci{ 579762338dSopenharmony_ci (void)isAvailable; 589762338dSopenharmony_ci return HDF_SUCCESS; 599762338dSopenharmony_ci} 609762338dSopenharmony_ci 619762338dSopenharmony_ciint32_t GeofenceCallbackImpl::ReportGeofenceEvent(int32_t fenceIndex, const LocationInfo& location, GeofenceEvent event, int64_t timestamp) 629762338dSopenharmony_ci{ 639762338dSopenharmony_ci (void)fenceIndex; 649762338dSopenharmony_ci (void)location; 659762338dSopenharmony_ci (void)event; 669762338dSopenharmony_ci (void)timestamp; 679762338dSopenharmony_ci return HDF_SUCCESS; 689762338dSopenharmony_ci} 699762338dSopenharmony_ci 709762338dSopenharmony_ciint32_t GeofenceCallbackImpl::ReportGeofenceOperateResult(int32_t fenceIndex, GeofenceOperateType type, GeofenceOperateResult result) 719762338dSopenharmony_ci{ 729762338dSopenharmony_ci (void)fenceIndex; 739762338dSopenharmony_ci (void)type; 749762338dSopenharmony_ci (void)result; 759762338dSopenharmony_ci return HDF_SUCCESS; 769762338dSopenharmony_ci} 779762338dSopenharmony_ci#endif 789762338dSopenharmony_ci 799762338dSopenharmony_civoid LocationGeofenceTest::SetUpTestCase() 809762338dSopenharmony_ci{ 819762338dSopenharmony_ci#ifdef HDF_DRIVERS_INTERFACE_GEOFENCE_ENABLE 829762338dSopenharmony_ci auto devmgr = HDI::DeviceManager::V1_0::IDeviceManager::Get(); 839762338dSopenharmony_ci if (devmgr == nullptr) { 849762338dSopenharmony_ci printf("fail to get devmgr.\n"); 859762338dSopenharmony_ci return; 869762338dSopenharmony_ci } 879762338dSopenharmony_ci if (devmgr->LoadDevice(GNSS_SERVICE_NAME) != 0) { 889762338dSopenharmony_ci printf("Load gnss service failed!\n"); 899762338dSopenharmony_ci return; 909762338dSopenharmony_ci } 919762338dSopenharmony_ci if (devmgr->LoadDevice(AGNSS_SERVICE_NAME) != 0) { 929762338dSopenharmony_ci printf("Load agnss service failed!\n"); 939762338dSopenharmony_ci return; 949762338dSopenharmony_ci } 959762338dSopenharmony_ci if (devmgr->LoadDevice(GEOFENCE_SERVICE_NAME) != 0) { 969762338dSopenharmony_ci printf("Load geofence service failed!\n"); 979762338dSopenharmony_ci return; 989762338dSopenharmony_ci } 999762338dSopenharmony_ci g_igeofenceHci = IGeofenceInterface::Get(); 1009762338dSopenharmony_ci#endif 1019762338dSopenharmony_ci} 1029762338dSopenharmony_ci 1039762338dSopenharmony_civoid LocationGeofenceTest::TearDownTestCase() 1049762338dSopenharmony_ci{ 1059762338dSopenharmony_ci#ifdef HDF_DRIVERS_INTERFACE_GEOFENCE_ENABLE 1069762338dSopenharmony_ci auto devmgr = HDI::DeviceManager::V1_0::IDeviceManager::Get(); 1079762338dSopenharmony_ci if (devmgr == nullptr) { 1089762338dSopenharmony_ci printf("fail to get devmgr.\n"); 1099762338dSopenharmony_ci return; 1109762338dSopenharmony_ci } 1119762338dSopenharmony_ci if (devmgr->UnloadDevice(GNSS_SERVICE_NAME) != 0) { 1129762338dSopenharmony_ci printf("Load gnss service failed!\n"); 1139762338dSopenharmony_ci return; 1149762338dSopenharmony_ci } 1159762338dSopenharmony_ci if (devmgr->UnloadDevice(AGNSS_SERVICE_NAME) != 0) { 1169762338dSopenharmony_ci printf("Load agnss service failed!\n"); 1179762338dSopenharmony_ci return; 1189762338dSopenharmony_ci } 1199762338dSopenharmony_ci if (devmgr->UnloadDevice(GEOFENCE_SERVICE_NAME) != 0) { 1209762338dSopenharmony_ci printf("Load geofence service failed!\n"); 1219762338dSopenharmony_ci return; 1229762338dSopenharmony_ci } 1239762338dSopenharmony_ci#endif 1249762338dSopenharmony_ci} 1259762338dSopenharmony_ci 1269762338dSopenharmony_civoid LocationGeofenceTest::SetUp() 1279762338dSopenharmony_ci{ 1289762338dSopenharmony_ci} 1299762338dSopenharmony_ci 1309762338dSopenharmony_civoid LocationGeofenceTest::TearDown() 1319762338dSopenharmony_ci{ 1329762338dSopenharmony_ci} 1339762338dSopenharmony_ci 1349762338dSopenharmony_ci 1359762338dSopenharmony_ci/** 1369762338dSopenharmony_ci * @tc.name: SetGeofenceCallback0100 1379762338dSopenharmony_ci * @tc.desc: Set callback function for geofence. 1389762338dSopenharmony_ci * @tc.type: FUNC 1399762338dSopenharmony_ci */ 1409762338dSopenharmony_ciHWTEST_F(LocationGeofenceTest, SUB_DriverSystem_EnableGnss_0100, TestSize.Level1) 1419762338dSopenharmony_ci{ 1429762338dSopenharmony_ci#ifdef HDF_DRIVERS_INTERFACE_GEOFENCE_ENABLE 1439762338dSopenharmony_ci if (g_igeofenceHci == nullptr) { 1449762338dSopenharmony_ci ASSERT_NE(nullptr, g_igeofenceHci); 1459762338dSopenharmony_ci return; 1469762338dSopenharmony_ci } 1479762338dSopenharmony_ci sptr<IGeofenceCallback> geo_callback = new (std::nothrow) GeofenceCallbackImpl(); 1489762338dSopenharmony_ci if (geo_callback == nullptr) { 1499762338dSopenharmony_ci ASSERT_NE(nullptr, geo_callback); 1509762338dSopenharmony_ci return; 1519762338dSopenharmony_ci } 1529762338dSopenharmony_ci int32_t ret = g_igeofenceHci->SetGeofenceCallback(geo_callback); 1539762338dSopenharmony_ci EXPECT_EQ(HDF_SUCCESS, ret); 1549762338dSopenharmony_ci#endif 1559762338dSopenharmony_ci} 1569762338dSopenharmony_ci 1579762338dSopenharmony_ci 1589762338dSopenharmony_ci/** 1599762338dSopenharmony_ci * @tc.name: AddGnssGeofence0100 1609762338dSopenharmony_ci * @tc.desc: Add a geofence. 1619762338dSopenharmony_ci * @tc.type: FUNC 1629762338dSopenharmony_ci */ 1639762338dSopenharmony_ciHWTEST_F(LocationGeofenceTest, SUB_DriverSystem_AddGnssGeofence_0100, TestSize.Level1) 1649762338dSopenharmony_ci{ 1659762338dSopenharmony_ci#ifdef HDF_DRIVERS_INTERFACE_GEOFENCE_ENABLE 1669762338dSopenharmony_ci if (g_igeofenceHci == nullptr) { 1679762338dSopenharmony_ci ASSERT_NE(nullptr, g_igeofenceHci); 1689762338dSopenharmony_ci return; 1699762338dSopenharmony_ci } 1709762338dSopenharmony_ci GeofenceInfo fence; 1719762338dSopenharmony_ci fence.fenceIndex = 3; 1729762338dSopenharmony_ci fence.latitude = 118.90; 1739762338dSopenharmony_ci fence.longitude = 15.25; 1749762338dSopenharmony_ci fence.radius = 12.26; 1759762338dSopenharmony_ci GeofenceEvent geoevent = GeofenceEvent::GEOFENCE_EVENT_ENTERED ; 1769762338dSopenharmony_ci int32_t ret = g_igeofenceHci->AddGnssGeofence(fence,geoevent); 1779762338dSopenharmony_ci EXPECT_EQ(HDF_SUCCESS, ret); 1789762338dSopenharmony_ci#endif 1799762338dSopenharmony_ci} 1809762338dSopenharmony_ci 1819762338dSopenharmony_ci 1829762338dSopenharmony_ci/** 1839762338dSopenharmony_ci * @tc.name: DeleteGnssGeofence0100 1849762338dSopenharmony_ci * @tc.desc: Delete a geofence. 1859762338dSopenharmony_ci * @tc.type: FUNC 1869762338dSopenharmony_ci */ 1879762338dSopenharmony_ciHWTEST_F(LocationGeofenceTest, SUB_DriverSystem_DeleteGnssGeofence_0100, TestSize.Level1) 1889762338dSopenharmony_ci{ 1899762338dSopenharmony_ci#ifdef HDF_DRIVERS_INTERFACE_GEOFENCE_ENABLE 1909762338dSopenharmony_ci if (g_igeofenceHci == nullptr) { 1919762338dSopenharmony_ci ASSERT_NE(nullptr, g_igeofenceHci); 1929762338dSopenharmony_ci return; 1939762338dSopenharmony_ci } 1949762338dSopenharmony_ci int fenceIndex = 5; 1959762338dSopenharmony_ci int32_t ret = g_igeofenceHci->DeleteGnssGeofence(fenceIndex); 1969762338dSopenharmony_ci EXPECT_EQ(HDF_SUCCESS, ret); 1979762338dSopenharmony_ci#endif 1989762338dSopenharmony_ci} 199