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 "audio_errors.h"
17 #include "audio_service_log.h"
18 #include "audio_info.h"
19 #include "audio_ring_cache.h"
20 #include "audio_process_config.h"
21 #include "linear_pos_time_model.h"
22 #include "oh_audio_buffer.h"
23 #include <gtest/gtest.h>
24 #include "pa_renderer_stream_impl.h"
25 #include "policy_handler.h"
26 #include "pa_adapter_manager.h"
27 #include "audio_capturer_private.h"
28 #include "audio_system_manager.h"
29 #include "audio_system_manager.h"
30
31 using namespace testing::ext;
32 namespace OHOS {
33 namespace AudioStandard {
34 const int32_t CAPTURER_FLAG = 10;
35 static std::shared_ptr<PaAdapterManager> adapterManager;
36
37 class PaRendererStreamUnitTest : public ::testing::Test {
38 public:
39 void SetUp();
40 void TearDown();
41 std::shared_ptr<PaRendererStreamImpl> CreatePaRendererStreamImpl();
42 };
SetUp(void)43 void PaRendererStreamUnitTest::SetUp(void)
44 {
45 // input testcase setup step,setup invoked before each testcases
46 }
47
TearDown(void)48 void PaRendererStreamUnitTest::TearDown(void)
49 {
50 // input testcase teardown step,teardown invoked after each testcases
51 }
52
53 #ifdef HAS_FEATURE_INNERCAPTURER
LoadPaPort()54 void LoadPaPort()
55 {
56 AudioPlaybackCaptureConfig checkConfig;
57 int32_t checkInnerCapId = 0;
58 AudioSystemManager::GetInstance()->CheckCaptureLimit(checkConfig, checkInnerCapId);
59 }
60
ReleasePaPort()61 void ReleasePaPort()
62 {
63 AudioSystemManager::GetInstance()->ReleaseCaptureLimit(1);
64 }
65 #endif
66
GetInnerCapConfig()67 static AudioProcessConfig GetInnerCapConfig()
68 {
69 AudioProcessConfig config;
70 config.appInfo.appUid = CAPTURER_FLAG;
71 config.appInfo.appPid = CAPTURER_FLAG;
72 config.streamInfo.format = SAMPLE_S32LE;
73 config.streamInfo.samplingRate = SAMPLE_RATE_48000;
74 config.streamInfo.channels = STEREO;
75 config.streamInfo.channelLayout = AudioChannelLayout::CH_LAYOUT_STEREO;
76 config.audioMode = AudioMode::AUDIO_MODE_PLAYBACK;
77 config.streamType = AudioStreamType::STREAM_MUSIC;
78 config.deviceType = DEVICE_TYPE_USB_HEADSET;
79 config.innerCapId = 1;
80 return config;
81 }
82
CreatePaRendererStreamImpl()83 std::shared_ptr<PaRendererStreamImpl> PaRendererStreamUnitTest::CreatePaRendererStreamImpl()
84 {
85 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
86 adapterManager->InitPaContext();
87 AudioProcessConfig processConfig = GetInnerCapConfig();
88 uint32_t sessionId = 123456;
89 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
90 std::shared_ptr<IRendererStream> rendererStream = adapterManager->CreateRendererStream(processConfig, stream);
91 std::shared_ptr<PaRendererStreamImpl> rendererStreamImpl =
92 std::static_pointer_cast<PaRendererStreamImpl>(rendererStream);
93 return rendererStreamImpl;
94 }
95
96 /**
97 * @tc.name : Test AudioProcessProxy API
98 * @tc.type : FUNC
99 * @tc.number: GetCurrentTimeStamp_001
100 * @tc.desc : Test AudioProcessProxy interface.
101 */
102 HWTEST_F(PaRendererStreamUnitTest, GetCurrentTimeStamp_001, TestSize.Level1)
103 {
104 #ifdef HAS_FEATURE_INNERCAPTURER
105 LoadPaPort();
106 #endif
107 auto unit = CreatePaRendererStreamImpl();
108 unit->paStream_ = nullptr;
109 uint64_t timestamp = 0;
110 int32_t ret = unit->GetCurrentTimeStamp(timestamp);
111 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
112 }
113
114 /**
115 * @tc.name : Test GetCurrentTimeStamp
116 * @tc.type : FUNC
117 * @tc.number: GetCurrentTimeStamp_002
118 * @tc.desc : Test GetCurrentTimeStamp.
119 */
120 HWTEST_F(PaRendererStreamUnitTest, GetCurrentTimeStamp_002, TestSize.Level1)
121 {
122 auto unit = CreatePaRendererStreamImpl();
123 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
124 adapterManager->InitPaContext();
125 uint32_t sessionId = 123456;
126 uint64_t timestamp = 0;
127 AudioProcessConfig processConfig = GetInnerCapConfig();
128 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
129 unit->paStream_ = stream;
130 int32_t ret = unit->GetCurrentTimeStamp(timestamp);
131 EXPECT_EQ(ret, SUCCESS);
132 }
133
134 /**
135 * @tc.name : Test GetEffectModeName
136 * @tc.type : FUNC
137 * @tc.number: GetEffectModeName_003
138 * @tc.desc : Test GetEffectModeName.
139 */
140 HWTEST_F(PaRendererStreamUnitTest, GetEffectModeName_003, TestSize.Level1)
141 {
142 auto unit = CreatePaRendererStreamImpl();
143 int32_t effectMode = 0;
144 EXPECT_EQ("EFFECT_NONE", unit->GetEffectModeName(effectMode));
145 }
146
147 /**
148 * @tc.name : Test GetEffectModeName
149 * @tc.type : FUNC
150 * @tc.number: GetEffectModeName_004
151 * @tc.desc : Test GetEffectModeName.
152 */
153 HWTEST_F(PaRendererStreamUnitTest, GetEffectModeName_004, TestSize.Level1)
154 {
155 auto unit = CreatePaRendererStreamImpl();
156 int32_t effectMode = 1;
157 EXPECT_EQ("EFFECT_DEFAULT", unit->GetEffectModeName(effectMode));
158 }
159
160 /**
161 * @tc.name : Test AudioProcessProxy API
162 * @tc.type : FUNC
163 * @tc.number: PaRenderer_006
164 * @tc.desc : Test AudioProcessProxy interface.
165 */
166 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_006, TestSize.Level1)
167 {
168 auto unit = CreatePaRendererStreamImpl();
169 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
170 adapterManager->InitPaContext();
171 uint32_t sessionId = 123456;
172 AudioProcessConfig processConfig = GetInnerCapConfig();
173 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
174 unit->paStream_ = stream;
175 int32_t rate = RENDER_RATE_NORMAL;
176 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
177 }
178
179 /**
180 * @tc.name : Test AudioProcessProxy API
181 * @tc.type : FUNC
182 * @tc.number: PaRenderer_007
183 * @tc.desc : Test AudioProcessProxy interface.
184 */
185 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_007, TestSize.Level1)
186 {
187 auto unit = CreatePaRendererStreamImpl();
188 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
189 adapterManager->InitPaContext();
190 uint32_t sessionId = 123456;
191 AudioProcessConfig processConfig = GetInnerCapConfig();
192 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
193 unit->paStream_ = stream;
194 int32_t rate = RENDER_RATE_DOUBLE;
195 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
196 }
197
198
199 /**
200 * @tc.name : Test AudioProcessProxy API
201 * @tc.type : FUNC
202 * @tc.number: PaRenderer_008
203 * @tc.desc : Test AudioProcessProxy interface.
204 */
205 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_008, TestSize.Level1)
206 {
207 auto unit = CreatePaRendererStreamImpl();
208 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
209 adapterManager->InitPaContext();
210 uint32_t sessionId = 123456;
211 AudioProcessConfig processConfig = GetInnerCapConfig();
212 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
213 unit->paStream_ = stream;
214 int32_t rate = RENDER_RATE_HALF;
215 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
216 }
217
218 /**
219 * @tc.name : Test AudioProcessProxy API
220 * @tc.type : FUNC
221 * @tc.number: PaRenderer_009
222 * @tc.desc : Test AudioProcessProxy interface.
223 */
224 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_009, TestSize.Level1)
225 {
226 auto unit = CreatePaRendererStreamImpl();
227 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
228 adapterManager->InitPaContext();
229 uint32_t sessionId = 123456;
230 AudioProcessConfig processConfig = GetInnerCapConfig();
231 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
232 unit->paStream_ = stream;
233 int32_t rate = 999;
234 EXPECT_EQ(unit->SetRate(rate), ERR_INVALID_PARAM);
235 }
236
237 /**
238 * @tc.name : Test GetCurrentPosition
239 * @tc.type : FUNC
240 * @tc.number: PaRenderer_010
241 * @tc.desc : Test GetCurrentPosition.
242 */
243 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_010, TestSize.Level1)
244 {
245 auto unit = CreatePaRendererStreamImpl();
246 unit->paStream_ = nullptr;
247 uint64_t timestamp = 0;
248 uint64_t framePosition = 0;
249 uint64_t latency = 0;
250 int32_t ret = unit->GetCurrentPosition(framePosition, timestamp, latency);
251 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
252 }
253
254 /**
255 * @tc.name : Test GetCurrentPosition.
256 * @tc.type : FUNC
257 * @tc.number: PaRenderer_011
258 * @tc.desc : Test GetCurrentPosition.
259 */
260 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_011, TestSize.Level1)
261 {
262 auto unit = CreatePaRendererStreamImpl();
263 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
264 adapterManager->InitPaContext();
265 uint32_t sessionId = 123456;
266 AudioProcessConfig processConfig = GetInnerCapConfig();
267 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
268 unit->paStream_ = stream;
269 unit->firstGetLatency_ = true;
270 int32_t rate = RENDER_RATE_NORMAL;
271 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
272 }
273
274 /**
275 * @tc.name : Test OffloadSetVolume.
276 * @tc.type : FUNC
277 * @tc.number: PaRenderer_013
278 * @tc.desc : Test OffloadSetVolume.
279 */
280 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_013, TestSize.Level1)
281 {
282 auto unit = CreatePaRendererStreamImpl();
283 unit->offloadEnable_ = false;
284 float volume = 0.0f;
285 auto ret = unit->OffloadSetVolume(volume);
286 EXPECT_EQ(ret, ERR_OPERATION_FAILED);
287 }
288
289 /**
290 * @tc.name : Test UpdateSpatializationState.
291 * @tc.type : FUNC
292 * @tc.number: PaRenderer_015
293 * @tc.desc : Test UpdateSpatializationState.
294 */
295 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_015, TestSize.Level1)
296 {
297 auto unit = CreatePaRendererStreamImpl();
298 unit->paStream_ = nullptr;
299 bool spatializationEnabled = false;
300 bool headTrackingEnabled = false;
301 int32_t ret = unit->UpdateSpatializationState(spatializationEnabled, headTrackingEnabled);
302 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
303 }
304
305 /**
306 * @tc.name : Test UpdateSpatializationState.
307 * @tc.type : FUNC
308 * @tc.number: PaRenderer_016
309 * @tc.desc : Test UpdateSpatializationState.
310 */
311 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_016, TestSize.Level1)
312 {
313 auto unit = CreatePaRendererStreamImpl();
314 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
315 adapterManager->InitPaContext();
316 uint32_t sessionId = 123456;
317 AudioProcessConfig processConfig = GetInnerCapConfig();
318 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
319 unit->paStream_ = stream;
320 bool spatializationEnabled = false;
321 bool headTrackingEnabled = false;
322 int32_t ret = unit->UpdateSpatializationState(spatializationEnabled, headTrackingEnabled);
323 EXPECT_EQ(ret, SUCCESS);
324 }
325
326 /**
327 * @tc.name : Test GetOffloadApproximatelyCacheTime.
328 * @tc.type : FUNC
329 * @tc.number: PaRenderer_017
330 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
331 */
332 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_017, TestSize.Level1)
333 {
334 auto unit = CreatePaRendererStreamImpl();
335 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
336 adapterManager->InitPaContext();
337 uint32_t sessionId = 123456;
338 AudioProcessConfig processConfig = GetInnerCapConfig();
339 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
340 unit->paStream_ = stream;
341 unit->offloadEnable_ = false;
342 uint64_t timestamp = 0;
343 uint64_t paWriteIndex = 0;
344 uint64_t cacheTimeDsp = 0;
345 uint64_t cacheTimePa = 0;
346 int32_t result = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
347 EXPECT_EQ(result, ERR_OPERATION_FAILED);
348 }
349
350 /**
351 * @tc.name : Test GetOffloadApproximatelyCacheTime.
352 * @tc.type : FUNC
353 * @tc.number: PaRenderer_018
354 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
355 */
356 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_018, TestSize.Level1)
357 {
358 auto unit = CreatePaRendererStreamImpl();
359 unit->paStream_ = nullptr;
360 unit->offloadEnable_ = true;
361 uint64_t timestamp = 0;
362 uint64_t paWriteIndex = 0;
363 uint64_t cacheTimeDsp = 0;
364 uint64_t cacheTimePa = 0;
365 int32_t ret = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
366 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
367 }
368
369 /**
370 * @tc.name : Test GetOffloadApproximatelyCacheTime.
371 * @tc.type : FUNC
372 * @tc.number: PaRenderer_019
373 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
374 */
375 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_019, TestSize.Level1)
376 {
377 auto unit = CreatePaRendererStreamImpl();
378 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
379 adapterManager->InitPaContext();
380 uint32_t sessionId = 123456;
381 AudioProcessConfig processConfig = GetInnerCapConfig();
382 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
383 unit->paStream_ = stream;
384 unit->offloadEnable_ = true;
385 uint64_t timestamp = 0;
386 uint64_t paWriteIndex = 0;
387 uint64_t cacheTimeDsp = 0;
388 uint64_t cacheTimePa = 0;
389 int32_t ret = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
390 EXPECT_EQ(ret, SUCCESS);
391 }
392
393 /**
394 * @tc.name : Test OffloadUpdatePolicyInWrite.
395 * @tc.type : FUNC
396 * @tc.number: PaRenderer_021
397 * @tc.desc : Test OffloadUpdatePolicyInWrite.
398 */
399 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_021, TestSize.Level1)
400 {
401 auto unit = CreatePaRendererStreamImpl();
402 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
403 adapterManager->InitPaContext();
404 uint32_t sessionId = 123456;
405 AudioProcessConfig processConfig = GetInnerCapConfig();
406 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
407 unit->paStream_ = stream;
408 unit->offloadEnable_ = true;
409 unit->lastOffloadUpdateFinishTime_ = 0;
410 int32_t ret = unit->OffloadUpdatePolicyInWrite();
411 EXPECT_EQ(ret, 0);
412 }
413
414 /**
415 * @tc.name : Test OffloadUpdatePolicy.
416 * @tc.type : FUNC
417 * @tc.number: PaRenderer_022
418 * @tc.desc : Test OffloadUpdatePolicy.
419 */
420 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_022, TestSize.Level1)
421 {
422 auto unit = CreatePaRendererStreamImpl();
423 AudioOffloadType statePolicy = OFFLOAD_ACTIVE_FOREGROUND;
424 bool force = true;
425 unit->offloadStatePolicy_ = OFFLOAD_ACTIVE_FOREGROUND;
426 unit->lastOffloadUpdateFinishTime_ = 1;
427 unit->OffloadUpdatePolicy(statePolicy, force);
428 EXPECT_EQ(0, unit->lastOffloadUpdateFinishTime_);
429 }
430
431 /**
432 * @tc.name : Test OffloadUpdatePolicy.
433 * @tc.type : FUNC
434 * @tc.number: PaRenderer_023
435 * @tc.desc : Test OffloadUpdatePolicy.
436 */
437 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_023, TestSize.Level1)
438 {
439 auto unit = CreatePaRendererStreamImpl();
440 AudioOffloadType statePolicy = OFFLOAD_ACTIVE_FOREGROUND;
441 bool force = false;
442 unit->offloadStatePolicy_ = OFFLOAD_DEFAULT;
443 unit->lastOffloadUpdateFinishTime_ = 1;
444 unit->OffloadUpdatePolicy(statePolicy, force);
445 EXPECT_EQ(0, unit->lastOffloadUpdateFinishTime_);
446 }
447
448 /**
449 * @tc.name : Test OffloadUpdatePolicy.
450 * @tc.type : FUNC
451 * @tc.number: PaRenderer_024
452 * @tc.desc : Test OffloadUpdatePolicy.
453 */
454 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_024, TestSize.Level1)
455 {
456 auto unit = CreatePaRendererStreamImpl();
457 AudioOffloadType statePolicy = OFFLOAD_DEFAULT;
458 bool force = false;
459 unit->offloadStatePolicy_ = OFFLOAD_ACTIVE_FOREGROUND;
460 unit->lastOffloadUpdateFinishTime_ = 1;
461 unit->OffloadUpdatePolicy(statePolicy, force);
462 EXPECT_EQ(0, unit->lastOffloadUpdateFinishTime_);
463 }
464
465 /**
466 * @tc.name : Test OffloadUpdatePolicy.
467 * @tc.type : FUNC
468 * @tc.number: PaRenderer_025
469 * @tc.desc : Test OffloadUpdatePolicy.
470 */
471 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_025, TestSize.Level1)
472 {
473 auto unit = CreatePaRendererStreamImpl();
474 AudioOffloadType statePolicy = OFFLOAD_ACTIVE_FOREGROUND;
475 bool force = true;
476 unit->offloadStatePolicy_ = OFFLOAD_ACTIVE_FOREGROUND;
477 unit->paStream_ = nullptr;
478 int32_t ret = unit->OffloadUpdatePolicy(statePolicy, force);
479 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
480 }
481
482 /**
483 * @tc.name : Test SetClientVolume.
484 * @tc.type : FUNC
485 * @tc.number: PaRenderer_026
486 * @tc.desc : Test SetClientVolume.
487 */
488 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_026, TestSize.Level1)
489 {
490 auto unit = CreatePaRendererStreamImpl();
491 float clientVolume = -1;
492 int32_t ret = unit->SetClientVolume(clientVolume);
493 EXPECT_EQ(ret, ERR_INVALID_PARAM);
494 }
495
496 /**
497 * @tc.name : Test SetClientVolume.
498 * @tc.type : FUNC
499 * @tc.number: PaRenderer_027
500 * @tc.desc : Test SetClientVolume.
501 */
502 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_027, TestSize.Level1)
503 {
504 auto unit = CreatePaRendererStreamImpl();
505 float clientVolume = 1.5;
506 int32_t ret = unit->SetClientVolume(clientVolume);
507 EXPECT_EQ(ret, ERR_INVALID_PARAM);
508 }
509
510 /**
511 * @tc.name : Test SetClientVolume.
512 * @tc.type : FUNC
513 * @tc.number: PaRenderer_028
514 * @tc.desc : Test SetClientVolume.
515 */
516 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_028, TestSize.Level1)
517 {
518 auto unit = CreatePaRendererStreamImpl();
519 float clientVolume = 0.5;
520 int32_t ret = unit->SetClientVolume(clientVolume);
521 EXPECT_EQ(ret, SUCCESS);
522 }
523
524 /**
525 * @tc.name : Test GetWritableSize.
526 * @tc.type : FUNC
527 * @tc.number: PaRenderer_029
528 * @tc.desc : Test GetWritableSize.
529 */
530 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_029, TestSize.Level1)
531 {
532 auto unit = CreatePaRendererStreamImpl();
533 unit->paStream_ = nullptr;
534 int32_t ret = unit->GetWritableSize();
535 EXPECT_EQ(ret, 0);
536 }
537
538 /**
539 * @tc.name : Test GetWritableSize.
540 * @tc.type : FUNC
541 * @tc.number: PaRenderer_030
542 * @tc.desc : Test GetWritableSize.
543 */
544 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_030, TestSize.Level1)
545 {
546 auto unit = CreatePaRendererStreamImpl();
547 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
548 adapterManager->InitPaContext();
549 uint32_t sessionId = 123456;
550 AudioProcessConfig processConfig = GetInnerCapConfig();
551 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
552 unit->paStream_ = stream;
553 int32_t ret = unit->GetWritableSize();
554 EXPECT_EQ(ret, pa_stream_writable_size(unit->paStream_));
555 }
556
557 /**
558 * @tc.name : Test EnqueueBuffer.
559 * @tc.type : FUNC
560 * @tc.number: PaRenderer_031
561 * @tc.desc : Test EnqueueBuffer.
562 */
563 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_031, TestSize.Level1)
564 {
565 auto unit = CreatePaRendererStreamImpl();
566 BufferDesc bufferDesc = {
567 .buffer = nullptr,
568 .bufLength = 0,
569 .dataLength = 0,
570 .metaBuffer = nullptr,
571 .metaLength = 0
572 };
573 unit->paStream_ = nullptr;
574 int32_t ret = unit->EnqueueBuffer(bufferDesc);
575 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
576 }
577
578 /**
579 * @tc.name : Test EnqueueBuffer.
580 * @tc.type : FUNC
581 * @tc.number: PaRenderer_032
582 * @tc.desc : Test EnqueueBuffer.
583 */
584 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_032, TestSize.Level1)
585 {
586 auto unit = CreatePaRendererStreamImpl();
587 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
588 adapterManager->InitPaContext();
589 uint32_t sessionId = 123456;
590 AudioProcessConfig processConfig = GetInnerCapConfig();
591 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
592 unit->paStream_ = stream;
593 BufferDesc bufferDesc = {
594 .buffer = nullptr,
595 .bufLength = 0,
596 .dataLength = 0,
597 .metaBuffer = nullptr,
598 .metaLength = 0
599 };
600 int32_t ret = unit->EnqueueBuffer(bufferDesc);
601 EXPECT_EQ(ret, SUCCESS);
602 }
603
604 /**
605 * @tc.name : Test SetAudioEffectMode.
606 * @tc.type : FUNC
607 * @tc.number: PaRenderer_033
608 * @tc.desc : Test SetAudioEffectMode.
609 */
610 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_033, TestSize.Level1)
611 {
612 auto unit = CreatePaRendererStreamImpl();
613 unit->paStream_ = nullptr;
614 int32_t effectMode = 0;
615 int32_t ret = unit->SetAudioEffectMode(effectMode);
616 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
617 }
618
619 /**
620 * @tc.name : Test SetAudioEffectMode.
621 * @tc.type : FUNC
622 * @tc.number: PaRenderer_034
623 * @tc.desc : Test SetAudioEffectMode.
624 */
625 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_034, TestSize.Level1)
626 {
627 auto unit = CreatePaRendererStreamImpl();
628 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
629 adapterManager->InitPaContext();
630 uint32_t sessionId = 123456;
631 AudioProcessConfig processConfig = GetInnerCapConfig();
632 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
633 unit->paStream_ = stream;
634 int32_t effectMode = 0;
635 int32_t ret = unit->SetAudioEffectMode(effectMode);
636 EXPECT_EQ(ret, SUCCESS);
637 }
638
639 /**
640 * @tc.name : Test Start.
641 * @tc.type : FUNC
642 * @tc.number: PaRenderer_036
643 * @tc.desc : Test Start.
644 */
645 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_036, TestSize.Level1)
646 {
647 auto unit = CreatePaRendererStreamImpl();
648 unit->paStream_ = nullptr;
649 int32_t ret = unit->Start();
650 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
651 }
652
653 /**
654 * @tc.name : Test Pause.
655 * @tc.type : FUNC
656 * @tc.number: PaRenderer_037
657 * @tc.desc : Test Pause.
658 */
659 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_037, TestSize.Level1)
660 {
661 auto unit = CreatePaRendererStreamImpl();
662 unit->paStream_ = nullptr;
663 bool isStandby = false;
664 int32_t ret = unit->Pause(isStandby);
665 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
666 }
667
668 /**
669 * @tc.name : Test Pause.
670 * @tc.type : FUNC
671 * @tc.number: PaRenderer_038
672 * @tc.desc : Test Pause.
673 */
674 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_038, TestSize.Level1)
675 {
676 auto unit = CreatePaRendererStreamImpl();
677 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
678 adapterManager->InitPaContext();
679 uint32_t sessionId = 123456;
680 AudioProcessConfig processConfig = GetInnerCapConfig();
681 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
682 unit->paStream_ = stream;
683 bool isStandby = false;
684 int32_t ret = unit->Pause(isStandby);
685 EXPECT_EQ(ret, SUCCESS);
686 }
687
688 /**
689 * @tc.name : Test Flush.
690 * @tc.type : FUNC
691 * @tc.number: PaRenderer_039
692 * @tc.desc : Test Flush.
693 */
694 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_039, TestSize.Level1)
695 {
696 auto unit = CreatePaRendererStreamImpl();
697 unit->paStream_ = nullptr;
698 int32_t ret = unit->Flush();
699 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
700 }
701
702 /**
703 * @tc.name : Test Flush.
704 * @tc.type : FUNC
705 * @tc.number: PaRenderer_040
706 * @tc.desc : Test Flush.
707 */
708 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_040, TestSize.Level1)
709 {
710 auto unit = CreatePaRendererStreamImpl();
711 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
712 adapterManager->InitPaContext();
713 uint32_t sessionId = 123456;
714 AudioProcessConfig processConfig = GetInnerCapConfig();
715 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
716 unit->paStream_ = stream;
717 int32_t ret = unit->Flush();
718 EXPECT_EQ(ret, SUCCESS);
719 }
720
721 /**
722 * @tc.name : Test Stop.
723 * @tc.type : FUNC
724 * @tc.number: PaRenderer_041
725 * @tc.desc : Test Stop.
726 */
727 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_041, TestSize.Level1)
728 {
729 auto unit = CreatePaRendererStreamImpl();
730 unit->paStream_ = nullptr;
731 int32_t ret = unit->Stop();
732 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
733 }
734
735 /**
736 * @tc.name : Test Stop.
737 * @tc.type : FUNC
738 * @tc.number: PaRenderer_042
739 * @tc.desc : Test Stop.
740 */
741 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_042, TestSize.Level1)
742 {
743 auto unit = CreatePaRendererStreamImpl();
744 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
745 adapterManager->InitPaContext();
746 uint32_t sessionId = 123456;
747 AudioProcessConfig processConfig = GetInnerCapConfig();
748 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
749 unit->paStream_ = stream;
750 int32_t ret = unit->Stop();
751 EXPECT_EQ(ret, SUCCESS);
752 }
753
754 /**
755 * @tc.name : Test Release.
756 * @tc.type : FUNC
757 * @tc.number: PaRenderer_043
758 * @tc.desc : Test Release.
759 */
760 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_043, TestSize.Level1)
761 {
762 auto unit = CreatePaRendererStreamImpl();
763 unit->paStream_ = nullptr;
764 unit->state_ = RUNNING;
765 int32_t ret = unit->Release();
766 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
767 }
768
769 /**
770 * @tc.name : Test Release.
771 * @tc.type : FUNC
772 * @tc.number: PaRenderer_044
773 * @tc.desc : Test Release.
774 */
775 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_044, TestSize.Level1)
776 {
777 auto unit = CreatePaRendererStreamImpl();
778 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
779 adapterManager->InitPaContext();
780 uint32_t sessionId = 123456;
781 AudioProcessConfig processConfig = GetInnerCapConfig();
782 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
783 unit->paStream_ = stream;
784 unit->state_ = RUNNING;
785 int32_t ret = unit->Release();
786 EXPECT_EQ(ret, SUCCESS);
787 }
788
789 /**
790 * @tc.name : Test GetLatency.
791 * @tc.type : FUNC
792 * @tc.number: PaRenderer_048
793 * @tc.desc : Test GetLatency.
794 */
795 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_048, TestSize.Level1)
796 {
797 auto unit = CreatePaRendererStreamImpl();
798 uint64_t latency = 0;
799 unit->firstGetLatency_= true;
800 unit->paStream_ = nullptr;
801 int32_t ret = unit->GetLatency(latency);
802 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
803 }
804
805 /**
806 * @tc.name : Test GetLatency.
807 * @tc.type : FUNC
808 * @tc.number: PaRenderer_049
809 * @tc.desc : Test GetLatency.
810 */
811 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_049, TestSize.Level1)
812 {
813 auto unit = CreatePaRendererStreamImpl();
814 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
815 adapterManager->InitPaContext();
816 uint32_t sessionId = 123456;
817 AudioProcessConfig processConfig = GetInnerCapConfig();
818 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
819 unit->paStream_ = stream;
820 uint64_t latency = 0;
821 unit->firstGetLatency_= true;
822 int32_t ret = unit->GetLatency(latency);
823 EXPECT_EQ(ret, SUCCESS);
824 }
825 /**
826 * @tc.name : Test Drain.
827 * @tc.type : FUNC
828 * @tc.number: PaRenderer_050
829 * @tc.desc : Test Drain.
830 */
831 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_050, TestSize.Level1)
832 {
833 auto unit = CreatePaRendererStreamImpl();
834 unit->paStream_ = nullptr;
835 int32_t ret = unit->Drain();
836 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
837 }
838
839 /**
840 * @tc.name : Test SetRate.
841 * @tc.type : FUNC
842 * @tc.number: PaRenderer_051
843 * @tc.desc : Test SetRate.
844 */
845 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_051, TestSize.Level1)
846 {
847 auto unit = CreatePaRendererStreamImpl();
848 unit->paStream_ = nullptr;
849 int32_t rate = RENDER_RATE_NORMAL;
850 EXPECT_EQ(unit->SetRate(rate), ERR_ILLEGAL_STATE);
851 #ifdef HAS_FEATURE_INNERCAPTURER
852 ReleasePaPort();
853 #endif
854 }
855 }
856 }