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 <gmock/gmock.h>
25 #include "hpae_renderer_stream_impl.h"
26 #include "policy_handler.h"
27 #include "hpae_adapter_manager.h"
28 #include "audio_capturer_private.h"
29 #include "audio_system_manager.h"
30 #include "audio_system_manager.h"
31
32 using namespace testing::ext;
33 using namespace testing;
34 namespace OHOS {
35 namespace AudioStandard {
36 const int32_t CAPTURER_FLAG = 10;
37 static std::shared_ptr<HpaeAdapterManager> adapterManager;
38
39 class HpaeRendererStreamUnitTest : public ::testing::Test {
40 public:
41 void SetUp();
42 void TearDown();
43 std::shared_ptr<HpaeRendererStreamImpl> CreateHpaeRendererStreamImpl();
44 };
SetUp(void)45 void HpaeRendererStreamUnitTest::SetUp(void)
46 {
47 // input testcase setup step,setup invoked before each testcases
48 }
49
TearDown(void)50 void HpaeRendererStreamUnitTest::TearDown(void)
51 {
52 // input testcase teardown step,teardown invoked after each testcases
53 }
54
GetInnerCapConfig()55 static AudioProcessConfig GetInnerCapConfig()
56 {
57 AudioProcessConfig config;
58 config.appInfo.appUid = CAPTURER_FLAG;
59 config.appInfo.appPid = CAPTURER_FLAG;
60 config.streamInfo.format = SAMPLE_S32LE;
61 config.streamInfo.samplingRate = SAMPLE_RATE_48000;
62 config.streamInfo.channels = STEREO;
63 config.streamInfo.channelLayout = AudioChannelLayout::CH_LAYOUT_STEREO;
64 config.audioMode = AudioMode::AUDIO_MODE_PLAYBACK;
65 config.streamType = AudioStreamType::STREAM_MUSIC;
66 config.deviceType = DEVICE_TYPE_USB_HEADSET;
67 config.innerCapId = 1;
68 config.originalSessionId = 123456; // 123456: session id
69 return config;
70 }
71
CreateHpaeRendererStreamImpl()72 std::shared_ptr<HpaeRendererStreamImpl> HpaeRendererStreamUnitTest::CreateHpaeRendererStreamImpl()
73 {
74 adapterManager = std::make_shared<HpaeAdapterManager>(DUP_PLAYBACK);
75 AudioProcessConfig processConfig = GetInnerCapConfig();
76 std::string deviceName = "";
77 std::shared_ptr<IRendererStream> rendererStream = adapterManager->CreateRendererStream(processConfig, deviceName);
78 std::shared_ptr<HpaeRendererStreamImpl> rendererStreamImpl =
79 std::static_pointer_cast<HpaeRendererStreamImpl>(rendererStream);
80 return rendererStreamImpl;
81 }
82
83 /**
84 * @tc.name : Test AudioProcessProxy API
85 * @tc.type : FUNC
86 * @tc.number: GetCurrentTimeStamp_001
87 * @tc.desc : Test AudioProcessProxy interface.
88 */
89 HWTEST_F(HpaeRendererStreamUnitTest, GetCurrentTimeStamp_001, TestSize.Level1)
90 {
91 auto unit = CreateHpaeRendererStreamImpl();
92 EXPECT_NE(unit, nullptr);
93 uint64_t timestamp = 0;
94 int32_t ret = unit->GetCurrentTimeStamp(timestamp);
95 EXPECT_EQ(ret, SUCCESS);
96 }
97
98 /**
99 * @tc.name : Test GetCurrentTimeStamp
100 * @tc.type : FUNC
101 * @tc.number: GetCurrentTimeStamp_002
102 * @tc.desc : Test GetCurrentTimeStamp.
103 */
104 HWTEST_F(HpaeRendererStreamUnitTest, GetCurrentTimeStamp_002, TestSize.Level1)
105 {
106 auto unit = CreateHpaeRendererStreamImpl();
107 EXPECT_NE(unit, nullptr);
108 uint64_t timestamp = 0;
109 int32_t ret = unit->GetCurrentTimeStamp(timestamp);
110 EXPECT_EQ(ret, SUCCESS);
111 }
112
113 /**
114 * @tc.name : Test AudioProcessProxy API
115 * @tc.type : FUNC
116 * @tc.number: HpaeRenderer_001
117 * @tc.desc : Test AudioProcessProxy interface.
118 */
119 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_001, TestSize.Level1)
120 {
121 auto unit = CreateHpaeRendererStreamImpl();
122 EXPECT_NE(unit, nullptr);
123 int32_t rate = RENDER_RATE_NORMAL;
124 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
125 }
126
127 /**
128 * @tc.name : Test AudioProcessProxy API
129 * @tc.type : FUNC
130 * @tc.number: HpaeRenderer_002
131 * @tc.desc : Test AudioProcessProxy interface.
132 */
133 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_002, TestSize.Level1)
134 {
135 auto unit = CreateHpaeRendererStreamImpl();
136 EXPECT_NE(unit, nullptr);
137 int32_t rate = RENDER_RATE_DOUBLE;
138 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
139 }
140
141
142 /**
143 * @tc.name : Test AudioProcessProxy API
144 * @tc.type : FUNC
145 * @tc.number: HpaeRenderer_003
146 * @tc.desc : Test AudioProcessProxy interface.
147 */
148 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_003, TestSize.Level1)
149 {
150 auto unit = CreateHpaeRendererStreamImpl();
151 EXPECT_NE(unit, nullptr);
152 int32_t rate = RENDER_RATE_HALF;
153 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
154 }
155
156 /**
157 * @tc.name : Test GetCurrentPosition
158 * @tc.type : FUNC
159 * @tc.number: HpaeRenderer_004
160 * @tc.desc : Test GetCurrentPosition.
161 */
162 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_004, TestSize.Level1)
163 {
164 auto unit = CreateHpaeRendererStreamImpl();
165 EXPECT_NE(unit, nullptr);
166 uint64_t timestamp = 0;
167 uint64_t framePosition = 0;
168 uint64_t latency = 0;
169 int32_t ret = unit->GetCurrentPosition(framePosition, timestamp, latency, Timestamp::MONOTONIC);
170 EXPECT_EQ(ret, SUCCESS);
171 unit->deviceClass_ = "remote_offload";
172 ret = unit->GetCurrentPosition(framePosition, timestamp, latency, Timestamp::MONOTONIC);
173 EXPECT_EQ(ret, SUCCESS);
174 unit->deviceClass_ = "offload";
175 ret = unit->GetCurrentPosition(framePosition, timestamp, latency, Timestamp::MONOTONIC);
176 EXPECT_EQ(ret, SUCCESS);
177 }
178
179 /**
180 * @tc.name : Test GetCurrentPosition.
181 * @tc.type : FUNC
182 * @tc.number: HpaeRenderer_005
183 * @tc.desc : Test GetCurrentPosition.
184 */
185 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_005, TestSize.Level1)
186 {
187 auto unit = CreateHpaeRendererStreamImpl();
188 EXPECT_NE(unit, nullptr);
189 int32_t rate = RENDER_RATE_NORMAL;
190 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
191 }
192
193 /**
194 * @tc.name : Test OffloadSetVolume.
195 * @tc.type : FUNC
196 * @tc.number: HpaeRenderer_006
197 * @tc.desc : Test OffloadSetVolume.
198 */
199 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_006, TestSize.Level1)
200 {
201 auto unit = CreateHpaeRendererStreamImpl();
202 EXPECT_NE(unit, nullptr);
203 unit->offloadEnable_ = false;
204 float volume = 0.0f;
205 auto ret = unit->OffloadSetVolume(volume);
206 EXPECT_EQ(ret, ERR_OPERATION_FAILED);
207 }
208
209 /**
210 * @tc.name : Test UpdateSpatializationState.
211 * @tc.type : FUNC
212 * @tc.number: HpaeRenderer_007
213 * @tc.desc : Test UpdateSpatializationState.
214 */
215 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_007, TestSize.Level1)
216 {
217 auto unit = CreateHpaeRendererStreamImpl();
218 EXPECT_NE(unit, nullptr);
219 bool spatializationEnabled = false;
220 bool headTrackingEnabled = false;
221 int32_t ret = unit->UpdateSpatializationState(spatializationEnabled, headTrackingEnabled);
222 EXPECT_EQ(ret, SUCCESS);
223 }
224
225 /**
226 * @tc.name : Test UpdateSpatializationState.
227 * @tc.type : FUNC
228 * @tc.number: HpaeRenderer_008
229 * @tc.desc : Test UpdateSpatializationState.
230 */
231 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_008, TestSize.Level1)
232 {
233 auto unit = CreateHpaeRendererStreamImpl();
234 EXPECT_NE(unit, nullptr);
235 bool spatializationEnabled = false;
236 bool headTrackingEnabled = false;
237 int32_t ret = unit->UpdateSpatializationState(spatializationEnabled, headTrackingEnabled);
238 EXPECT_EQ(ret, SUCCESS);
239 }
240
241 /**
242 * @tc.name : Test GetOffloadApproximatelyCacheTime.
243 * @tc.type : FUNC
244 * @tc.number: HpaeRenderer_009
245 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
246 */
247 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_009, TestSize.Level1)
248 {
249 auto unit = CreateHpaeRendererStreamImpl();
250 EXPECT_NE(unit, nullptr);
251 unit->offloadEnable_ = false;
252 uint64_t timestamp = 0;
253 uint64_t paWriteIndex = 0;
254 uint64_t cacheTimeDsp = 0;
255 uint64_t cacheTimePa = 0;
256 int32_t result = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
257 EXPECT_EQ(result, ERR_OPERATION_FAILED);
258 }
259
260 /**
261 * @tc.name : Test GetOffloadApproximatelyCacheTime.
262 * @tc.type : FUNC
263 * @tc.number: HpaeRenderer_010
264 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
265 */
266 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_010, TestSize.Level1)
267 {
268 auto unit = CreateHpaeRendererStreamImpl();
269 EXPECT_NE(unit, nullptr);
270 unit->offloadEnable_ = true;
271 uint64_t timestamp = 0;
272 uint64_t paWriteIndex = 0;
273 uint64_t cacheTimeDsp = 0;
274 uint64_t cacheTimePa = 0;
275 int32_t ret = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
276 EXPECT_EQ(ret, SUCCESS);
277 }
278
279 /**
280 * @tc.name : Test GetOffloadApproximatelyCacheTime.
281 * @tc.type : FUNC
282 * @tc.number: HpaeRenderer_011
283 * @tc.desc : Test GetOffloadApproximatelyCacheTime.
284 */
285 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_011, TestSize.Level1)
286 {
287 auto unit = CreateHpaeRendererStreamImpl();
288 EXPECT_NE(unit, nullptr);
289 unit->offloadEnable_ = true;
290 uint64_t timestamp = 0;
291 uint64_t paWriteIndex = 0;
292 uint64_t cacheTimeDsp = 0;
293 uint64_t cacheTimePa = 0;
294 int32_t ret = unit->GetOffloadApproximatelyCacheTime(timestamp, paWriteIndex, cacheTimeDsp, cacheTimePa);
295 EXPECT_EQ(ret, SUCCESS);
296 }
297
298 /**
299 * @tc.name : Test SetClientVolume.
300 * @tc.type : FUNC
301 * @tc.number: HpaeRenderer_012
302 * @tc.desc : Test SetClientVolume.
303 */
304 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_012, TestSize.Level1)
305 {
306 auto unit = CreateHpaeRendererStreamImpl();
307 EXPECT_NE(unit, nullptr);
308 float clientVolume = -1;
309 int32_t ret = unit->SetClientVolume(clientVolume);
310 EXPECT_EQ(ret, ERR_INVALID_PARAM);
311 }
312
313 /**
314 * @tc.name : Test SetClientVolume.
315 * @tc.type : FUNC
316 * @tc.number: HpaeRenderer_013
317 * @tc.desc : Test SetClientVolume.
318 */
319 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_013, TestSize.Level1)
320 {
321 auto unit = CreateHpaeRendererStreamImpl();
322 EXPECT_NE(unit, nullptr);
323 float clientVolume = 1.5;
324 int32_t ret = unit->SetClientVolume(clientVolume);
325 EXPECT_EQ(ret, ERR_INVALID_PARAM);
326 }
327
328 /**
329 * @tc.name : Test SetClientVolume.
330 * @tc.type : FUNC
331 * @tc.number: HpaeRenderer_014
332 * @tc.desc : Test SetClientVolume.
333 */
334 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_014, TestSize.Level1)
335 {
336 auto unit = CreateHpaeRendererStreamImpl();
337 EXPECT_NE(unit, nullptr);
338 float clientVolume = 0.5;
339 int32_t ret = unit->SetClientVolume(clientVolume);
340 EXPECT_EQ(ret, SUCCESS);
341 }
342
343 /**
344 * @tc.name : Test GetWritableSize.
345 * @tc.type : FUNC
346 * @tc.number: HpaeRenderer_015
347 * @tc.desc : Test GetWritableSize.
348 */
349 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_015, TestSize.Level1)
350 {
351 auto unit = CreateHpaeRendererStreamImpl();
352 EXPECT_NE(unit, nullptr);
353 int32_t ret = unit->GetWritableSize();
354 EXPECT_EQ(ret, 0);
355 }
356
357 /**
358 * @tc.name : Test EnqueueBuffer.
359 * @tc.type : FUNC
360 * @tc.number: HpaeRenderer_016
361 * @tc.desc : Test EnqueueBuffer.
362 */
363 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_016, TestSize.Level1)
364 {
365 auto unit = CreateHpaeRendererStreamImpl();
366 EXPECT_NE(unit, nullptr);
367 BufferDesc bufferDesc = {
368 .buffer = nullptr,
369 .bufLength = 0,
370 .dataLength = 0,
371 .metaBuffer = nullptr,
372 .metaLength = 0
373 };
374 int32_t ret = unit->EnqueueBuffer(bufferDesc);
375 EXPECT_EQ(ret, ERROR);
376 }
377
378 /**
379 * @tc.name : Test SetAudioEffectMode.
380 * @tc.type : FUNC
381 * @tc.number: HpaeRenderer_017
382 * @tc.desc : Test SetAudioEffectMode.
383 */
384 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_017, TestSize.Level1)
385 {
386 auto unit = CreateHpaeRendererStreamImpl();
387 EXPECT_NE(unit, nullptr);
388 int32_t effectMode = 0;
389 int32_t ret = unit->SetAudioEffectMode(effectMode);
390 EXPECT_EQ(ret, SUCCESS);
391 }
392
393 /**
394 * @tc.name : Test SetAudioEffectMode.
395 * @tc.type : FUNC
396 * @tc.number: HpaeRenderer_018
397 * @tc.desc : Test SetAudioEffectMode.
398 */
399 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_018, TestSize.Level1)
400 {
401 auto unit = CreateHpaeRendererStreamImpl();
402 EXPECT_NE(unit, nullptr);
403 int32_t effectMode = 0;
404 int32_t ret = unit->SetAudioEffectMode(effectMode);
405 EXPECT_EQ(ret, SUCCESS);
406 }
407
408 /**
409 * @tc.name : Test Start.
410 * @tc.type : FUNC
411 * @tc.number: HpaeRenderer_019
412 * @tc.desc : Test Start.
413 */
414 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_019, TestSize.Level1)
415 {
416 auto unit = CreateHpaeRendererStreamImpl();
417 EXPECT_NE(unit, nullptr);
418 int32_t ret = unit->Start();
419 EXPECT_EQ(ret, SUCCESS);
420 }
421
422 /**
423 * @tc.name : Test Pause.
424 * @tc.type : FUNC
425 * @tc.number: HpaeRenderer_020
426 * @tc.desc : Test Pause.
427 */
428 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_020, TestSize.Level1)
429 {
430 auto unit = CreateHpaeRendererStreamImpl();
431 EXPECT_NE(unit, nullptr);
432 bool isStandby = false;
433 int32_t ret = unit->Pause(isStandby);
434 EXPECT_EQ(ret, SUCCESS);
435 }
436
437 /**
438 * @tc.name : Test Pause.
439 * @tc.type : FUNC
440 * @tc.number: HpaeRenderer_021
441 * @tc.desc : Test Pause.
442 */
443 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_021, TestSize.Level1)
444 {
445 auto unit = CreateHpaeRendererStreamImpl();
446 EXPECT_NE(unit, nullptr);
447 bool isStandby = false;
448 int32_t ret = unit->Pause(isStandby);
449 EXPECT_EQ(ret, SUCCESS);
450 }
451
452 /**
453 * @tc.name : Test Flush.
454 * @tc.type : FUNC
455 * @tc.number: HpaeRenderer_022
456 * @tc.desc : Test Flush.
457 */
458 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_022, TestSize.Level1)
459 {
460 auto unit = CreateHpaeRendererStreamImpl();
461 EXPECT_NE(unit, nullptr);
462 int32_t ret = unit->Flush();
463 EXPECT_EQ(ret, SUCCESS);
464 }
465
466 /**
467 * @tc.name : Test Flush.
468 * @tc.type : FUNC
469 * @tc.number: HpaeRenderer_023
470 * @tc.desc : Test Flush.
471 */
472 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_023, TestSize.Level1)
473 {
474 auto unit = CreateHpaeRendererStreamImpl();
475 EXPECT_NE(unit, nullptr);
476 int32_t ret = unit->Flush();
477 EXPECT_EQ(ret, SUCCESS);
478 }
479
480 /**
481 * @tc.name : Test Stop.
482 * @tc.type : FUNC
483 * @tc.number: HpaeRenderer_024
484 * @tc.desc : Test Stop.
485 */
486 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_024, TestSize.Level1)
487 {
488 auto unit = CreateHpaeRendererStreamImpl();
489 EXPECT_NE(unit, nullptr);
490 int32_t ret = unit->Stop();
491 EXPECT_EQ(ret, SUCCESS);
492 }
493
494 /**
495 * @tc.name : Test Release.
496 * @tc.type : FUNC
497 * @tc.number: HpaeRenderer_025
498 * @tc.desc : Test Release.
499 */
500 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_025, TestSize.Level1)
501 {
502 auto unit = CreateHpaeRendererStreamImpl();
503 EXPECT_NE(unit, nullptr);
504 unit->state_ = RUNNING;
505 int32_t ret = unit->Release();
506 EXPECT_EQ(ret, SUCCESS);
507 }
508
509 /**
510 * @tc.name : Test GetLatency.
511 * @tc.type : FUNC
512 * @tc.number: HpaeRenderer_026
513 * @tc.desc : Test GetLatency.
514 */
515 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_026, TestSize.Level1)
516 {
517 auto unit = CreateHpaeRendererStreamImpl();
518 EXPECT_NE(unit, nullptr);
519 uint64_t latency = 0;
520 int32_t ret = unit->GetLatency(latency);
521 EXPECT_EQ(ret, SUCCESS);
522 unit->deviceClass_ = "remote_offload";
523 ret = unit->GetLatency(latency);
524 EXPECT_EQ(ret, SUCCESS);
525 unit->deviceClass_ = "offload";
526 ret = unit->GetLatency(latency);
527 EXPECT_EQ(ret, SUCCESS);
528 }
529
530 /**
531 * @tc.name : Test Drain.
532 * @tc.type : FUNC
533 * @tc.number: HpaeRenderer_027
534 * @tc.desc : Test Drain.
535 */
536 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_027, TestSize.Level1)
537 {
538 auto unit = CreateHpaeRendererStreamImpl();
539 EXPECT_NE(unit, nullptr);
540 int32_t ret = unit->Drain();
541 EXPECT_EQ(ret, SUCCESS);
542 }
543
544 /**
545 * @tc.name : Test SetRate.
546 * @tc.type : FUNC
547 * @tc.number: HpaeRenderer_028
548 * @tc.desc : Test SetRate.
549 */
550 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_028, TestSize.Level1)
551 {
552 auto unit = CreateHpaeRendererStreamImpl();
553 EXPECT_NE(unit, nullptr);
554 int32_t rate = RENDER_RATE_NORMAL;
555 EXPECT_EQ(unit->SetRate(rate), SUCCESS);
556 }
557
558 /**
559 * @tc.name : Test StartWithSyncId.
560 * @tc.type : FUNC
561 * @tc.number: HpaeRenderer_029
562 * @tc.desc : Test StartWithSyncId.
563 */
564 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_029, TestSize.Level1)
565 {
566 int32_t syncId = 123;
567 auto unit = CreateHpaeRendererStreamImpl();
568 EXPECT_NE(unit, nullptr);
569 int32_t ret = unit->StartWithSyncId(syncId);
570 EXPECT_EQ(ret, SUCCESS);
571 }
572
573 /**
574 * @tc.name : Test OnDeviceClassChange.
575 * @tc.type : FUNC
576 * @tc.number: HpaeRenderer_030
577 * @tc.desc : Test OnDeviceClassChange.
578 */
579 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_030, TestSize.Level1)
580 {
581 auto unit = CreateHpaeRendererStreamImpl();
582 EXPECT_NE(unit, nullptr);
583
584 AudioCallBackStreamInfo info = {
585 .deviceClass = "remote_offload",
586 .framePosition = 10000
587 };
588 unit->deviceClass_ = "primary";
589 unit->OnDeviceClassChange(info);
590 EXPECT_EQ(unit->lastHdiFramePosition_, 10000);
591 EXPECT_EQ(unit->lastFramePosition_, 10000);
592
593 info.deviceClass = "offload";
594 unit->OnDeviceClassChange(info);
595 EXPECT_EQ(unit->lastHdiFramePosition_, 10000);
596 EXPECT_EQ(unit->lastFramePosition_, 10000);
597
598 info.hdiFramePosition = 10000;
599 unit->OnDeviceClassChange(info);
600 EXPECT_GT(unit->lastHdiFramePosition_, 10000);
601 }
602
603 /**
604 * @tc.name : Test WriteDataFromRingBuffer.
605 * @tc.type : FUNC
606 * @tc.number: HpaeRenderer_031
607 * @tc.desc : Test WriteDataFromRingBuffer.
608 */
609 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_031, TestSize.Level0)
610 {
611 std::shared_ptr<HpaeRendererStreamImpl> hpaeRenderer = CreateHpaeRendererStreamImpl();
612 EXPECT_NE(hpaeRenderer, nullptr);
613
614 // 10 bytes
615 constexpr size_t bufferSize = 10;
616
617 hpaeRenderer->ringBuffer_ = AudioRingCache::Create(bufferSize);
618 std::vector<int8_t> tmpBuffer(bufferSize, 1);
619 hpaeRenderer->ringBuffer_->Enqueue({reinterpret_cast<uint8_t *>(tmpBuffer.data()), bufferSize});
620 tmpBuffer = std::vector<int8_t>(bufferSize, 0);
621 size_t requestDataLen = bufferSize;
622 int32_t ret = hpaeRenderer->WriteDataFromRingBuffer(false, tmpBuffer.data(), requestDataLen);
623 EXPECT_EQ(ret, SUCCESS);
624 EXPECT_EQ(requestDataLen, bufferSize);
625 EXPECT_THAT(tmpBuffer, Each(Eq(1)));
626 }
627
628 /**
629 * @tc.name : Test WriteDataFromRingBuffer.
630 * @tc.type : FUNC
631 * @tc.number: HpaeRenderer_032
632 * @tc.desc : Test WriteDataFromRingBuffer.
633 */
634 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_032, TestSize.Level0)
635 {
636 std::shared_ptr<HpaeRendererStreamImpl> hpaeRenderer = CreateHpaeRendererStreamImpl();
637 EXPECT_NE(hpaeRenderer, nullptr);
638
639 // 10 bytes
640 constexpr size_t bufferSize = 10;
641
642 hpaeRenderer->ringBuffer_ = AudioRingCache::Create(bufferSize);
643 std::vector<int8_t> tmpBuffer(bufferSize, 1);
644 hpaeRenderer->ringBuffer_->Enqueue({reinterpret_cast<uint8_t *>(tmpBuffer.data()), bufferSize - 1});
645 tmpBuffer = std::vector<int8_t>(bufferSize, 0);
646 size_t requestDataLen = bufferSize;
647 int32_t ret = hpaeRenderer->WriteDataFromRingBuffer(false, tmpBuffer.data(), requestDataLen);
648 EXPECT_NE(ret, SUCCESS);
649 }
650
651 /**
652 * @tc.name : Test WriteDataFromRingBuffer.
653 * @tc.type : FUNC
654 * @tc.number: HpaeRenderer_033
655 * @tc.desc : Test WriteDataFromRingBuffer.
656 */
657 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_033, TestSize.Level0)
658 {
659 std::shared_ptr<HpaeRendererStreamImpl> hpaeRenderer = CreateHpaeRendererStreamImpl();
660 EXPECT_NE(hpaeRenderer, nullptr);
661
662 // 10 bytes
663 constexpr size_t bufferSize = 10;
664
665 hpaeRenderer->ringBuffer_ = AudioRingCache::Create(bufferSize);
666 std::vector<int8_t> tmpBuffer(bufferSize, 1);
667 hpaeRenderer->ringBuffer_->Enqueue({reinterpret_cast<uint8_t *>(tmpBuffer.data()), bufferSize - 1});
668 tmpBuffer = std::vector<int8_t>(bufferSize, 2);
669 size_t requestDataLen = bufferSize;
670 int32_t ret = hpaeRenderer->WriteDataFromRingBuffer(true, tmpBuffer.data(), requestDataLen);
671 EXPECT_EQ(ret, SUCCESS);
672 EXPECT_EQ(requestDataLen, bufferSize - 1);
673 EXPECT_THAT(std::vector<int8_t>(tmpBuffer.begin(), tmpBuffer.end() - 1), Each(Eq(1)));
674 EXPECT_EQ(tmpBuffer[bufferSize - 1], 0);
675 }
676
677 /**
678 * @tc.name : Test OnStreamData.
679 * @tc.type : FUNC
680 * @tc.number: HpaeRenderer_034
681 * @tc.desc : Test OnStreamData.
682 */
683 HWTEST_F(HpaeRendererStreamUnitTest, HpaeRenderer_034, TestSize.Level1)
684 {
685 auto unit = CreateHpaeRendererStreamImpl();
686 EXPECT_NE(nullptr, unit);
687
688 AudioCallBackStreamInfo info = {
689 .deviceClass = "remote_offload",
690 .framePosition = 10000,
691 };
692
693 unit->OnStreamData(info);
694 EXPECT_EQ(10000, unit->lastHdiFramePosition_);
695 EXPECT_EQ(10000, unit->lastFramePosition_);
696
697 unit->isCallbackMode_ = false;
698 info.needData = true;
699 info.requestDataLen = 0;
700 unit->OnStreamData(info);
701 EXPECT_EQ(OFFLOAD_DEFAULT, unit->offloadStatePolicy_);
702 EXPECT_EQ(INVALID, unit->state_);
703 }
704 }
705 }