1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#include <gtest/gtest.h> 17094332d3Sopenharmony_ci#include "hdf_base.h" 18094332d3Sopenharmony_ci#include "hdf_log.h" 19094332d3Sopenharmony_ci#include "v1_0/effect_types.h" 20094332d3Sopenharmony_ci#include "v1_0/ieffect_control.h" 21094332d3Sopenharmony_ci#include "v1_0/ieffect_model.h" 22094332d3Sopenharmony_ci#include "effect_common.h" 23094332d3Sopenharmony_ci#include "osal_mem.h" 24094332d3Sopenharmony_ci 25094332d3Sopenharmony_ciusing namespace std; 26094332d3Sopenharmony_ciusing namespace testing::ext; 27094332d3Sopenharmony_ciconstexpr bool IS_DIRECTLY_CALL = false; 28094332d3Sopenharmony_ciconstexpr uint32_t MAX_DESCRIPTOR_NUM = 20; 29094332d3Sopenharmony_ci 30094332d3Sopenharmony_cinamespace { 31094332d3Sopenharmony_ciclass EffectModelTest : public testing::Test { 32094332d3Sopenharmony_cipublic: 33094332d3Sopenharmony_ci struct IEffectModel *model_ = nullptr; 34094332d3Sopenharmony_ci struct ControllerId contollerId_; 35094332d3Sopenharmony_ci char *libName_ = nullptr; 36094332d3Sopenharmony_ci char *effectId_ = nullptr; 37094332d3Sopenharmony_ci virtual void SetUp(); 38094332d3Sopenharmony_ci virtual void TearDown(); 39094332d3Sopenharmony_ci}; 40094332d3Sopenharmony_ci 41094332d3Sopenharmony_civoid EffectModelTest::SetUp() 42094332d3Sopenharmony_ci{ 43094332d3Sopenharmony_ci // input testcase setup step,setup invoked before each testcases 44094332d3Sopenharmony_ci libName_ = strdup("libmock_effect_lib"); 45094332d3Sopenharmony_ci ASSERT_NE(nullptr, libName_); 46094332d3Sopenharmony_ci effectId_ = strdup("aaaabbbb-8888-9999-6666-aabbccdd9966ff"); 47094332d3Sopenharmony_ci ASSERT_NE(nullptr, effectId_); 48094332d3Sopenharmony_ci model_ = IEffectModelGet(IS_DIRECTLY_CALL); 49094332d3Sopenharmony_ci ASSERT_NE(nullptr, model_); 50094332d3Sopenharmony_ci} 51094332d3Sopenharmony_ci 52094332d3Sopenharmony_civoid EffectModelTest::TearDown() 53094332d3Sopenharmony_ci{ 54094332d3Sopenharmony_ci // input testcase teardown step,teardown invoked after each testcases 55094332d3Sopenharmony_ci if (libName_ != nullptr) { 56094332d3Sopenharmony_ci free(libName_); 57094332d3Sopenharmony_ci libName_ = nullptr; 58094332d3Sopenharmony_ci } 59094332d3Sopenharmony_ci 60094332d3Sopenharmony_ci if (effectId_ != nullptr) { 61094332d3Sopenharmony_ci free(effectId_); 62094332d3Sopenharmony_ci effectId_ = nullptr; 63094332d3Sopenharmony_ci } 64094332d3Sopenharmony_ci 65094332d3Sopenharmony_ci if (model_ != nullptr) { 66094332d3Sopenharmony_ci IEffectModelRelease(model_, IS_DIRECTLY_CALL); 67094332d3Sopenharmony_ci } 68094332d3Sopenharmony_ci} 69094332d3Sopenharmony_ci 70094332d3Sopenharmony_ci/** 71094332d3Sopenharmony_ci * @tc.name: HdfAudioIsSupplyEffectLibs001 72094332d3Sopenharmony_ci * @tc.desc: Verify the EffectModelIsSupplyEffectLibs function when the input parameter is invalid. 73094332d3Sopenharmony_ci * @tc.type: FUNC 74094332d3Sopenharmony_ci * @tc.require: I6I658 75094332d3Sopenharmony_ci */ 76094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioIsSupplyEffectLibs001, TestSize.Level1) 77094332d3Sopenharmony_ci{ 78094332d3Sopenharmony_ci bool isSupport = false; 79094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_OBJECT, model_->IsSupplyEffectLibs(nullptr, &isSupport)); 80094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_PARAM, model_->IsSupplyEffectLibs(model_, nullptr)); 81094332d3Sopenharmony_ci} 82094332d3Sopenharmony_ci 83094332d3Sopenharmony_ci/** 84094332d3Sopenharmony_ci * @tc.name: HdfAudioIsSupplyEffectLibs002 85094332d3Sopenharmony_ci * @tc.desc: Verify the EffectModelIsSupplyEffectLibs function. 86094332d3Sopenharmony_ci * @tc.type: FUNC 87094332d3Sopenharmony_ci * @tc.require: I6I658 88094332d3Sopenharmony_ci */ 89094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioIsSupplyEffectLibs002, TestSize.Level1) 90094332d3Sopenharmony_ci{ 91094332d3Sopenharmony_ci bool isSupport = false; 92094332d3Sopenharmony_ci int32_t ret = model_->IsSupplyEffectLibs(model_, &isSupport); 93094332d3Sopenharmony_ci EXPECT_EQ(ret, HDF_SUCCESS); 94094332d3Sopenharmony_ci} 95094332d3Sopenharmony_ci 96094332d3Sopenharmony_ci/** 97094332d3Sopenharmony_ci * @tc.name: HdfAudioGetAllEffectDescriptors001 98094332d3Sopenharmony_ci * @tc.desc: Verify the EffectModelGetAllEffectDescriptors function when the input parameter is invalid. 99094332d3Sopenharmony_ci * @tc.type: FUNC 100094332d3Sopenharmony_ci * @tc.require: I6I658 101094332d3Sopenharmony_ci */ 102094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioGetAllEffectDescriptors001, TestSize.Level1) 103094332d3Sopenharmony_ci{ 104094332d3Sopenharmony_ci uint32_t descsLen = MAX_DESCRIPTOR_NUM; 105094332d3Sopenharmony_ci struct EffectControllerDescriptor descs[MAX_DESCRIPTOR_NUM]; 106094332d3Sopenharmony_ci 107094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_OBJECT, model_->GetAllEffectDescriptors(nullptr, descs, &descsLen)); 108094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_PARAM, model_->GetAllEffectDescriptors(model_, nullptr, &descsLen)); 109094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_PARAM, model_->GetAllEffectDescriptors(model_, descs, nullptr)); 110094332d3Sopenharmony_ci} 111094332d3Sopenharmony_ci 112094332d3Sopenharmony_ci/** 113094332d3Sopenharmony_ci * @tc.name: HdfAudioGetAllEffectDescriptors002 114094332d3Sopenharmony_ci * @tc.desc: Verify the EffectModelGetAllEffectDescriptors function. 115094332d3Sopenharmony_ci * @tc.type: FUNC 116094332d3Sopenharmony_ci * @tc.require: I6I658 117094332d3Sopenharmony_ci */ 118094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioGetAllEffectDescriptors002, TestSize.Level1) 119094332d3Sopenharmony_ci{ 120094332d3Sopenharmony_ci uint32_t descsLen = MAX_DESCRIPTOR_NUM; 121094332d3Sopenharmony_ci struct EffectControllerDescriptor descs[MAX_DESCRIPTOR_NUM]; 122094332d3Sopenharmony_ci 123094332d3Sopenharmony_ci int32_t ret = model_->GetAllEffectDescriptors(model_, descs, &descsLen); 124094332d3Sopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 125094332d3Sopenharmony_ci EXPECT_GE(MAX_DESCRIPTOR_NUM, descsLen); 126094332d3Sopenharmony_ci} 127094332d3Sopenharmony_ci 128094332d3Sopenharmony_ci/** 129094332d3Sopenharmony_ci * @tc.name: HdfAudioGetAllEffectDescriptors003 130094332d3Sopenharmony_ci * @tc.desc: Verify the descs of EffectModelGetAllEffectDescriptors function. 131094332d3Sopenharmony_ci * @tc.type: FUNC 132094332d3Sopenharmony_ci * @tc.require: I6I658 133094332d3Sopenharmony_ci */ 134094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioGetAllEffectDescriptors003, TestSize.Level1) 135094332d3Sopenharmony_ci{ 136094332d3Sopenharmony_ci uint32_t descsLen = MAX_DESCRIPTOR_NUM; 137094332d3Sopenharmony_ci struct EffectControllerDescriptor descs[MAX_DESCRIPTOR_NUM]; 138094332d3Sopenharmony_ci 139094332d3Sopenharmony_ci int32_t ret = model_->GetAllEffectDescriptors(model_, descs, &descsLen); 140094332d3Sopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 141094332d3Sopenharmony_ci EXPECT_GE(MAX_DESCRIPTOR_NUM, descsLen); 142094332d3Sopenharmony_ci 143094332d3Sopenharmony_ci for (uint32_t i = 0; i < descsLen; i++) { 144094332d3Sopenharmony_ci EXPECT_NE(nullptr, descs[i].effectId); 145094332d3Sopenharmony_ci } 146094332d3Sopenharmony_ci 147094332d3Sopenharmony_ci OHOS::Audio::EffectControllerReleaseDescs(descs, &descsLen); 148094332d3Sopenharmony_ci} 149094332d3Sopenharmony_ci 150094332d3Sopenharmony_ci/** 151094332d3Sopenharmony_ci * @tc.name: HdfAudioCreateEffectController001 152094332d3Sopenharmony_ci * @tc.desc: Verify the CreateEffectController function when the input parameter is invalid. 153094332d3Sopenharmony_ci * @tc.type: FUNC 154094332d3Sopenharmony_ci * @tc.require: I71E1I 155094332d3Sopenharmony_ci */ 156094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioCreateEffectController001, TestSize.Level1) 157094332d3Sopenharmony_ci{ 158094332d3Sopenharmony_ci struct EffectInfo info = { 159094332d3Sopenharmony_ci .libName = libName_, 160094332d3Sopenharmony_ci .effectId = effectId_, 161094332d3Sopenharmony_ci .ioDirection = 1, 162094332d3Sopenharmony_ci }; 163094332d3Sopenharmony_ci 164094332d3Sopenharmony_ci struct IEffectControl *contoller = NULL; 165094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_OBJECT, model_->CreateEffectController(nullptr, &info, &contoller, &contollerId_)); 166094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_PARAM, model_->CreateEffectController(model_, nullptr, &contoller, &contollerId_)); 167094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_PARAM, model_->CreateEffectController(model_, &info, &contoller, nullptr)); 168094332d3Sopenharmony_ci} 169094332d3Sopenharmony_ci 170094332d3Sopenharmony_ci/** 171094332d3Sopenharmony_ci * @tc.name: HdfAudioDestroyEffectController001 172094332d3Sopenharmony_ci * @tc.desc: Verify the DestroyEffectController function when the input parameter is invalid. 173094332d3Sopenharmony_ci * @tc.type: FUNC 174094332d3Sopenharmony_ci * @tc.require: I71E1I 175094332d3Sopenharmony_ci */ 176094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioDestroyEffectController001, TestSize.Level1) 177094332d3Sopenharmony_ci{ 178094332d3Sopenharmony_ci struct EffectInfo info = { 179094332d3Sopenharmony_ci .libName = libName_, 180094332d3Sopenharmony_ci .effectId = effectId_, 181094332d3Sopenharmony_ci .ioDirection = 1, 182094332d3Sopenharmony_ci }; 183094332d3Sopenharmony_ci 184094332d3Sopenharmony_ci struct IEffectControl *contoller = NULL; 185094332d3Sopenharmony_ci ASSERT_EQ(HDF_SUCCESS, model_->CreateEffectController(model_, &info, &contoller, &contollerId_)); 186094332d3Sopenharmony_ci ASSERT_NE(contoller, nullptr); 187094332d3Sopenharmony_ci 188094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_OBJECT, model_->DestroyEffectController(nullptr, &contollerId_)); 189094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_PARAM, model_->DestroyEffectController(model_, nullptr)); 190094332d3Sopenharmony_ci} 191094332d3Sopenharmony_ci 192094332d3Sopenharmony_ci/** 193094332d3Sopenharmony_ci * @tc.name: HdfAudioCreateDestroyController001 194094332d3Sopenharmony_ci * @tc.desc: Verify the EffectModelCreateEffectController and EffectModelDestroyEffectController function. 195094332d3Sopenharmony_ci * @tc.type: FUNC 196094332d3Sopenharmony_ci * @tc.require: I6I658 197094332d3Sopenharmony_ci */ 198094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioCreateDestroyController001, TestSize.Level1) 199094332d3Sopenharmony_ci{ 200094332d3Sopenharmony_ci struct EffectInfo info = { 201094332d3Sopenharmony_ci .libName = libName_, 202094332d3Sopenharmony_ci .effectId = effectId_, 203094332d3Sopenharmony_ci .ioDirection = 1, 204094332d3Sopenharmony_ci }; 205094332d3Sopenharmony_ci 206094332d3Sopenharmony_ci struct IEffectControl *contoller = NULL; 207094332d3Sopenharmony_ci int32_t ret = model_->CreateEffectController(model_, &info, &contoller, &contollerId_); 208094332d3Sopenharmony_ci if (ret == HDF_SUCCESS) { 209094332d3Sopenharmony_ci ASSERT_NE(contoller, nullptr); 210094332d3Sopenharmony_ci } 211094332d3Sopenharmony_ci 212094332d3Sopenharmony_ci if (contoller != nullptr) { 213094332d3Sopenharmony_ci ret = model_->DestroyEffectController(model_, &contollerId_); 214094332d3Sopenharmony_ci } 215094332d3Sopenharmony_ci} 216094332d3Sopenharmony_ci 217094332d3Sopenharmony_ci/** 218094332d3Sopenharmony_ci * @tc.name: HdfAudioGetEffectDescriptor001 219094332d3Sopenharmony_ci * @tc.desc: Verify the EffectModelGetEffectDescriptor function when the input parameter is invalid. 220094332d3Sopenharmony_ci * @tc.type: FUNC 221094332d3Sopenharmony_ci * @tc.require: I6I658 222094332d3Sopenharmony_ci */ 223094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioGetEffectDescriptor001, TestSize.Level1) 224094332d3Sopenharmony_ci{ 225094332d3Sopenharmony_ci struct EffectControllerDescriptor desc; 226094332d3Sopenharmony_ci 227094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_OBJECT, model_->GetEffectDescriptor(nullptr, effectId_, &desc)); 228094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_PARAM, model_->GetEffectDescriptor(model_, nullptr, &desc)); 229094332d3Sopenharmony_ci EXPECT_EQ(HDF_ERR_INVALID_PARAM, model_->GetEffectDescriptor(model_, effectId_, nullptr)); 230094332d3Sopenharmony_ci} 231094332d3Sopenharmony_ci 232094332d3Sopenharmony_ci/** 233094332d3Sopenharmony_ci * @tc.name: HdfAudioGetEffectDescriptor002 234094332d3Sopenharmony_ci * @tc.desc: Verify the EffectModelGetEffectDescriptor function. 235094332d3Sopenharmony_ci * @tc.type: FUNC 236094332d3Sopenharmony_ci * @tc.require: I6I658 237094332d3Sopenharmony_ci */ 238094332d3Sopenharmony_ciHWTEST_F(EffectModelTest, HdfAudioGetEffectDescriptor002, TestSize.Level1) 239094332d3Sopenharmony_ci{ 240094332d3Sopenharmony_ci struct EffectControllerDescriptor desc; 241094332d3Sopenharmony_ci 242094332d3Sopenharmony_ci int32_t ret = model_->GetEffectDescriptor(model_, effectId_, &desc); 243094332d3Sopenharmony_ci ASSERT_EQ(ret, HDF_SUCCESS); 244094332d3Sopenharmony_ci EXPECT_STREQ(desc.effectId, effectId_); 245094332d3Sopenharmony_ci EXPECT_STREQ(desc.effectName, "mock_effect"); 246094332d3Sopenharmony_ci EXPECT_STREQ(desc.libName, libName_); 247094332d3Sopenharmony_ci EXPECT_STREQ(desc.supplier, "mock"); 248094332d3Sopenharmony_ci OHOS::Audio::EffectControllerReleaseDesc(&desc); 249094332d3Sopenharmony_ci} 250094332d3Sopenharmony_ci} // end of namespace 251