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 <gtest/gtest.h>
17 #include "hpae_capturer_stream_impl.h"
18 #include "audio_errors.h"
19 #include "hpae_adapter_manager.h"
20 #include "audio_system_manager.h"
21
22 using namespace testing::ext;
23 namespace OHOS {
24 namespace AudioStandard {
25 const int32_t CAPTURER_FLAG = 10;
26 static std::shared_ptr<HpaeAdapterManager> adapterManager;
27
28 class HpaeCapturerStreamUnitTest : public testing::Test {
29 public:
30 static void SetUpTestCase(void);
31 static void TearDownTestCase(void);
32 void SetUp();
33 void TearDown();
34 std::shared_ptr<HpaeCapturerStreamImpl> CreateHpaeCapturerStreamImpl();
35 };
36
SetUpTestCase(void)37 void HpaeCapturerStreamUnitTest::SetUpTestCase(void)
38 {
39 // input testsuit setup step,setup invoked before all testcases
40 }
41
TearDownTestCase(void)42 void HpaeCapturerStreamUnitTest::TearDownTestCase(void)
43 {
44 // input testsuit teardown step,teardown invoked after all testcases
45 }
46
SetUp(void)47 void HpaeCapturerStreamUnitTest::SetUp(void)
48 {
49 // input testcase setup step,setup invoked before each testcases
50 }
51
TearDown(void)52 void HpaeCapturerStreamUnitTest::TearDown(void)
53 {
54 // input testcase teardown step,teardown invoked after each testcases
55 }
56
GetInnerCapConfig()57 static AudioProcessConfig GetInnerCapConfig()
58 {
59 AudioProcessConfig config;
60 config.appInfo.appUid = CAPTURER_FLAG;
61 config.appInfo.appPid = CAPTURER_FLAG;
62 config.streamInfo.format = SAMPLE_S32LE;
63 config.streamInfo.samplingRate = SAMPLE_RATE_48000;
64 config.streamInfo.channels = STEREO;
65 config.streamInfo.channelLayout = AudioChannelLayout::CH_LAYOUT_STEREO;
66 config.audioMode = AudioMode::AUDIO_MODE_PLAYBACK;
67 config.streamType = AudioStreamType::STREAM_MUSIC;
68 config.deviceType = DEVICE_TYPE_USB_HEADSET;
69 config.capturerInfo.sourceType = SOURCE_TYPE_WAKEUP;
70 config.innerCapId = 1;
71 config.originalSessionId = 123456; // 123456: session id
72 return config;
73 }
74
CreateHpaeCapturerStreamImpl()75 std::shared_ptr<HpaeCapturerStreamImpl> HpaeCapturerStreamUnitTest::CreateHpaeCapturerStreamImpl()
76 {
77 adapterManager = std::make_shared<HpaeAdapterManager>(DUP_PLAYBACK);
78 AudioProcessConfig processConfig = GetInnerCapConfig();
79 std::string deviceName = "";
80 std::shared_ptr<ICapturerStream> capturerStream = adapterManager->CreateCapturerStream(processConfig, deviceName);
81 std::shared_ptr<HpaeCapturerStreamImpl> capturerStreamImpl =
82 std::static_pointer_cast<HpaeCapturerStreamImpl>(capturerStream);
83 return capturerStreamImpl;
84 }
85
86 /**
87 * @tc.name : Test HpaeCapturerStreamImpl API
88 * @tc.type : FUNC
89 * @tc.number: HpaeCapturerStream_001
90 * @tc.desc : Test HpaeCapturerStreamImpl interface.
91 */
92 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_001, TestSize.Level1)
93 {
94 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
95 uint64_t framesReadRet = 0;
96 capturerStreamImplRet->byteSizePerFrame_ = 0;
97 auto ret = capturerStreamImplRet->GetStreamFramesRead(framesReadRet);
98 EXPECT_EQ(ret, SUCCESS);
99
100 capturerStreamImplRet->byteSizePerFrame_ = 1;
101 ret = capturerStreamImplRet->GetStreamFramesRead(framesReadRet);
102 EXPECT_EQ(ret, SUCCESS);
103 }
104
105 /**
106 * @tc.name : Test HpaeCapturerStreamImpl API
107 * @tc.type : FUNC
108 * @tc.number: HpaeCapturerStream_002
109 * @tc.desc : Test HpaeCapturerStreamImpl interface.
110 */
111 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_002, TestSize.Level1)
112 {
113 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
114 uint64_t timestampRet = 0;
115 auto ret = capturerStreamImplRet->GetCurrentTimeStamp(timestampRet);
116 EXPECT_EQ(ret, SUCCESS);
117 }
118
119 /**
120 * @tc.name : Test HpaeCapturerStreamImpl API
121 * @tc.type : FUNC
122 * @tc.number: HpaeCapturerStream_003
123 * @tc.desc : Test HpaeCapturerStreamImpl interface.
124 */
125 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_003, TestSize.Level1)
126 {
127 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
128 uint64_t latencyRet;
129 bool isStandbyRet = false;
130
131 auto ret = capturerStreamImplRet->GetLatency(latencyRet);
132 EXPECT_EQ(ret, SUCCESS);
133
134 ret = capturerStreamImplRet->Flush();
135 EXPECT_EQ(ret, SUCCESS);
136
137 ret = capturerStreamImplRet->Stop();
138 EXPECT_EQ(ret, SUCCESS);
139
140 ret = capturerStreamImplRet->Start();
141 EXPECT_EQ(ret, SUCCESS);
142
143 ret = capturerStreamImplRet->Pause(isStandbyRet);
144 EXPECT_EQ(ret, SUCCESS);
145 }
146
147 /**
148 * @tc.name : Test HpaeCapturerStreamImpl API
149 * @tc.type : FUNC
150 * @tc.number: HpaeCapturerStream_004
151 * @tc.desc : Test HpaeCapturerStreamImpl interface.
152 */
153 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_004, TestSize.Level1)
154 {
155 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
156 bool isStandbyRet = false;
157
158 auto ret = capturerStreamImplRet->Start();
159 EXPECT_EQ(ret, SUCCESS);
160
161 ret = capturerStreamImplRet->Pause(isStandbyRet);
162 EXPECT_EQ(ret, SUCCESS);
163
164 ret = capturerStreamImplRet->Flush();
165 EXPECT_EQ(ret, SUCCESS);
166
167 ret = capturerStreamImplRet->Stop();
168 EXPECT_EQ(ret, SUCCESS);
169 }
170
171 /**
172 * @tc.name : Test HpaeCapturerStreamImpl API
173 * @tc.type : FUNC
174 * @tc.number: HpaeCapturerStream_005
175 * @tc.desc : Test HpaeCapturerStreamImpl interface.
176 */
177 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_005, TestSize.Level1)
178 {
179 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
180 capturerStreamImplRet->state_ = RUNNING;
181
182 auto ret = capturerStreamImplRet->Release();
183 EXPECT_EQ(ret, SUCCESS);
184 }
185
186 /**
187 * @tc.name : Test HpaeCapturerStreamImpl API
188 * @tc.type : FUNC
189 * @tc.number: HpaeCapturerStream_006
190 * @tc.desc : Test HpaeCapturerStreamImpl interface.
191 */
192 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_006, TestSize.Level1)
193 {
194 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
195 capturerStreamImplRet->statusCallback_ = std::weak_ptr<IStatusCallback>();
196 capturerStreamImplRet->state_ = STOPPED;
197
198 auto ret = capturerStreamImplRet->Release();
199 EXPECT_EQ(ret, SUCCESS);
200 }
201
202 /**
203 * @tc.name : Test HpaeCapturerStreamImpl API
204 * @tc.type : FUNC
205 * @tc.number: HpaeCapturerStream_007
206 * @tc.desc : Test HpaeCapturerStreamImpl interface.
207 */
208 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_007, TestSize.Level1)
209 {
210 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
211 std::string deviceName = "";
212 auto ret = capturerStreamImplRet->InitParams(deviceName);
213 EXPECT_EQ(ret, SUCCESS);
214 }
215
216 /**
217 * @tc.name : Test HpaeCapturerStreamImpl API
218 * @tc.type : FUNC
219 * @tc.number: HpaeCapturerStream_008
220 * @tc.desc : Test HpaeCapturerStreamImpl interface.
221 */
222 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_008, TestSize.Level1)
223 {
224 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
225 int32_t ret = capturerStreamImplRet->Start();
226 EXPECT_EQ(ret, SUCCESS);
227 }
228
229 /**
230 * @tc.name : Test HpaeCapturerStreamImpl API
231 * @tc.type : FUNC
232 * @tc.number: HpaeCapturerStream_009
233 * @tc.desc : Test HpaeCapturerStreamImpl interface.
234 */
235 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_009, TestSize.Level1)
236 {
237 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
238 bool isStandbyRet = false;
239 auto ret = capturerStreamImplRet->Start();
240 EXPECT_EQ(ret, SUCCESS);
241 ret = capturerStreamImplRet->Pause(isStandbyRet);
242 EXPECT_EQ(ret, SUCCESS);
243 }
244
245 /**
246 * @tc.name : Test HpaeCapturerStreamImpl API
247 * @tc.type : FUNC
248 * @tc.number: HpaeCapturerStream_010
249 * @tc.desc : Test HpaeCapturerStreamImpl interface.
250 */
251 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_010, TestSize.Level1)
252 {
253 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
254 bool isStandbyRet = false;
255 auto ret = capturerStreamImplRet->Start();
256 EXPECT_EQ(ret, SUCCESS);
257
258 ret = capturerStreamImplRet->Pause(isStandbyRet);
259 EXPECT_EQ(ret, SUCCESS);
260
261 ret = capturerStreamImplRet->Flush();
262 EXPECT_EQ(ret, SUCCESS);
263 }
264
265 /**
266 * @tc.name : Test HpaeCapturerStreamImpl API
267 * @tc.type : FUNC
268 * @tc.number: HpaeCapturerStream_011
269 * @tc.desc : Test HpaeCapturerStreamImpl interface.
270 */
271 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_011, TestSize.Level1)
272 {
273 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
274 bool isStandbyRet = false;
275
276 auto ret = capturerStreamImplRet->Start();
277 EXPECT_EQ(ret, SUCCESS);
278
279 ret = capturerStreamImplRet->Pause(isStandbyRet);
280 EXPECT_EQ(ret, SUCCESS);
281
282 ret = capturerStreamImplRet->Flush();
283 EXPECT_EQ(ret, SUCCESS);
284
285 ret = capturerStreamImplRet->Stop();
286 EXPECT_EQ(ret, SUCCESS);
287 }
288
289 /**
290 * @tc.name : Test HpaeCapturerStreamImpl API
291 * @tc.type : FUNC
292 * @tc.number: HpaeCapturerStream_012
293 * @tc.desc : Test HpaeCapturerStreamImpl interface.
294 */
295 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_012, TestSize.Level1)
296 {
297 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
298 capturerStreamImplRet->state_ = RUNNING;
299 auto ret = capturerStreamImplRet->Release();
300 EXPECT_EQ(ret, SUCCESS);
301 }
302
303 /**
304 * @tc.name : Test HpaeCapturerStreamImpl API
305 * @tc.type : FUNC
306 * @tc.number: HpaeCapturerStream_013
307 * @tc.desc : Test HpaeCapturerStreamImpl interface.
308 */
309 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_013, TestSize.Level1)
310 {
311 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
312 capturerStreamImplRet->capturerServerDumpFile_ = fopen("/data/data/.pulse_dir/capturer_impl.pcm", "wb+");
313 size_t length = 1;
314 capturerStreamImplRet->DequeueBuffer(length);
315 EXPECT_EQ(capturerStreamImplRet != nullptr, true);
316 }
317
318 /**
319 * @tc.name : Test HpaeCapturerStreamImpl API
320 * @tc.type : FUNC
321 * @tc.number: HpaeCapturerStream_014
322 * @tc.desc : Test HpaeCapturerStreamImpl interface.
323 */
324 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_014, TestSize.Level1)
325 {
326 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
327 AudioCallBackCapturerStreamInfo info;
328 info.timestamp = 123456789;
329 info.latency = 100;
330 info.framesRead = 44100;
331 info.outputData = nullptr;
332 info.requestDataLen = 44100 * sizeof(int16_t);
333
334 auto ret = capturerStreamImplRet->OnStreamData(info);
335 EXPECT_EQ(ret, SUCCESS);
336
337 capturerStreamImplRet->readCallback_.reset();
338 ret = capturerStreamImplRet->OnStreamData(info);
339 EXPECT_EQ(ret, SUCCESS);
340 }
341
342 /**
343 * @tc.name : Test HpaeCapturerStreamImpl API
344 * @tc.type : FUNC
345 * @tc.number: HpaeCapturerStream_016
346 * @tc.desc : Test HpaeCapturerStreamImpl interface.
347 */
348 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_016, TestSize.Level2)
349 {
350 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
351
352 auto ret = capturerStreamImplRet->DropBuffer();
353 EXPECT_EQ(ret, SUCCESS);
354 }
355
356 /**
357 * @tc.name : Test HpaeCapturerStreamImpl API
358 * @tc.type : FUNC
359 * @tc.number: HpaeCapturerStream_017
360 * @tc.desc : Test HpaeCapturerStreamImpl interface.
361 */
362 HWTEST_F(HpaeCapturerStreamUnitTest, HpaeCapturerStream_017, TestSize.Level2)
363 {
364 auto capturerStreamImplRet = CreateHpaeCapturerStreamImpl();
365 size_t minBufferSize = 10;
366 int32_t abortTimes = 0;
367
368 capturerStreamImplRet->AbortCallback(abortTimes);
369 auto ret = capturerStreamImplRet->GetMinimumBufferSize(minBufferSize);
370 EXPECT_EQ(ret, SUCCESS);
371 }
372 }
373 }