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, Timestamp::MONOTONIC);
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 InitPaStream for different adapter manager type.
276 * @tc.type : FUNC
277 * @tc.number: InitPaStream_001
278 * @tc.desc : Test InitPaStream for DUP_PLAYBACK
279 */
280 HWTEST_F(PaRendererStreamUnitTest, InitPaStream_001, TestSize.Level1)
281 {
282 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
283 adapterManager->InitPaContext();
284 uint32_t sessionId = 123456;
285 AudioProcessConfig processConfig = GetInnerCapConfig();
286 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
287
288 std::shared_ptr<IRendererStream> rendererStream = adapterManager->CreateRendererStream(processConfig, stream);
289 std::shared_ptr<PaRendererStreamImpl> rendererStreamImpl =
290 std::static_pointer_cast<PaRendererStreamImpl>(rendererStream);
291
292 int32_t rate = RENDER_RATE_NORMAL;
293 EXPECT_EQ(rendererStreamImpl->SetRate(rate), SUCCESS);
294 }
295
296 /**
297 * @tc.name : Test InitPaStream for different adapter manager type.
298 * @tc.type : FUNC
299 * @tc.number: InitPaStream_002
300 * @tc.desc : Test InitPaStream for DUAL_PLAYBACK
301 */
302 HWTEST_F(PaRendererStreamUnitTest, InitPaStream_002, TestSize.Level1)
303 {
304 adapterManager = std::make_shared<PaAdapterManager>(DUAL_PLAYBACK);
305 adapterManager->InitPaContext();
306 uint32_t sessionId = 123456;
307 AudioProcessConfig processConfig = GetInnerCapConfig();
308 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
309
310 std::shared_ptr<IRendererStream> rendererStream = adapterManager->CreateRendererStream(processConfig, stream);
311 std::shared_ptr<PaRendererStreamImpl> rendererStreamImpl =
312 std::static_pointer_cast<PaRendererStreamImpl>(rendererStream);
313
314 int32_t rate = RENDER_RATE_NORMAL;
315 EXPECT_EQ(rendererStreamImpl->SetRate(rate), SUCCESS);
316 }
317
318 /**
319 * @tc.name : Test InitPaStream for different adapter manager type.
320 * @tc.type : FUNC
321 * @tc.number: InitPaStream_003
322 * @tc.desc : Test InitPaStream for PLAYBACK
323 */
324 HWTEST_F(PaRendererStreamUnitTest, InitPaStream_003, TestSize.Level1)
325 {
326 adapterManager = std::make_shared<PaAdapterManager>(PLAYBACK);
327 adapterManager->InitPaContext();
328 uint32_t sessionId = 123456;
329 AudioProcessConfig processConfig = GetInnerCapConfig();
330 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
331
332 std::shared_ptr<IRendererStream> rendererStream = adapterManager->CreateRendererStream(processConfig, stream);
333 std::shared_ptr<PaRendererStreamImpl> rendererStreamImpl =
334 std::static_pointer_cast<PaRendererStreamImpl>(rendererStream);
335
336 int32_t rate = RENDER_RATE_NORMAL;
337 EXPECT_EQ(rendererStreamImpl->SetRate(rate), SUCCESS);
338 }
339
340 /**
341 * @tc.name : Test OffloadSetVolume.
342 * @tc.type : FUNC
343 * @tc.number: PaRenderer_013
344 * @tc.desc : Test OffloadSetVolume.
345 */
346 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_013, TestSize.Level1)
347 {
348 auto unit = CreatePaRendererStreamImpl();
349 unit->offloadEnable_ = false;
350 float volume = 0.0f;
351 auto ret = unit->OffloadSetVolume(volume);
352 EXPECT_EQ(ret, ERR_OPERATION_FAILED);
353 }
354
355 /**
356 * @tc.name : Test UpdateSpatializationState.
357 * @tc.type : FUNC
358 * @tc.number: PaRenderer_015
359 * @tc.desc : Test UpdateSpatializationState.
360 */
361 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_015, TestSize.Level1)
362 {
363 auto unit = CreatePaRendererStreamImpl();
364 unit->paStream_ = nullptr;
365 bool spatializationEnabled = false;
366 bool headTrackingEnabled = false;
367 int32_t ret = unit->UpdateSpatializationState(spatializationEnabled, headTrackingEnabled);
368 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
369 }
370
371 /**
372 * @tc.name : Test UpdateSpatializationState.
373 * @tc.type : FUNC
374 * @tc.number: PaRenderer_016
375 * @tc.desc : Test UpdateSpatializationState.
376 */
377 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_016, TestSize.Level1)
378 {
379 auto unit = CreatePaRendererStreamImpl();
380 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
381 adapterManager->InitPaContext();
382 uint32_t sessionId = 123456;
383 AudioProcessConfig processConfig = GetInnerCapConfig();
384 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
385 unit->paStream_ = stream;
386 bool spatializationEnabled = false;
387 bool headTrackingEnabled = false;
388 int32_t ret = unit->UpdateSpatializationState(spatializationEnabled, headTrackingEnabled);
389 EXPECT_EQ(ret, SUCCESS);
390 }
391
392 /**
393 * @tc.name : Test GetOffloadApproximatelyCacheTime.
394 * @tc.type : FUNC
395 * @tc.number: PaRenderer_017
396 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
397 */
398 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_017, TestSize.Level1)
399 {
400 auto unit = CreatePaRendererStreamImpl();
401 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
402 adapterManager->InitPaContext();
403 uint32_t sessionId = 123456;
404 AudioProcessConfig processConfig = GetInnerCapConfig();
405 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
406 unit->paStream_ = stream;
407 unit->offloadEnable_ = false;
408 uint64_t timestamp = 0;
409 uint64_t paWriteIndex = 0;
410 uint64_t cacheTimeDsp = 0;
411 uint64_t cacheTimePa = 0;
412 int32_t result = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
413 EXPECT_EQ(result, ERR_OPERATION_FAILED);
414 }
415
416 /**
417 * @tc.name : Test GetOffloadApproximatelyCacheTime.
418 * @tc.type : FUNC
419 * @tc.number: PaRenderer_018
420 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
421 */
422 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_018, TestSize.Level1)
423 {
424 auto unit = CreatePaRendererStreamImpl();
425 unit->paStream_ = nullptr;
426 unit->offloadEnable_ = true;
427 uint64_t timestamp = 0;
428 uint64_t paWriteIndex = 0;
429 uint64_t cacheTimeDsp = 0;
430 uint64_t cacheTimePa = 0;
431 int32_t ret = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
432 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
433 }
434
435 /**
436 * @tc.name : Test GetOffloadApproximatelyCacheTime.
437 * @tc.type : FUNC
438 * @tc.number: PaRenderer_019
439 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
440 */
441 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_019, TestSize.Level1)
442 {
443 auto unit = CreatePaRendererStreamImpl();
444 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
445 adapterManager->InitPaContext();
446 uint32_t sessionId = 123456;
447 AudioProcessConfig processConfig = GetInnerCapConfig();
448 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
449 unit->paStream_ = stream;
450 unit->offloadEnable_ = true;
451 uint64_t timestamp = 0;
452 uint64_t paWriteIndex = 0;
453 uint64_t cacheTimeDsp = 0;
454 uint64_t cacheTimePa = 0;
455 int32_t ret = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
456 EXPECT_EQ(ret, SUCCESS);
457 }
458
459 /**
460 * @tc.name : Test OffloadUpdatePolicyInWrite.
461 * @tc.type : FUNC
462 * @tc.number: PaRenderer_021
463 * @tc.desc : Test OffloadUpdatePolicyInWrite.
464 */
465 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_021, TestSize.Level1)
466 {
467 auto unit = CreatePaRendererStreamImpl();
468 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
469 adapterManager->InitPaContext();
470 uint32_t sessionId = 123456;
471 AudioProcessConfig processConfig = GetInnerCapConfig();
472 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
473 unit->paStream_ = stream;
474 unit->offloadEnable_ = true;
475 unit->lastOffloadUpdateFinishTime_ = 0;
476 int32_t ret = unit->OffloadUpdatePolicyInWrite();
477 EXPECT_EQ(ret, 0);
478 }
479
480 /**
481 * @tc.name : Test OffloadUpdatePolicy.
482 * @tc.type : FUNC
483 * @tc.number: PaRenderer_022
484 * @tc.desc : Test OffloadUpdatePolicy.
485 */
486 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_022, TestSize.Level1)
487 {
488 auto unit = CreatePaRendererStreamImpl();
489 AudioOffloadType statePolicy = OFFLOAD_ACTIVE_FOREGROUND;
490 bool force = true;
491 unit->offloadStatePolicy_ = OFFLOAD_ACTIVE_FOREGROUND;
492 unit->lastOffloadUpdateFinishTime_ = 1;
493 unit->OffloadUpdatePolicy(statePolicy, force);
494 EXPECT_EQ(0, unit->lastOffloadUpdateFinishTime_);
495 }
496
497 /**
498 * @tc.name : Test OffloadUpdatePolicy.
499 * @tc.type : FUNC
500 * @tc.number: PaRenderer_023
501 * @tc.desc : Test OffloadUpdatePolicy.
502 */
503 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_023, TestSize.Level1)
504 {
505 auto unit = CreatePaRendererStreamImpl();
506 AudioOffloadType statePolicy = OFFLOAD_ACTIVE_FOREGROUND;
507 bool force = false;
508 unit->offloadStatePolicy_ = OFFLOAD_DEFAULT;
509 unit->lastOffloadUpdateFinishTime_ = 1;
510 unit->OffloadUpdatePolicy(statePolicy, force);
511 EXPECT_EQ(0, unit->lastOffloadUpdateFinishTime_);
512 }
513
514 /**
515 * @tc.name : Test OffloadUpdatePolicy.
516 * @tc.type : FUNC
517 * @tc.number: PaRenderer_024
518 * @tc.desc : Test OffloadUpdatePolicy.
519 */
520 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_024, TestSize.Level1)
521 {
522 auto unit = CreatePaRendererStreamImpl();
523 AudioOffloadType statePolicy = OFFLOAD_DEFAULT;
524 bool force = false;
525 unit->offloadStatePolicy_ = OFFLOAD_ACTIVE_FOREGROUND;
526 unit->lastOffloadUpdateFinishTime_ = 1;
527 unit->OffloadUpdatePolicy(statePolicy, force);
528 EXPECT_EQ(0, unit->lastOffloadUpdateFinishTime_);
529 }
530
531 /**
532 * @tc.name : Test OffloadUpdatePolicy.
533 * @tc.type : FUNC
534 * @tc.number: PaRenderer_025
535 * @tc.desc : Test OffloadUpdatePolicy.
536 */
537 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_025, TestSize.Level1)
538 {
539 auto unit = CreatePaRendererStreamImpl();
540 AudioOffloadType statePolicy = OFFLOAD_ACTIVE_FOREGROUND;
541 bool force = true;
542 unit->offloadStatePolicy_ = OFFLOAD_ACTIVE_FOREGROUND;
543 unit->paStream_ = nullptr;
544 int32_t ret = unit->OffloadUpdatePolicy(statePolicy, force);
545 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
546 }
547
548 /**
549 * @tc.name : Test SetClientVolume.
550 * @tc.type : FUNC
551 * @tc.number: PaRenderer_026
552 * @tc.desc : Test SetClientVolume.
553 */
554 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_026, TestSize.Level1)
555 {
556 auto unit = CreatePaRendererStreamImpl();
557 float clientVolume = -1;
558 int32_t ret = unit->SetClientVolume(clientVolume);
559 EXPECT_EQ(ret, ERR_INVALID_PARAM);
560 }
561
562 /**
563 * @tc.name : Test SetClientVolume.
564 * @tc.type : FUNC
565 * @tc.number: PaRenderer_027
566 * @tc.desc : Test SetClientVolume.
567 */
568 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_027, TestSize.Level1)
569 {
570 auto unit = CreatePaRendererStreamImpl();
571 float clientVolume = 1.5;
572 int32_t ret = unit->SetClientVolume(clientVolume);
573 EXPECT_EQ(ret, ERR_INVALID_PARAM);
574 }
575
576 /**
577 * @tc.name : Test SetClientVolume.
578 * @tc.type : FUNC
579 * @tc.number: PaRenderer_028
580 * @tc.desc : Test SetClientVolume.
581 */
582 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_028, TestSize.Level1)
583 {
584 auto unit = CreatePaRendererStreamImpl();
585 float clientVolume = 0.5;
586 int32_t ret = unit->SetClientVolume(clientVolume);
587 EXPECT_EQ(ret, SUCCESS);
588 }
589
590 /**
591 * @tc.name : Test GetWritableSize.
592 * @tc.type : FUNC
593 * @tc.number: PaRenderer_029
594 * @tc.desc : Test GetWritableSize.
595 */
596 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_029, TestSize.Level1)
597 {
598 auto unit = CreatePaRendererStreamImpl();
599 unit->paStream_ = nullptr;
600 int32_t ret = unit->GetWritableSize();
601 EXPECT_EQ(ret, 0);
602 }
603
604 /**
605 * @tc.name : Test GetWritableSize.
606 * @tc.type : FUNC
607 * @tc.number: PaRenderer_030
608 * @tc.desc : Test GetWritableSize.
609 */
610 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_030, TestSize.Level1)
611 {
612 auto unit = CreatePaRendererStreamImpl();
613 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
614 adapterManager->InitPaContext();
615 uint32_t sessionId = 123456;
616 AudioProcessConfig processConfig = GetInnerCapConfig();
617 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
618 unit->paStream_ = stream;
619 int32_t ret = unit->GetWritableSize();
620 EXPECT_EQ(ret, pa_stream_writable_size(unit->paStream_));
621 }
622
623 /**
624 * @tc.name : Test EnqueueBuffer.
625 * @tc.type : FUNC
626 * @tc.number: PaRenderer_031
627 * @tc.desc : Test EnqueueBuffer.
628 */
629 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_031, TestSize.Level1)
630 {
631 auto unit = CreatePaRendererStreamImpl();
632 BufferDesc bufferDesc = {
633 .buffer = nullptr,
634 .bufLength = 0,
635 .dataLength = 0,
636 .metaBuffer = nullptr,
637 .metaLength = 0
638 };
639 unit->paStream_ = nullptr;
640 int32_t ret = unit->EnqueueBuffer(bufferDesc);
641 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
642 }
643
644 /**
645 * @tc.name : Test EnqueueBuffer.
646 * @tc.type : FUNC
647 * @tc.number: PaRenderer_032
648 * @tc.desc : Test EnqueueBuffer.
649 */
650 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_032, TestSize.Level1)
651 {
652 auto unit = CreatePaRendererStreamImpl();
653 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
654 adapterManager->InitPaContext();
655 uint32_t sessionId = 123456;
656 AudioProcessConfig processConfig = GetInnerCapConfig();
657 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
658 unit->paStream_ = stream;
659 BufferDesc bufferDesc = {
660 .buffer = nullptr,
661 .bufLength = 0,
662 .dataLength = 0,
663 .metaBuffer = nullptr,
664 .metaLength = 0
665 };
666 int32_t ret = unit->EnqueueBuffer(bufferDesc);
667 EXPECT_EQ(ret, SUCCESS);
668 }
669
670 /**
671 * @tc.name : Test SetAudioEffectMode.
672 * @tc.type : FUNC
673 * @tc.number: PaRenderer_033
674 * @tc.desc : Test SetAudioEffectMode.
675 */
676 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_033, TestSize.Level1)
677 {
678 auto unit = CreatePaRendererStreamImpl();
679 unit->paStream_ = nullptr;
680 int32_t effectMode = 0;
681 int32_t ret = unit->SetAudioEffectMode(effectMode);
682 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
683 }
684
685 /**
686 * @tc.name : Test SetAudioEffectMode.
687 * @tc.type : FUNC
688 * @tc.number: PaRenderer_034
689 * @tc.desc : Test SetAudioEffectMode.
690 */
691 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_034, TestSize.Level1)
692 {
693 auto unit = CreatePaRendererStreamImpl();
694 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
695 adapterManager->InitPaContext();
696 uint32_t sessionId = 123456;
697 AudioProcessConfig processConfig = GetInnerCapConfig();
698 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
699 unit->paStream_ = stream;
700 int32_t effectMode = 0;
701 int32_t ret = unit->SetAudioEffectMode(effectMode);
702 EXPECT_EQ(ret, SUCCESS);
703 }
704
705 /**
706 * @tc.name : Test Start.
707 * @tc.type : FUNC
708 * @tc.number: PaRenderer_036
709 * @tc.desc : Test Start.
710 */
711 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_036, TestSize.Level1)
712 {
713 auto unit = CreatePaRendererStreamImpl();
714 unit->paStream_ = nullptr;
715 int32_t ret = unit->Start();
716 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
717 }
718
719 /**
720 * @tc.name : Test Pause.
721 * @tc.type : FUNC
722 * @tc.number: PaRenderer_037
723 * @tc.desc : Test Pause.
724 */
725 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_037, TestSize.Level1)
726 {
727 auto unit = CreatePaRendererStreamImpl();
728 unit->paStream_ = nullptr;
729 bool isStandby = false;
730 int32_t ret = unit->Pause(isStandby);
731 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
732 }
733
734 /**
735 * @tc.name : Test Pause.
736 * @tc.type : FUNC
737 * @tc.number: PaRenderer_038
738 * @tc.desc : Test Pause.
739 */
740 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_038, TestSize.Level1)
741 {
742 auto unit = CreatePaRendererStreamImpl();
743 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
744 adapterManager->InitPaContext();
745 uint32_t sessionId = 123456;
746 AudioProcessConfig processConfig = GetInnerCapConfig();
747 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
748 unit->paStream_ = stream;
749 bool isStandby = false;
750 int32_t ret = unit->Pause(isStandby);
751 EXPECT_EQ(ret, SUCCESS);
752 }
753
754 /**
755 * @tc.name : Test Flush.
756 * @tc.type : FUNC
757 * @tc.number: PaRenderer_039
758 * @tc.desc : Test Flush.
759 */
760 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_039, TestSize.Level1)
761 {
762 auto unit = CreatePaRendererStreamImpl();
763 unit->paStream_ = nullptr;
764 int32_t ret = unit->Flush();
765 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
766 }
767
768 /**
769 * @tc.name : Test Flush.
770 * @tc.type : FUNC
771 * @tc.number: PaRenderer_040
772 * @tc.desc : Test Flush.
773 */
774 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_040, TestSize.Level1)
775 {
776 auto unit = CreatePaRendererStreamImpl();
777 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
778 adapterManager->InitPaContext();
779 uint32_t sessionId = 123456;
780 AudioProcessConfig processConfig = GetInnerCapConfig();
781 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
782 unit->paStream_ = stream;
783 int32_t ret = unit->Flush();
784 EXPECT_EQ(ret, SUCCESS);
785 }
786
787 /**
788 * @tc.name : Test Stop.
789 * @tc.type : FUNC
790 * @tc.number: PaRenderer_041
791 * @tc.desc : Test Stop.
792 */
793 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_041, TestSize.Level1)
794 {
795 auto unit = CreatePaRendererStreamImpl();
796 unit->paStream_ = nullptr;
797 int32_t ret = unit->Stop();
798 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
799 }
800
801 /**
802 * @tc.name : Test Stop.
803 * @tc.type : FUNC
804 * @tc.number: PaRenderer_042
805 * @tc.desc : Test Stop.
806 */
807 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_042, TestSize.Level1)
808 {
809 auto unit = CreatePaRendererStreamImpl();
810 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
811 adapterManager->InitPaContext();
812 uint32_t sessionId = 123456;
813 AudioProcessConfig processConfig = GetInnerCapConfig();
814 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
815 unit->paStream_ = stream;
816 int32_t ret = unit->Stop();
817 EXPECT_EQ(ret, SUCCESS);
818 }
819
820 /**
821 * @tc.name : Test Release.
822 * @tc.type : FUNC
823 * @tc.number: PaRenderer_043
824 * @tc.desc : Test Release.
825 */
826 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_043, TestSize.Level1)
827 {
828 auto unit = CreatePaRendererStreamImpl();
829 unit->paStream_ = nullptr;
830 unit->state_ = RUNNING;
831 int32_t ret = unit->Release();
832 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
833 }
834
835 /**
836 * @tc.name : Test Release.
837 * @tc.type : FUNC
838 * @tc.number: PaRenderer_044
839 * @tc.desc : Test Release.
840 */
841 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_044, TestSize.Level1)
842 {
843 auto unit = CreatePaRendererStreamImpl();
844 adapterManager = std::make_shared<PaAdapterManager>(DUP_PLAYBACK);
845 adapterManager->InitPaContext();
846 uint32_t sessionId = 123456;
847 AudioProcessConfig processConfig = GetInnerCapConfig();
848 pa_stream *stream = adapterManager->InitPaStream(processConfig, sessionId, false);
849 unit->paStream_ = stream;
850 unit->state_ = RUNNING;
851 int32_t ret = unit->Release();
852 EXPECT_EQ(ret, SUCCESS);
853 }
854
855 /**
856 * @tc.name : Test GetLatency.
857 * @tc.type : FUNC
858 * @tc.number: PaRenderer_048
859 * @tc.desc : Test GetLatency.
860 */
861 HWTEST_F(PaRendererStreamUnitTest, PaRenderer_048, TestSize.Level1)
862 {
863 auto unit = CreatePaRendererStreamImpl();
864 uint64_t latency = 0;
865 unit->firstGetLatency_= true;
866 unit->paStream_ = nullptr;
867 int32_t ret = unit->GetLatency(latency);
868 EXPECT_EQ(ret, ERR_ILLEGAL_STATE);
869 }
870 }
871 }