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 }