1 /*
2 * Copyright (c) 2023 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 <thread>
24 #include <gtest/gtest.h>
25
26 using namespace testing::ext;
27 namespace OHOS {
28 namespace AudioStandard {
29 std::unique_ptr<LinearPosTimeModel> g_linearPosTimeModel;
30 std::shared_ptr<OHAudioBuffer> g_oHAudioBuffer;
31 const int32_t TEST_NUM = 1000;
32 const int32_t TEST_RET_NUM = 0;
33 const int64_t NANO_COUNT_PER_SECOND = 1000000000;
34 class AudioServiceCommonUnitTest : public testing::Test {
35 public:
36 static void SetUpTestCase(void);
37 static void TearDownTestCase(void);
38 void SetUp();
39 void TearDown();
40 };
41
SetUpTestCase(void)42 void AudioServiceCommonUnitTest::SetUpTestCase(void)
43 {
44 // input testsuit setup step,setup invoked before all testcases
45 }
46
TearDownTestCase(void)47 void AudioServiceCommonUnitTest::TearDownTestCase(void)
48 {
49 // input testsuit teardown step,teardown invoked after all testcases
50 }
51
SetUp(void)52 void AudioServiceCommonUnitTest::SetUp(void)
53 {
54 // input testcase setup step,setup invoked before each testcases
55 }
56
TearDown(void)57 void AudioServiceCommonUnitTest::TearDown(void)
58 {
59 // input testcase teardown step,teardown invoked after each testcases
60 }
61
62 /**
63 * @tc.name : Test ProcessConfig API
64 * @tc.type : FUNC
65 * @tc.number: ProcessConfigTest_001
66 * @tc.desc : Test ProcessConfig test.
67 */
68 HWTEST(AudioServiceCommonUnitTest, ProcessConfigTest_001, TestSize.Level1)
69 {
70 CaptureFilterOptions filterOptions = {{STREAM_USAGE_MUSIC}, FilterMode::INCLUDE, {0}, FilterMode::INCLUDE};
71 AudioPlaybackCaptureConfig config = {filterOptions, false};
72 std::string dumpStr = ProcessConfig::DumpInnerCapConfig(config);
73 EXPECT_NE(dumpStr, "");
74 }
75
76 /**
77 * @tc.name : Test LinearPosTimeModel API
78 * @tc.type : FUNC
79 * @tc.number: LinearPosTimeModel_001
80 * @tc.desc : Test LinearPosTimeModel interface.
81 */
82 HWTEST(AudioServiceCommonUnitTest, LinearPosTimeModel_001, TestSize.Level1)
83 {
84 g_linearPosTimeModel = std::make_unique<LinearPosTimeModel>();
85
86 uint64_t posInFrame = 20;
87 int64_t invalidTime = -1;
88 int64_t retPos = g_linearPosTimeModel->GetTimeOfPos(posInFrame);
89 EXPECT_EQ(invalidTime, retPos);
90
91 int32_t sampleRate = -1;
92 bool isConfig = g_linearPosTimeModel->ConfigSampleRate(sampleRate);
93 EXPECT_EQ(false, isConfig);
94
95 sampleRate = (int32_t)AudioSamplingRate::SAMPLE_RATE_44100;
96 isConfig = g_linearPosTimeModel->ConfigSampleRate(sampleRate);
97 EXPECT_EQ(true, isConfig);
98
99 isConfig = g_linearPosTimeModel->ConfigSampleRate(sampleRate);
100 EXPECT_EQ(false, isConfig);
101 }
102
103 /**
104 * @tc.name : Test LinearPosTimeModel API
105 * @tc.type : FUNC
106 * @tc.number: LinearPosTimeModel_002
107 * @tc.desc : Test LinearPosTimeModel interface.
108 */
109 HWTEST(AudioServiceCommonUnitTest, LinearPosTimeModel_002, TestSize.Level1)
110 {
111 int64_t deltaFrame = 0;
112 uint64_t frame = 0;
113 int64_t nanoTime = 0;
114 g_linearPosTimeModel->ResetFrameStamp(frame, nanoTime);
115
116 uint64_t spanCountInFrame = 2;
117 g_linearPosTimeModel->SetSpanCount(spanCountInFrame);
118
119 uint64_t posInFrame = 20;
120 int64_t retPos = g_linearPosTimeModel->GetTimeOfPos(posInFrame);
121
122 deltaFrame = posInFrame - frame;
123 int64_t retPosCal1 = nanoTime + deltaFrame * NANO_COUNT_PER_SECOND / (int64_t)AudioSamplingRate::SAMPLE_RATE_44100;
124 EXPECT_EQ(retPos, retPosCal1);
125
126 frame = 40;
127 nanoTime = 50;
128 g_linearPosTimeModel->UpdataFrameStamp(frame, nanoTime);
129
130 retPos = g_linearPosTimeModel->GetTimeOfPos(posInFrame);
131 deltaFrame = frame - posInFrame;
132 int64_t retPosCal2 = nanoTime + deltaFrame * NANO_COUNT_PER_SECOND / (int64_t)AudioSamplingRate::SAMPLE_RATE_44100;
133 EXPECT_NE(retPos, retPosCal2);
134 }
135
136 /**
137 * @tc.name : Test CheckPosTimeReasonable API
138 * @tc.type : FUNC
139 * @tc.number: CheckPosTimeReasonable
140 * @tc.desc : Test CheckPosTimeReasonable interface.
141 */
142 HWTEST(AudioServiceCommonUnitTest, CheckPosTimeReasonable_001, TestSize.Level1)
143 {
144 std::pair<uint64_t, int64_t> pre = std::make_pair(10, 100);
145 std::pair<uint64_t, int64_t> next = std::make_pair(5, 50);
146 bool ret = g_linearPosTimeModel->CheckPosTimeReasonable(pre, next);
147
148 EXPECT_EQ(false, ret);
149 }
150
151 /**
152 * @tc.name : Test CheckPosTimeReasonable API
153 * @tc.type : FUNC
154 * @tc.number: CheckPosTimeReasonable
155 * @tc.desc : Test CheckPosTimeReasonable interface.
156 */
157 HWTEST(AudioServiceCommonUnitTest, CheckPosTimeReasonable_002, TestSize.Level1)
158 {
159 std::pair<uint64_t, int64_t> pre = std::make_pair(10, 100);
160 std::pair<uint64_t, int64_t> next = std::make_pair(11, 50);
161 bool ret = g_linearPosTimeModel->CheckPosTimeReasonable(pre, next);
162
163 EXPECT_EQ(true, ret);
164 }
165
166 /**
167 * @tc.name : Test CheckPosTimeReasonable API
168 * @tc.type : FUNC
169 * @tc.number: CheckPosTimeReasonable
170 * @tc.desc : Test CheckPosTimeReasonable interface.
171 */
172 HWTEST(AudioServiceCommonUnitTest, CheckPosTimeReasonablel_003, TestSize.Level1)
173 {
174 std::pair<uint64_t, int64_t> pre = std::make_pair(10, 100);
175 std::pair<uint64_t, int64_t> next = std::make_pair(10, 50);
176 bool ret = g_linearPosTimeModel->CheckPosTimeReasonable(pre, next);
177
178 EXPECT_EQ(false, ret);
179 }
180
181 /**
182 * @tc.name : Test CheckReasonable API
183 * @tc.type : FUNC
184 * @tc.number: CheckReasonable
185 * @tc.desc : Test CheckReasonable interface.
186 */
187 HWTEST(AudioServiceCommonUnitTest, CheckReasonable_001, TestSize.Level1)
188 {
189 uint64_t frame = 100;
190 int64_t nanoTime = 1000000;
191 static constexpr int32_t maxCount = 5;
192 for (int i = 0; i < maxCount - 1; ++i) {
193 g_linearPosTimeModel->posTimeVec_.push_back(std::make_pair(frame + i, nanoTime + i));
194 }
195 CheckPosTimeRes result = g_linearPosTimeModel->CheckReasonable(frame + maxCount - 1, nanoTime + maxCount - 1);
196 EXPECT_EQ(result, NEED_MODIFY);
197
198 for (int i = 0; i < maxCount; ++i) {
199 g_linearPosTimeModel->posTimeVec_.push_back(std::make_pair(frame + i, nanoTime + i));
200 }
201 result = g_linearPosTimeModel->CheckReasonable(frame + maxCount, nanoTime + maxCount);
202 EXPECT_EQ(result, CHECK_FAILED);
203 }
204
205 /**
206 * @tc.name : Test OHAudioBuffer API
207 * @tc.type : FUNC
208 * @tc.number: OHAudioBuffer_001
209 * @tc.desc : Test OHAudioBuffer interface.
210 */
211 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_001, TestSize.Level1)
212 {
213 uint32_t spanSizeInFrame = 1000;
214 uint32_t totalSizeInFrame = spanSizeInFrame - 1;
215 uint32_t byteSizePerFrame = 1000;
216 g_oHAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
217 EXPECT_EQ(nullptr, g_oHAudioBuffer);
218 }
219
220 /**
221 * @tc.name : Test OHAudioBuffer API
222 * @tc.type : FUNC
223 * @tc.number: OHAudioBuffer_002
224 * @tc.desc : Test OHAudioBuffer interface.
225 */
226 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_002, TestSize.Level1)
227 {
228 uint32_t spanSizeInFrame = 1000;
229 uint32_t totalSizeInFrame = spanSizeInFrame;
230 uint32_t byteSizePerFrame = 1000;
231 g_oHAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
232 EXPECT_NE(nullptr, g_oHAudioBuffer);
233
234 uint32_t totalSizeInFrameRet;
235 uint32_t spanSizeInFrameRet;
236 uint32_t byteSizePerFrameRet;
237
238 int32_t ret = g_oHAudioBuffer->GetSizeParameter(totalSizeInFrameRet, spanSizeInFrameRet, byteSizePerFrameRet);
239 EXPECT_EQ(spanSizeInFrame, spanSizeInFrameRet);
240 EXPECT_EQ(totalSizeInFrame, totalSizeInFrameRet);
241 EXPECT_EQ(byteSizePerFrame, byteSizePerFrameRet);
242 EXPECT_EQ(SUCCESS, ret);
243 }
244
245 /**
246 * @tc.name : Test OHAudioBuffer API
247 * @tc.type : FUNC
248 * @tc.number: OHAudioBuffer_003
249 * @tc.desc : Test OHAudioBuffer interface.
250 */
251 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_003, TestSize.Level1)
252 {
253 uint64_t frames = 1000;
254 int64_t nanoTime = NANO_COUNT_PER_SECOND;
255 g_oHAudioBuffer->SetHandleInfo(frames, nanoTime);
256 bool ret = g_oHAudioBuffer->GetHandleInfo(frames, nanoTime);
257 EXPECT_EQ(true, ret);
258 }
259
260 /**
261 * @tc.name : Test OHAudioBuffer API
262 * @tc.type : FUNC
263 * @tc.number: OHAudioBuffer_004
264 * @tc.desc : Test OHAudioBuffer interface.
265 */
266 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_004, TestSize.Level1)
267 {
268 int32_t ret = -1;
269 uint64_t writeFrame = 3000;
270 uint64_t readFrame = writeFrame - 1001;
271
272 ret = g_oHAudioBuffer->ResetCurReadWritePos(readFrame, writeFrame);
273 EXPECT_EQ(ERR_INVALID_PARAM, ret);
274
275 ret = g_oHAudioBuffer->GetWritableDataFrames();
276 EXPECT_EQ(TEST_NUM, ret);
277
278 writeFrame = 1001;
279 readFrame = 1000;
280
281 ret = g_oHAudioBuffer->ResetCurReadWritePos(readFrame, writeFrame);
282 EXPECT_EQ(SUCCESS, ret);
283
284 ret = g_oHAudioBuffer->GetWritableDataFrames();
285 EXPECT_EQ(TEST_NUM - 1, ret);
286
287 uint64_t writeFrameRet = g_oHAudioBuffer->GetCurWriteFrame();
288 uint64_t readFrameRet = g_oHAudioBuffer->GetCurReadFrame();
289 EXPECT_EQ(writeFrame, writeFrameRet);
290 EXPECT_EQ(readFrame, readFrameRet);
291
292 writeFrame = 5000;
293 ret = g_oHAudioBuffer->SetCurWriteFrame(writeFrame);
294 EXPECT_EQ(ERR_INVALID_PARAM, ret);
295
296 writeFrame = readFrame - 1;
297 ret = g_oHAudioBuffer->SetCurWriteFrame(writeFrame);
298 EXPECT_EQ(ERR_INVALID_PARAM, ret);
299
300 writeFrame = 1000;
301 ret = g_oHAudioBuffer->SetCurWriteFrame(writeFrame);
302 EXPECT_LT(ret, TEST_RET_NUM);
303
304 writeFrame = 3000 + 2;
305 ret = g_oHAudioBuffer->SetCurWriteFrame(writeFrame);
306 EXPECT_LT(ret, TEST_RET_NUM);
307 }
308
309 /**
310 * @tc.name : Test OHAudioBuffer API
311 * @tc.type : FUNC
312 * @tc.number: OHAudioBuffer_005
313 * @tc.desc : Test OHAudioBuffer interface.
314 */
315 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_005, TestSize.Level1)
316 {
317 int32_t ret = -1;
318 uint64_t writeFrame = 5000;
319 ret = g_oHAudioBuffer->SetCurReadFrame(writeFrame);
320 EXPECT_EQ(ERR_INVALID_PARAM, ret);
321
322 uint64_t readFrame = 1000;
323 ret = g_oHAudioBuffer->SetCurReadFrame(readFrame);
324 EXPECT_EQ(SUCCESS, ret);
325
326 readFrame = 1000;
327 ret = g_oHAudioBuffer->SetCurReadFrame(readFrame);
328 EXPECT_EQ(SUCCESS, ret);
329
330 readFrame = 2000;
331 ret = g_oHAudioBuffer->SetCurReadFrame(readFrame);
332 EXPECT_LT(ret, TEST_RET_NUM);
333
334 readFrame = 3000 + 2;
335 ret = g_oHAudioBuffer->SetCurReadFrame(readFrame);
336 EXPECT_LT(ret, TEST_RET_NUM);
337 }
338
339 /**
340 * @tc.name : Test OHAudioBuffer API
341 * @tc.type : FUNC
342 * @tc.number: OHAudioBuffer_006
343 * @tc.desc : Test OHAudioBuffer interface.
344 */
345 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_006, TestSize.Level1)
346 {
347 int32_t ret = -1;
348 BufferDesc bufferDesc;
349 uint64_t posInFrame = 1000;
350 uint64_t spanSizeInFrame = 1000;
351
352 RingBufferWrapper ringbufferWrapper;
353 ret = g_oHAudioBuffer->ohAudioBufferBase_.GetBufferByFrame(posInFrame, spanSizeInFrame, ringbufferWrapper);
354 EXPECT_EQ(SUCCESS, ret);
355 EXPECT_EQ(true, ringbufferWrapper.IsLegal());
356
357 posInFrame = 3000 + 1;
358 ret = g_oHAudioBuffer->ohAudioBufferBase_.GetBufferByFrame(posInFrame, spanSizeInFrame, ringbufferWrapper);
359 EXPECT_LT(ret, TEST_RET_NUM);
360
361 uint64_t writePosInFrame = 1000;
362 ret = g_oHAudioBuffer->GetWriteBuffer(writePosInFrame, bufferDesc);
363 EXPECT_EQ(SUCCESS, ret);
364
365 writePosInFrame = 3000 + 1;
366 ret = g_oHAudioBuffer->GetWriteBuffer(writePosInFrame, bufferDesc);
367 EXPECT_LT(ret, TEST_RET_NUM);
368
369 uint64_t readPosInFrame = 1000;
370 ret = g_oHAudioBuffer->GetReadbuffer(readPosInFrame, bufferDesc);
371 EXPECT_EQ(SUCCESS, ret);
372
373 readPosInFrame = 3000;
374 ret = g_oHAudioBuffer->GetReadbuffer(readPosInFrame, bufferDesc);
375 EXPECT_LT(ret, TEST_RET_NUM);
376 }
377
378 /**
379 * @tc.name : Test OHAudioBuffer API
380 * @tc.type : FUNC
381 * @tc.number: OHAudioBuffer_007
382 * @tc.desc : Test OHAudioBuffer interface.
383 */
384 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_007, TestSize.Level1)
385 {
386 uint64_t posInFrame = 4000;
387 SpanInfo *spanInfo = g_oHAudioBuffer->GetSpanInfo(posInFrame);
388 EXPECT_EQ(NULL, spanInfo);
389
390 uint32_t spanIndex = 2;
391 SpanInfo *spanInfoFromIndex = g_oHAudioBuffer->GetSpanInfoByIndex(spanIndex);
392 EXPECT_EQ(NULL, spanInfoFromIndex);
393
394 uint32_t spanCount = g_oHAudioBuffer->GetSpanCount();
395 uint32_t spanCountExpect = 1;
396 EXPECT_EQ(spanCountExpect, spanCount);
397
398
399 size_t totalSize = g_oHAudioBuffer->GetDataSize();
400 EXPECT_EQ(totalSize > TEST_RET_NUM, true);
401
402 uint8_t * dataBase = g_oHAudioBuffer->GetDataBase();
403 EXPECT_NE(nullptr, dataBase);
404 }
405
406 /**
407 * @tc.name : Test OHAudioBuffer API
408 * @tc.type : FUNC
409 * @tc.number: OHAudioBuffer_008
410 * @tc.desc : Test OHAudioBuffer interface.
411 */
412 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_008, TestSize.Level1)
413 {
414 MessageParcel parcel;
415
416 int32_t ret = g_oHAudioBuffer->WriteToParcel(g_oHAudioBuffer, parcel);
417 EXPECT_EQ(SUCCESS, ret);
418
419 g_oHAudioBuffer = g_oHAudioBuffer->ReadFromParcel(parcel);
420 EXPECT_NE(nullptr, g_oHAudioBuffer);
421 }
422
423 /**
424 * @tc.name : Test OHAudioBuffer API
425 * @tc.type : FUNC
426 * @tc.number: OHAudioBuffer_009
427 * @tc.desc : Test OHAudioBuffer interface.
428 */
429 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_009, TestSize.Level1)
430 {
431 uint32_t spanSizeInFrame = 1000;
432 uint32_t totalSizeInFrame = spanSizeInFrame;
433 uint32_t byteSizePerFrame = 100;
434 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
435 EXPECT_NE(nullptr, ohAudioBuffer);
436
437 int32_t ret = ohAudioBuffer->SetCurWriteFrame(totalSizeInFrame);
438 EXPECT_EQ(ret, SUCCESS);
439
440 // 200ms
__anon38ec4ef40102() 441 FutexCode futexCode = ohAudioBuffer->WaitFor(200000000, [&ohAudioBuffer] () {
442 return ohAudioBuffer->GetWritableDataFrames() > 0;
443 });
444 EXPECT_EQ(futexCode, FUTEX_TIMEOUT);
445 }
446
447 /**
448 * @tc.name : Test OHAudioBuffer API
449 * @tc.type : FUNC
450 * @tc.number: OHAudioBuffer_010
451 * @tc.desc : Test OHAudioBuffer interface.
452 */
453 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_010, TestSize.Level1)
454 {
455 uint32_t spanSizeInFrame = 1000;
456 uint32_t totalSizeInFrame = spanSizeInFrame;
457 uint32_t byteSizePerFrame = 100;
458 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
459 EXPECT_NE(nullptr, ohAudioBuffer);
460
461 int32_t ret = ohAudioBuffer->SetCurWriteFrame(totalSizeInFrame);
462 EXPECT_EQ(ret, SUCCESS);
463
__anon38ec4ef40202() 464 std::thread threadSetReadIndex([ohAudioBuffer, totalSizeInFrame] () {
465 ohAudioBuffer->SetCurReadFrame(totalSizeInFrame);
466 });
467
468 // 200ms
__anon38ec4ef40302() 469 FutexCode futexCode = ohAudioBuffer->WaitFor(200000000, [&ohAudioBuffer] () {
470 return ohAudioBuffer->GetWritableDataFrames() > 0;
471 });
472 EXPECT_EQ(futexCode, FUTEX_SUCCESS);
473 threadSetReadIndex.join();
474 }
475
476 /**
477 * @tc.name : Test OHAudioBuffer API
478 * @tc.type : FUNC
479 * @tc.number: OHAudioBuffer_011
480 * @tc.desc : Test OHAudioBuffer interface.
481 */
482 HWTEST(AudioServiceCommonUnitTest, OHAudioBuffer_011, TestSize.Level1)
483 {
484 MessageParcel parcel;
485 parcel.WriteUint32(static_cast<uint32_t>(AudioBufferHolder::AUDIO_SERVER_INDEPENDENT) + 1);
486 parcel.WriteUint32(100);
487 parcel.WriteUint32(10);
488 parcel.WriteUint32(2);
489 int dataFd = 1;
490 int infoFd = 2;
491 parcel.WriteFileDescriptor(dataFd);
492 parcel.WriteFileDescriptor(infoFd);
493
494 std::shared_ptr<OHAudioBuffer> buffer = OHAudioBuffer::ReadFromParcel(parcel);
495 EXPECT_EQ(buffer, nullptr);
496 }
497
498 /**
499 * @tc.name : Test OHAudioBuffer API
500 * @tc.type : FUNC
501 * @tc.number: OHAudioBufferBase_001
502 * @tc.desc : Test OHAudioBuffer interface.
503 */
504 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_001, TestSize.Level1)
505 {
506 uint32_t totalSizeInFrame = 1000;
507 uint32_t byteSizePerFrame = 100;
508 size_t totalSizeInBytes = totalSizeInFrame * byteSizePerFrame;
509 auto ohAudioBufferBase = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
510 EXPECT_NE(nullptr, ohAudioBufferBase);
511
512 int32_t ret = ohAudioBufferBase->SetCurWriteFrame(totalSizeInFrame);
513 EXPECT_EQ(ret, SUCCESS);
514
515 RingBufferWrapper buffer;
516 ret = ohAudioBufferBase->GetAllReadableBuffer(buffer);
517 EXPECT_EQ(ret, SUCCESS);
518 EXPECT_EQ(buffer.dataLength, totalSizeInBytes);
519 EXPECT_NE(buffer.basicBufferDescs[0].buffer, nullptr);
520 EXPECT_EQ(buffer.basicBufferDescs[0].bufLength, totalSizeInBytes);
521 EXPECT_EQ(buffer.basicBufferDescs[1].buffer, nullptr);
522 EXPECT_EQ(buffer.basicBufferDescs[1].bufLength, 0);
523
524 ret = ohAudioBufferBase->GetAllWritableBuffer(buffer);
525 EXPECT_EQ(ret, SUCCESS);
526 EXPECT_EQ(buffer.dataLength, 0);
527 EXPECT_EQ(buffer.basicBufferDescs[0].buffer, nullptr);
528 EXPECT_EQ(buffer.basicBufferDescs[0].bufLength, 0);
529 EXPECT_EQ(buffer.basicBufferDescs[1].buffer, nullptr);
530 EXPECT_EQ(buffer.basicBufferDescs[1].bufLength, 0);
531
__anon38ec4ef40402() 532 std::thread threadSetReadIndex([ohAudioBufferBase, totalSizeInFrame] () {
533 ohAudioBufferBase->SetCurReadFrame(totalSizeInFrame);
534 });
535
536 // 200ms
__anon38ec4ef40502() 537 FutexCode futexCode = ohAudioBufferBase->WaitFor(200000000, [&ohAudioBufferBase] () {
538 return ohAudioBufferBase->GetWritableDataFrames() > 0;
539 });
540 EXPECT_EQ(futexCode, FUTEX_SUCCESS);
541 threadSetReadIndex.join();
542
543 ret = ohAudioBufferBase->GetAllReadableBuffer(buffer);
544 EXPECT_EQ(ret, SUCCESS);
545 EXPECT_EQ(buffer.dataLength, 0);
546 EXPECT_EQ(buffer.basicBufferDescs[0].buffer, nullptr);
547 EXPECT_EQ(buffer.basicBufferDescs[0].bufLength, 0);
548 EXPECT_EQ(buffer.basicBufferDescs[1].buffer, nullptr);
549 EXPECT_EQ(buffer.basicBufferDescs[1].bufLength, 0);
550
551 ret = ohAudioBufferBase->GetAllWritableBuffer(buffer);
552 EXPECT_EQ(ret, SUCCESS);
553 EXPECT_EQ(buffer.dataLength, totalSizeInBytes);
554 EXPECT_NE(buffer.basicBufferDescs[0].buffer, nullptr);
555 EXPECT_EQ(buffer.basicBufferDescs[0].bufLength, totalSizeInBytes);
556 EXPECT_EQ(buffer.basicBufferDescs[1].buffer, nullptr);
557 EXPECT_EQ(buffer.basicBufferDescs[1].bufLength, 0);
558 }
559
560 /**
561 * @tc.name : Test OHAudioBuffer API
562 * @tc.type : FUNC
563 * @tc.number: OHAudioBufferBase_002
564 * @tc.desc : Test OHAudioBuffer interface.
565 */
566 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_002, TestSize.Level1)
567 {
568 uint32_t totalSizeInFrame = 1000;
569 uint32_t byteSizePerFrame = 100;
570 size_t totalSizeInBytes = totalSizeInFrame * byteSizePerFrame;
571 auto ohAudioBufferBase = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
572 EXPECT_NE(nullptr, ohAudioBufferBase);
573
574 int32_t ret = ohAudioBufferBase->SetCurWriteFrame(totalSizeInFrame - 1);
575 EXPECT_EQ(ret, SUCCESS);
576
577 RingBufferWrapper buffer;
578 ret = ohAudioBufferBase->GetAllReadableBuffer(buffer);
579 EXPECT_EQ(ret, SUCCESS);
580 EXPECT_EQ(true, buffer.IsLegal());
581 EXPECT_EQ(buffer.dataLength, totalSizeInBytes - byteSizePerFrame);
582 EXPECT_NE(buffer.basicBufferDescs[0].buffer, nullptr);
583 EXPECT_EQ(buffer.basicBufferDescs[0].bufLength, totalSizeInBytes - byteSizePerFrame);
584 EXPECT_EQ(buffer.basicBufferDescs[1].buffer, nullptr);
585 EXPECT_EQ(buffer.basicBufferDescs[1].bufLength, 0);
586
587 ret = ohAudioBufferBase->GetAllWritableBuffer(buffer);
588 EXPECT_EQ(ret, SUCCESS);
589 EXPECT_EQ(buffer.dataLength, byteSizePerFrame);
590 EXPECT_NE(buffer.basicBufferDescs[0].buffer, nullptr);
591 EXPECT_EQ(buffer.basicBufferDescs[0].bufLength, byteSizePerFrame);
592 EXPECT_EQ(buffer.basicBufferDescs[1].buffer, nullptr);
593 EXPECT_EQ(buffer.basicBufferDescs[1].bufLength, 0);
594
__anon38ec4ef40602() 595 std::thread threadSetReadIndex([ohAudioBufferBase, totalSizeInFrame] () {
596 ohAudioBufferBase->SetCurReadFrame(totalSizeInFrame - 1);
597 });
598
599 // 200ms
__anon38ec4ef40702() 600 FutexCode futexCode = ohAudioBufferBase->WaitFor(200000000, [&ohAudioBufferBase] () {
601 return ohAudioBufferBase->GetWritableDataFrames() > 0;
602 });
603 EXPECT_EQ(futexCode, FUTEX_SUCCESS);
604 threadSetReadIndex.join();
605
606 ret = ohAudioBufferBase->GetAllReadableBuffer(buffer);
607 EXPECT_EQ(ret, SUCCESS);
608 EXPECT_EQ(buffer.dataLength, 0);
609 EXPECT_EQ(buffer.basicBufferDescs[0].buffer, nullptr);
610 EXPECT_EQ(buffer.basicBufferDescs[0].bufLength, 0);
611 EXPECT_EQ(buffer.basicBufferDescs[1].buffer, nullptr);
612 EXPECT_EQ(buffer.basicBufferDescs[1].bufLength, 0);
613
614 ret = ohAudioBufferBase->GetAllWritableBuffer(buffer);
615 EXPECT_EQ(ret, SUCCESS);
616 EXPECT_EQ(buffer.dataLength, totalSizeInBytes);
617 EXPECT_NE(buffer.basicBufferDescs[0].buffer, nullptr);
618 EXPECT_EQ(buffer.basicBufferDescs[0].bufLength, byteSizePerFrame);
619 EXPECT_NE(buffer.basicBufferDescs[1].buffer, nullptr);
620 EXPECT_EQ(buffer.basicBufferDescs[1].bufLength, totalSizeInBytes - byteSizePerFrame);
621 }
622
623 /**
624 * @tc.name : Test GetSyncWriteFrame API
625 * @tc.type : FUNC
626 * @tc.number: GetSyncWriteFrame
627 * @tc.desc : Test GetSyncWriteFrame interface.
628 */
629 HWTEST(AudioServiceCommonUnitTest, GetSyncWriteFrame_003, TestSize.Level1)
630 {
631 uint32_t spanSizeInFrame = 1000;
632 uint32_t totalSizeInFrame = spanSizeInFrame;
633 uint32_t byteSizePerFrame = 100;
634 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
635 int32_t ret = ohAudioBuffer->GetSyncWriteFrame();
636 EXPECT_EQ(ret, 0);
637 }
638
639 /**
640 * @tc.name : Test GetSynSetSyncWriteFramecWriteFrame API
641 * @tc.type : FUNC
642 * @tc.number: GetSyncWrSetSyncWriteFrameiteFrame
643 * @tc.desc : Test SetSyncWriteFrame interface.
644 */
645 HWTEST(AudioServiceCommonUnitTest, SetSyncWriteFrame_001, TestSize.Level1)
646 {
647 uint32_t spanSizeInFrame = 1000;
648 uint32_t totalSizeInFrame = spanSizeInFrame;
649 uint32_t byteSizePerFrame = 100;
650 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
651 uint32_t writeFrame = 10;
652 int32_t ret = ohAudioBuffer->SetSyncWriteFrame(writeFrame);
653 EXPECT_EQ(ret, 0);
654 }
655
656 /**
657 * @tc.name : Test GetSyncWriteFrame API
658 * @tc.type : FUNC
659 * @tc.number: GetSyncWriteFrame
660 * @tc.desc : Test GetSyncWriteFrame interface.
661 */
662 HWTEST(AudioServiceCommonUnitTest, SetMuteFactor_001, TestSize.Level1)
663 {
664 uint32_t spanSizeInFrame = 1000;
665 uint32_t totalSizeInFrame = spanSizeInFrame;
666 uint32_t byteSizePerFrame = 100;
667 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
668 float invalidMuteFactor = 0.5f;
669
670 bool result = ohAudioBuffer->SetMuteFactor(invalidMuteFactor);
671 EXPECT_FALSE(result);
672 }
673
674 /**
675 * @tc.name : Test GetDuckFactor API
676 * @tc.type : FUNC
677 * @tc.number: GetDuckFactor
678 * @tc.desc : Test GetDuckFactor interface.
679 */
680 HWTEST(AudioServiceCommonUnitTest, GetDuckFactor_001, TestSize.Level1)
681 {
682 uint32_t spanSizeInFrame = 1000;
683 uint32_t totalSizeInFrame = spanSizeInFrame;
684 uint32_t byteSizePerFrame = 100;
685 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
686
687 float result = ohAudioBuffer->GetDuckFactor();
688 EXPECT_FLOAT_EQ(result, MAX_FLOAT_VOLUME);
689 }
690
691 /**
692 * @tc.name : Test SetDuckFactor API
693 * @tc.type : FUNC
694 * @tc.number: SetDuckFactor
695 * @tc.desc : Test SetDuckFactor interface.
696 */
697 HWTEST(AudioServiceCommonUnitTest, SetDuckFactor_001, TestSize.Level1)
698 {
699 uint32_t spanSizeInFrame = 1000;
700 uint32_t totalSizeInFrame = spanSizeInFrame;
701 uint32_t byteSizePerFrame = 100;
702 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
703
704 float invalidDuckFactor = -0.1f;
705 bool result = ohAudioBuffer->SetDuckFactor(invalidDuckFactor);
706 EXPECT_FALSE(result);
707
708 invalidDuckFactor = 1.1f;
709 result = ohAudioBuffer->SetDuckFactor(invalidDuckFactor);
710 EXPECT_FALSE(result);
711
712 float validDuckFactor = 0.5f;
713 result = ohAudioBuffer->SetDuckFactor(validDuckFactor);
714 EXPECT_TRUE(result);
715
716 validDuckFactor = 0.0f;
717 result = ohAudioBuffer->SetDuckFactor(validDuckFactor);
718 EXPECT_TRUE(result);
719
720 float maxDuckFactor = 1.0f;
721 result = ohAudioBuffer->SetDuckFactor(maxDuckFactor);
722 EXPECT_TRUE(result);
723 }
724
725 /**
726 * @tc.name : Test GetStreamVolume API
727 * @tc.type : FUNC
728 * @tc.number: GetStreamVolume
729 * @tc.desc : Test GetStreamVolume interface.
730 */
731 HWTEST(AudioServiceCommonUnitTest, GetStreamVolume_001, TestSize.Level1)
732 {
733 uint32_t spanSizeInFrame = 1000;
734 uint32_t totalSizeInFrame = spanSizeInFrame;
735 uint32_t byteSizePerFrame = 100;
736 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
737
738 float result = ohAudioBuffer->GetStreamVolume();
739 EXPECT_FLOAT_EQ(result, MAX_FLOAT_VOLUME);
740 }
741
742 /**
743 * @tc.name : Test SetStreamVolume API
744 * @tc.type : FUNC
745 * @tc.number: SetStreamVolume
746 * @tc.desc : Test SetStreamVolume interface.
747 */
748 HWTEST(AudioServiceCommonUnitTest, SetStreamVolume_001, TestSize.Level1)
749 {
750 uint32_t spanSizeInFrame = 1000;
751 uint32_t totalSizeInFrame = spanSizeInFrame;
752 uint32_t byteSizePerFrame = 100;
753 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
754
755 bool result = ohAudioBuffer->SetStreamVolume(0.5f);
756 EXPECT_TRUE(result);
757
758 float invalidVolume = 1.1f;
759 result = ohAudioBuffer->SetStreamVolume(invalidVolume);
760 EXPECT_FALSE(result);
761
762 invalidVolume = -0.1f;
763 result = ohAudioBuffer->SetStreamVolume(invalidVolume);
764 EXPECT_FALSE(result);
765 }
766
767 /**
768 * @tc.name : Test GetSyncReadFrame API
769 * @tc.type : FUNC
770 * @tc.number: GetSyncReadFrame
771 * @tc.desc : Test GetSyncReadFrame interface.
772 */
773 HWTEST(AudioServiceCommonUnitTest, GetSyncReadFrame_001, TestSize.Level1)
774 {
775 uint32_t spanSizeInFrame = 1000;
776 uint32_t totalSizeInFrame = spanSizeInFrame;
777 uint32_t byteSizePerFrame = 100;
778 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
779
780 bool result = ohAudioBuffer->GetSyncReadFrame();
781 EXPECT_FALSE(result);
782 }
783
784 /**
785 * @tc.name : Test SetSyncReadFrame API
786 * @tc.type : FUNC
787 * @tc.number: SetSyncReadFrame
788 * @tc.desc : Test SetSyncReadFrame interface.
789 */
790 HWTEST(AudioServiceCommonUnitTest, SetSyncReadFrame_001, TestSize.Level1)
791 {
792 uint32_t spanSizeInFrame = 1000;
793 uint32_t totalSizeInFrame = spanSizeInFrame;
794 uint32_t byteSizePerFrame = 100;
795 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
796
797 uint32_t testValue = 123;
798 EXPECT_FALSE(ohAudioBuffer->SetSyncReadFrame(testValue));
799 }
800
801 /**
802 * @tc.name : Test GetMuteFactor API
803 * @tc.type : FUNC
804 * @tc.number: GetMuteFactor
805 * @tc.desc : Test GetMuteFactor interface.
806 */
807 HWTEST(AudioServiceCommonUnitTest, GetMuteFactor_001, TestSize.Level4)
808 {
809 uint32_t spanSizeInFrame = 1000;
810 uint32_t totalSizeInFrame = spanSizeInFrame;
811 uint32_t byteSizePerFrame = 100;
812 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
813 EXPECT_EQ(ohAudioBuffer->GetMuteFactor(), 1);
814 }
815
816 /**
817 * @tc.name : Test SetRestoreStatus API
818 * @tc.type : FUNC
819 * @tc.number: SetRestoreStatus
820 * @tc.desc : Test SetRestoreStatus interface.
821 */
822 HWTEST(AudioServiceCommonUnitTest, SetRestoreStatus_001, TestSize.Level1)
823 {
824 uint32_t spanSizeInFrame = 1000;
825 uint32_t totalSizeInFrame = spanSizeInFrame;
826 uint32_t byteSizePerFrame = 100;
827 auto ohAudioBuffer = OHAudioBuffer::CreateFromLocal(totalSizeInFrame, spanSizeInFrame, byteSizePerFrame);
828 RestoreStatus result = ohAudioBuffer->SetRestoreStatus(NEED_RESTORE);
829 EXPECT_NE(RESTORE_ERROR, result);
830 }
831
832 /**
833 * @tc.name : Test AudioRingCache API
834 * @tc.type : FUNC
835 * @tc.number: AudioRingCache_001
836 * @tc.desc : Test AudioRingCache interface.
837 */
838 HWTEST(AudioServiceCommonUnitTest, AudioRingCache_001, TestSize.Level1)
839 {
840 size_t testSize = 3840;
841 std::unique_ptr<AudioRingCache> ringCache = AudioRingCache::Create(testSize);
842 EXPECT_NE(nullptr, ringCache);
843
844 std::unique_ptr<uint8_t[]> writeBuffer = std::make_unique<uint8_t[]>(testSize);
845 std::unique_ptr<uint8_t[]> readBuffer = std::make_unique<uint8_t[]>(testSize);
846
847 BufferWrap writeWrap = {writeBuffer.get(), testSize};
848 BufferWrap readWrap = {readBuffer.get(), testSize};
849
850 int32_t tryCount = 200;
851 while (tryCount-- > 0) {
852 OptResult result1 = ringCache->Enqueue(writeWrap);
853 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
854
855 OptResult result2 = ringCache->Dequeue(readWrap);
856 EXPECT_EQ(result2.ret, OPERATION_SUCCESS);
857 }
858 }
859
860 /**
861 * @tc.name : Test AudioRingCache API
862 * @tc.type : FUNC
863 * @tc.number: AudioRingCache_002
864 * @tc.desc : Test AudioRingCache interface.
865 */
866 HWTEST(AudioServiceCommonUnitTest, AudioRingCache_002, TestSize.Level1)
867 {
868 size_t testSize = 3840;
869 std::unique_ptr<AudioRingCache> ringCache = AudioRingCache::Create(testSize);
870 EXPECT_NE(nullptr, ringCache);
871
872 size_t tempSize = 1920;
873 std::unique_ptr<uint8_t[]> writeBuffer = std::make_unique<uint8_t[]>(tempSize);
874 std::unique_ptr<uint8_t[]> readBuffer = std::make_unique<uint8_t[]>(tempSize);
875
876 BufferWrap writeWrap = {writeBuffer.get(), tempSize};
877 BufferWrap readWrap = {readBuffer.get(), tempSize};
878
879 int32_t tryCount = 200;
880 while (tryCount-- > 0) {
881 OptResult result1 = ringCache->GetWritableSize();
882 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
883 EXPECT_EQ(result1.size, testSize);
884
885 result1 = ringCache->Enqueue(writeWrap); // write 1920
886 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
887
888 result1 = ringCache->GetWritableSize();
889 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
890 EXPECT_EQ(result1.size, testSize - tempSize); // left 1920
891
892
893 OptResult result2 = ringCache->GetReadableSize();
894 EXPECT_EQ(result2.ret, OPERATION_SUCCESS);
895 EXPECT_EQ(result2.size, tempSize); // can read 1920
896
897 result2 = ringCache->Dequeue(readWrap);
898 EXPECT_EQ(result2.ret, OPERATION_SUCCESS);
899
900 result2 = ringCache->GetReadableSize();
901 EXPECT_EQ(result2.ret, OPERATION_SUCCESS);
902 EXPECT_EQ(result2.size, 0); // can read 0
903 }
904 }
905
906 /**
907 * @tc.name : Test AudioRingCache API
908 * @tc.type : FUNC
909 * @tc.number: AudioRingCache_003
910 * @tc.desc : Test AudioRingCache interface.
911 */
912 HWTEST(AudioServiceCommonUnitTest, AudioRingCache_003, TestSize.Level1)
913 {
914 size_t cacheSize = 960;
915 std::unique_ptr<AudioRingCache> ringCache = AudioRingCache::Create(cacheSize);
916
917 size_t tempSize = 19200;
918 std::unique_ptr<uint8_t[]> writeBuffer = std::make_unique<uint8_t[]>(tempSize);
919 std::unique_ptr<uint8_t[]> readBuffer = std::make_unique<uint8_t[]>(tempSize);
920
921 for (size_t index = 0; index < tempSize;index++) {
922 writeBuffer[index] = index;
923 }
924
925 int32_t totalCount = tempSize / cacheSize;
926 size_t offset = 0;
927 while (totalCount-- > 0) {
928 uint8_t *writePtr = writeBuffer.get() + offset;
929 BufferWrap spanWrap = {writePtr, cacheSize};
930 OptResult result1 = ringCache->Enqueue(spanWrap);
931 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
932
933 uint8_t *readPtr = readBuffer.get() + offset;
934 BufferWrap readWrap = {readPtr, cacheSize};
935 OptResult result2 = ringCache->Dequeue(readWrap);
936 EXPECT_EQ(result2.ret, OPERATION_SUCCESS);
937 offset += cacheSize;
938 }
939
940 for (size_t index = 0; index < tempSize;index++) {
941 EXPECT_EQ(writeBuffer[index], readBuffer[index]);
942 }
943 }
944
945 /**
946 * @tc.name : Test AudioRingCache API
947 * @tc.type : FUNC
948 * @tc.number: AudioRingCache_004
949 * @tc.desc : Test AudioRingCache interface.
950 */
951 HWTEST(AudioServiceCommonUnitTest, AudioRingCache_004, TestSize.Level1)
952 {
953 size_t cacheSize = 960;
954 std::unique_ptr<AudioRingCache> ringCache = AudioRingCache::Create(cacheSize);
955
956 size_t tempSize = 480;
957 std::unique_ptr<uint8_t[]> writeBuffer = std::make_unique<uint8_t[]>(tempSize);
958 std::unique_ptr<uint8_t[]> readBuffer = std::make_unique<uint8_t[]>(tempSize);
959
960 for (size_t index = 0; index < tempSize;index++) {
961 writeBuffer[index] = index;
962 }
963
964 BufferWrap writeWrap = {writeBuffer.get(), tempSize};
965 BufferWrap readWrap = {readBuffer.get(), tempSize};
966
967 OptResult result1 = ringCache->Enqueue(writeWrap);
968 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
969
970 result1 = ringCache->ReConfig(tempSize, true); // test copyRemained is true
971 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
972 EXPECT_EQ(result1.size, tempSize);
973
974 result1 = ringCache->Dequeue(readWrap);
975 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
976 EXPECT_EQ(result1.size, tempSize);
977
978 for (size_t index = 0; index < tempSize;index++) {
979 EXPECT_EQ(writeBuffer[index], readBuffer[index]);
980 }
981 }
982
983 /**
984 * @tc.name : Test AudioRingCache API
985 * @tc.type : FUNC
986 * @tc.number: AudioRingCache_005
987 * @tc.desc : Test AudioRingCache interface.
988 */
989 HWTEST(AudioServiceCommonUnitTest, AudioRingCache_005, TestSize.Level1)
990 {
991 size_t cacheSize = 960;
992 std::unique_ptr<AudioRingCache> ringCache = AudioRingCache::Create(cacheSize);
993
994 size_t tempSize = 480;
995 std::unique_ptr<uint8_t[]> writeBuffer = std::make_unique<uint8_t[]>(tempSize);
996 std::unique_ptr<uint8_t[]> readBuffer = std::make_unique<uint8_t[]>(tempSize);
997
998 for (size_t index = 0; index < tempSize;index++) {
999 writeBuffer[index] = index;
1000 }
1001
1002 BufferWrap writeWrap = {writeBuffer.get(), tempSize};
1003 BufferWrap readWrap = {readBuffer.get(), tempSize};
1004
1005 OptResult result1 = ringCache->Enqueue(writeWrap);
1006 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1007
1008 result1 = ringCache->Dequeue(readWrap);
1009 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1010 EXPECT_EQ(result1.size, tempSize);
1011
1012 result1 = ringCache->Enqueue(writeWrap);
1013 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1014
1015 result1 = ringCache->ReConfig(tempSize, true); // test copyRemained is true
1016 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1017 EXPECT_EQ(result1.size, tempSize);
1018
1019 result1 = ringCache->Dequeue(readWrap);
1020 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1021 EXPECT_EQ(result1.size, tempSize);
1022
1023 for (size_t index = 0; index < tempSize;index++) {
1024 EXPECT_EQ(writeBuffer[index], readBuffer[index]);
1025 }
1026 }
1027
1028 /**
1029 * @tc.name : Test AudioRingCache API
1030 * @tc.type : FUNC
1031 * @tc.number: AudioRingCache_006
1032 * @tc.desc : Test AudioRingCache interface.
1033 */
1034 HWTEST(AudioServiceCommonUnitTest, AudioRingCache_006, TestSize.Level1)
1035 {
1036 size_t cacheSize = 960;
1037 std::unique_ptr<AudioRingCache> ringCache = AudioRingCache::Create(cacheSize);
1038
1039 size_t tempSize = 480;
1040 std::unique_ptr<uint8_t[]> writeBuffer = std::make_unique<uint8_t[]>(tempSize);
1041
1042 for (size_t index = 0; index < tempSize;index++) {
1043 writeBuffer[index] = index;
1044 }
1045
1046 BufferWrap writeWrap = {writeBuffer.get(), tempSize};
1047
1048 OptResult result1 = ringCache->Enqueue(writeWrap);
1049 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1050
1051 result1 = ringCache->Dequeue(writeWrap);
1052 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1053 EXPECT_EQ(result1.size, tempSize);
1054
1055 result1 = ringCache->Enqueue(writeWrap);
1056 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1057
1058 result1 = ringCache->ReConfig(tempSize, false); // test copyRemained is false
1059 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1060 EXPECT_EQ(result1.size, tempSize);
1061
1062 result1 = ringCache->GetReadableSize();
1063 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1064 EXPECT_EQ(result1.size, 0);
1065 }
1066
1067 /**
1068 * @tc.name : Test AudioRingCache API
1069 * @tc.type : FUNC
1070 * @tc.number: AudioRingCache_007
1071 * @tc.desc : Test AudioRingCache interface.
1072 */
1073 HWTEST(AudioServiceCommonUnitTest, AudioRingCache_007, TestSize.Level1)
1074 {
1075 size_t cacheSize = 480;
1076 std::unique_ptr<AudioRingCache> ringCache = AudioRingCache::Create(cacheSize);
1077
1078 size_t tempSize = 480;
1079 std::unique_ptr<uint8_t[]> writeBuffer = std::make_unique<uint8_t[]>(tempSize);
1080
1081 for (size_t index = 0; index < tempSize;index++) {
1082 writeBuffer[index] = index;
1083 }
1084
1085 BufferWrap writeWrap = {writeBuffer.get(), tempSize};
1086
1087 OptResult result1 = ringCache->Enqueue(writeWrap);
1088 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1089
1090 size_t reSize = tempSize + tempSize;
1091 result1 = ringCache->ReConfig(reSize, false); // test copyRemained is false
1092 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1093 EXPECT_EQ(result1.size, reSize);
1094
1095 result1 = ringCache->GetReadableSize();
1096 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1097 EXPECT_EQ(result1.size, 0);
1098
1099 result1 = ringCache->GetWritableSize();
1100 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1101 EXPECT_EQ(result1.size, reSize);
1102
1103 result1 = ringCache->Enqueue(writeWrap);
1104 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1105 EXPECT_EQ(result1.size, tempSize);
1106
1107 result1 = ringCache->GetWritableSize();
1108 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1109 EXPECT_EQ(result1.size, tempSize);
1110
1111 result1 = ringCache->Enqueue(writeWrap);
1112 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1113 EXPECT_EQ(result1.size, tempSize);
1114
1115 result1 = ringCache->GetWritableSize();
1116 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1117 EXPECT_EQ(result1.size, 0);
1118 }
1119
1120 /**
1121 * @tc.name : Test AudioRingCache API
1122 * @tc.type : FUNC
1123 * @tc.number: AudioRingCache_008
1124 * @tc.desc : Test cross ring cache.
1125 */
1126 HWTEST(AudioServiceCommonUnitTest, AudioRingCache_008, TestSize.Level1)
1127 {
1128 size_t cacheSize = 480;
1129 std::unique_ptr<AudioRingCache> ringCache = AudioRingCache::Create(cacheSize);
1130
1131 size_t tempSize = 1920;
1132 std::unique_ptr<uint8_t[]> writeBuffer = std::make_unique<uint8_t[]>(tempSize);
1133 std::unique_ptr<uint8_t[]> readBuffer = std::make_unique<uint8_t[]>(tempSize);
1134
1135 for (size_t index = 0; index < tempSize;index++) {
1136 writeBuffer[index] = index % UINT8_MAX;
1137 }
1138
1139 size_t offset = 0;
1140 size_t spanSize = 320; // 480 * 2 /3
1141 int32_t totalCount = tempSize / spanSize;
1142 while (totalCount-- > 0) {
1143 uint8_t *writePtr = writeBuffer.get() + offset;
1144 BufferWrap spanWrap = {writePtr, spanSize};
1145 OptResult result1 = ringCache->Enqueue(spanWrap);
1146 EXPECT_EQ(result1.ret, OPERATION_SUCCESS);
1147
1148 uint8_t *readPtr = readBuffer.get() + offset;
1149 BufferWrap readWrap = {readPtr, spanSize};
1150 OptResult result2 = ringCache->Dequeue(readWrap);
1151 EXPECT_EQ(result2.ret, OPERATION_SUCCESS);
1152 offset += spanSize;
1153 }
1154
1155 for (size_t index = 0; index < tempSize;index++) {
1156 EXPECT_EQ(writeBuffer[index], readBuffer[index]);
1157 }
1158 }
1159 /**
1160 * @tc.name : Test AudioRingCache API
1161 * @tc.type : FUNC
1162 * @tc.number: DumpInnerCapConfig_001
1163 * @tc.desc : Test cross ring cache.
1164 */
1165 HWTEST(AudioServiceCommonUnitTest, DumpInnerCapConfig_001, TestSize.Level1)
1166 {
1167 CaptureFilterOptions filterOptions = {{STREAM_USAGE_MUSIC}, FilterMode::EXCLUDE, {0}, FilterMode::EXCLUDE};
1168 AudioPlaybackCaptureConfig config = {filterOptions, false};
1169 std::string dumpStr = ProcessConfig::DumpInnerCapConfig(config);
1170 EXPECT_NE(dumpStr, "");
1171 }
1172 /**
1173 * @tc.name : Test AudioRingCache API
1174 * @tc.type : FUNC
1175 * @tc.number: DumpInnerCapConfig_002
1176 * @tc.desc : Test cross ring cache.
1177 */
1178 HWTEST(AudioServiceCommonUnitTest, DumpInnerCapConfig_002, TestSize.Level1)
1179 {
1180 CaptureFilterOptions filterOptions = {{STREAM_USAGE_MUSIC},
1181 FilterMode::MAX_FILTER_MODE, {0}, FilterMode::MAX_FILTER_MODE};
1182 AudioPlaybackCaptureConfig config = {filterOptions, false};
1183 std::string dumpStr = ProcessConfig::DumpInnerCapConfig(config);
1184 EXPECT_NE(dumpStr, "");
1185 }
1186 /**
1187 * @tc.name : Test AudioRingCache API
1188 * @tc.type : FUNC
1189 * @tc.number: ReadInnerCapConfigFromParcel_001
1190 * @tc.desc : Test cross ring cache.
1191 */
1192 HWTEST(AudioServiceCommonUnitTest, ReadInnerCapConfigFromParcel_001, TestSize.Level1)
1193 {
1194 MessageParcel parcel;
1195 AudioPlaybackCaptureConfig config;
1196
1197 for (int i = 0; i < 31; i++) {
1198 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_MEDIA);
1199 }
1200 int ret = config.Marshalling(parcel);
1201 EXPECT_EQ(ret, SUCCESS);
1202 }
1203 /**
1204 * @tc.name : Test AudioRingCache API
1205 * @tc.type : FUNC
1206 * @tc.number: ReadInnerCapConfigFromParcel_002
1207 * @tc.desc : Test cross ring cache.
1208 */
1209 HWTEST(AudioServiceCommonUnitTest, ReadInnerCapConfigFromParcel_002, TestSize.Level1)
1210 {
1211 MessageParcel parcel;
1212 AudioPlaybackCaptureConfig config;
1213
1214 for (int i = 0; i < 29; i++) {
1215 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_VOICE_CALL_ASSISTANT);
1216 }
1217 int ret = config.Marshalling(parcel);
1218 EXPECT_NE(ret, SUCCESS);
1219 }
1220 /**
1221 * @tc.name : Test AudioRingCache API
1222 * @tc.type : FUNC
1223 * @tc.number: ReadInnerCapConfigFromParcel_003
1224 * @tc.desc : Test cross ring cache.
1225 */
1226 HWTEST(AudioServiceCommonUnitTest, ReadInnerCapConfigFromParcel_003, TestSize.Level1)
1227 {
1228 MessageParcel parcel;
1229 AudioPlaybackCaptureConfig config;
1230
1231 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_ALARM);
1232 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_VOICE_COMMUNICATION);
1233 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_VOICE_RINGTONE);
1234
1235 int ret = config.Marshalling(parcel);
1236 EXPECT_NE(ret, SUCCESS);
1237 }
1238 /**
1239 * @tc.name : Test AudioRingCache API
1240 * @tc.type : FUNC
1241 * @tc.number: ReadInnerCapConfigFromParcel_004
1242 * @tc.desc : Test cross ring cache.
1243 */
1244 HWTEST(AudioServiceCommonUnitTest, ReadInnerCapConfigFromParcel_004, TestSize.Level1)
1245 {
1246 MessageParcel parcel;
1247 AudioPlaybackCaptureConfig config;
1248
1249 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_ALARM);
1250 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_VOICE_COMMUNICATION);
1251 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_ENFORCED_TONE);
1252 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_INVALID);
1253
1254 int ret = config.Marshalling(parcel);
1255 EXPECT_NE(ret, SUCCESS);
1256 }
1257 /**
1258 * @tc.name : Test AudioRingCache API
1259 * @tc.type : FUNC
1260 * @tc.number: ReadInnerCapConfigFromParcel_005
1261 * @tc.desc : Test cross ring cache.
1262 */
1263 HWTEST(AudioServiceCommonUnitTest, ReadInnerCapConfigFromParcel_005, TestSize.Level1)
1264 {
1265 MessageParcel parcel;
1266 AudioPlaybackCaptureConfig config;
1267
1268 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_ALARM);
1269 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_VOICE_COMMUNICATION);
1270 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_MEDIA);
1271 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_MEDIA);
1272 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_MEDIA);
1273 config.filterOptions.usages.push_back(StreamUsage::STREAM_USAGE_ALARM);
1274
1275 int ret = 0;
1276 ret = config.Marshalling(parcel);
1277 EXPECT_NE(ret, SUCCESS);
1278 }
1279
1280 /**
1281 * @tc.name : Test LinearPosTimeModel API
1282 * @tc.type : FUNC
1283 * @tc.number: LinearPosTimeModel_003
1284 * @tc.desc : Test LinearPosTimeModel interface.
1285 */
1286 HWTEST(AudioServiceCommonUnitTest, LinearPosTimeModel_003, TestSize.Level1)
1287 {
1288 auto linearPos = std::make_unique<LinearPosTimeModel>();
1289 ASSERT_TRUE(linearPos != nullptr);
1290
1291 uint64_t frame = 0;
1292 int64_t nanoTime = 0;
1293 for (int i = 0; i < 10; i++) {
1294 linearPos->posTimeVec_.push_back(std::make_pair(frame, nanoTime));
1295 if (frame < 5) {
1296 frame++;
1297 }
1298 nanoTime++;
1299 }
1300 linearPos->sampleRate_ = 1;
1301 auto ret = linearPos->CheckReasonable(frame, nanoTime);
1302 EXPECT_EQ(ret, CHECK_FAILED);
1303 }
1304
1305 /**
1306 * @tc.name : Test LinearPosTimeModel API
1307 * @tc.type : FUNC
1308 * @tc.number: LinearPosTimeModel_004
1309 * @tc.desc : Test LinearPosTimeModel interface.
1310 */
1311 HWTEST(AudioServiceCommonUnitTest, LinearPosTimeModel_004, TestSize.Level1)
1312 {
1313 auto linearPos = std::make_unique<LinearPosTimeModel>();
1314 ASSERT_TRUE(linearPos != nullptr);
1315
1316 uint64_t posInFrame = 20;
1317 linearPos->isConfiged = true;
1318 linearPos->sampleRate_ = 1;
1319 auto ret = linearPos->GetTimeOfPos(posInFrame);
1320 EXPECT_NE(ret, -1);
1321 }
1322
1323 /**
1324 * @tc.name : Test LinearPosTimeModel API
1325 * @tc.type : FUNC
1326 * @tc.number: LinearPosTimeModel_005
1327 * @tc.desc : Test LinearPosTimeModel interface.
1328 */
1329 HWTEST(AudioServiceCommonUnitTest, LinearPosTimeModel_005, TestSize.Level1)
1330 {
1331 auto linearPos = std::make_unique<LinearPosTimeModel>();
1332 ASSERT_TRUE(linearPos != nullptr);
1333
1334 uint64_t posInFrame = 0;
1335 linearPos->stampFrame_ = 5;
1336 linearPos->isConfiged = true;
1337 linearPos->sampleRate_ = 1;
1338 auto ret = linearPos->GetTimeOfPos(posInFrame);
1339 EXPECT_NE(ret, -1);
1340 }
1341
1342 /**
1343 * @tc.name : Test CheckWriteOrReadFrame API
1344 * @tc.type : FUNC
1345 * @tc.number: CheckWriteOrReadFrame_001
1346 * @tc.desc : Test CheckWriteOrReadFrame interface.
1347 */
1348 HWTEST(AudioServiceCommonUnitTest, CheckWriteOrReadFrame_001, TestSize.Level1)
1349 {
1350 g_oHAudioBuffer->spanBasicInfo_.spanSizeInFrame_ = 0;
1351 EXPECT_FALSE(g_oHAudioBuffer->CheckWriteOrReadFrame(100));
1352 }
1353
1354 /**
1355 * @tc.name : Test CheckWriteOrReadFrame API
1356 * @tc.type : FUNC
1357 * @tc.number: CheckWriteOrReadFrame_002
1358 * @tc.desc : Test CheckWriteOrReadFrame interface.
1359 */
1360 HWTEST(AudioServiceCommonUnitTest, CheckWriteOrReadFrame_002, TestSize.Level1)
1361 {
1362 g_oHAudioBuffer->spanBasicInfo_.spanSizeInFrame_ = 10;
1363 EXPECT_FALSE(g_oHAudioBuffer->CheckWriteOrReadFrame(15));
1364 }
1365
1366 /**
1367 * @tc.name : Test CheckWriteOrReadFrame API
1368 * @tc.type : FUNC
1369 * @tc.number: CheckWriteOrReadFrame_003
1370 * @tc.desc : Test CheckWriteOrReadFrame interface.
1371 */
1372 HWTEST(AudioServiceCommonUnitTest, CheckWriteOrReadFrame_003, TestSize.Level1)
1373 {
1374 g_oHAudioBuffer->spanBasicInfo_.spanSizeInFrame_ = 10;
1375 EXPECT_TRUE(g_oHAudioBuffer->CheckWriteOrReadFrame(20));
1376 }
1377
1378 /**
1379 * @tc.name : Test SizeCheck API
1380 * @tc.type : FUNC
1381 * @tc.number: SizeCheck_001
1382 * @tc.desc : Test SizeCheck interface.
1383 */
1384 HWTEST(AudioServiceCommonUnitTest, SizeCheck_001, TestSize.Level1)
1385 {
1386 g_oHAudioBuffer->spanBasicInfo_.spanSizeInFrame_ = 0;
1387 g_oHAudioBuffer->spanBasicInfo_.spanSizeInByte_ = 100;
1388 g_oHAudioBuffer->spanBasicInfo_.spanConut_ = 10;
1389 uint32_t totalSizeFrame = 1000;
1390 int32_t result = g_oHAudioBuffer->spanBasicInfo_.SizeCheck(totalSizeFrame);
1391 EXPECT_EQ(result, ERR_INVALID_PARAM);
1392 }
1393
1394 /**
1395 * @tc.name : Test SizeCheck API
1396 * @tc.type : FUNC
1397 * @tc.number: SizeCheck_002
1398 * @tc.desc : Test SizeCheck interface.
1399 */
1400 HWTEST(AudioServiceCommonUnitTest, SizeCheck_002, TestSize.Level1)
1401 {
1402 g_oHAudioBuffer->spanBasicInfo_.spanSizeInFrame_ = 100;
1403 g_oHAudioBuffer->spanBasicInfo_.spanSizeInByte_ = 0;
1404 g_oHAudioBuffer->spanBasicInfo_.spanConut_ = 10;
1405 uint32_t totalSizeFrame = 1000;
1406 int32_t result = g_oHAudioBuffer->spanBasicInfo_.SizeCheck(totalSizeFrame);
1407 EXPECT_EQ(result, ERR_INVALID_PARAM);
1408 }
1409
1410 /**
1411 * @tc.name : Test SizeCheck API
1412 * @tc.type : FUNC
1413 * @tc.number: SizeCheck_003
1414 * @tc.desc : Test SizeCheck interface.
1415 */
1416 HWTEST(AudioServiceCommonUnitTest, SizeCheck_003, TestSize.Level1)
1417 {
1418 g_oHAudioBuffer->spanBasicInfo_.spanSizeInFrame_ = 100;
1419 g_oHAudioBuffer->spanBasicInfo_.spanSizeInByte_ = 100;
1420 g_oHAudioBuffer->spanBasicInfo_.spanConut_ = 10;
1421 uint32_t totalSizeFrame = 1000;
1422 int32_t result = g_oHAudioBuffer->spanBasicInfo_.SizeCheck(totalSizeFrame);
1423 EXPECT_NE(result, ERR_INVALID_PARAM);
1424 }
1425
1426 /**
1427 * @tc.name : Test SizeCheck API
1428 * @tc.type : FUNC
1429 * @tc.number: SizeCheck_004
1430 * @tc.desc : Test SizeCheck interface.
1431 */
1432 HWTEST(AudioServiceCommonUnitTest, SizeCheck_004, TestSize.Level1)
1433 {
1434 g_oHAudioBuffer->spanBasicInfo_.spanSizeInFrame_ = 100;
1435 g_oHAudioBuffer->spanBasicInfo_.spanSizeInByte_ = 100;
1436 g_oHAudioBuffer->spanBasicInfo_.spanConut_ = 10;
1437 uint32_t totalSizeFrame = 50;
1438 int32_t result = g_oHAudioBuffer->spanBasicInfo_.SizeCheck(totalSizeFrame);
1439 EXPECT_EQ(result, ERR_INVALID_PARAM);
1440
1441 uint32_t totalSizeFrame1 = 50;
1442 int32_t ret = g_oHAudioBuffer->spanBasicInfo_.SizeCheck(totalSizeFrame1);
1443 EXPECT_EQ(ret, ERR_INVALID_PARAM);
1444 }
1445
1446 /**
1447 * @tc.name : Test SizeCheck API
1448 * @tc.type : FUNC
1449 * @tc.number: SizeCheck_005
1450 * @tc.desc : Test SizeCheck interface.
1451 */
1452 HWTEST(AudioServiceCommonUnitTest, SizeCheck_005, TestSize.Level1)
1453 {
1454 g_oHAudioBuffer->spanBasicInfo_.spanSizeInFrame_ = 100;
1455 g_oHAudioBuffer->spanBasicInfo_.spanSizeInByte_ = 100;
1456 g_oHAudioBuffer->spanBasicInfo_.spanConut_ = 10;
1457 uint32_t totalSizeFrame = 1000;
1458 int32_t result = g_oHAudioBuffer->spanBasicInfo_.SizeCheck(totalSizeFrame);
1459 EXPECT_EQ(result, SUCCESS);
1460 }
1461
1462 /**
1463 * @tc.name : Test ReadFromParcel API
1464 * @tc.type : FUNC
1465 * @tc.number: ReadFromParcel_001
1466 * @tc.desc : Test ReadFromParcel interface.
1467 */
1468 HWTEST(AudioServiceCommonUnitTest, ReadFromParcel_001, TestSize.Level1)
1469 {
1470 MessageParcel parcel;
1471 parcel.WriteUint32(static_cast<uint32_t>(AudioBufferHolder::AUDIO_SERVER_INDEPENDENT));
1472 std::shared_ptr<OHAudioBuffer> buffer = OHAudioBuffer::ReadFromParcel(parcel);
1473 EXPECT_EQ(buffer, nullptr);
1474 }
1475
1476 /**
1477 * @tc.name : Test ReadFromParcel API
1478 * @tc.type : FUNC
1479 * @tc.number: ReadFromParcel_002
1480 * @tc.desc : Test ReadFromParcel interface.
1481 */
1482 HWTEST(AudioServiceCommonUnitTest, ReadFromParcel_002, TestSize.Level1)
1483 {
1484 MessageParcel parcel;
1485 parcel.WriteUint32(static_cast<uint32_t>(AudioBufferHolder::AUDIO_SERVER_SHARED));
1486 parcel.WriteUint32(0);
1487 int dataFd = 1;
1488 int infoFd = 2;
1489 parcel.WriteFileDescriptor(dataFd);
1490 parcel.WriteFileDescriptor(infoFd);
1491 std::shared_ptr<OHAudioBuffer> buffer = OHAudioBuffer::ReadFromParcel(parcel);
1492 EXPECT_EQ(buffer, nullptr);
1493 }
1494
1495 /**
1496 * @tc.name : Test ReadFromParcel API
1497 * @tc.type : FUNC
1498 * @tc.number: AudioSharedMemory_ReadFromParcel_001
1499 * @tc.desc : Test AudioSharedMemory::ReadFromParcel interface.
1500 */
1501 HWTEST(AudioServiceCommonUnitTest, AudioSharedMemory_ReadFromParcel_001, TestSize.Level4)
1502 {
1503 MessageParcel parcel;
1504 parcel.WriteUint64(100);
1505 parcel.WriteString("testName");
1506 auto memory = AudioSharedMemory::ReadFromParcel(parcel);
1507 EXPECT_EQ(memory, nullptr);
1508 }
1509
1510 /**
1511 * @tc.name : Test Unmarshalling API
1512 * @tc.type : FUNC
1513 * @tc.number: OHAudioBufferBase_Unmarshalling_001
1514 * @tc.desc : Test OHAudioBufferBase::Unmarshalling interface.
1515 */
1516 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_Unmarshalling_001, TestSize.Level4)
1517 {
1518 Parcel parcel;
1519 MessageParcel &messageParcel = static_cast<MessageParcel &>(parcel);
1520 messageParcel.WriteUint32(static_cast<uint32_t>(AudioBufferHolder::AUDIO_SERVER_SHARED) + 1);
1521 messageParcel.WriteUint32(10);
1522 messageParcel.WriteUint32(10);
1523 messageParcel.WriteFileDescriptor(3);
1524 messageParcel.WriteFileDescriptor(4);
1525
1526 auto buffer = OHAudioBufferBase::Unmarshalling(parcel);
1527 EXPECT_EQ(buffer, nullptr);
1528 }
1529
1530 /**
1531 * @tc.name : Test CreateFromRemote API
1532 * @tc.type : FUNC
1533 * @tc.number: OHAudioBufferBase_CreateFromRemote _001
1534 * @tc.desc : Test OHAudioBufferBase::CreateFromRemote interface.
1535 */
1536 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_CreateFromRemote_001, TestSize.Level4)
1537 {
1538 uint32_t totalSizeInFrame = 10;
1539 uint32_t byteSizePerFrame = 10;
1540 AudioBufferHolder bufferHolder = AUDIO_CLIENT;
1541 int dataFd = 3;
1542 int infoFd = 1;
1543
1544 std::shared_ptr<OHAudioBufferBase> buffer = OHAudioBufferBase::CreateFromRemote(totalSizeInFrame,
1545 byteSizePerFrame, bufferHolder, dataFd, infoFd);
1546 EXPECT_EQ(buffer, nullptr);
1547 }
1548
1549 /**
1550 * @tc.name : Test ReadFromParcel API
1551 * @tc.type : FUNC
1552 * @tc.number: OHAudioBufferBase_ReadFromParcel_001
1553 * @tc.desc : Test OHAudioBufferBase::ReadFromParcel interface.
1554 */
1555 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_ReadFromParcel_001, TestSize.Level4)
1556 {
1557 MessageParcel parcel;
1558 parcel.WriteUint32(static_cast<uint32_t>(AudioBufferHolder::AUDIO_SERVER_ONLY));
1559 parcel.WriteUint32(100);
1560 parcel.WriteUint32(10);
1561 int dataFd = 1;
1562 int infoFd = 2;
1563 parcel.WriteFileDescriptor(dataFd);
1564 parcel.WriteFileDescriptor(infoFd);
1565 std::shared_ptr<OHAudioBufferBase> buffer = OHAudioBufferBase::ReadFromParcel(parcel);
1566 EXPECT_EQ(buffer, nullptr);
1567 }
1568
1569 /**
1570 * @tc.name : Test ReadFromParcel API
1571 * @tc.type : FUNC
1572 * @tc.number: OHAudioBufferBase_ReadFromParcel_002
1573 * @tc.desc : Test OHAudioBufferBase::ReadFromParcel interface.
1574 */
1575 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_ReadFromParcel_002, TestSize.Level4)
1576 {
1577 MessageParcel parcel;
1578 parcel.WriteUint32(static_cast<uint32_t>(AudioBufferHolder::AUDIO_SERVER_INDEPENDENT));
1579 parcel.WriteUint32(100);
1580 parcel.WriteUint32(10);
1581 int dataFd = 1;
1582 int infoFd = 2;
1583 parcel.WriteFileDescriptor(dataFd);
1584 parcel.WriteFileDescriptor(infoFd);
1585 std::shared_ptr<OHAudioBufferBase> buffer = OHAudioBufferBase::ReadFromParcel(parcel);
1586 EXPECT_EQ(buffer, nullptr);
1587 }
1588
1589 /**
1590 * @tc.name : Test ReadFromParcel API
1591 * @tc.type : FUNC
1592 * @tc.number: OHAudioBufferBase_ReadFromParcel_003
1593 * @tc.desc : Test OHAudioBufferBase::ReadFromParcel interface.
1594 */
1595 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_ReadFromParcel_003, TestSize.Level4)
1596 {
1597 MessageParcel parcel;
1598 parcel.WriteUint32(static_cast<uint32_t>(AudioBufferHolder::AUDIO_SERVER_SHARED));
1599 parcel.WriteUint32(100);
1600 parcel.WriteUint32(10);
1601 int dataFd = 3;
1602 int infoFd = 4;
1603 parcel.WriteFileDescriptor(dataFd);
1604 parcel.WriteFileDescriptor(infoFd);
1605 std::shared_ptr<OHAudioBufferBase> buffer = OHAudioBufferBase::ReadFromParcel(parcel);
1606 EXPECT_EQ(buffer, nullptr);
1607 }
1608
1609 /**
1610 * @tc.name : Test GetSyncWriteFrame API
1611 * @tc.type : FUNC
1612 * @tc.number: OHAudioBufferBase_GetSyncWriteFrame_001
1613 * @tc.desc : Test GetSyncWriteFrame interface.
1614 */
1615 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetSyncWriteFrame_001, TestSize.Level1)
1616 {
1617 OHAudioBufferBase audioBufferBase(AUDIO_SERVER_ONLY_WITH_SYNC, 100, 10);
1618 audioBufferBase.bufferHolder_ = AUDIO_SERVER_ONLY_WITH_SYNC;
1619 audioBufferBase.syncWriteFrame_ = nullptr;
1620 EXPECT_EQ(audioBufferBase.GetSyncWriteFrame(), 0);
1621 }
1622
1623 /**
1624 * @tc.name : Test GetSyncWriteFrame API
1625 * @tc.type : FUNC
1626 * @tc.number: OHAudioBufferBase_GetSyncWriteFrame_002
1627 * @tc.desc : Test GetSyncWriteFrame interface.
1628 */
1629 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetSyncWriteFrame_002, TestSize.Level1)
1630 {
1631 OHAudioBufferBase audioBufferBase(AUDIO_SERVER_ONLY_WITH_SYNC, 100, 10);
1632 audioBufferBase.bufferHolder_ = AUDIO_SERVER_ONLY_WITH_SYNC;
1633 uint32_t syncWriteFrame = 50;
1634 audioBufferBase.syncWriteFrame_ = &syncWriteFrame;
1635 EXPECT_EQ(audioBufferBase.GetSyncWriteFrame(), syncWriteFrame);
1636 }
1637
1638 /**
1639 * @tc.name : Test SetSyncReadFrame API
1640 * @tc.type : FUNC
1641 * @tc.number: OHAudioBufferBase_SetSyncReadFrame_001
1642 * @tc.desc : Test SetSyncReadFrame interface.
1643 */
1644 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_SetSyncReadFrame_001, TestSize.Level1)
1645 {
1646 uint32_t syncWriteFrame = 50;
1647 OHAudioBufferBase audioBufferBase(AUDIO_SERVER_ONLY_WITH_SYNC, 100, 10);
1648 audioBufferBase.bufferHolder_ = AUDIO_SERVER_ONLY_WITH_SYNC;
1649 audioBufferBase.syncReadFrame_ = &syncWriteFrame;
1650 uint32_t readFrame = 10;
1651 EXPECT_TRUE(audioBufferBase.SetSyncReadFrame(readFrame));
1652 }
1653
1654 /**
1655 * @tc.name : Test GetFutex API
1656 * @tc.type : FUNC
1657 * @tc.number: OHAudioBufferBase_GetFutex_001
1658 * @tc.desc : Test OHAudioBufferBase::GetFutex() interface.
1659 */
1660 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetFutex_001, TestSize.Level1)
1661 {
1662 OHAudioBufferBase audioBufferBase(AUDIO_SERVER_ONLY_WITH_SYNC, 100, 10);
1663 audioBufferBase.basicBufferInfo_ = nullptr;
1664 EXPECT_EQ(audioBufferBase.GetFutex(), nullptr);
1665 }
1666
1667 /**
1668 * @tc.name : Test SetRestoreStatus API
1669 * @tc.type : FUNC
1670 * @tc.number: OHAudioBufferBase_SetRestoreStatus_001
1671 * @tc.desc : Test SetRestoreStatus interface.
1672 */
1673 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_SetRestoreStatus_001, TestSize.Level1)
1674 {
1675 uint32_t spanSizeInFrame = 1000;
1676 uint32_t totalSizeInFrame = spanSizeInFrame;
1677 uint32_t byteSizePerFrame = 100;
1678 auto ohAudioBuffer = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
1679 RestoreStatus result = ohAudioBuffer->SetRestoreStatus(NO_NEED_FOR_RESTORE);
1680 EXPECT_NE(RESTORING, result);
1681 }
1682
1683 /**
1684 * @tc.name : Test GetStreamVolume API
1685 * @tc.type : FUNC
1686 * @tc.number: OHAudioBufferBase_GetStreamVolume_001
1687 * @tc.desc : Test GetStreamVolume interface.
1688 */
1689 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetStreamVolume_001, TestSize.Level1)
1690 {
1691 uint32_t spanSizeInFrame = 1000;
1692 uint32_t totalSizeInFrame = spanSizeInFrame;
1693 uint32_t byteSizePerFrame = 100;
1694 auto ohAudioBuffer = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
1695 ohAudioBuffer->basicBufferInfo_->streamVolume.store(MAX_FLOAT_VOLUME + 0.1);
1696 float result = ohAudioBuffer->GetStreamVolume();
1697 EXPECT_FLOAT_EQ(result, MAX_FLOAT_VOLUME);
1698 }
1699
1700 /**
1701 * @tc.name : Test GetStreamVolume API
1702 * @tc.type : FUNC
1703 * @tc.number: OHAudioBufferBase_GetStreamVolume_002
1704 * @tc.desc : Test GetStreamVolume interface.
1705 */
1706 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetStreamVolume_002, TestSize.Level1)
1707 {
1708 uint32_t spanSizeInFrame = 1000;
1709 uint32_t totalSizeInFrame = spanSizeInFrame;
1710 uint32_t byteSizePerFrame = 100;
1711 auto ohAudioBuffer = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
1712 ohAudioBuffer->basicBufferInfo_->streamVolume.store(MIN_FLOAT_VOLUME - 0.1);
1713 float result = ohAudioBuffer->GetStreamVolume();
1714 EXPECT_FLOAT_EQ(result, MIN_FLOAT_VOLUME);
1715 }
1716
1717 /**
1718 * @tc.name : Test GetMuteFactor API
1719 * @tc.type : FUNC
1720 * @tc.number: OHAudioBufferBase_GetMuteFactor_001
1721 * @tc.desc : Test GetMuteFactor interface.
1722 */
1723 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetMuteFactor_001, TestSize.Level1)
1724 {
1725 uint32_t spanSizeInFrame = 1000;
1726 uint32_t totalSizeInFrame = spanSizeInFrame;
1727 uint32_t byteSizePerFrame = 100;
1728 auto ohAudioBuffer = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
1729 ohAudioBuffer->basicBufferInfo_->muteFactor.store(MAX_FLOAT_VOLUME + 0.1);
1730 float result = ohAudioBuffer->GetMuteFactor();
1731 EXPECT_FLOAT_EQ(result, MAX_FLOAT_VOLUME);
1732 }
1733
1734 /**
1735 * @tc.name : Test GetMuteFactor API
1736 * @tc.type : FUNC
1737 * @tc.number: OHAudioBufferBase_GetMuteFactor_002
1738 * @tc.desc : Test GetMuteFactor interface.
1739 */
1740 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetMuteFactor_002, TestSize.Level1)
1741 {
1742 uint32_t spanSizeInFrame = 1000;
1743 uint32_t totalSizeInFrame = spanSizeInFrame;
1744 uint32_t byteSizePerFrame = 100;
1745 auto ohAudioBuffer = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
1746 ohAudioBuffer->basicBufferInfo_->muteFactor.store(MIN_FLOAT_VOLUME - 0.1);
1747 float result = ohAudioBuffer->GetMuteFactor();
1748 EXPECT_FLOAT_EQ(result, MIN_FLOAT_VOLUME);
1749 }
1750
1751 /**
1752 * @tc.name : Test GetDuckFactor API
1753 * @tc.type : FUNC
1754 * @tc.number: OHAudioBufferBase_GetDuckFactor_001
1755 * @tc.desc : Test GetDuckFactor interface.
1756 */
1757 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetDuckFactor_001, TestSize.Level1)
1758 {
1759 uint32_t spanSizeInFrame = 1000;
1760 uint32_t totalSizeInFrame = spanSizeInFrame;
1761 uint32_t byteSizePerFrame = 100;
1762 auto ohAudioBuffer = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
1763 ohAudioBuffer->basicBufferInfo_->duckFactor.store(MAX_FLOAT_VOLUME + 0.1);
1764 float result = ohAudioBuffer->GetDuckFactor();
1765 EXPECT_FLOAT_EQ(result, MAX_FLOAT_VOLUME);
1766 }
1767
1768 /**
1769 * @tc.name : Test GetDuckFactor API
1770 * @tc.type : FUNC
1771 * @tc.number: OHAudioBufferBase_GetDuckFactor_002
1772 * @tc.desc : Test GetDuckFactor interface.
1773 */
1774 HWTEST(AudioServiceCommonUnitTest, OHAudioBufferBase_GetDuckFactor_002, TestSize.Level1)
1775 {
1776 uint32_t spanSizeInFrame = 1000;
1777 uint32_t totalSizeInFrame = spanSizeInFrame;
1778 uint32_t byteSizePerFrame = 100;
1779 auto ohAudioBuffer = OHAudioBufferBase::CreateFromLocal(totalSizeInFrame, byteSizePerFrame);
1780 ohAudioBuffer->basicBufferInfo_->duckFactor.store(MIN_FLOAT_VOLUME - 0.1);
1781 float result = ohAudioBuffer->GetDuckFactor();
1782 EXPECT_FLOAT_EQ(result, MIN_FLOAT_VOLUME);
1783 }
1784 } // namespace AudioStandard
1785 } // namespace OHOS