diff --git a/services/audio_engine/manager/include/hpae_capturer_manager.h b/services/audio_engine/manager/include/hpae_capturer_manager.h index 757c52408898a100e2a4a70424db15c05157bb2a..baae99dfaab074146c2182ae51d5e7c25bde43f2 100644 --- a/services/audio_engine/manager/include/hpae_capturer_manager.h +++ b/services/audio_engine/manager/include/hpae_capturer_manager.h @@ -94,6 +94,8 @@ private: int32_t CaptureEffectCreate(const HpaeProcessorType &sceneType, const AudioEnhanceScene &enhanceScene); int32_t CaptureEffectRelease(const HpaeProcessorType &sceneType); int32_t InitCapturerManager(); + int32_t CheckFramelen(); + int32_t CheckStreamInfo(const HpaeStreamInfo &streamInfo); void CreateSourceAttr(IAudioSourceAttr &attr); int32_t CapturerSourceStart(); int32_t CapturerSourceStop(); diff --git a/services/audio_engine/manager/include/hpae_inner_capturer_manager.h b/services/audio_engine/manager/include/hpae_inner_capturer_manager.h index e5a6022c1f756128879915ffd9fdc5f74d77b1b4..1443c559a56712b01fadf7a938b294ed11fb7d7a 100644 --- a/services/audio_engine/manager/include/hpae_inner_capturer_manager.h +++ b/services/audio_engine/manager/include/hpae_inner_capturer_manager.h @@ -116,6 +116,8 @@ private: void MoveAllStreamToNewSinkInner(const std::string &sinkName, const std::vector &moveIds, MoveSessionType moveType); int32_t InitSinkInner(bool isReload = false); + int32_t CheckFramelen(); + int32_t CheckStreamInfo(const HpaeStreamInfo &streamInfo); uint32_t sinkInputNodeCounter_ = 0; int32_t sceneTypeToProcessClusterCount_ = 0; std::atomic isInit_ = false; diff --git a/services/audio_engine/manager/include/hpae_offload_renderer_manager.h b/services/audio_engine/manager/include/hpae_offload_renderer_manager.h index 9228e5821e7bc1d054d03d02ec472b35b82a8cb9..553ca6cb1aebe54b22981be79c58133e1e5bdfe3 100644 --- a/services/audio_engine/manager/include/hpae_offload_renderer_manager.h +++ b/services/audio_engine/manager/include/hpae_offload_renderer_manager.h @@ -105,6 +105,8 @@ private: void MoveAllStreamToNewSink(const std::string &sinkName, const std::vector &moveIds, MoveSessionType moveType); int32_t InitSinkInner(bool isReload = false); + int32_t CheckFramelen(); + int32_t CheckStreamInfo(const HpaeStreamInfo &streamInfo); void UpdateAppsUid(); HpaeRenderSessionInfo sessionInfo_; diff --git a/services/audio_engine/manager/include/hpae_renderer_manager.h b/services/audio_engine/manager/include/hpae_renderer_manager.h index a0b2d52321841f2b801a192a3c8659cd2015d83e..9a636355eab269dba108cbe4412b532d60157ce3 100644 --- a/services/audio_engine/manager/include/hpae_renderer_manager.h +++ b/services/audio_engine/manager/include/hpae_renderer_manager.h @@ -125,6 +125,8 @@ private: void CreateDefaultProcessCluster(HpaeNodeInfo &nodeInfo); void CreateOutputClusterNodeInfo(HpaeNodeInfo &nodeInfo); int32_t InitManager(bool isReload = false); + int32_t CheckFramelen(); + int32_t CheckStreamInfo(const HpaeStreamInfo &streamInfo); void InitDefaultNodeInfo(); void MoveStreamSync(uint32_t sessionId, const std::string &sinkName); void UpdateAppsUid(); diff --git a/services/audio_engine/manager/src/hpae_capturer_manager.cpp b/services/audio_engine/manager/src/hpae_capturer_manager.cpp index 3b67c9df0eb728e0fc0017b3a74e4ef7be92c601..3dfa7d964850e2d255150a1265d193bbe8d45070 100644 --- a/services/audio_engine/manager/src/hpae_capturer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_capturer_manager.cpp @@ -33,6 +33,7 @@ namespace AudioStandard { namespace HPAE { const std::string DEFAULT_DEVICE_CLASS = "primary"; const std::string DEFAULT_DEVICE_NETWORKID = "LocalDevice"; +const uint32_t FRAME_LENGTH_LIMIT = 38400; HpaeCapturerManager::HpaeCapturerManager(HpaeSourceInfo &sourceInfo) : hpaeNoLockQueue_(CURRENT_REQUEST_COUNT), sourceInfo_(sourceInfo) @@ -193,6 +194,10 @@ int32_t HpaeCapturerManager::CreateStream(const HpaeStreamInfo &streamInfo) AUDIO_ERR_LOG("HpaeCapturerManager is not init"); return ERR_INVALID_OPERATION; } + int32_t checkRet = CheckStreamInfo(streamInfo); + if (checkRet != SUCCESS) { + return checkRet; + } auto request = [this, streamInfo]() { AUDIO_INFO_LOG("CreateStream sessionId %{public}u deviceName %{public}s", streamInfo.sessionId, @@ -204,6 +209,18 @@ int32_t HpaeCapturerManager::CreateStream(const HpaeStreamInfo &streamInfo) return SUCCESS; } +int32_t HpaeCapturerManager::CheckStreamInfo(const HpaeStreamInfo &streamInfo) +{ + if (streamInfo.frameLen == 0) { + AUDIO_ERR_LOG("FrameLen is 0."); + return ERROR; + } else if (streamInfo.frameLen > FRAME_LENGTH_LIMIT) { + AUDIO_ERR_LOG("FrameLen is over-sized."); + return ERROR; + } + return SUCCESS; +} + int32_t HpaeCapturerManager::DestroyStream(uint32_t sessionId) { if (!IsInit()) { @@ -655,9 +672,9 @@ int32_t HpaeCapturerManager::InitCapturerManager() HpaeNodeInfo nodeInfo; HpaeNodeInfo ecNodeInfo; HpaeNodeInfo micRefNodeInfo; - if (sourceInfo_.frameLen == 0) { - AUDIO_ERR_LOG("FrameLen is 0"); - return ERROR; + int32_t checkRet = CheckFramelen(); + if (checkRet != SUCCESS) { + return checkRet; } nodeInfo.deviceClass = sourceInfo_.deviceClass; nodeInfo.channels = sourceInfo_.channels; @@ -696,6 +713,17 @@ int32_t HpaeCapturerManager::InitCapturerManager() return SUCCESS; } +int32_t HpaeCapturerManager::CheckFramelen() +{ + if (sourceInfo_.frameLen == 0) { + AUDIO_ERR_LOG("FrameLen is 0."); + return ERROR; + } else if (sourceInfo_.frameLen > FRAME_LENGTH_LIMIT) { + AUDIO_ERR_LOG("FrameLen is over-sized."); + return ERROR; + } + return SUCCESS; +} int32_t HpaeCapturerManager::Init(bool isReload) { diff --git a/services/audio_engine/manager/src/hpae_inner_capturer_manager.cpp b/services/audio_engine/manager/src/hpae_inner_capturer_manager.cpp index 52da521dd7e06a880a5645a94450530362759f0b..4085528f6b60deb84d735aa046619c6ea7ce16e1 100644 --- a/services/audio_engine/manager/src/hpae_inner_capturer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_inner_capturer_manager.cpp @@ -28,6 +28,7 @@ namespace OHOS { namespace AudioStandard { namespace HPAE { +const uint32_t FRAME_LENGTH_LIMIT = 38400; // todo sinkInfo HpaeInnerCapturerManager::HpaeInnerCapturerManager(HpaeSinkInfo &sinkInfo) : sinkInfo_(sinkInfo), hpaeNoLockQueue_(CURRENT_REQUEST_COUNT) @@ -180,6 +181,10 @@ int32_t HpaeInnerCapturerManager::CreateStream(const HpaeStreamInfo &streamInfo) AUDIO_INFO_LOG("CreateStream not init"); return ERR_INVALID_OPERATION; } + int32_t checkRet = CheckStreamInfo(streamInfo); + if (checkRet != SUCCESS) { + return checkRet; + } auto request = [this, streamInfo]() { if (streamInfo.streamClassType == HPAE_STREAM_CLASS_TYPE_PLAY) { Trace trace("HpaeInnerCapturerManager::CreateRendererStream id[" + @@ -202,6 +207,18 @@ int32_t HpaeInnerCapturerManager::CreateStream(const HpaeStreamInfo &streamInfo) return SUCCESS; } +int32_t HpaeInnerCapturerManager::CheckStreamInfo(const HpaeStreamInfo &streamInfo) +{ + if (streamInfo.frameLen == 0) { + AUDIO_ERR_LOG("FrameLen is 0."); + return ERROR; + } else if (streamInfo.frameLen > FRAME_LENGTH_LIMIT) { + AUDIO_ERR_LOG("FrameLen is over-sized."); + return ERROR; + } + return SUCCESS; +} + int32_t HpaeInnerCapturerManager::DestroyStream(uint32_t sessionId) { if (!IsInit()) { @@ -272,11 +289,11 @@ int32_t HpaeInnerCapturerManager::Init(bool isReload) int32_t HpaeInnerCapturerManager::InitSinkInner(bool isReload) { Trace trace("HpaeInnerCapturerManager::InitSinkInner"); - if (sinkInfo_.frameLen == 0) { + int32_t checkRet = CheckFramelen(); + if (checkRet != SUCCESS) { TriggerCallback(isReload ? RELOAD_AUDIO_SINK_RESULT : INIT_DEVICE_RESULT, sinkInfo_.deviceName, ERR_INVALID_PARAM); - AUDIO_ERR_LOG("FrameLen is 0"); - return ERROR; + return checkRet; } HpaeNodeInfo nodeInfo; nodeInfo.channels = sinkInfo_.channels; @@ -295,6 +312,18 @@ int32_t HpaeInnerCapturerManager::InitSinkInner(bool isReload) return SUCCESS; } +int32_t HpaeInnerCapturerManager::CheckFramelen() +{ + if (sinkInfo_.frameLen == 0) { + AUDIO_ERR_LOG("FrameLen is 0."); + return ERROR; + } else if (sinkInfo_.frameLen > FRAME_LENGTH_LIMIT) { + AUDIO_ERR_LOG("FrameLen is over-sized."); + return ERROR; + } + return SUCCESS; +} + bool HpaeInnerCapturerManager::DeactivateThread() { if (hpaeSignalProcessThread_ != nullptr) { diff --git a/services/audio_engine/manager/src/hpae_offload_renderer_manager.cpp b/services/audio_engine/manager/src/hpae_offload_renderer_manager.cpp index e30f18124cae0b805c38562a95e6f9328aeb52b7..c242f5b8534baaef3c67ddf17974e6d80e4dfd51 100644 --- a/services/audio_engine/manager/src/hpae_offload_renderer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_offload_renderer_manager.cpp @@ -29,6 +29,7 @@ namespace AudioStandard { namespace HPAE { namespace { constexpr uint32_t HISTORY_INTERVAL_S = 7; // 7s buffer for rewind +constexpr uint32_t FRAME_LENGTH_LIMIT = 38400; } HpaeOffloadRendererManager::HpaeOffloadRendererManager(HpaeSinkInfo &sinkInfo) @@ -118,6 +119,10 @@ int32_t HpaeOffloadRendererManager::CreateStream(const HpaeStreamInfo &streamInf if (!IsInit()) { return ERR_INVALID_OPERATION; } + int32_t checkRet = CheckStreamInfo(streamInfo); + if (checkRet != SUCCESS) { + return checkRet; + } auto request = [this, streamInfo]() { CreateInputSession(streamInfo); sessionInfo_.state = HPAE_SESSION_PREPARED; @@ -127,6 +132,18 @@ int32_t HpaeOffloadRendererManager::CreateStream(const HpaeStreamInfo &streamInf return SUCCESS; } +int32_t HpaeOffloadRendererManager::CheckStreamInfo(const HpaeStreamInfo &streamInfo) +{ + if (streamInfo.frameLen == 0) { + AUDIO_ERR_LOG("FrameLen is 0."); + return ERROR; + } else if (streamInfo.frameLen > FRAME_LENGTH_LIMIT) { + AUDIO_ERR_LOG("FrameLen is over-sized."); + return ERROR; + } + return SUCCESS; +} + void HpaeOffloadRendererManager::DeleteInputSession() { DisConnectInputSession(); @@ -424,11 +441,11 @@ int32_t HpaeOffloadRendererManager::InitSinkInner(bool isReload) { AUDIO_INFO_LOG("HpaeOffloadRendererManager::init"); HpaeNodeInfo nodeInfo; - if (sinkInfo_.frameLen == 0) { + int32_t checkRet = CheckFramelen(); + if (checkRet != SUCCESS) { TriggerCallback(isReload ? RELOAD_AUDIO_SINK_RESULT : INIT_DEVICE_RESULT, sinkInfo_.deviceName, ERR_INVALID_PARAM); - AUDIO_ERR_LOG("FrameLen is 0"); - return ERROR; + return checkRet; } nodeInfo.channels = sinkInfo_.channels; nodeInfo.format = sinkInfo_.format; @@ -462,6 +479,18 @@ int32_t HpaeOffloadRendererManager::InitSinkInner(bool isReload) return SUCCESS; } +int32_t HpaeOffloadRendererManager::CheckFramelen() +{ + if (sinkInfo_.frameLen == 0) { + AUDIO_ERR_LOG("FrameLen is 0."); + return ERROR; + } else if (sinkInfo_.frameLen > FRAME_LENGTH_LIMIT) { + AUDIO_ERR_LOG("FrameLen is over-sized."); + return ERROR; + } + return SUCCESS; +} + bool HpaeOffloadRendererManager::DeactivateThread() { if (hpaeSignalProcessThread_ != nullptr) { diff --git a/services/audio_engine/manager/src/hpae_renderer_manager.cpp b/services/audio_engine/manager/src/hpae_renderer_manager.cpp index 6b26b84a20034ff8650b7f7db38ecaf31c7c62d9..77f9b9b1942514488e2ee701d12e03ad1a104127 100644 --- a/services/audio_engine/manager/src/hpae_renderer_manager.cpp +++ b/services/audio_engine/manager/src/hpae_renderer_manager.cpp @@ -32,6 +32,7 @@ constexpr int32_t DEFAULT_EFFECT_RATE = 48000; constexpr int32_t DEFAULT_EFFECT_FRAME_LEN = 960; +constexpr int32_t FRAME_LENGTH_LIMIT = 38400; namespace OHOS { namespace AudioStandard { @@ -305,6 +306,10 @@ int32_t HpaeRendererManager::CreateStream(const HpaeStreamInfo &streamInfo) if (!IsInit()) { return ERR_INVALID_OPERATION; } + int32_t checkRet = CheckStreamInfo(streamInfo); + if (checkRet != SUCCESS) { + return checkRet; + } auto request = [this, streamInfo]() { Trace trace("HpaeRendererManager::CreateStream id[" + std::to_string(streamInfo.sessionId) + "]"); @@ -320,6 +325,18 @@ int32_t HpaeRendererManager::CreateStream(const HpaeStreamInfo &streamInfo) return SUCCESS; } +int32_t HpaeRendererManager::CheckStreamInfo(const HpaeStreamInfo &streamInfo) +{ + if (streamInfo.frameLen == 0) { + AUDIO_ERR_LOG("FrameLen is 0."); + return ERROR; + } else if (streamInfo.frameLen > FRAME_LENGTH_LIMIT) { + AUDIO_ERR_LOG("FrameLen is over-sized."); + return ERROR; + } + return SUCCESS; +} + int32_t HpaeRendererManager::DestroyStream(uint32_t sessionId) { if (!IsInit()) { @@ -870,11 +887,11 @@ int32_t HpaeRendererManager::InitManager(bool isReload) { AUDIO_INFO_LOG("init devicename:%{public}s", sinkInfo_.deviceName.c_str()); HpaeNodeInfo nodeInfo; - if (sinkInfo_.frameLen == 0) { + int32_t checkRet = CheckFramelen(); + if (checkRet != SUCCESS) { TriggerCallback(isReload ? RELOAD_AUDIO_SINK_RESULT : INIT_DEVICE_RESULT, sinkInfo_.deviceName, ERR_INVALID_PARAM); - AUDIO_ERR_LOG("FrameLen is 0"); - return ERROR; + return checkRet; } nodeInfo.channels = sinkInfo_.channels; nodeInfo.format = sinkInfo_.format; @@ -913,6 +930,18 @@ int32_t HpaeRendererManager::InitManager(bool isReload) return SUCCESS; } +int32_t HpaeRendererManager::CheckFramelen() +{ + if (sinkInfo_.frameLen == 0) { + AUDIO_ERR_LOG("FrameLen is 0."); + return ERROR; + } else if (sinkInfo_.frameLen > FRAME_LENGTH_LIMIT) { + AUDIO_ERR_LOG("FrameLen is over-sized."); + return ERROR; + } + return SUCCESS; +} + void HpaeRendererManager::InitDefaultNodeInfo() { HpaeNodeInfo defaultNodeInfo; diff --git a/services/audio_engine/test/unittest/manager/hpae_capturer_manager_test.cpp b/services/audio_engine/test/unittest/manager/hpae_capturer_manager_test.cpp index ba976085c2f97b3112c7ddf568aa97c58ab03f64..5b4c7565debe4d6dc49d19119f97bcdda8cd9a92 100644 --- a/services/audio_engine/test/unittest/manager/hpae_capturer_manager_test.cpp +++ b/services/audio_engine/test/unittest/manager/hpae_capturer_manager_test.cpp @@ -33,6 +33,7 @@ namespace HPAE { static std::string g_rootCapturerPath = "/data/source_file_io_48000_2_s16le.pcm"; const uint32_t DEFAULT_FRAME_LENGTH = 960; +const uint32_t OVERSIZED_FRAME_LENGTH = 38500; const uint32_t DEFAULT_SESSION_ID = 123456; const uint32_t DEFAULT_NODE_ID = 1243; const std::string DEFAULT_SOURCE_NAME = "Built_in_mic"; @@ -963,6 +964,61 @@ HWTEST_F(HpaeCapturerManagerTest, InitCapturerManager_001, TestSize.Level1) std::shared_ptr capturerManager = std::make_shared(sourceInfo); EXPECT_EQ(capturerManager->InitCapturerManager(), ERROR); } + +/** + * @tc.name : Test InitCapturerManager_002 + * @tc.type : FUNC + * @tc.number: InitCapturerManager_002 + * @tc.desc : Test InitCapturerManager when frameLen is over-sized. + */ +HWTEST_F(HpaeCapturerManagerTest, InitCapturerManager_002, TestSize.Level1) +{ + HpaeSourceInfo sourceInfo; + InitSourceInfo(sourceInfo); + sourceInfo.frameLen = OVERSIZED_FRAME_LENGTH; + std::shared_ptr capturerManager = std::make_shared(sourceInfo); + EXPECT_EQ(capturerManager->InitCapturerManager(), ERROR); +} + +/** + * @tc.name : Test CreateStream_002 + * @tc.type : FUNC + * @tc.number: CreateStream_002 + * @tc.desc : Test CreateStream when frameLen is 0. + */ +HWTEST_F(HpaeCapturerManagerTest, CreateStream_002, TestSize.Level1) +{ + HpaeSourceInfo sourceInfo; + InitSourceInfo(sourceInfo); + HpaeStreamInfo streamInfo; + InitReloadStreamInfo(streamInfo); + streamInfo.frameLen = 0; + std::shared_ptr capturerManager = std::make_shared(sourceInfo); + EXPECT_EQ(capturerManager->Init(), SUCCESS); + WaitForMsgProcessing(capturerManager); + EXPECT_EQ(capturerManager->IsInit(), true); + EXPECT_EQ(capturerManager->CreateStream(streamInfo), ERROR); +} + +/** + * @tc.name : Test InitCapturerManager_003 + * @tc.type : FUNC + * @tc.number: InitCapturerManager_003 + * @tc.desc : Test InitCapturerManager when frameLen is over-sized. + */ +HWTEST_F(HpaeCapturerManagerTest, CreateStream_003, TestSize.Level1) +{ + HpaeSourceInfo sourceInfo; + InitSourceInfo(sourceInfo); + HpaeStreamInfo streamInfo; + InitReloadStreamInfo(streamInfo); + streamInfo.frameLen = OVERSIZED_FRAME_LENGTH; + std::shared_ptr capturerManager = std::make_shared(sourceInfo); + EXPECT_EQ(capturerManager->Init(), SUCCESS); + WaitForMsgProcessing(capturerManager); + EXPECT_EQ(capturerManager->IsInit(), true); + EXPECT_EQ(capturerManager->CreateStream(streamInfo), ERROR); +} } // namespace HPAE } // namespace AudioStandard } // namespace OHOS \ No newline at end of file diff --git a/services/audio_engine/test/unittest/manager/hpae_inner_capturer_unit_test.cpp b/services/audio_engine/test/unittest/manager/hpae_inner_capturer_unit_test.cpp index a9013402a3c8d2ac07a49d4f883fa2e2b04d0b72..681c682d4c5f4c34c2df53984b9fa1f0d0dc758e 100644 --- a/services/audio_engine/test/unittest/manager/hpae_inner_capturer_unit_test.cpp +++ b/services/audio_engine/test/unittest/manager/hpae_inner_capturer_unit_test.cpp @@ -30,6 +30,7 @@ namespace OHOS { namespace AudioStandard { namespace HPAE { const uint32_t DEFAULT_SESSION_ID = 123456; +const uint32_t OVERSIZED_FRAME_LENGTH = 38500; const float FRAME_LENGTH_IN_SECOND = 0.02; std::string g_rootPath = "/data/"; @@ -654,17 +655,65 @@ HWTEST_F(HpaeInnerCapturerManagerUnitTest, MoveAllStreamToNewSinkInner_001, Test * @tc.name : Test InitSinkInner * @tc.type : FUNC * @tc.number: InitSinkInner_001 - * @tc.desc : Test InitSinkInner. + * @tc.desc : Test InitSinkInner when framelen is 0. */ HWTEST_F(HpaeInnerCapturerManagerUnitTest, InitSinkInner_001, TestSize.Level0) { HpaeSinkInfo sinkInfo = GetInCapSinkInfo(); sinkInfo.frameLen = 0; - bool isReload = 1; + bool isReload = true; hpaeInnerCapturerManager_ = std::make_shared(sinkInfo); - hpaeInnerCapturerManager_->InitSinkInner(isReload); + EXPECT_EQ(hpaeInnerCapturerManager_->InitSinkInner(isReload), ERROR); EXPECT_EQ(hpaeInnerCapturerManager_->IsInit(), false); } + +/** + * @tc.name : Test InitSinkInner + * @tc.type : FUNC + * @tc.number: InitSinkInner_002 + * @tc.desc : Test InitSinkInner when framelen is over-sized. + */ +HWTEST_F(HpaeInnerCapturerManagerUnitTest, InitSinkInner_002, TestSize.Level0) +{ + HpaeSinkInfo sinkInfo = GetInCapSinkInfo(); + sinkInfo.frameLen = OVERSIZED_FRAME_LENGTH; + bool isReload = true; + hpaeInnerCapturerManager_ = std::make_shared(sinkInfo); + EXPECT_EQ(hpaeInnerCapturerManager_->InitSinkInner(isReload), ERROR); + EXPECT_EQ(hpaeInnerCapturerManager_->IsInit(), false); +} + +/** + * @tc.name : Test CreateStream + * @tc.type : FUNC + * @tc.number: CreateStream_003 + * @tc.desc : Test CreateStream when framelen is 0. + */ +HWTEST_F(HpaeInnerCapturerManagerUnitTest, CreateStream_003, TestSize.Level0) +{ + EXPECT_EQ(hpaeInnerCapturerManager_->Init(), SUCCESS); + WaitForMsgProcessing(hpaeInnerCapturerManager_); + EXPECT_EQ(hpaeInnerCapturerManager_->IsInit(), true); + HpaeStreamInfo streamInfo = GetInCapPlayStreamInfo(); + streamInfo.frameLen = 0; + EXPECT_EQ(hpaeInnerCapturerManager_->CreateStream(streamInfo), ERROR); +} + +/** + * @tc.name : Test CreateStream + * @tc.type : FUNC + * @tc.number: CreateStream_004 + * @tc.desc : Test CreateStream when framelen is over-sized. + */ +HWTEST_F(HpaeInnerCapturerManagerUnitTest, CreateStream_004, TestSize.Level0) +{ + EXPECT_EQ(hpaeInnerCapturerManager_->Init(), SUCCESS); + WaitForMsgProcessing(hpaeInnerCapturerManager_); + EXPECT_EQ(hpaeInnerCapturerManager_->IsInit(), true); + HpaeStreamInfo streamInfo = GetInCapPlayStreamInfo(); + streamInfo.frameLen = OVERSIZED_FRAME_LENGTH; + EXPECT_EQ(hpaeInnerCapturerManager_->CreateStream(streamInfo), ERROR); +} } // namespace HPAE } // namespace OHOS::AudioStandard } // namespace OHOS \ No newline at end of file diff --git a/services/audio_engine/test/unittest/manager/hpae_render_manager_test.cpp b/services/audio_engine/test/unittest/manager/hpae_render_manager_test.cpp index 9572428d8473d5a01b69e11e2a1adcf0bc1cf824..ea1c46f578ecd697936fbf51becd480973a3ff9f 100644 --- a/services/audio_engine/test/unittest/manager/hpae_render_manager_test.cpp +++ b/services/audio_engine/test/unittest/manager/hpae_render_manager_test.cpp @@ -40,6 +40,7 @@ namespace { static std::string g_rootPath = "/data/"; constexpr int32_t FRAME_LENGTH_882 = 882; constexpr int32_t FRAME_LENGTH_960 = 960; +constexpr int32_t OVERSIZED_FRAME_LENGTH = 38500; constexpr int32_t TEST_STREAM_SESSION_ID = 123456; constexpr int32_t TEST_SLEEP_TIME_20 = 20; constexpr int32_t TEST_SLEEP_TIME_40 = 40; @@ -1615,12 +1616,12 @@ HWTEST_F(HpaeRendererManagerTest, SendRequestInner_002, TestSize.Level1) } /** - * @tc.name : Test InitSinkInner_001 + * @tc.name : Test HpaeOffloadRendererManagerInitSinkInner_001 * @tc.type : FUNC - * @tc.number: InitSinkInner_001 - * @tc.desc : Test InitSinkInner when frameLen is 0. + * @tc.number: HpaeOffloadRendererManagerInitSinkInner_001 + * @tc.desc : Test HpaeOffloadRendererManagerInitSinkInner when frameLen is 0. */ -HWTEST_F(HpaeRendererManagerTest, InitSinkInner_001, TestSize.Level1) +HWTEST_F(HpaeRendererManagerTest, HpaeOffloadRendererManagerInitSinkInner_001, TestSize.Level1) { HpaeSinkInfo sinkInfo; sinkInfo.deviceNetId = DEFAULT_TEST_DEVICE_NETWORKID; @@ -1634,18 +1635,43 @@ HWTEST_F(HpaeRendererManagerTest, InitSinkInner_001, TestSize.Level1) sinkInfo.deviceType = DEVICE_TYPE_SPEAKER; std::shared_ptr hpaeRendererManager = std::make_shared(sinkInfo); - bool isReload = 1; - hpaeRendererManager->InitSinkInner(isReload); + bool isReload = true; + EXPECT_EQ(hpaeRendererManager->InitSinkInner(isReload), ERROR); EXPECT_EQ(hpaeRendererManager->IsInit(), false); } /** - * @tc.name : Test InitManager_001 + * @tc.name : Test HpaeOffloadRendererManagerInitSinkInner_002 * @tc.type : FUNC - * @tc.number: InitManager_001 - * @tc.desc : Test InitManager when frameLen is 0. + * @tc.number: HpaeOffloadRendererManagerInitSinkInner_002 + * @tc.desc : Test HpaeOffloadRendererManagerInitSinkInner when frameLen is over-sized. */ -HWTEST_F(HpaeRendererManagerTest, InitManager_001, TestSize.Level1) +HWTEST_F(HpaeRendererManagerTest, HpaeOffloadRendererManagerInitSinkInner_002, TestSize.Level1) +{ + HpaeSinkInfo sinkInfo; + sinkInfo.deviceNetId = DEFAULT_TEST_DEVICE_NETWORKID; + sinkInfo.deviceClass = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.adapterName = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.filePath = g_rootPath + "constructHpaeRendererManagerTest.pcm"; + sinkInfo.frameLen = OVERSIZED_FRAME_LENGTH; + sinkInfo.samplingRate = SAMPLE_RATE_48000; + sinkInfo.format = SAMPLE_F32LE; + sinkInfo.channels = STEREO; + sinkInfo.deviceType = DEVICE_TYPE_SPEAKER; + std::shared_ptr hpaeRendererManager = + std::make_shared(sinkInfo); + bool isReload = true; + EXPECT_EQ(hpaeRendererManager->InitSinkInner(isReload), ERROR); + EXPECT_EQ(hpaeRendererManager->IsInit(), false); +} + +/** + * @tc.name : Test HpaeRendererManagerInitManager_001 + * @tc.type : FUNC + * @tc.number: HpaeRendererManagerInitManager_001 + * @tc.desc : Test HpaeRendererManagerInitManager when frameLen is 0. + */ +HWTEST_F(HpaeRendererManagerTest, HpaeRendererManagerInitManager_001, TestSize.Level1) { HpaeSinkInfo sinkInfo; sinkInfo.deviceNetId = DEFAULT_TEST_DEVICE_NETWORKID; @@ -1659,8 +1685,145 @@ HWTEST_F(HpaeRendererManagerTest, InitManager_001, TestSize.Level1) sinkInfo.deviceType = DEVICE_TYPE_SPEAKER; std::shared_ptr hpaeRendererManager = std::make_shared(sinkInfo); - bool isReload = 1; - hpaeRendererManager->InitManager(isReload); + bool isReload = true; + EXPECT_EQ(hpaeRendererManager->InitManager(isReload), ERROR); + EXPECT_EQ(hpaeRendererManager->IsInit(), false); +} + +/** + * @tc.name : Test HpaeRendererManagerInitManager_002 + * @tc.type : FUNC + * @tc.number: HpaeRendererManagerInitManager_002 + * @tc.desc : Test HpaeRendererManagerInitManager when frameLen is over-sized. + */ +HWTEST_F(HpaeRendererManagerTest, HpaeRendererManagerInitManager_002, TestSize.Level1) +{ + HpaeSinkInfo sinkInfo; + sinkInfo.deviceNetId = DEFAULT_TEST_DEVICE_NETWORKID; + sinkInfo.deviceClass = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.adapterName = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.filePath = g_rootPath + "constructHpaeRendererManagerTest.pcm"; + sinkInfo.frameLen = OVERSIZED_FRAME_LENGTH; + sinkInfo.samplingRate = SAMPLE_RATE_48000; + sinkInfo.format = SAMPLE_F32LE; + sinkInfo.channels = STEREO; + sinkInfo.deviceType = DEVICE_TYPE_SPEAKER; + std::shared_ptr hpaeRendererManager = + std::make_shared(sinkInfo); + bool isReload = true; + EXPECT_EQ(hpaeRendererManager->InitManager(isReload), ERROR); EXPECT_EQ(hpaeRendererManager->IsInit(), false); } + +/** + * @tc.name : Test HpaeOffloadRendererManagerCreateStream_001 + * @tc.type : FUNC + * @tc.number: HpaeOffloadRendererManagerCreateStream_001 + * @tc.desc : Test HpaeOffloadRendererManagerCreateStream when frameLen is 0. + */ +HWTEST_F(HpaeRendererManagerTest, HpaeOffloadRendererManagerCreateStream_001, TestSize.Level1) +{ + HpaeSinkInfo sinkInfo; + sinkInfo.deviceNetId = DEFAULT_TEST_DEVICE_NETWORKID; + sinkInfo.deviceClass = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.adapterName = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.filePath = g_rootPath + "constructHpaeRendererManagerTest.pcm"; + sinkInfo.frameLen = FRAME_LENGTH_960; + sinkInfo.samplingRate = SAMPLE_RATE_48000; + sinkInfo.format = SAMPLE_F32LE; + sinkInfo.channels = STEREO; + sinkInfo.deviceType = DEVICE_TYPE_SPEAKER; + bool isReload = true; + std::shared_ptr hpaeRendererManager = std::make_shared(sinkInfo); + EXPECT_EQ(hpaeRendererManager->Init(isReload), SUCCESS); + WaitForMsgProcessing(hpaeRendererManager); + EXPECT_EQ(hpaeRendererManager->IsInit(), true); + HpaeStreamInfo streamInfo; + streamInfo.frameLen = 0; + EXPECT_EQ(hpaeRendererManager->CreateStream(streamInfo), ERROR); +} + +/** + * @tc.name : Test HpaeOffloadRendererManagerCreateStream_002 + * @tc.type : FUNC + * @tc.number: HpaeOffloadRendererManagerCreateStream_002 + * @tc.desc : Test HpaeOffloadRendererManagerCreateStream when frameLen is over-sized. + */ +HWTEST_F(HpaeRendererManagerTest, HpaeOffloadRendererManagerCreateStream_002, TestSize.Level1) +{ + HpaeSinkInfo sinkInfo; + sinkInfo.deviceNetId = DEFAULT_TEST_DEVICE_NETWORKID; + sinkInfo.deviceClass = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.adapterName = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.filePath = g_rootPath + "constructHpaeRendererManagerTest.pcm"; + sinkInfo.frameLen = FRAME_LENGTH_960; + sinkInfo.samplingRate = SAMPLE_RATE_48000; + sinkInfo.format = SAMPLE_F32LE; + sinkInfo.channels = STEREO; + sinkInfo.deviceType = DEVICE_TYPE_SPEAKER; + bool isReload = true; + std::shared_ptr hpaeRendererManager = std::make_shared(sinkInfo); + EXPECT_EQ(hpaeRendererManager->Init(isReload), SUCCESS); + WaitForMsgProcessing(hpaeRendererManager); + EXPECT_EQ(hpaeRendererManager->IsInit(), true); + HpaeStreamInfo streamInfo; + streamInfo.frameLen = OVERSIZED_FRAME_LENGTH; + EXPECT_EQ(hpaeRendererManager->CreateStream(streamInfo), ERROR); +} + +/** + * @tc.name : Test HpaeRendererManagerCreateStream_001 + * @tc.type : FUNC + * @tc.number: HpaeRendererManagerCreateStream_001 + * @tc.desc : Test HpaeRendererManagerCreateStream when frameLen is 0. + */ +HWTEST_F(HpaeRendererManagerTest, HpaeRendererManagerCreateStream_001, TestSize.Level1) +{ + HpaeSinkInfo sinkInfo; + sinkInfo.deviceNetId = DEFAULT_TEST_DEVICE_NETWORKID; + sinkInfo.deviceClass = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.adapterName = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.filePath = g_rootPath + "constructHpaeRendererManagerTest.pcm"; + sinkInfo.frameLen = FRAME_LENGTH_960; + sinkInfo.samplingRate = SAMPLE_RATE_48000; + sinkInfo.format = SAMPLE_F32LE; + sinkInfo.channels = STEREO; + sinkInfo.deviceType = DEVICE_TYPE_SPEAKER; + bool isReload = true; + std::shared_ptr hpaeRendererManager = std::make_shared(sinkInfo); + EXPECT_EQ(hpaeRendererManager->Init(isReload), SUCCESS); + WaitForMsgProcessing(hpaeRendererManager); + EXPECT_EQ(hpaeRendererManager->IsInit(), true); + HpaeStreamInfo streamInfo; + streamInfo.frameLen = 0; + EXPECT_EQ(hpaeRendererManager->CreateStream(streamInfo), ERROR); +} + +/** + * @tc.name : Test HpaeRendererManagerCreateStream_002 + * @tc.type : FUNC + * @tc.number: HpaeRendererManagerCreateStream_002 + * @tc.desc : Test HpaeRendererManagerCreateStream when frameLen is over-sized. + */ +HWTEST_F(HpaeRendererManagerTest, HpaeRendererManagerCreateStream_002, TestSize.Level1) +{ + HpaeSinkInfo sinkInfo; + sinkInfo.deviceNetId = DEFAULT_TEST_DEVICE_NETWORKID; + sinkInfo.deviceClass = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.adapterName = DEFAULT_TEST_DEVICE_CLASS; + sinkInfo.filePath = g_rootPath + "constructHpaeRendererManagerTest.pcm"; + sinkInfo.frameLen = FRAME_LENGTH_960; + sinkInfo.samplingRate = SAMPLE_RATE_48000; + sinkInfo.format = SAMPLE_F32LE; + sinkInfo.channels = STEREO; + sinkInfo.deviceType = DEVICE_TYPE_SPEAKER; + bool isReload = true; + std::shared_ptr hpaeRendererManager = std::make_shared(sinkInfo); + EXPECT_EQ(hpaeRendererManager->Init(isReload), SUCCESS); + WaitForMsgProcessing(hpaeRendererManager); + EXPECT_EQ(hpaeRendererManager->IsInit(), true); + HpaeStreamInfo streamInfo; + streamInfo.frameLen = OVERSIZED_FRAME_LENGTH; + EXPECT_EQ(hpaeRendererManager->CreateStream(streamInfo), ERROR); +} } // namespace \ No newline at end of file diff --git a/services/audio_engine/test/unittest/node/hpae_render_effect_node_test.cpp b/services/audio_engine/test/unittest/node/hpae_render_effect_node_test.cpp index 03cafd35004499aab81ac8511266c21baeb3863d..8f6394799d7110a4bc1d34be695df6c15e5f7b7b 100644 --- a/services/audio_engine/test/unittest/node/hpae_render_effect_node_test.cpp +++ b/services/audio_engine/test/unittest/node/hpae_render_effect_node_test.cpp @@ -250,18 +250,6 @@ HWTEST_F(HpaeRenderEffectNodeTest, testHpaeRenderEffectNode_004, TestSize.Level0 EXPECT_NE(hpaeRenderEffectNode_3, nullptr); } -HWTEST_F(HpaeRenderEffectNodeTest, testSplitCollaborativeData_001, TestSize.Level0) -{ - HpaeNodeInfo nodeInfo; - nodeInfo.nodeId = TEST_ID; - nodeInfo.frameLen = TEST_FRAMELEN1; - nodeInfo.samplingRate = SAMPLE_RATE_48000; - nodeInfo.channels = STEREO; - nodeInfo.format = SAMPLE_F32LE; - std::shared_ptr hpaeRenderEffectNode = std::make_shared(nodeInfo); - hpaeRenderEffectNode->SplitCollaborativeData(); -} - HWTEST_F(HpaeRenderEffectNodeTest, testInitEffectBuffer_001, TestSize.Level0) { HpaeNodeInfo nodeInfo; @@ -271,8 +259,9 @@ HWTEST_F(HpaeRenderEffectNodeTest, testInitEffectBuffer_001, TestSize.Level0) nodeInfo.channels = STEREO; nodeInfo.format = SAMPLE_F32LE; std::shared_ptr hpaeRenderEffectNode = std::make_shared(nodeInfo); - uint32_t sessionId = 123; - hpaeRenderEffectNode->InitEffectBuffer(sessionId); + string sessionId = std::to_string(TEST_ID); + hpaeRenderEffectNode->InitEffectBuffer(TEST_ID); + EXPECT_EQ(AudioEffectChainManager::GetInstance()->InitEffectBuffer(sessionId), SUCCESS); } } // namespace HPAE diff --git a/services/audio_engine/test/unittest/node/hpae_resample_node_test.cpp b/services/audio_engine/test/unittest/node/hpae_resample_node_test.cpp index 7f361e3d6c54a5dcee79d571e79a788220e2eca6..333aa7b5107b847636ae6a03969aa7dab2ef5512 100644 --- a/services/audio_engine/test/unittest/node/hpae_resample_node_test.cpp +++ b/services/audio_engine/test/unittest/node/hpae_resample_node_test.cpp @@ -106,24 +106,6 @@ HWTEST_F(HpaeResampleNodeTest, testReset, TestSize.Level0) EXPECT_EQ(hpaeResampleNode2->Reset(), false); } -HWTEST_F(HpaeResampleNodeTest, testHpaeReampleNodeProcess, TestSize.Level0) -{ - HpaeNodeInfo srcNodeInfo; - srcNodeInfo.nodeId = TEST_ID; - srcNodeInfo.frameLen = TEST_FRAMELEN1; - srcNodeInfo.samplingRate = SAMPLE_RATE_48000; - srcNodeInfo.channels = STEREO; - srcNodeInfo.format = SAMPLE_S32LE; - std::shared_ptr hpaeSinkInputNode = std::make_shared(srcNodeInfo); - HpaeNodeInfo dstNodeInfo; - dstNodeInfo.nodeId = TEST_ID; - dstNodeInfo.frameLen = TEST_FRAMELEN2; - dstNodeInfo.samplingRate = SAMPLE_RATE_32000; - dstNodeInfo.channels = CHANNEL_4; - dstNodeInfo.format = SAMPLE_F32LE; - std::shared_ptr hpaeResampleNode = std::make_shared(srcNodeInfo, dstNodeInfo); -} - HWTEST_F(HpaeResampleNodeTest, testSignalProcess_001, TestSize.Level0) { HpaeNodeInfo nodeInfo; diff --git a/test/fuzztest/hpaeinnercapturermanager_fuzzer/hpaeinnercapturermanager_fuzzer.cpp b/test/fuzztest/hpaeinnercapturermanager_fuzzer/hpaeinnercapturermanager_fuzzer.cpp index 2215d337ee2bc3a4f26ebbe43afa8cc8224b390b..842da3f6a030943e5ee2adac511ed5722d9fece1 100644 --- a/test/fuzztest/hpaeinnercapturermanager_fuzzer/hpaeinnercapturermanager_fuzzer.cpp +++ b/test/fuzztest/hpaeinnercapturermanager_fuzzer/hpaeinnercapturermanager_fuzzer.cpp @@ -134,7 +134,7 @@ HpaeStreamInfo GetInCapPlayStreamInfo() HpaeStreamInfo streamInfo; streamInfo.channels = STEREO; streamInfo.samplingRate = SAMPLE_RATE_44100; - streamInfo.frameLen = SAMPLE_RATE_48000 / AUDIO_PER_SECOND_MS * (GetData() % LIMIT_SIZE + 1); + streamInfo.frameLen = DEFAULT_FRAME_LENGTH2; streamInfo.format = SAMPLE_S16LE; streamInfo.sessionId = DEFAULT_SESSION_ID; streamInfo.streamType = STREAM_MUSIC; @@ -148,7 +148,7 @@ HpaeStreamInfo GetInCapPlayFuzzStreamInfo() HpaeStreamInfo streamInfo; streamInfo.channels = STEREO; streamInfo.samplingRate = SAMPLE_RATE_44100; - streamInfo.frameLen = SAMPLE_RATE_48000 / AUDIO_PER_SECOND_MS * (GetData() % LIMIT_SIZE + 1); + streamInfo.frameLen = (SAMPLE_RATE_44100 / AUDIO_PER_SECOND_MS) * (GetData() % LIMIT_SIZE + 1); streamInfo.format = SAMPLE_S16LE; streamInfo.sessionId = GetData(); streamInfo.streamType = STREAM_MUSIC; @@ -176,7 +176,7 @@ static HpaeStreamInfo GetInCapRecordFuzzStreamInfo() HpaeStreamInfo streamInfo; streamInfo.channels = STEREO; streamInfo.samplingRate = SAMPLE_RATE_44100; - streamInfo.frameLen = DEFAULT_FRAME_LENGTH2; + streamInfo.frameLen = (SAMPLE_RATE_44100 / AUDIO_PER_SECOND_MS) * (GetData() % LIMIT_SIZE + 1); streamInfo.format = SAMPLE_S16LE; streamInfo.sessionId = GetData(); streamInfo.streamType = STREAM_MUSIC;