• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (c) 2024-2025 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 <fstream>
17 #include <securec.h>
18 
19 #include "hdi_adapter_factory.h"
20 #include "hpae_sink_output_node.h"
21 #include "hpae_source_input_cluster.h"
22 #include "../fuzz_utils.h"
23 
24 using namespace std;
25 using namespace OHOS::AudioStandard::HPAE;
26 
27 namespace OHOS {
28 namespace AudioStandard {
29 
30 FuzzUtils &g_fuzzUtils = FuzzUtils::GetInstance();
31 const size_t FUZZ_INPUT_SIZE_THRESHOLD = 10;
32 const uint32_t DEFAULT_FRAME_LENGTH = 960; // 20ms at 48kHz
33 const uint32_t TEST_ID = 1243;
34 typedef void (*TestPtr)();
35 
GetTestNodeInfo(HpaeNodeInfo & nodeInfo)36 static void GetTestNodeInfo(HpaeNodeInfo &nodeInfo)
37 {
38     nodeInfo.nodeId = TEST_ID;
39     nodeInfo.frameLen = DEFAULT_FRAME_LENGTH;
40     nodeInfo.samplingRate = SAMPLE_RATE_48000;
41     nodeInfo.channels = STEREO;
42     nodeInfo.format = SAMPLE_F32LE;
43 }
44 
HpaeSinkOutputNodeHandleRemoteTimingFuzzTest()45 void HpaeSinkOutputNodeHandleRemoteTimingFuzzTest()
46 {
47     HpaeNodeInfo nodeInfo;
48     GetTestNodeInfo(nodeInfo);
49     nodeInfo.deviceClass = "test_device_class";
50     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
51     if (hpaeSinkOutputNode == nullptr) {
52         return;
53     }
54     hpaeSinkOutputNode->HandleRemoteTiming();
55 }
56 
HpaeSinkOutputNodeDoProcessFuzzTest()57 void HpaeSinkOutputNodeDoProcessFuzzTest()
58 {
59     HpaeNodeInfo nodeInfo;
60     GetTestNodeInfo(nodeInfo);
61     nodeInfo.deviceClass = "test_device_class";
62     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
63     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
64     if (hpaeSinkOutputNode == nullptr) {
65         return;
66     }
67     uint32_t renderId = g_fuzzUtils.GetData<uint32_t>();
68     hpaeSinkOutputNode->audioRendererSink_ = fac.CreateRenderSink(renderId);
69     hpaeSinkOutputNode->DoProcess();
70 }
71 
HpaeSinkOutputNodeGetRenderFrameDataFuzzTest()72 void HpaeSinkOutputNodeGetRenderFrameDataFuzzTest()
73 {
74     HpaeNodeInfo nodeInfo;
75     GetTestNodeInfo(nodeInfo);
76     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
77     if (hpaeSinkOutputNode == nullptr) {
78         return;
79     }
80     hpaeSinkOutputNode->GetRenderFrameData();
81 }
82 
HpaeSinkOutputNodeResetFuzzTest()83 void HpaeSinkOutputNodeResetFuzzTest()
84 {
85     HpaeNodeInfo nodeInfo;
86     GetTestNodeInfo(nodeInfo);
87     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
88     if (hpaeSinkOutputNode == nullptr) {
89         return;
90     }
91     hpaeSinkOutputNode->Reset();
92 }
93 
HpaeSinkOutputNodeRenderSinkFlushFuzzTest()94 void HpaeSinkOutputNodeRenderSinkFlushFuzzTest()
95 {
96     HpaeNodeInfo nodeInfo;
97     GetTestNodeInfo(nodeInfo);
98     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
99     if (hpaeSinkOutputNode == nullptr) {
100         return;
101     }
102     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
103     uint32_t renderId = g_fuzzUtils.GetData<uint32_t>();
104     hpaeSinkOutputNode->audioRendererSink_ = fac.CreateRenderSink(renderId);
105     hpaeSinkOutputNode->RenderSinkFlush();
106 }
107 
HpaeSinkOutputNodeRenderSinkPauseFuzzTest()108 void HpaeSinkOutputNodeRenderSinkPauseFuzzTest()
109 {
110     HpaeNodeInfo nodeInfo;
111     GetTestNodeInfo(nodeInfo);
112     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
113     if (hpaeSinkOutputNode == nullptr) {
114         return;
115     }
116     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
117     uint32_t renderId = g_fuzzUtils.GetData<uint32_t>();
118     hpaeSinkOutputNode->audioRendererSink_ = fac.CreateRenderSink(renderId);
119     hpaeSinkOutputNode->RenderSinkPause();
120 }
121 
HpaeSinkOutputNodeRenderSinkResetFuzzTest()122 void HpaeSinkOutputNodeRenderSinkResetFuzzTest()
123 {
124     HpaeNodeInfo nodeInfo;
125     GetTestNodeInfo(nodeInfo);
126     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
127     if (hpaeSinkOutputNode == nullptr) {
128         return;
129     }
130     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
131     uint32_t renderId = g_fuzzUtils.GetData<uint32_t>();
132     hpaeSinkOutputNode->audioRendererSink_ = fac.CreateRenderSink(renderId);
133     hpaeSinkOutputNode->RenderSinkReset();
134 }
135 
HpaeSinkOutputNodeRenderSinkStartFuzzTest()136 void HpaeSinkOutputNodeRenderSinkStartFuzzTest()
137 {
138     HpaeNodeInfo nodeInfo;
139     GetTestNodeInfo(nodeInfo);
140     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
141     if (hpaeSinkOutputNode == nullptr) {
142         return;
143     }
144     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
145     uint32_t renderId = g_fuzzUtils.GetData<uint32_t>();
146     hpaeSinkOutputNode->audioRendererSink_ = fac.CreateRenderSink(renderId);
147     hpaeSinkOutputNode->RenderSinkStart();
148 }
149 
HpaeSinkOutputNodeUpdateAppsUidFuzzTest()150 void HpaeSinkOutputNodeUpdateAppsUidFuzzTest()
151 {
152     HpaeNodeInfo nodeInfo;
153     GetTestNodeInfo(nodeInfo);
154     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
155     if (hpaeSinkOutputNode == nullptr) {
156         return;
157     }
158     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
159     uint32_t renderId = g_fuzzUtils.GetData<uint32_t>();
160     hpaeSinkOutputNode->audioRendererSink_ = fac.CreateRenderSink(renderId);
161     std::vector<int32_t> appsUid;
162     int32_t uid = g_fuzzUtils.GetData<int32_t>();
163     appsUid.push_back(uid);
164     hpaeSinkOutputNode->UpdateAppsUid(appsUid);
165     hpaeSinkOutputNode->GetPreOutNum();
166 }
167 
HpaeSinkOutputNodeHandlePaPowerFuzzTest()168 void HpaeSinkOutputNodeHandlePaPowerFuzzTest()
169 {
170     HpaeNodeInfo nodeInfo;
171     GetTestNodeInfo(nodeInfo);
172     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
173     if (hpaeSinkOutputNode == nullptr) {
174         return;
175     }
176     IAudioSinkAttr attr;
177     attr.adapterName = "primary";
178     attr.openMicSpeaker = g_fuzzUtils.GetData<uint32_t>();
179     attr.format = nodeInfo.format;
180     attr.sampleRate = nodeInfo.samplingRate;
181     attr.channel = nodeInfo.channels;
182 
183     hpaeSinkOutputNode->RenderSinkInit(attr);
184     PcmBufferInfo pcmBufferInfo(0, 1, g_fuzzUtils.GetData<uint32_t>());
185     HpaePcmBuffer hpaePcmBuffer(pcmBufferInfo);
186     hpaeSinkOutputNode->isDisplayPaPowerState_ = g_fuzzUtils.GetData<bool>();
187     hpaeSinkOutputNode->HandlePaPower(&hpaePcmBuffer);
188 }
189 
HpaeSinkOutputNodeRenderSinkSetPriPaPowerFuzzTest()190 void HpaeSinkOutputNodeRenderSinkSetPriPaPowerFuzzTest()
191 {
192     HpaeNodeInfo nodeInfo;
193     GetTestNodeInfo(nodeInfo);
194     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
195     if (hpaeSinkOutputNode == nullptr) {
196         return;
197     }
198     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
199     uint32_t renderId = g_fuzzUtils.GetData<uint32_t>();
200     hpaeSinkOutputNode->audioRendererSink_ = fac.CreateRenderSink(renderId);
201     hpaeSinkOutputNode->RenderSinkSetPriPaPower();
202 }
203 
HpaeSinkOutputNodeHandleHapticParamFuzzTest()204 void HpaeSinkOutputNodeHandleHapticParamFuzzTest()
205 {
206     HpaeNodeInfo nodeInfo;
207     GetTestNodeInfo(nodeInfo);
208     std::shared_ptr<HpaeSinkOutputNode> hpaeSinkOutputNode = std::make_shared<HpaeSinkOutputNode>(nodeInfo);
209     if (hpaeSinkOutputNode == nullptr) {
210         return;
211     }
212     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
213     uint32_t renderId = g_fuzzUtils.GetData<uint32_t>();
214     hpaeSinkOutputNode->audioRendererSink_ = fac.CreateRenderSink(renderId);
215     hpaeSinkOutputNode->GetLatency();
216     uint64_t syncTime = g_fuzzUtils.GetData<uint64_t>();
217     hpaeSinkOutputNode->HandleHapticParam(syncTime);
218 }
219 
HpaeSourceInputClusterDoProcessFuzzTest()220 void HpaeSourceInputClusterDoProcessFuzzTest()
221 {
222     HpaeNodeInfo nodeInfo;
223     GetTestNodeInfo(nodeInfo);
224     std::vector<HpaeNodeInfo> nodeInfos;
225     nodeInfos.push_back(nodeInfo);
226     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster =
227         std::make_shared<HpaeSourceInputCluster>(nodeInfos);
228     if (hpaeSourceInputCluster == nullptr) {
229         return;
230     }
231     hpaeSourceInputCluster->DoProcess();
232 }
233 
HpaeSourceInputClusterResetAllFuzzTest()234 void HpaeSourceInputClusterResetAllFuzzTest()
235 {
236     HpaeNodeInfo nodeInfo;
237     GetTestNodeInfo(nodeInfo);
238     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
239     if (hpaeSourceInputCluster == nullptr) {
240         return;
241     }
242     hpaeSourceInputCluster->ResetAll();
243 }
244 
HpaeSourceInputClusterGetSharedInstanceFuzzTest()245 void HpaeSourceInputClusterGetSharedInstanceFuzzTest()
246 {
247     HpaeNodeInfo nodeInfo;
248     GetTestNodeInfo(nodeInfo);
249     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
250     if (hpaeSourceInputCluster == nullptr) {
251         return;
252     }
253     hpaeSourceInputCluster->GetSharedInstance();
254 }
255 
HpaeSourceInputClusterGetOutputPortFuzzTest()256 void HpaeSourceInputClusterGetOutputPortFuzzTest()
257 {
258     HpaeNodeInfo nodeInfo;
259     GetTestNodeInfo(nodeInfo);
260     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
261     if (hpaeSourceInputCluster == nullptr) {
262         return;
263     }
264     hpaeSourceInputCluster->GetOutputPort();
265     HpaeNodeInfo nodeInfoTest;
266     GetTestNodeInfo(nodeInfoTest);
267     bool isDisConnect = g_fuzzUtils.GetData<bool>();
268     hpaeSourceInputCluster->GetOutputPort(nodeInfoTest, isDisConnect);
269 }
270 
HpaeSourceInputClusterGetCapturerSourceInstanceFuzzTest()271 void HpaeSourceInputClusterGetCapturerSourceInstanceFuzzTest()
272 {
273     HpaeNodeInfo nodeInfo;
274     GetTestNodeInfo(nodeInfo);
275     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
276     if (hpaeSourceInputCluster == nullptr) {
277         return;
278     }
279 
280     std::string deviceClass = "test_device_class";
281     std::string deviceNetId = "test_device_net_id";
282     SourceType sourceType = g_fuzzUtils.GetData<SourceType>();
283     std::string sourceName = "test_source_name";
284 
285     hpaeSourceInputCluster->GetCapturerSourceInstance(deviceClass, deviceNetId, sourceType, sourceName);
286 }
287 
HpaeSourceInputClusterCapturerSourceInitFuzzTest()288 void HpaeSourceInputClusterCapturerSourceInitFuzzTest()
289 {
290     HpaeNodeInfo nodeInfo;
291     GetTestNodeInfo(nodeInfo);
292     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
293     if (hpaeSourceInputCluster == nullptr) {
294         return;
295     }
296 
297     IAudioSourceAttr attr;
298     hpaeSourceInputCluster->CapturerSourceInit(attr);
299 }
300 
HpaeSourceInputClusterCapturerSourcePauseFuzzTest()301 void HpaeSourceInputClusterCapturerSourcePauseFuzzTest()
302 {
303     HpaeNodeInfo nodeInfo;
304     GetTestNodeInfo(nodeInfo);
305     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
306     if (hpaeSourceInputCluster == nullptr) {
307         return;
308     }
309 
310     hpaeSourceInputCluster->CapturerSourceDeInit();
311     hpaeSourceInputCluster->CapturerSourceFlush();
312     hpaeSourceInputCluster->CapturerSourcePause();
313 }
314 
HpaeSourceInputClusterCapturerSourceStartFuzzTest()315 void HpaeSourceInputClusterCapturerSourceStartFuzzTest()
316 {
317     HpaeNodeInfo nodeInfo;
318     GetTestNodeInfo(nodeInfo);
319     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
320     if (hpaeSourceInputCluster == nullptr) {
321         return;
322     }
323 
324     hpaeSourceInputCluster->CapturerSourceReset();
325     hpaeSourceInputCluster->CapturerSourceResume();
326     hpaeSourceInputCluster->CapturerSourceStart();
327 }
328 
HpaeSourceInputClusterGetSourceInputNodeTypeFuzzTest()329 void HpaeSourceInputClusterGetSourceInputNodeTypeFuzzTest()
330 {
331     HpaeNodeInfo nodeInfo;
332     GetTestNodeInfo(nodeInfo);
333     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
334     if (hpaeSourceInputCluster == nullptr) {
335         return;
336     }
337 
338     hpaeSourceInputCluster->CapturerSourceStop();
339     hpaeSourceInputCluster->GetSourceState();
340     hpaeSourceInputCluster->GetOutputPortNum();
341     HpaeNodeInfo nodeInfoTest;
342     GetTestNodeInfo(nodeInfoTest);
343     hpaeSourceInputCluster->GetOutputPortNum(nodeInfoTest);
344     hpaeSourceInputCluster->GetSourceInputNodeType();
345 }
346 
HpaeSourceInputClusterSetSourceInputNodeTypeFuzzTest()347 void HpaeSourceInputClusterSetSourceInputNodeTypeFuzzTest()
348 {
349     HpaeNodeInfo nodeInfo;
350     GetTestNodeInfo(nodeInfo);
351     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
352     if (hpaeSourceInputCluster == nullptr) {
353         return;
354     }
355 
356     HpaeSourceInputNodeType type = g_fuzzUtils.GetData<HpaeSourceInputNodeType>();
357     hpaeSourceInputCluster->SetSourceInputNodeType(type);
358 }
359 
HpaeSourceInputClusterUpdateAppsUidAndSessionIdFuzzTest()360 void HpaeSourceInputClusterUpdateAppsUidAndSessionIdFuzzTest()
361 {
362     HpaeNodeInfo nodeInfo;
363     GetTestNodeInfo(nodeInfo);
364     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
365     if (hpaeSourceInputCluster == nullptr) {
366         return;
367     }
368 
369     int32_t uid = g_fuzzUtils.GetData<int32_t>();
370     int32_t sessionId = g_fuzzUtils.GetData<int32_t>();
371     std::vector<int32_t> appsUid;
372     appsUid.push_back(uid);
373     std::vector<int32_t> sessionsId;
374     sessionsId.push_back(sessionId);
375     hpaeSourceInputCluster->UpdateAppsUidAndSessionId(appsUid, sessionsId);
376 }
377 
HpaeSourceInputClusterGetSourceInputNodeUseCountFuzzTest()378 void HpaeSourceInputClusterGetSourceInputNodeUseCountFuzzTest()
379 {
380     HpaeNodeInfo nodeInfo;
381     GetTestNodeInfo(nodeInfo);
382     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
383     if (hpaeSourceInputCluster == nullptr) {
384         return;
385     }
386 
387     hpaeSourceInputCluster->GetConverterNodeCount();
388     hpaeSourceInputCluster->GetSourceInputNodeUseCount();
389 }
390 
HpaeSourceInputClusterWriteCapturerDataFuzzTest()391 void HpaeSourceInputClusterWriteCapturerDataFuzzTest()
392 {
393     HpaeNodeInfo nodeInfo;
394     GetTestNodeInfo(nodeInfo);
395     std::shared_ptr<HpaeSourceInputCluster> hpaeSourceInputCluster = std::make_shared<HpaeSourceInputCluster>(nodeInfo);
396     if (hpaeSourceInputCluster == nullptr) {
397         return;
398     }
399 
400     char data[] = "test_data";
401     int32_t length = strlen(data);
402     hpaeSourceInputCluster->GetCaptureId();
403     hpaeSourceInputCluster->WriteCapturerData(data, length);
404 }
405 
HpaeSourceInputNodeByVectorFuzzTest()406 void HpaeSourceInputNodeByVectorFuzzTest()
407 {
408     HpaeNodeInfo nodeInfo;
409     GetTestNodeInfo(nodeInfo);
410     std::vector<HpaeNodeInfo> nodeInfos;
411     nodeInfos.push_back(nodeInfo);
412     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfos);
413 }
414 
HpaeSourceInputNodeSetBufferValidFuzzTest()415 void HpaeSourceInputNodeSetBufferValidFuzzTest()
416 {
417     HpaeNodeInfo nodeInfo;
418     GetTestNodeInfo(nodeInfo);
419     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
420     if (hpaeSourceInputNode == nullptr) {
421         return;
422     }
423 
424     HpaeSourceBufferType bufferType = g_fuzzUtils.GetData<HpaeSourceBufferType>();
425     uint64_t replyBytes = g_fuzzUtils.GetData<uint64_t>();
426     hpaeSourceInputNode->SetBufferValid(bufferType, replyBytes);
427 }
428 
HpaeSourceInputNodeDoProcessFuzzTest()429 void HpaeSourceInputNodeDoProcessFuzzTest()
430 {
431     HpaeNodeInfo nodeInfo;
432     GetTestNodeInfo(nodeInfo);
433     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
434     if (hpaeSourceInputNode == nullptr) {
435         return;
436     }
437 
438     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
439     uint32_t captureId = g_fuzzUtils.GetData<uint32_t>();
440     hpaeSourceInputNode->audioCapturerSource_ = fac.CreateCaptureSource(captureId);
441     hpaeSourceInputNode->sourceInputNodeType_ = g_fuzzUtils.GetData<HpaeSourceInputNodeType>();
442 
443     hpaeSourceInputNode->DoProcess();
444 }
445 
HpaeSourceInputNodeCapturerSourceDeInitFuzzTest()446 void HpaeSourceInputNodeCapturerSourceDeInitFuzzTest()
447 {
448     HpaeNodeInfo nodeInfo;
449     GetTestNodeInfo(nodeInfo);
450     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
451     if (hpaeSourceInputNode == nullptr) {
452         return;
453     }
454 
455     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
456     uint32_t captureId = g_fuzzUtils.GetData<uint32_t>();
457     hpaeSourceInputNode->audioCapturerSource_ = fac.CreateCaptureSource(captureId);
458     hpaeSourceInputNode->captureId_ = g_fuzzUtils.GetData<uint32_t>();
459     hpaeSourceInputNode->sourceInputNodeType_ = g_fuzzUtils.GetData<HpaeSourceInputNodeType>();
460     if (hpaeSourceInputNode->audioCapturerSource_ == nullptr) {
461         return;
462     }
463     IAudioSourceAttr attr;
464     hpaeSourceInputNode->audioCapturerSource_->Init(attr);
465     hpaeSourceInputNode->CapturerSourceDeInit();
466 }
467 
HpaeSourceInputNodeCapturerSourceFlushFuzzTest()468 void HpaeSourceInputNodeCapturerSourceFlushFuzzTest()
469 {
470     HpaeNodeInfo nodeInfo;
471     GetTestNodeInfo(nodeInfo);
472     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
473     if (hpaeSourceInputNode == nullptr) {
474         return;
475     }
476 
477     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
478     uint32_t captureId = g_fuzzUtils.GetData<uint32_t>();
479     hpaeSourceInputNode->audioCapturerSource_ = fac.CreateCaptureSource(captureId);
480     hpaeSourceInputNode->captureId_ = g_fuzzUtils.GetData<uint32_t>();
481     hpaeSourceInputNode->sourceInputNodeType_ = g_fuzzUtils.GetData<HpaeSourceInputNodeType>();
482     if (hpaeSourceInputNode->audioCapturerSource_ == nullptr) {
483         return;
484     }
485     IAudioSourceAttr attr;
486     hpaeSourceInputNode->audioCapturerSource_->Init(attr);
487     hpaeSourceInputNode->CapturerSourceFlush();
488 }
489 
HpaeSourceInputNodeCapturerSourcePauseFuzzTest()490 void HpaeSourceInputNodeCapturerSourcePauseFuzzTest()
491 {
492     HpaeNodeInfo nodeInfo;
493     GetTestNodeInfo(nodeInfo);
494     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
495     if (hpaeSourceInputNode == nullptr) {
496         return;
497     }
498 
499     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
500     uint32_t captureId = g_fuzzUtils.GetData<uint32_t>();
501     hpaeSourceInputNode->audioCapturerSource_ = fac.CreateCaptureSource(captureId);
502     hpaeSourceInputNode->captureId_ = g_fuzzUtils.GetData<uint32_t>();
503     hpaeSourceInputNode->sourceInputNodeType_ = g_fuzzUtils.GetData<HpaeSourceInputNodeType>();
504     if (hpaeSourceInputNode->audioCapturerSource_ == nullptr) {
505         return;
506     }
507     IAudioSourceAttr attr;
508     hpaeSourceInputNode->audioCapturerSource_->Init(attr);
509     hpaeSourceInputNode->CapturerSourcePause();
510 }
511 
HpaeSourceInputNodeCapturerSourceStartFuzzTest()512 void HpaeSourceInputNodeCapturerSourceStartFuzzTest()
513 {
514     HpaeNodeInfo nodeInfo;
515     GetTestNodeInfo(nodeInfo);
516     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
517     if (hpaeSourceInputNode == nullptr) {
518         return;
519     }
520 
521     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
522     uint32_t captureId = g_fuzzUtils.GetData<uint32_t>();
523     hpaeSourceInputNode->audioCapturerSource_ = fac.CreateCaptureSource(captureId);
524     hpaeSourceInputNode->captureId_ = g_fuzzUtils.GetData<uint32_t>();
525     hpaeSourceInputNode->sourceInputNodeType_ = g_fuzzUtils.GetData<HpaeSourceInputNodeType>();
526     if (hpaeSourceInputNode->audioCapturerSource_ == nullptr) {
527         return;
528     }
529     IAudioSourceAttr attr;
530     hpaeSourceInputNode->audioCapturerSource_->Init(attr);
531     hpaeSourceInputNode->CapturerSourceStart();
532 }
533 
HpaeSourceInputNodeCapturerSourceStopFuzzTest()534 void HpaeSourceInputNodeCapturerSourceStopFuzzTest()
535 {
536     HpaeNodeInfo nodeInfo;
537     GetTestNodeInfo(nodeInfo);
538     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
539     if (hpaeSourceInputNode == nullptr) {
540         return;
541     }
542 
543     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
544     uint32_t captureId = g_fuzzUtils.GetData<uint32_t>();
545     hpaeSourceInputNode->audioCapturerSource_ = fac.CreateCaptureSource(captureId);
546     hpaeSourceInputNode->captureId_ = g_fuzzUtils.GetData<uint32_t>();
547     hpaeSourceInputNode->sourceInputNodeType_ = g_fuzzUtils.GetData<HpaeSourceInputNodeType>();
548     if (hpaeSourceInputNode->audioCapturerSource_ == nullptr) {
549         return;
550     }
551     IAudioSourceAttr attr;
552     hpaeSourceInputNode->audioCapturerSource_->Init(attr);
553     hpaeSourceInputNode->CapturerSourceStop();
554 }
555 
HpaeSourceInputNodeUpdateAppsUidAndSessionIdFuzzTest()556 void HpaeSourceInputNodeUpdateAppsUidAndSessionIdFuzzTest()
557 {
558     HpaeNodeInfo nodeInfo;
559     GetTestNodeInfo(nodeInfo);
560     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
561     if (hpaeSourceInputNode == nullptr) {
562         return;
563     }
564 
565     HdiAdapterFactory &fac = HdiAdapterFactory::GetInstance();
566     uint32_t captureId = g_fuzzUtils.GetData<uint32_t>();
567     hpaeSourceInputNode->audioCapturerSource_ = fac.CreateCaptureSource(captureId);
568     hpaeSourceInputNode->captureId_ = g_fuzzUtils.GetData<uint32_t>();
569     hpaeSourceInputNode->sourceInputNodeType_ = g_fuzzUtils.GetData<HpaeSourceInputNodeType>();
570     if (hpaeSourceInputNode->audioCapturerSource_ == nullptr) {
571         return;
572     }
573     IAudioSourceAttr attr;
574     hpaeSourceInputNode->audioCapturerSource_->Init(attr);
575     int32_t uid = g_fuzzUtils.GetData<int32_t>();
576     int32_t sessionId = g_fuzzUtils.GetData<int32_t>();
577     std::vector<int32_t> appsUid = {uid};
578     std::vector<int32_t> sessionsId = {sessionId};
579     hpaeSourceInputNode->UpdateAppsUidAndSessionId(appsUid, sessionsId);
580 }
581 
HpaeSourceInputNodeGetOutputPortNumFuzzTest()582 void HpaeSourceInputNodeGetOutputPortNumFuzzTest()
583 {
584     HpaeNodeInfo nodeInfo;
585     GetTestNodeInfo(nodeInfo);
586     std::shared_ptr<HpaeSourceInputNode> hpaeSourceInputNode = std::make_shared<HpaeSourceInputNode>(nodeInfo);
587     if (hpaeSourceInputNode == nullptr) {
588         return;
589     }
590 
591     HpaeNodeInfo nodeInfoTest;
592     GetTestNodeInfo(nodeInfoTest);
593     hpaeSourceInputNode->GetOutputPortNum(nodeInfoTest);
594 }
595 
596 vector<TestPtr> g_testPtrs = {
597     HpaeSinkOutputNodeHandleRemoteTimingFuzzTest,
598     HpaeSinkOutputNodeDoProcessFuzzTest,
599     HpaeSinkOutputNodeGetRenderFrameDataFuzzTest,
600     HpaeSinkOutputNodeResetFuzzTest,
601     HpaeSinkOutputNodeRenderSinkFlushFuzzTest,
602     HpaeSinkOutputNodeRenderSinkPauseFuzzTest,
603     HpaeSinkOutputNodeRenderSinkResetFuzzTest,
604     HpaeSinkOutputNodeRenderSinkStartFuzzTest,
605     HpaeSinkOutputNodeUpdateAppsUidFuzzTest,
606     HpaeSinkOutputNodeHandlePaPowerFuzzTest,
607     HpaeSinkOutputNodeRenderSinkSetPriPaPowerFuzzTest,
608     HpaeSinkOutputNodeHandleHapticParamFuzzTest,
609     HpaeSourceInputClusterDoProcessFuzzTest,
610     HpaeSourceInputClusterResetAllFuzzTest,
611     HpaeSourceInputClusterGetSharedInstanceFuzzTest,
612     HpaeSourceInputClusterGetOutputPortFuzzTest,
613     HpaeSourceInputClusterGetCapturerSourceInstanceFuzzTest,
614     HpaeSourceInputClusterCapturerSourceInitFuzzTest,
615     HpaeSourceInputClusterCapturerSourcePauseFuzzTest,
616     HpaeSourceInputClusterCapturerSourceStartFuzzTest,
617     HpaeSourceInputClusterGetSourceInputNodeTypeFuzzTest,
618     HpaeSourceInputClusterSetSourceInputNodeTypeFuzzTest,
619     HpaeSourceInputClusterUpdateAppsUidAndSessionIdFuzzTest,
620     HpaeSourceInputClusterGetSourceInputNodeUseCountFuzzTest,
621     HpaeSourceInputClusterWriteCapturerDataFuzzTest,
622     HpaeSourceInputNodeByVectorFuzzTest,
623     HpaeSourceInputNodeSetBufferValidFuzzTest,
624     HpaeSourceInputNodeDoProcessFuzzTest,
625     HpaeSourceInputNodeCapturerSourceDeInitFuzzTest,
626     HpaeSourceInputNodeCapturerSourceFlushFuzzTest,
627     HpaeSourceInputNodeCapturerSourcePauseFuzzTest,
628     HpaeSourceInputNodeCapturerSourceStartFuzzTest,
629     HpaeSourceInputNodeCapturerSourceStopFuzzTest,
630     HpaeSourceInputNodeUpdateAppsUidAndSessionIdFuzzTest,
631     HpaeSourceInputNodeGetOutputPortNumFuzzTest,
632 };
633 
634 } // namespace AudioStandard
635 } // namesapce OHOS
636 
637 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)638 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
639 {
640     if (size < OHOS::AudioStandard::FUZZ_INPUT_SIZE_THRESHOLD) {
641         return 0;
642     }
643 
644     OHOS::AudioStandard::g_fuzzUtils.fuzzTest(data, size, OHOS::AudioStandard::g_testPtrs);
645     return 0;
646 }