• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include <gtest/gtest.h>
16 #include "audio_renderer_sink.h"
17 #include "audio_errors.h"
18 
19 using namespace testing::ext;
20 namespace OHOS {
21 namespace AudioStandard {
22 const std::string DIRECT_SINK_NAME = "direct";
23 const std::string VOIP_SINK_NAME = "voip";
24 const std::string USB_SINK_NAME = "usb";
25 const char *SINK_ADAPTER_NAME = "primary";
26 class AudioDirectSinkUnitTest : public testing::Test {
27 public:
28     static void SetUpTestCase(void);
29     static void TearDownTestCase(void);
30     void SetUp();
31     void TearDown();
32 
33 protected:
34     AudioRendererSink *sink;
35     AudioRendererSink *voipSink;
36     AudioRendererSink *usbSink;
37 };
38 
SetUpTestCase(void)39 void AudioDirectSinkUnitTest::SetUpTestCase(void)
40 {
41     // input testsuit setup step,setup invoked before all testcases
42 }
43 
TearDownTestCase(void)44 void AudioDirectSinkUnitTest::TearDownTestCase(void)
45 {
46     // input testsuit teardown step,teardown invoked after all testcases
47 }
48 
SetUp(void)49 void AudioDirectSinkUnitTest::SetUp(void)
50 {
51     sink = AudioRendererSink::GetInstance(DIRECT_SINK_NAME);
52     voipSink = AudioRendererSink::GetInstance(VOIP_SINK_NAME);
53     usbSink = AudioRendererSink::GetInstance(USB_SINK_NAME);
54 }
55 
TearDown(void)56 void AudioDirectSinkUnitTest::TearDown(void)
57 {
58     if (sink && sink->IsInited()) {
59         sink->DeInit();
60     }
61     if (voipSink && voipSink->IsInited()) {
62         voipSink->DeInit();
63     }
64 }
65 
66 /**
67  * @tc.name  : Test Audio Direct Sink Create
68  * @tc.type  : FUNC
69  * @tc.number: DirectAudioSinkCreate_001
70  * @tc.desc  : Test audio direct sink create success
71  */
72 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkCreate_001, TestSize.Level1)
73 {
74     EXPECT_NE(nullptr, this->sink);
75 }
76 
77 /**
78  * @tc.name  : Test Audio Direct Sink
79  * @tc.type  : FUNC
80  * @tc.number: DirectAudioSinkInit_001
81  * @tc.desc  : Test audio direct sink init(setVolume) success
82  */
83 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkInit_001, TestSize.Level1)
84 {
85     EXPECT_NE(nullptr, this->sink);
86     IAudioSinkAttr attr = {};
87     attr.adapterName = SINK_ADAPTER_NAME;
88     attr.sampleRate = 48000;
89     attr.channel = 2;
90     attr.format = HdiAdapterFormat::SAMPLE_S32;
91     attr.channelLayout = 3;
92     attr.deviceType = DEVICE_TYPE_WIRED_HEADSET;
93     attr.volume = 1.0f;
94     attr.openMicSpeaker = 1;
95     int32_t ret = sink->Init(attr);
96     EXPECT_EQ(SUCCESS, ret);
97     float volume = 1.0f;
98     ret = sink->SetVolume(volume, volume);
99     EXPECT_EQ(SUCCESS, ret);
100 }
101 
102 /**
103  * @tc.name  : Test Direct Sink State
104  * @tc.type  : FUNC
105  * @tc.number: DirectAudioSinkState_001
106  * @tc.desc  : Test direct sink state(init->start->stop) success
107  */
108 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkState_001, TestSize.Level1)
109 {
110     EXPECT_NE(nullptr, this->sink);
111     IAudioSinkAttr attr = {};
112     attr.adapterName = SINK_ADAPTER_NAME;
113     attr.sampleRate = 48000;
114     attr.channel = 2;
115     attr.format = HdiAdapterFormat::SAMPLE_S32;
116     attr.channelLayout = 3;
117     attr.deviceType = DEVICE_TYPE_WIRED_HEADSET;
118     attr.volume = 1.0f;
119     attr.openMicSpeaker = 1;
120     int32_t ret = sink->Init(attr);
121     EXPECT_EQ(SUCCESS, ret);
122     ret = sink->Start();
123     EXPECT_EQ(SUCCESS, ret);
124     ret = sink->Stop();
125     EXPECT_EQ(SUCCESS, ret);
126 }
127 
128 /**
129  * @tc.name  : Test Direct Sink Init State
130  * @tc.type  : FUNC
131  * @tc.number: DirectAudioSinkState_002
132  * @tc.desc  : Test direct sink init state success
133  */
134 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkState_002, TestSize.Level1)
135 {
136     EXPECT_NE(nullptr, this->sink);
137     IAudioSinkAttr attr = {};
138     attr.adapterName = SINK_ADAPTER_NAME;
139     attr.sampleRate = 48000;
140     attr.channel = 2;
141     attr.format = HdiAdapterFormat::SAMPLE_S32;
142     attr.channelLayout = 3;
143     attr.deviceType = DEVICE_TYPE_WIRED_HEADSET;
144     attr.volume = 1.0f;
145     attr.openMicSpeaker = 1;
146     bool isInited = sink->IsInited();
147     EXPECT_EQ(false, isInited);
148 
149     int32_t ret = sink->Init(attr);
150     EXPECT_EQ(SUCCESS, ret);
151 
152     isInited = sink->IsInited();
153     EXPECT_EQ(true, isInited);
154 
155     sink->DeInit();
156 
157     isInited = sink->IsInited();
158     EXPECT_EQ(false, isInited);
159 
160     // Continuous execution init
161     ret = sink->Init(attr);
162     EXPECT_EQ(SUCCESS, ret);
163     ret = sink->Init(attr);
164     EXPECT_EQ(SUCCESS, ret);
165     isInited = sink->IsInited();
166     EXPECT_EQ(true, isInited);
167 }
168 
169 /**
170  * @tc.name  : Test Direct Sink Start State
171  * @tc.type  : FUNC
172  * @tc.number: DirectAudioSinkState_003
173  * @tc.desc  : Test direct sink start state success
174  */
175 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkState_003, TestSize.Level1)
176 {
177     EXPECT_NE(nullptr, this->sink);
178     IAudioSinkAttr attr = {};
179     attr.adapterName = SINK_ADAPTER_NAME;
180     attr.sampleRate = 48000;
181     attr.channel = 2;
182     attr.format = HdiAdapterFormat::SAMPLE_S32;
183     attr.channelLayout = 3;
184     attr.deviceType = DEVICE_TYPE_WIRED_HEADSET;
185     attr.volume = 1.0f;
186     attr.openMicSpeaker = 1;
187     int32_t ret = sink->Init(attr);
188     EXPECT_EQ(SUCCESS, ret);
189 
190     ret = sink->Start();
191     EXPECT_EQ(SUCCESS, ret);
192     ret = sink->Stop();
193     EXPECT_EQ(SUCCESS, ret);
194 
195     // Continuous execution start
196     ret = sink->Start();
197     EXPECT_EQ(SUCCESS, ret);
198     ret = sink->Start();
199     EXPECT_EQ(SUCCESS, ret);
200     ret = sink->Stop();
201     EXPECT_EQ(SUCCESS, ret);
202 }
203 
204 /**
205  * @tc.name  : Test Direct Sink Resume State
206  * @tc.type  : FUNC
207  * @tc.number: DirectAudioSinkState_004
208  * @tc.desc  : Test direct sink resume state success
209  */
210 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkState_004, TestSize.Level1)
211 {
212     EXPECT_NE(nullptr, this->sink);
213     IAudioSinkAttr attr = {};
214     attr.adapterName = SINK_ADAPTER_NAME;
215     attr.sampleRate = 48000;
216     attr.channel = 2;
217     attr.format = HdiAdapterFormat::SAMPLE_S32;
218     attr.channelLayout = 3;
219     attr.deviceType = DEVICE_TYPE_WIRED_HEADSET;
220     attr.volume = 1.0f;
221     attr.openMicSpeaker = 1;
222     int32_t ret = sink->Init(attr);
223     EXPECT_EQ(SUCCESS, ret);
224     ret = sink->Start();
225     EXPECT_EQ(SUCCESS, ret);
226     ret = sink->Resume();
227     EXPECT_EQ(SUCCESS, ret);
228     ret = sink->Stop();
229     EXPECT_EQ(SUCCESS, ret);
230 }
231 
232 /**
233  * @tc.name  : Test Audio Direct Sink Attribute
234  * @tc.type  : FUNC
235  * @tc.number: DirectAudioSinkSetAttribute_001
236  * @tc.desc  : Test audio direct sink attribute(sampleRate) success
237  */
238 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkSetAttribute_001, TestSize.Level1)
239 {
240     EXPECT_NE(nullptr, this->sink);
241     IAudioSinkAttr attr = {};
242     attr.adapterName = SINK_ADAPTER_NAME;
243     attr.sampleRate = 192000;
244     attr.channel = 2;
245     attr.format = HdiAdapterFormat::SAMPLE_S32;
246     attr.channelLayout = 3;
247     attr.deviceType = DEVICE_TYPE_WIRED_HEADSET;
248     attr.volume = 1.0f;
249     attr.openMicSpeaker = 1;
250     int32_t ret = sink->Init(attr);
251     EXPECT_EQ(SUCCESS, ret);
252     ret = sink->Start();
253     EXPECT_EQ(SUCCESS, ret);
254     ret = sink->Stop();
255     EXPECT_EQ(SUCCESS, ret);
256 }
257 
258 /**
259  * @tc.name  : Test Audio Direct Sink Attribute
260  * @tc.type  : FUNC
261  * @tc.number: DirectAudioSinkSetAttribute_002
262  * @tc.desc  : Test audio direct sink attribute(deviceType) success
263  */
264 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkSetAttribute_002, TestSize.Level1)
265 {
266     EXPECT_NE(nullptr, this->sink);
267     IAudioSinkAttr attr = {};
268     attr.adapterName = SINK_ADAPTER_NAME;
269     attr.sampleRate = 192000;
270     attr.channel = 2;
271     attr.format = HdiAdapterFormat::SAMPLE_S32;
272     attr.channelLayout = 3;
273     attr.deviceType = DEVICE_TYPE_USB_HEADSET;
274     attr.volume = 1.0f;
275     attr.openMicSpeaker = 1;
276     int32_t ret = sink->Init(attr);
277     EXPECT_EQ(SUCCESS, ret);
278     ret = sink->Start();
279     EXPECT_EQ(SUCCESS, ret);
280     ret = sink->Stop();
281     EXPECT_EQ(SUCCESS, ret);
282 }
283 
284 /**
285  * @tc.name  : Test Audio Sink RenderFrame
286  * @tc.type  : FUNC
287  * @tc.number: RenderFrame_001
288  * @tc.desc  : Test audio sink RenderFrame when audioMonoState_ is false, audioBalanceState_ is false
289  */
290 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkRenderFrame_001, TestSize.Level1)
291 {
292     EXPECT_NE(nullptr, this->sink);
293     IAudioSinkAttr attr = {};
294     attr.adapterName = SINK_ADAPTER_NAME;
295     attr.sampleRate = 192000;
296     attr.channel = 2;
297     attr.format = HdiAdapterFormat::SAMPLE_S32;
298     attr.channelLayout = 3;
299     attr.deviceType = DEVICE_TYPE_USB_HEADSET;
300     attr.volume = 1.0f;
301     attr.openMicSpeaker = 1;
302     int32_t ret = sink->Init(attr);
303     EXPECT_EQ(SUCCESS, ret);
304     uint64_t written = 0;
305     std::vector<char> audioBuffer{'8', '8', '8', '8', '8', '8', '8', '8'};
306     ret = sink->RenderFrame(*audioBuffer.data(), audioBuffer.size(), written);
307     EXPECT_EQ('8', audioBuffer[0]);
308     EXPECT_EQ(SUCCESS, ret);
309 }
310 
311 /**
312  * @tc.name  : Test Audio Sink RenderFrame
313  * @tc.type  : FUNC
314  * @tc.number: DirectAudioSinkRenderFrame_002
315  * @tc.desc  : Test audio sink of each format type RenderFrame when audioMonoState_ is true, audioBalanceState_ is
316  *          true success
317  */
318 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkRenderFrame_002, TestSize.Level1)
319 {
320     EXPECT_NE(nullptr, this->sink);
321     IAudioSinkAttr attr = {};
322     attr.adapterName = SINK_ADAPTER_NAME;
323     attr.sampleRate = 192000;
324     attr.channel = 2;
325     attr.format = HdiAdapterFormat::SAMPLE_S32;
326     attr.channelLayout = 3;
327     attr.deviceType = DEVICE_TYPE_USB_HEADSET;
328     attr.volume = 1.0f;
329     attr.openMicSpeaker = 1;
330     int32_t ret = sink->Init(attr);
331     EXPECT_EQ(SUCCESS, ret);
332     uint64_t written = 0;
333     sink->SetAudioMonoState(true);
334     sink->SetAudioBalanceValue(1.0f);
335     sink->SetAudioBalanceValue(-1.0f);
336     std::vector<char> audioBuffer{'8', '8', '8', '8', '8', '8', '8', '8'};
337     ret = sink->RenderFrame(*audioBuffer.data(), audioBuffer.size(), written);
338     EXPECT_EQ(SUCCESS, ret);
339 
340     attr.format = HdiAdapterFormat::SAMPLE_U8;
341     ret = sink->Init(attr);
342     EXPECT_EQ(SUCCESS, ret);
343     ret = sink->RenderFrame(*audioBuffer.data(), audioBuffer.size(), written);
344     EXPECT_EQ(SUCCESS, ret);
345 
346     attr.format = HdiAdapterFormat::SAMPLE_S16;
347     ret = sink->Init(attr);
348     EXPECT_EQ(SUCCESS, ret);
349     ret = sink->RenderFrame(*audioBuffer.data(), audioBuffer.size(), written);
350     EXPECT_EQ(SUCCESS, ret);
351 
352     ret = sink->Stop();
353     EXPECT_EQ(SUCCESS, ret);
354 }
355 
356 /**
357  * @tc.name  : Test Audio Sink RenderFrame
358  * @tc.type  : FUNC
359  * @tc.number: DirectAudioSinkRenderFrame_003
360  * @tc.desc  : Test audio sink of each format type RenderFrame when audioMonoState_ is true, audioBalanceState_ is
361  *          true success
362  */
363 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkRenderFrame_003, TestSize.Level1)
364 {
365     EXPECT_NE(nullptr, this->sink);
366     IAudioSinkAttr attr = {};
367     attr.adapterName = SINK_ADAPTER_NAME;
368     attr.sampleRate = 192000;
369     attr.channel = 2;
370     attr.format = HdiAdapterFormat::SAMPLE_S32;
371     attr.channelLayout = 3;
372     attr.deviceType = DEVICE_TYPE_USB_HEADSET;
373     attr.volume = 1.0f;
374     attr.openMicSpeaker = 1;
375     int32_t ret = sink->Init(attr);
376     EXPECT_EQ(SUCCESS, ret);
377     uint64_t written = 0;
378     sink->SetAudioMonoState(true);
379     sink->SetAudioBalanceValue(-1.0f);
380     std::vector<char> audioBuffer{'8', '8', '8', '8', '8', '8', '8', '8'};
381     attr.format = HdiAdapterFormat::SAMPLE_S24;
382     ret = sink->Init(attr);
383     EXPECT_EQ(SUCCESS, ret);
384     ret = sink->RenderFrame(*audioBuffer.data(), audioBuffer.size(), written);
385     EXPECT_EQ(SUCCESS, ret);
386 
387     attr.format = HdiAdapterFormat::SAMPLE_S32;
388     ret = sink->Init(attr);
389     EXPECT_EQ(SUCCESS, ret);
390     ret = sink->RenderFrame(*audioBuffer.data(), audioBuffer.size(), written);
391     EXPECT_EQ(SUCCESS, ret);
392 
393     attr.format = HdiAdapterFormat::INVALID_WIDTH;
394     ret = sink->Init(attr);
395     EXPECT_EQ(SUCCESS, ret);
396     ret = sink->RenderFrame(*audioBuffer.data(), audioBuffer.size(), written);
397     EXPECT_EQ(SUCCESS, ret);
398 
399     ret = sink->Stop();
400     EXPECT_EQ(SUCCESS, ret);
401 }
402 
403 /**
404  * @tc.name  : Test Audio Direct Sink SetVolume
405  * @tc.type  : FUNC
406  * @tc.number: DirectAudioSinkSetVolume_001
407  * @tc.desc  : Test audio direct sink SetVolume success
408  */
409 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkSetVolume_001, TestSize.Level1)
410 {
411     EXPECT_NE(nullptr, this->sink);
412     IAudioSinkAttr attr = {};
413     attr.adapterName = SINK_ADAPTER_NAME;
414     attr.sampleRate = 192000;
415     attr.channel = 2;
416     attr.format = HdiAdapterFormat::SAMPLE_S32;
417     attr.channelLayout = 3;
418     attr.deviceType = DEVICE_TYPE_USB_HEADSET;
419     attr.volume = 1.0f;
420     attr.openMicSpeaker = 1;
421     int32_t ret = sink->Init(attr);
422     EXPECT_EQ(SUCCESS, ret);
423     ret = sink->SetVolume(0.0f, 0.0f);
424     EXPECT_EQ(SUCCESS, ret);
425     ret = sink->SetVolume(0.0f, 1.0f);
426     EXPECT_EQ(SUCCESS, ret);
427     ret = sink->SetVolume(1.0f, 0.0f);
428     EXPECT_EQ(SUCCESS, ret);
429     ret = sink->SetVolume(1.0f, 1.0f);
430     EXPECT_EQ(SUCCESS, ret);
431 }
432 
433 /**
434  * @tc.name  : Test Audio Direct Sink SetVolume
435  * @tc.type  : FUNC
436  * @tc.number: DirectAudioSinkMix_001
437  * @tc.desc  : Test audio direct sink Start, Resume, Pause, Reset, Flush, GetPresentationPosition.
438  */
439 HWTEST_F(AudioDirectSinkUnitTest, DirectAudioSinkMix_001, TestSize.Level1)
440 {
441     EXPECT_NE(nullptr, this->sink);
442     IAudioSinkAttr attr = {};
443     attr.adapterName = SINK_ADAPTER_NAME;
444     attr.sampleRate = 192000;
445     attr.channel = 2;
446     attr.format = HdiAdapterFormat::SAMPLE_S32;
447     attr.channelLayout = 3;
448     attr.deviceType = DEVICE_TYPE_USB_HEADSET;
449     attr.volume = 1.0f;
450     attr.openMicSpeaker = 1;
451     uint64_t frame = 10;
452     int64_t timeSec = 10;
453     int64_t timeNanoSec = 10;
454     int32_t ret = sink->GetPresentationPosition(frame, timeSec, timeNanoSec);
455     EXPECT_EQ(ERR_INVALID_HANDLE, ret);
456     ret = sink->Reset();
457     EXPECT_EQ(ERR_OPERATION_FAILED, ret);
458     ret = sink->Flush();
459     EXPECT_EQ(ERR_OPERATION_FAILED, ret);
460     ret = sink->Init(attr);
461     EXPECT_EQ(SUCCESS, ret);
462     ret = sink->Stop();
463     EXPECT_EQ(SUCCESS, ret);
464     ret = sink->Start();
465     EXPECT_EQ(SUCCESS, ret);
466     ret = sink->Resume();
467     EXPECT_EQ(SUCCESS, ret);
468     ret = sink->Pause();
469     EXPECT_NE(SUCCESS, ret);
470     ret = sink->Resume();
471     EXPECT_EQ(SUCCESS, ret);
472     ret = sink->GetPresentationPosition(frame, timeSec, timeNanoSec);
473     EXPECT_EQ(SUCCESS, ret);
474     ret = sink->SetPaPower(1);
475     EXPECT_EQ(SUCCESS, ret);
476 }
477 
478 /**
479  * @tc.name  : Test Create Direct Voip Sink
480  * @tc.type  : FUNC
481  * @tc.number: DirectVoipAudioSinkCreate_001
482  * @tc.desc  : Test create direct voip sink success
483  */
484 HWTEST_F(AudioDirectSinkUnitTest, DirectVoipAudioSinkCreate_001, TestSize.Level1)
485 {
486     EXPECT_NE(nullptr, this->voipSink);
487 }
488 
489 /**
490  * @tc.name  : Test Init Direct Voip Sink
491  * @tc.type  : FUNC
492  * @tc.number: DirectVoipAudioSinkInit_001
493  * @tc.desc  : Test init direct voip sink success
494  */
495 HWTEST_F(AudioDirectSinkUnitTest, DirectVoipAudioSinkInit_001, TestSize.Level1)
496 {
497     EXPECT_NE(nullptr, this->voipSink);
498     IAudioSinkAttr attr = {};
499     attr.adapterName = SINK_ADAPTER_NAME;
500     attr.sampleRate = 48000;
501     attr.channel = 2;
502     attr.format = HdiAdapterFormat::SAMPLE_S16;
503     attr.channelLayout = 3;
504     attr.deviceType = DEVICE_TYPE_SPEAKER;
505     attr.volume = 1.0f;
506     attr.openMicSpeaker = 1;
507     int32_t ret = voipSink->Init(attr);
508     EXPECT_EQ(SUCCESS, ret);
509     float volume = 1.0f;
510     ret = voipSink->SetVolume(volume, volume);
511     EXPECT_EQ(SUCCESS, ret);
512 }
513 
514 /**
515  * @tc.name  : Test Direct Voip Sink State
516  * @tc.type  : FUNC
517  * @tc.number: DirectVoipAudioSinkState_001
518  * @tc.desc  : Test direct voip sink state success
519  */
520 HWTEST_F(AudioDirectSinkUnitTest, DirectVoipAudioSinkState_001, TestSize.Level1)
521 {
522     EXPECT_NE(nullptr, this->voipSink);
523     IAudioSinkAttr attr = {};
524     attr.adapterName = SINK_ADAPTER_NAME;
525     attr.sampleRate = 48000;
526     attr.channel = 2;
527     attr.format = HdiAdapterFormat::SAMPLE_S16;
528     attr.channelLayout = 3;
529     attr.deviceType = DEVICE_TYPE_BLUETOOTH_SCO;
530     attr.volume = 1.0f;
531     attr.openMicSpeaker = 1;
532     int32_t ret = voipSink->Init(attr);
533     EXPECT_EQ(SUCCESS, ret);
534     ret = voipSink->Start();
535     EXPECT_EQ(SUCCESS, ret);
536     ret = voipSink->Stop();
537     EXPECT_EQ(SUCCESS, ret);
538 }
539 
540 /**
541  * @tc.name  : Test Direct Voip Sink init State
542  * @tc.type  : FUNC
543  * @tc.number: DirectVoipAudioSinkState_002
544  * @tc.desc  : Test direct voip sink init state success
545  */
546 HWTEST_F(AudioDirectSinkUnitTest, DirectVoipAudioSinkState_002, TestSize.Level1)
547 {
548     EXPECT_NE(nullptr, this->voipSink);
549     IAudioSinkAttr attr = {};
550     attr.adapterName = SINK_ADAPTER_NAME;
551     attr.sampleRate = 48000;
552     attr.channel = 2;
553     attr.format = HdiAdapterFormat::SAMPLE_S16;
554     attr.channelLayout = 3;
555     attr.deviceType = DEVICE_TYPE_BLUETOOTH_SCO;
556     attr.volume = 1.0f;
557     attr.openMicSpeaker = 1;
558     bool isInited = voipSink->IsInited();
559     EXPECT_EQ(false, isInited);
560 
561     int32_t ret = voipSink->Init(attr);
562     EXPECT_EQ(SUCCESS, ret);
563 
564     isInited = voipSink->IsInited();
565     EXPECT_EQ(true, isInited);
566 
567     voipSink->DeInit();
568 
569     isInited = voipSink->IsInited();
570     EXPECT_EQ(false, isInited);
571 
572     // Continuous execution init
573     ret = voipSink->Init(attr);
574     EXPECT_EQ(SUCCESS, ret);
575     ret = voipSink->Init(attr);
576     EXPECT_EQ(SUCCESS, ret);
577     isInited = voipSink->IsInited();
578     EXPECT_EQ(true, isInited);
579 }
580 
581 /**
582  * @tc.name  : Test Direct Voip Sink Start State
583  * @tc.type  : FUNC
584  * @tc.number: DirectVoipAudioSinkState_003
585  * @tc.desc  : Test direct voip sink start state success
586  */
587 HWTEST_F(AudioDirectSinkUnitTest, DirectVoipAudioSinkState_003, TestSize.Level1)
588 {
589     EXPECT_NE(nullptr, this->voipSink);
590     IAudioSinkAttr attr = {};
591     attr.adapterName = SINK_ADAPTER_NAME;
592     attr.sampleRate = 48000;
593     attr.channel = 2;
594     attr.format = HdiAdapterFormat::SAMPLE_S16;
595     attr.channelLayout = 3;
596     attr.deviceType = DEVICE_TYPE_BLUETOOTH_SCO;
597     attr.volume = 1.0f;
598     attr.openMicSpeaker = 1;
599     int32_t ret = voipSink->Init(attr);
600     EXPECT_EQ(SUCCESS, ret);
601 
602     ret = voipSink->Start();
603     EXPECT_EQ(SUCCESS, ret);
604     ret = voipSink->Stop();
605     EXPECT_EQ(SUCCESS, ret);
606 
607     // Continuous execution start
608     ret = voipSink->Start();
609     EXPECT_EQ(SUCCESS, ret);
610     ret = voipSink->Start();
611     EXPECT_EQ(SUCCESS, ret);
612     ret = voipSink->Stop();
613     EXPECT_EQ(SUCCESS, ret);
614 }
615 
616 /**
617  * @tc.name  : Test Direct Voip Sink Resume State
618  * @tc.type  : FUNC
619  * @tc.number: DirectVoipAudioSinkState_004
620  * @tc.desc  : Test direct voip sink resume state success
621  */
622 HWTEST_F(AudioDirectSinkUnitTest, DirectVoipAudioSinkState_004, TestSize.Level1)
623 {
624     EXPECT_NE(nullptr, this->voipSink);
625     IAudioSinkAttr attr = {};
626     attr.adapterName = SINK_ADAPTER_NAME;
627     attr.sampleRate = 48000;
628     attr.channel = 2;
629     attr.format = HdiAdapterFormat::SAMPLE_S16;
630     attr.channelLayout = 3;
631     attr.deviceType = DEVICE_TYPE_BLUETOOTH_SCO;
632     attr.volume = 1.0f;
633     attr.openMicSpeaker = 1;
634     int32_t ret = voipSink->Init(attr);
635     EXPECT_EQ(SUCCESS, ret);
636     ret = voipSink->Start();
637     EXPECT_EQ(SUCCESS, ret);
638     ret = voipSink->Resume();
639     EXPECT_EQ(SUCCESS, ret);
640     ret = voipSink->Stop();
641     EXPECT_EQ(SUCCESS, ret);
642     ret = voipSink->SetPaPower(1);
643     EXPECT_EQ(SUCCESS, ret);
644 }
645 
CreateUsbAttrInfo(const std::string sinkFormat)646 std::string CreateUsbAttrInfo(const std::string sinkFormat)
647 {
648     return "sink_rate:48000;sink_format:" + sinkFormat + ";";
649 }
650 
651 /**
652  * @tc.name  : Test Usb Sink Resume State
653  * @tc.type  : FUNC
654  * @tc.number: UsbAudioSinkPreload_001
655  * @tc.desc  : Test Usb sink Preload state success
656  */
657 HWTEST_F(AudioDirectSinkUnitTest, UsbAudioSinkPreload_001, TestSize.Level1)
658 {
659     EXPECT_NE(nullptr, this->usbSink);
660     IAudioSinkAttr attr = {};
661     attr.adapterName = SINK_ADAPTER_NAME;
662     attr.sampleRate = 48000;
663     attr.channel = 2;
664     attr.format = HdiAdapterFormat::SAMPLE_S16;
665     attr.channelLayout = 3;
666     attr.deviceType = DEVICE_TYPE_BLUETOOTH_SCO;
667     attr.volume = 1.0f;
668     attr.openMicSpeaker = 1;
669     int32_t ret = usbSink->Init(attr);
670     EXPECT_EQ(SUCCESS, ret);
671     ret = usbSink->Preload(CreateUsbAttrInfo(""));
672     EXPECT_EQ(SUCCESS, ret);
673     ret = usbSink->Preload(CreateUsbAttrInfo("sAUDIO_FORMAT_PCM_16_BIT"));
674     EXPECT_EQ(SUCCESS, ret);
675     ret = usbSink->Preload(CreateUsbAttrInfo("AUDIO_FORMAT_PCM_24_BIT"));
676     EXPECT_EQ(SUCCESS, ret);
677     ret = usbSink->Preload(CreateUsbAttrInfo("AUDIO_FORMAT_PCM_32_BIT"));
678     EXPECT_EQ(SUCCESS, ret);
679     ret = usbSink->SetPaPower(1);
680     EXPECT_EQ(SUCCESS, ret);
681     ret = usbSink->SetPaPower(0);
682     EXPECT_EQ(SUCCESS, ret);
683     ret = usbSink->SetPaPower(0);
684     EXPECT_EQ(SUCCESS, ret);
685     ret = usbSink->SetPaPower(1);
686     EXPECT_EQ(SUCCESS, ret);
687 }
688 } // namespace AudioStandard
689 } // namespace OHOS