/* * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <cmath> #include <cstdio> #include <unistd.h> #include <gtest/gtest.h> #include <securec.h> #include "hdf_base.h" #include "osal_mem.h" #include "osal_time.h" #include "sensor_if.h" #include "sensor_type.h" using namespace testing::ext; namespace { struct SensorValueRange { float highThreshold; float lowThreshold; }; struct SensorDevelopmentList { int32_t sensorTypeId; char sensorName[SENSOR_NAME_MAX_LEN]; int32_t dataForm; // 0: fixed, 1: range int32_t dataDimension; struct SensorValueRange *valueRange; }; struct SensorValueRange g_testRange[] = {{1e5, 0.0}}; struct SensorValueRange g_accelRange[] = {{78.0, -78.0}, {78.0, -78.0}, {78.0, -78.0}}; struct SensorValueRange g_alsRange[] = {{10000000, 0}}; struct SensorValueRange g_pedometerRange[] = {{10000.0, 0.0}}; struct SensorValueRange g_proximityRange[] = {{5.0, 0.0}}; struct SensorValueRange g_hallRange[] = {{2.0, 0.0}}; struct SensorValueRange g_barometerRange[] = {{1100.0, -1100.0}, {1100.0, -1100.0}}; struct SensorValueRange g_magneticRange[] = {{2000.0, -2000.0}, {2000.0, -2000.0}, {2000.0, -2000.0}}; struct SensorValueRange g_gyroscopeRange[] = {{35.0, -35.0}, {35.0, -35.0}, {35.0, -35.0}}; struct SensorValueRange g_gravityRange[] = {{78.0, -78.0}, {78.0, -78.0}, {78.0, -78.0}}; struct SensorDevelopmentList g_sensorList[] = { {SENSOR_TYPE_NONE, "sensor_test", 1, 1, g_testRange}, {SENSOR_TYPE_ACCELEROMETER, "accelerometer", 1, 3, g_accelRange}, {SENSOR_TYPE_PEDOMETER, "pedometer", 1, 1, g_pedometerRange}, {SENSOR_TYPE_PROXIMITY, "proximity", 0, 1, g_proximityRange}, {SENSOR_TYPE_HALL, "hallrometer", 1, 1, g_hallRange}, {SENSOR_TYPE_BAROMETER, "barometer", 1, 2, g_barometerRange}, {SENSOR_TYPE_AMBIENT_LIGHT, "als", 1, 1, g_alsRange}, {SENSOR_TYPE_MAGNETIC_FIELD, "magnetometer", 1, 3, g_magneticRange}, {SENSOR_TYPE_GYROSCOPE, "gyroscope", 1, 3, g_gyroscopeRange}, {SENSOR_TYPE_GRAVITY, "gravity", 1, 3, g_gravityRange} }; constexpr int32_t g_listNum = sizeof(g_sensorList) / sizeof(g_sensorList[0]); uint32_t g_sensorDataFlag = 1; constexpr int32_t SENSOR_INTERVAL1 = 200000000; constexpr int32_t SENSOR_INTERVAL2 = 20000000; constexpr int32_t SENSOR_POLL_TIME = 1; constexpr int32_t SENSOR_WAIT_TIME = 100; constexpr float EPSINON = 1e-6; constexpr int32_t ABNORMAL_SENSORID = -1; const struct SensorInterface *g_sensorDev = nullptr; int32_t g_count = 0; struct SensorInformation *g_sensorInfo = nullptr; struct SensorEvents *g_sensorEvents = nullptr; constexpr uint32_t SENSOR_DATA_LEN = 100; void SensorDataVerification(const float &data, const struct SensorDevelopmentList &sensorNode) { for (int32_t j = 0; j < sensorNode.dataDimension; ++j) { printf("sensor id :[%d], data[%d]: %f\n\r", sensorNode.sensorTypeId, j + 1, *(&data + j)); if (sensorNode.dataForm == 0) { if (std::abs(*(&data + j) - sensorNode.valueRange[j].highThreshold) < EPSINON || std::abs(*(&data + j) - sensorNode.valueRange[j].lowThreshold) < EPSINON) { g_sensorDataFlag &= 1; } else { g_sensorDataFlag = 0; printf("%s: %s Not expected\n\r", __func__, sensorNode.sensorName); } } if (sensorNode.dataForm == 1) { if (*(&data + j) > sensorNode.valueRange[j].lowThreshold && *(&data + j) < sensorNode.valueRange[j].highThreshold) { g_sensorDataFlag &= 1; } else { g_sensorDataFlag = 0; printf("%s: %s Not expected\n\r", __func__, sensorNode.sensorName); } } } } int32_t TraditionalSensorTestDataCallback(const struct SensorEvents *event) { if (event == nullptr || event->data == nullptr) { return SENSOR_FAILURE; } for (int32_t i = 0; i < g_listNum; ++i) { if (event->sensorId == g_sensorList[i].sensorTypeId) { float *data = reinterpret_cast<float*>(event->data); SensorDataVerification(*data, g_sensorList[i]); } } return SENSOR_SUCCESS; } int32_t MedicalSensorTestDataCallback(const struct SensorEvents *event) { (void)event; return SENSOR_SUCCESS; } } class HdfSensorTest : public testing::Test { public: static void SetUpTestCase(); static void TearDownTestCase(); void SetUp(); void TearDown(); }; void HdfSensorTest::SetUpTestCase() { g_sensorDev = NewSensorInterfaceInstance(); if (g_sensorDev == nullptr) { printf("test sensorHdi get Module instance failed\n\r"); return; } int32_t ret = g_sensorDev->GetAllSensors(&g_sensorInfo, &g_count); if (ret == SENSOR_FAILURE) { printf("get sensor information failed\n\r"); } } void HdfSensorTest::TearDownTestCase() { if (g_sensorDev != nullptr) { FreeSensorInterfaceInstance(); g_sensorDev = nullptr; } } void HdfSensorTest::SetUp() { } void HdfSensorTest::TearDown() { } /** * @tc.name: GetSensorInstance001 * @tc.desc: Create a sensor instance and check whether the instance is empty. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869N, AR000F8QNL */ HWTEST_F(HdfSensorTest, GetSensorInstance001, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); const struct SensorInterface *sensorDev = NewSensorInterfaceInstance(); EXPECT_EQ(sensorDev, g_sensorDev); } /** * @tc.name: RemoveSensorInstance001 * @tc.desc: The sensor instance is successfully removed. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869O, AR000F8QNL */ HWTEST_F(HdfSensorTest, RemoveSensorInstance001, TestSize.Level1) { int32_t ret = FreeSensorInterfaceInstance(); ASSERT_EQ(SENSOR_SUCCESS, ret); g_sensorDev = NewSensorInterfaceInstance(); ASSERT_NE(nullptr, g_sensorDev); ret = g_sensorDev->GetAllSensors(&g_sensorInfo, &g_count); EXPECT_EQ(SENSOR_SUCCESS, ret); } /** * @tc.name: RegisterSensorDataCb001 * @tc.desc: Returns 0 if the callback is successfully registered; returns a negative value otherwise. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869P, AR000F8QNL */ HWTEST_F(HdfSensorTest, RegisterSensorDataCb001, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->Register(TRADITIONAL_SENSOR_TYPE, TraditionalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); ret = g_sensorDev->Unregister(TRADITIONAL_SENSOR_TYPE, TraditionalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); } /** * @tc.name: RegisterSensorDataCb002 * @tc.desc: Returns 0 if the callback is successfully registered; returns a negative value otherwise. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869P */ HWTEST_F(HdfSensorTest, RegisterSensorDataCb002, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->Register(TRADITIONAL_SENSOR_TYPE, nullptr); EXPECT_EQ(SENSOR_NULL_PTR, ret); ret = g_sensorDev->Unregister(0, nullptr); EXPECT_EQ(SENSOR_NULL_PTR, ret); } /** * @tc.name: RegisterSensorDataCb003 * @tc.desc: Returns 0 if the callback is successfully registered; returns a negative value otherwise. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869P, AR000F8QNL */ HWTEST_F(HdfSensorTest, RegisterSensorDataCb003, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->Register(MEDICAL_SENSOR_TYPE, MedicalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); ret = g_sensorDev->Unregister(MEDICAL_SENSOR_TYPE, MedicalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); } /** * @tc.name: RegisterSensorDataCb004 * @tc.desc: Returns 0 if the callback is successfully registered; returns a negative value otherwise. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869P */ HWTEST_F(HdfSensorTest, RegisterSensorDataCb004, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->Register(MEDICAL_SENSOR_TYPE, nullptr); EXPECT_EQ(SENSOR_NULL_PTR, ret); ret = g_sensorDev->Unregister(MEDICAL_SENSOR_TYPE, nullptr); EXPECT_EQ(SENSOR_NULL_PTR, ret); } /** * @tc.name: RegisterSensorDataCb005 * @tc.desc: Returns 0 if the callback is successfully registered; returns a negative value otherwise. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869P */ HWTEST_F(HdfSensorTest, RegisterSensorDataCb005, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->Register(SENSOR_TYPE_MAX, nullptr); EXPECT_EQ(SENSOR_INVALID_PARAM, ret); ret = g_sensorDev->Unregister(SENSOR_TYPE_MAX, nullptr); EXPECT_EQ(SENSOR_INVALID_PARAM, ret); } /** * @tc.name: GetSensorList001 * @tc.desc: Obtains information about all sensors in the system. Validity check of input parameters. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869Q */ HWTEST_F(HdfSensorTest, GetSensorList001, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorInfo); EXPECT_GT(g_count, 0); } /** * @tc.name: GetSensorList002 * @tc.desc: Obtains information about all sensors in the system. Validity check of input parameters. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869Q */ HWTEST_F(HdfSensorTest, GetSensorList002, TestSize.Level1) { struct SensorInformation *info = nullptr; int32_t j; ASSERT_NE(nullptr, g_sensorInfo); EXPECT_GT(g_count, 0); printf("get sensor list num[%d]\n\r", g_count); info = g_sensorInfo; for (int32_t i = 0; i < g_count; ++i) { printf("get sensoriId[%d], info name[%s], power[%f]\n\r", info->sensorId, info->sensorName, info->power); for (j = 0; j < g_listNum; ++j) { if (info->sensorId == g_sensorList[j].sensorTypeId) { EXPECT_STRNE("", info->sensorName); break; } } info++; } } /** * @tc.name: GetSensorList003 * @tc.desc: Obtains information about all sensors in the system. The operations include obtaining sensor information, * subscribing to or unsubscribing from sensor data, enabling or disabling a sensor, * setting the sensor data reporting mode, and setting sensor options such as the accuracy and measurement range. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869Q */ HWTEST_F(HdfSensorTest, GetSensorList003, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->GetAllSensors(nullptr, &g_count); EXPECT_EQ(SENSOR_NULL_PTR, ret); ret = g_sensorDev->GetAllSensors(&g_sensorInfo, nullptr); EXPECT_EQ(SENSOR_NULL_PTR, ret); ret = g_sensorDev->GetAllSensors(nullptr, nullptr); EXPECT_EQ(SENSOR_NULL_PTR, ret); } /** * @tc.name: EnableSensor001 * @tc.desc: Enables the sensor unavailable in the sensor list based on the specified sensor ID. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869R, AR000F8QNL */ HWTEST_F(HdfSensorTest, EnableSensor001, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->Register(TRADITIONAL_SENSOR_TYPE, TraditionalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); struct SensorInformation *info = nullptr; ASSERT_NE(nullptr, g_sensorInfo); info = g_sensorInfo; for (int32_t i = 0; i < g_count; i++) { ret = g_sensorDev->SetBatch(info->sensorId, SENSOR_INTERVAL1, SENSOR_POLL_TIME); EXPECT_EQ(SENSOR_SUCCESS, ret); ret = g_sensorDev->Enable(info->sensorId); EXPECT_EQ(SENSOR_SUCCESS, ret); OsalSleep(SENSOR_POLL_TIME); ret = g_sensorDev->Disable(info->sensorId); EXPECT_EQ(SENSOR_SUCCESS, ret); info++; } ret = g_sensorDev->Unregister(TRADITIONAL_SENSOR_TYPE, TraditionalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); EXPECT_EQ(g_sensorDataFlag, 1); g_sensorDataFlag = 1; } /** * @tc.name: EnableSensor002 * @tc.desc: Enables the sensor available in the sensor list based on the specified sensor ID. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869R */ HWTEST_F(HdfSensorTest, EnableSensor002, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); ASSERT_NE(nullptr, g_sensorInfo); int32_t ret = g_sensorDev->Enable(ABNORMAL_SENSORID); EXPECT_EQ(SENSOR_NOT_SUPPORT, ret); ret = g_sensorDev->Disable(ABNORMAL_SENSORID); EXPECT_EQ(SENSOR_NOT_SUPPORT, ret); } /** * @tc.name: SetSensorBatch001 * @tc.desc: Sets the sampling time and data report interval for sensors in batches. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869T */ HWTEST_F(HdfSensorTest, SetSensorBatch001, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); struct SensorInformation *info = nullptr; int32_t ret = g_sensorDev->Register(TRADITIONAL_SENSOR_TYPE, TraditionalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); ASSERT_NE(nullptr, g_sensorInfo); info = g_sensorInfo; for (int32_t i = 0; i < g_count; i++) { ret = g_sensorDev->SetBatch(info->sensorId, SENSOR_INTERVAL2, SENSOR_POLL_TIME); EXPECT_EQ(SENSOR_SUCCESS, ret); ret = g_sensorDev->Enable(info->sensorId); EXPECT_EQ(SENSOR_SUCCESS, ret); OsalMSleep(SENSOR_WAIT_TIME); ret = g_sensorDev->Disable(info->sensorId); EXPECT_EQ(SENSOR_SUCCESS, ret); info++; } ret = g_sensorDev->Unregister(TRADITIONAL_SENSOR_TYPE, TraditionalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); EXPECT_EQ(g_sensorDataFlag, 1); g_sensorDataFlag = 1; } /** @tc.name: SetSensorBatch002 @tc.desc: Sets the sampling time and data report interval for sensors in batches. @tc.type: FUNC @tc.requrire: SR000F869M, AR000F869U */ HWTEST_F(HdfSensorTest, SetSensorBatch002, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->SetBatch(ABNORMAL_SENSORID, 0, 0); EXPECT_EQ(SENSOR_NOT_SUPPORT, ret); } /** @tc.name: SetSensorBatch003 @tc.desc: Sets the sampling time and data report interval for sensors in batches. @tc.type: FUNC @tc.requrire: SR000F869M, AR000F869U */ HWTEST_F(HdfSensorTest, SetSensorBatch003, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); struct SensorInformation *info = nullptr; ASSERT_NE(nullptr, g_sensorInfo); info = g_sensorInfo; for (int32_t i = 0; i < g_count; i++) { int32_t ret = g_sensorDev->SetBatch(info->sensorId, -1, SENSOR_POLL_TIME); EXPECT_EQ(SENSOR_INVALID_PARAM, ret); info++; } } /** * @tc.name: SetSensorMode001 * @tc.desc: Sets the data reporting mode for the specified sensor. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869U, AR000F8QNL */ HWTEST_F(HdfSensorTest, SetSensorMode001, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); struct SensorInformation *info = nullptr; int32_t ret = g_sensorDev->Register(TRADITIONAL_SENSOR_TYPE, TraditionalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); ASSERT_NE(nullptr, g_sensorInfo); info = g_sensorInfo; for (int32_t i = 0; i < g_count; i++) { ret = g_sensorDev->SetBatch(info->sensorId, SENSOR_INTERVAL1, SENSOR_POLL_TIME); EXPECT_EQ(SENSOR_SUCCESS, ret); if (info->sensorId == SENSOR_TYPE_HALL) { ret = g_sensorDev->SetMode(info->sensorId, SENSOR_MODE_ON_CHANGE); EXPECT_EQ(SENSOR_SUCCESS, ret); } else { ret = g_sensorDev->SetMode(info->sensorId, SENSOR_MODE_REALTIME); EXPECT_EQ(SENSOR_SUCCESS, ret); } ret = g_sensorDev->Enable(info->sensorId); EXPECT_EQ(SENSOR_SUCCESS, ret); OsalMSleep(SENSOR_WAIT_TIME); ret = g_sensorDev->Disable(info->sensorId); EXPECT_EQ(SENSOR_SUCCESS, ret); info++; } ret = g_sensorDev->Unregister(TRADITIONAL_SENSOR_TYPE, TraditionalSensorTestDataCallback); EXPECT_EQ(SENSOR_SUCCESS, ret); EXPECT_EQ(1, g_sensorDataFlag); g_sensorDataFlag = 1; } /** * @tc.name: SetSensorMode002 * @tc.desc: Sets the data reporting mode for the specified sensor.The current real-time polling mode is valid. * Other values are invalid. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869U */ HWTEST_F(HdfSensorTest, SetSensorMode002, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->SetBatch(ABNORMAL_SENSORID, SENSOR_INTERVAL1, SENSOR_POLL_TIME); EXPECT_EQ(SENSOR_NOT_SUPPORT, ret); } /** * @tc.name: SetSensorMode002 * @tc.desc: Sets the data reporting mode for the specified sensor.The current real-time polling mode is valid. * Other values are invalid. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869U */ HWTEST_F(HdfSensorTest, SetSensorMode003, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); struct SensorInformation *info = nullptr; ASSERT_NE(nullptr, g_sensorInfo); info = g_sensorInfo; for (int32_t i = 0; i < g_count; i++) { int32_t ret = g_sensorDev->SetBatch(info->sensorId, SENSOR_INTERVAL1, SENSOR_POLL_TIME); EXPECT_EQ(SENSOR_SUCCESS, ret); ret = g_sensorDev->SetMode(info->sensorId, SENSOR_MODE_DEFAULT); EXPECT_EQ(SENSOR_FAILURE, ret); ret = g_sensorDev->Enable(info->sensorId); EXPECT_EQ(SENSOR_SUCCESS, ret); OsalMSleep(SENSOR_WAIT_TIME); ret = g_sensorDev->Disable(info->sensorId); EXPECT_EQ(SENSOR_SUCCESS, ret); info++; } } /** * @tc.name: SetSensorOption001 * @tc.desc: Sets options for the specified sensor, including its measurement range and accuracy. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869U */ HWTEST_F(HdfSensorTest, SetSensorOption001, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); struct SensorInformation *info = nullptr; ASSERT_NE(nullptr, g_sensorInfo); info = g_sensorInfo; for (int32_t i = 0; i < g_count; i++) { int32_t ret = g_sensorDev->SetOption(info->sensorId, 0); EXPECT_EQ(SENSOR_SUCCESS, ret); info++; } } /** * @tc.name: SetSensorOption001 * @tc.desc: Sets options for the specified sensor, including its measurement range and accuracy. * @tc.type: FUNC * @tc.require: SR000F869M, AR000F869U */ HWTEST_F(HdfSensorTest, SetSensorOption002, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->SetOption(ABNORMAL_SENSORID, 0); EXPECT_EQ(SENSOR_NOT_SUPPORT, ret); } /** * @tc.name: ReadSensorData001 * @tc.desc: Read event data for the specified sensor. * @tc.type: FUNC * @tc.require: AR000HQ6N4 */ HWTEST_F(HdfSensorTest, ReadSensorData001, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); g_sensorEvents = (struct SensorEvents*)OsalMemCalloc(sizeof(*g_sensorEvents)); ASSERT_NE(nullptr, g_sensorEvents); g_sensorEvents->data = (uint8_t *)OsalMemCalloc(SENSOR_DATA_LEN); ASSERT_NE(nullptr, g_sensorEvents->data); g_sensorEvents->dataLen = SENSOR_DATA_LEN; int32_t ret = g_sensorDev->Enable(SENSOR_TYPE_AMBIENT_LIGHT); EXPECT_EQ(SENSOR_SUCCESS, ret); ret = g_sensorDev->ReadData(SENSOR_TYPE_AMBIENT_LIGHT, g_sensorEvents); EXPECT_EQ(SENSOR_SUCCESS, ret); printf("sensorId[%d], mode[%d], option[%u]\n\r", g_sensorEvents->sensorId, g_sensorEvents->mode, g_sensorEvents->option); for (int32_t i = 0; i < g_listNum; i++) { if (g_sensorEvents->sensorId == g_sensorList[i].sensorTypeId) { float *data = reinterpret_cast<float*>(g_sensorEvents->data); SensorDataVerification(*data, g_sensorList[i]); } } ret = g_sensorDev->Disable(SENSOR_TYPE_AMBIENT_LIGHT); EXPECT_EQ(SENSOR_SUCCESS, ret); OsalMemFree(g_sensorEvents->data); OsalMemFree(g_sensorEvents); } /** * @tc.name: ReadSensorData002 * @tc.desc: Read event data for the specified sensor. * @tc.type: FUNC * @tc.require: AR000HQ6N4 */ HWTEST_F(HdfSensorTest, ReadSensorData002, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); int32_t ret = g_sensorDev->ReadData(SENSOR_TYPE_AMBIENT_LIGHT, nullptr); EXPECT_EQ(SENSOR_NULL_PTR, ret); } /** * @tc.name: ReadSensorData003 * @tc.desc: Read event data for the specified sensor. * @tc.type: FUNC * @tc.require: AR000HQ6N4 */ HWTEST_F(HdfSensorTest, ReadSensorData003, TestSize.Level1) { ASSERT_NE(nullptr, g_sensorDev); g_sensorEvents = (struct SensorEvents*)OsalMemCalloc(sizeof(*g_sensorEvents)); ASSERT_NE(nullptr, g_sensorEvents); g_sensorEvents->data = (uint8_t *)OsalMemCalloc(SENSOR_DATA_LEN); ASSERT_NE(nullptr, g_sensorEvents->data); g_sensorEvents->dataLen = SENSOR_DATA_LEN; int32_t ret = g_sensorDev->ReadData(ABNORMAL_SENSORID, g_sensorEvents); EXPECT_EQ(SENSOR_NOT_SUPPORT, ret); OsalMemFree(g_sensorEvents->data); OsalMemFree(g_sensorEvents); }