1 /*
2  * Copyright (c) 2024 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 #include <iostream>
17 #include <thread>
18 #include <gtest/gtest.h>
19 
20 #include "audio_errors.h"
21 #include "offline_audio_effect_manager.h"
22 
23 using namespace testing::ext;
24 using namespace std;
25 namespace OHOS {
26 namespace AudioStandard {
27 namespace {
28     const std::string INVALID_EFFECT_NAME = "0d000721";
29 
30     constexpr AudioStreamInfo NORMAL_STREAM_INFO(
31         AudioSamplingRate::SAMPLE_RATE_48000, AudioEncodingType::ENCODING_PCM,
32         AudioSampleFormat::SAMPLE_S16LE, AudioChannel::STEREO, AudioChannelLayout::CH_LAYOUT_STEREO);
33 }
34 class OfflineAudioEffectManagerUnitTest : public testing::Test {
35 public:
36     static void SetUpTestCase(void);
37     static void TearDownTestCase(void);
38     void SetUp();
39     void TearDown();
40 };
41 
SetUpTestCase(void)42 void OfflineAudioEffectManagerUnitTest::SetUpTestCase(void) {}
TearDownTestCase(void)43 void OfflineAudioEffectManagerUnitTest::TearDownTestCase(void) {}
SetUp(void)44 void OfflineAudioEffectManagerUnitTest::SetUp(void) {}
TearDown(void)45 void OfflineAudioEffectManagerUnitTest::TearDown(void) {}
46 
47 class OfflineAudioEffectChainUnitTest : public testing::Test {
48 public:
49     static void SetUpTestCase(void);
50     static void TearDownTestCase(void);
51     void SetUp();
52     void TearDown();
53 protected:
54     shared_ptr<OfflineAudioEffectChain> chain_ = nullptr;
55 };
56 
57 shared_ptr<OfflineAudioEffectManager> g_manager = nullptr;
58 string g_normalName = "";
59 
SetUpTestCase(void)60 void OfflineAudioEffectChainUnitTest::SetUpTestCase(void)
61 {
62     g_manager = make_shared<OfflineAudioEffectManager>();
63     vector<string> names;
64     names = g_manager->GetOfflineAudioEffectChains();
65     if (names.size() > 0) {
66         g_normalName = names[names.size() - 1];
67     }
68 }
69 
TearDownTestCase(void)70 void OfflineAudioEffectChainUnitTest::TearDownTestCase(void)
71 {
72     g_manager = nullptr;
73 }
74 
SetUp(void)75 void OfflineAudioEffectChainUnitTest::SetUp(void)
76 {
77     chain_ = g_manager->CreateOfflineAudioEffectChain(g_normalName);
78 }
79 
TearDown(void)80 void OfflineAudioEffectChainUnitTest::TearDown(void)
81 {
82     if (chain_ != nullptr) {
83         chain_->Release();
84         chain_ = nullptr;
85     }
86 }
87 
88 /**
89  * @tc.name  : Test GetOfflineAudioEffectChains API
90  * @tc.type  : FUNC
91  * @tc.number: OfflineAudioEffectManager_001
92  * @tc.desc  : Test OfflineAudioEffectManager interface.
93  */
94 HWTEST(OfflineAudioEffectManagerUnitTest, OfflineAudioEffectManager_001, TestSize.Level1)
95 {
96     auto manager = make_shared<OfflineAudioEffectManager>();
97     EXPECT_NE(nullptr, manager);
98     EXPECT_GE(manager->GetOfflineAudioEffectChains().size(), 0);
99 }
100 
101 /**
102  * @tc.name  : Test CreateOfflineAudioEffectChain API
103  * @tc.type  : FUNC
104  * @tc.number: OfflineAudioEffectManager_002
105  * @tc.desc  : Test OfflineAudioEffectManager interface.
106  */
107 HWTEST(OfflineAudioEffectManagerUnitTest, OfflineAudioEffectManager_002, TestSize.Level1)
108 {
109     auto manager = make_shared<OfflineAudioEffectManager>();
110     auto chain = manager->CreateOfflineAudioEffectChain(g_normalName);
111     if (g_normalName == "") {
112         EXPECT_EQ(nullptr, chain);
113     } else {
114         EXPECT_NE(nullptr, chain);
115     }
116 }
117 
118 /**
119  * @tc.name  : Test CreateOfflineAudioEffectChain API
120  * @tc.type  : FUNC
121  * @tc.number: OfflineAudioEffectManager_003
122  * @tc.desc  : Test OfflineAudioEffectManager interface.
123  */
124 HWTEST(OfflineAudioEffectManagerUnitTest, OfflineAudioEffectManager_003, TestSize.Level1)
125 {
126     auto manager = make_shared<OfflineAudioEffectManager>();
127     auto chain = manager->CreateOfflineAudioEffectChain(INVALID_EFFECT_NAME);
128     EXPECT_EQ(nullptr, chain);
129 }
130 
131 /**
132  * @tc.name  : Test OfflineAudioEffectChain API
133  * @tc.type  : FUNC
134  * @tc.number: OfflineAudioEffectChain_001
135  * @tc.desc  : Test OfflineAudioEffectChain interface.
136  */
137 HWTEST_F(OfflineAudioEffectChainUnitTest, OfflineAudioEffectChain_001, TestSize.Level1)
138 {
139     if (chain_) {
140         int32_t ret = chain_->Configure(NORMAL_STREAM_INFO, NORMAL_STREAM_INFO);
141         EXPECT_EQ(SUCCESS, ret);
142     }
143 }
144 
145 /**
146  * @tc.name  : Test OfflineAudioEffectChain API
147  * @tc.type  : FUNC
148  * @tc.number: OfflineAudioEffectChain_002
149  * @tc.desc  : Test OfflineAudioEffectChain interface.
150  */
151 HWTEST_F(OfflineAudioEffectChainUnitTest, OfflineAudioEffectChain_002, TestSize.Level1)
152 {
153     if (chain_) {
154         EXPECT_EQ(SUCCESS, chain_->Configure(NORMAL_STREAM_INFO, NORMAL_STREAM_INFO));
155         EXPECT_EQ(SUCCESS, chain_->Prepare());
156     }
157 }
158 } // namespace AudioStandard
159 } // namespace OHOS
160