1 /*
2 * Copyright (c) 2023-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 "avsessionservice_fuzzer.h"
17
18 #include <cstddef>
19 #include <cstdint>
20 #include <fuzzer/FuzzedDataProvider.h>
21
22 #include "securec.h"
23 #include "avsession_item.h"
24 #include "avsession_errors.h"
25 #include "system_ability_definition.h"
26 #include "audio_info.h"
27 #include "avsession_service.h"
28 #include "client_death_proxy.h"
29 #include "client_death_stub.h"
30 #include "audio_info.h"
31 #include "audio_adapter.h"
32 #include "session_listener_proxy.h"
33
34 using namespace std;
35 using namespace OHOS::AudioStandard;
36 namespace OHOS {
37 namespace AVSession {
38
39 static constexpr int32_t CAST_ENGINE_SA_ID = 65546;
40 static constexpr int32_t TEST_SESSION_ID = 2;
41 static constexpr int32_t CLIENT_UID = 1;
42 static char g_testSessionTag[] = "test";
43 static char g_testAnotherBundleName[] = "testAnother.ohos.avsession";
44 static char g_testAnotherAbilityName[] = "testAnother.ability";
45 static sptr<AVSessionService> avsessionService_;
46 AppExecFwk::ElementName elementName;
47 sptr<AVSessionItem> avsessionHere_ = nullptr;
48 std::vector<OHOS::DistributedHardware::DmDeviceInfo> deviceList;
49 static const int32_t MAX_CODE_LEN = 20;
50 static const int32_t MIN_SIZE_NUM = 10;
51 static const uint8_t *RAW_DATA = nullptr;
52 static size_t g_totalSize = 0;
53 static size_t g_sizePos;
54
55 /*
56 * describe: get data from FUZZ untrusted data(RAW_DATA) which size is according to sizeof(T)
57 * tips: only support basic type
58 */
59 template<class T>
GetData()60 T GetData()
61 {
62 T object {};
63 size_t objectSize = sizeof(object);
64 if (RAW_DATA == nullptr || objectSize > g_totalSize - g_sizePos) {
65 return object;
66 }
67 errno_t ret = memcpy_s(&object, objectSize, RAW_DATA + g_sizePos, objectSize);
68 if (ret != EOK) {
69 return {};
70 }
71 g_sizePos += objectSize;
72 return object;
73 }
74
GetString()75 std::string GetString()
76 {
77 size_t objectSize = (GetData<int8_t>() % MAX_CODE_LEN) + 1;
78 if (RAW_DATA == nullptr || objectSize > g_totalSize - g_sizePos) {
79 return "OVER_SIZE";
80 }
81 char object[objectSize + 1];
82 errno_t ret = memcpy_s(object, sizeof(object), RAW_DATA + g_sizePos, objectSize);
83 if (ret != EOK) {
84 return "";
85 }
86 g_sizePos += objectSize;
87 std::string output(object);
88 return output;
89 }
90
GenerateString(size_t target_len)91 std::string GenerateString(size_t target_len)
92 {
93 if (RAW_DATA == nullptr || target_len == 0) {
94 return "";
95 }
96
97 const size_t available_len = (g_totalSize > g_sizePos) ? (g_totalSize - g_sizePos) : 0;
98 const size_t copy_len = std::min(target_len, available_len);
99 if (copy_len == 0) {
100 return "";
101 }
102
103 std::vector<char> buffer(copy_len + 1, '\n');
104
105 errno_t ret = memcpy_s(buffer.data(), buffer.size(), RAW_DATA + g_sizePos, copy_len);
106 if (ret != EOK) {
107 return "";
108 }
109
110 g_sizePos += copy_len;
111 buffer[copy_len] = '\n';
112 return std::string(buffer.data(), copy_len + 1);
113 }
114
115 template<class T>
GetArrLength(T & arr)116 uint32_t GetArrLength(T& arr)
117 {
118 if (arr == nullptr) {
119 SLOGE("%{public}s: The array length is equal to 0", __func__);
120 return 0;
121 }
122 return sizeof(arr) / sizeof(arr[0]);
123 }
124
125 typedef void (*TestFuncs[3])();
126
127 TestFuncs g_allFuncs = {
128 MockGetTrustedDeviceList,
129 AvSessionServiceTest,
130 AVSessionServiceStubRemoteRequestTest
131 };
132
FuzzTest(const uint8_t * rawData,size_t size)133 bool FuzzTest(const uint8_t* rawData, size_t size)
134 {
135 if (rawData == nullptr) {
136 return false;
137 }
138
139 // initialize data
140 RAW_DATA = rawData;
141 g_totalSize = size;
142 g_sizePos = 0;
143
144 uint32_t code = GetData<uint32_t>();
145 uint32_t len = GetArrLength(g_allFuncs);
146 if (len > 0) {
147 g_allFuncs[code % len]();
148 } else {
149 SLOGE("%{public}s: The len length is equal to 0", __func__);
150 }
151
152 return true;
153 }
154
155
156 class FuzzTestISessionListener : public ISessionListener {
157 public:
OnSessionCreate(const AVSessionDescriptor & descriptor)158 ErrCode OnSessionCreate(const AVSessionDescriptor& descriptor) override
159 {
160 return AVSESSION_SUCCESS;
161 };
162
OnSessionRelease(const AVSessionDescriptor & descriptor)163 ErrCode OnSessionRelease(const AVSessionDescriptor& descriptor) override
164 {
165 return AVSESSION_SUCCESS;
166 };
167
OnTopSessionChange(const AVSessionDescriptor & descriptor)168 ErrCode OnTopSessionChange(const AVSessionDescriptor& descriptor) override
169 {
170 return AVSESSION_SUCCESS;
171 };
172
OnAudioSessionChecked(const int32_t uid)173 ErrCode OnAudioSessionChecked(const int32_t uid) override
174 {
175 return AVSESSION_SUCCESS;
176 };
177
OnDeviceAvailable(const OutputDeviceInfo & castOutputDeviceInfo)178 ErrCode OnDeviceAvailable(const OutputDeviceInfo& castOutputDeviceInfo) override
179 {
180 return AVSESSION_SUCCESS;
181 };
182
OnDeviceLogEvent(const int32_t eventId,const int64_t param)183 ErrCode OnDeviceLogEvent(const int32_t eventId, const int64_t param) override
184 {
185 return AVSESSION_SUCCESS;
186 };
187
OnDeviceOffline(const std::string & deviceId)188 ErrCode OnDeviceOffline(const std::string& deviceId) override
189 {
190 return AVSESSION_SUCCESS;
191 };
192
OnDeviceStateChange(const DeviceState & deviceState)193 ErrCode OnDeviceStateChange(const DeviceState& deviceState) override
194 {
195 return AVSESSION_SUCCESS;
196 };
197
OnRemoteDistributedSessionChange(const std::vector<sptr<IRemoteObject>> & sessionControllers)198 ErrCode OnRemoteDistributedSessionChange(
199 const std::vector<sptr<IRemoteObject>>& sessionControllers) override
200 {
201 return AVSESSION_SUCCESS;
202 };
203
AsObject()204 sptr<IRemoteObject> AsObject() override
205 {
206 return nullptr;
207 };
208 };
209
210 template<typename T>
211 class ResourceAutoDestroy {
212 public:
ResourceAutoDestroy(T ptr)213 explicit ResourceAutoDestroy(T ptr) : ptr_(ptr)
214 {
215 }
216
~ResourceAutoDestroy()217 ~ResourceAutoDestroy()
218 {
219 if (ptr_) {
220 ptr_->Destroy();
221 }
222 }
223
224 private:
225 T ptr_;
226 };
227
MockGetTrustedDeviceList()228 void MockGetTrustedDeviceList()
229 {
230 OHOS::DistributedHardware::DmDeviceInfo localeDevice;
231 memset_s(&localeDevice, sizeof(localeDevice), 0, sizeof(localeDevice));
232 strcpy_s(localeDevice.deviceId, sizeof(localeDevice.deviceId) - 1, "<localeDeviceId>");
233 strcpy_s(localeDevice.deviceName, sizeof(localeDevice.deviceName) - 1, "<localeDeviceName>");
234
235 OHOS::DistributedHardware::DmDeviceInfo remoteDevice;
236 memset_s(&remoteDevice, sizeof(remoteDevice), 0, sizeof(remoteDevice));
237 strcpy_s(remoteDevice.deviceId, sizeof(remoteDevice.deviceId) - 1, "<remoteDeviceId>");
238 strcpy_s(remoteDevice.deviceName, sizeof(remoteDevice.deviceName) - 1, "<remoteDeviceName>");
239
240 deviceList.clear();
241 deviceList.push_back(localeDevice);
242 deviceList.push_back(remoteDevice);
243 }
244
GetDeviceInfoTest()245 void GetDeviceInfoTest()
246 {
247 if (avsessionService_ == nullptr) {
248 SLOGI("check service null, try create");
249 avsessionService_ = new AVSessionService(AVSESSION_SERVICE_ID);
250 }
251 if (avsessionService_ == nullptr) {
252 SLOGE("service is null, return");
253 return;
254 }
255 OHOS::AppExecFwk::ElementName elementName;
256 elementName.SetBundleName(g_testAnotherBundleName);
257 elementName.SetAbilityName(g_testAnotherAbilityName);
258 auto uid = GetData<int32_t>();
259 std::vector<OHOS::AudioStandard::AudioDeviceDescriptor> descriptors;
260 avsessionService_->GetDeviceInfo(avsessionHere_, descriptors, descriptors, descriptors);
261 avsessionService_->GetTrustedDevicesInfo(deviceList);
262 AudioStandard::AudioDeviceDescriptor des;
263 avsessionService_->SelectOutputDevice(uid, des);
264 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
265 avsessionHere_->Destroy();
266
267 avsessionService_->OnDump();
268 avsessionService_->OnStart();
269 avsessionService_->OnStop();
270 }
271
AvSessionServiceSystemAbilityTest(sptr<AVSessionService> service)272 void AvSessionServiceSystemAbilityTest(sptr<AVSessionService> service)
273 {
274 static std::vector<int32_t> systemAbilityIdSet {
275 MULTIMODAL_INPUT_SERVICE_ID,
276 AUDIO_POLICY_SERVICE_ID,
277 APP_MGR_SERVICE_ID,
278 DISTRIBUTED_HARDWARE_DEVICEMANAGER_SA_ID,
279 BUNDLE_MGR_SERVICE_SYS_ABILITY_ID,
280 CAST_ENGINE_SA_ID,
281 MEMORY_MANAGER_SA_ID,
282 SUBSYS_ACCOUNT_SYS_ABILITY_ID_BEGIN,
283 COMMON_EVENT_SERVICE_ID
284 };
285
286 auto randomNumber = GetData<uint32_t>();
287 int32_t systemAbilityId = systemAbilityIdSet[randomNumber % systemAbilityIdSet.size()];
288 std::string deviceId = GetString();
289 service->OnAddSystemAbility(systemAbilityId, deviceId);
290 service->OnRemoveSystemAbility(systemAbilityId, deviceId);
291 }
292
AvSessionServiceGetAVQueueInfosTest(sptr<AVSessionService> service)293 void AvSessionServiceGetAVQueueInfosTest(sptr<AVSessionService> service)
294 {
295 int32_t maxSize = GetData<int32_t>();
296 int32_t maxAppSize = GetData<int32_t>();
297 std::vector<AVQueueInfo> avQueueInfos;
298 service->GetHistoricalAVQueueInfos(maxSize, maxAppSize, avQueueInfos);
299 }
300
AvSessionServiceGetDescriptorsTest(sptr<AVSessionService> service)301 void AvSessionServiceGetDescriptorsTest(sptr<AVSessionService> service)
302 {
303 std::string systemAbilityId = GetString();
304 std::vector<AVSessionDescriptor> descriptors;
305 AVSessionDescriptor descriptor;
306 int32_t maxSize = GetData<int32_t>();
307
308 service->GetAllSessionDescriptors(descriptors);
309 service->GetSessionDescriptorsBySessionId(systemAbilityId, descriptor);
310 service->GetHistoricalSessionDescriptors(maxSize, descriptors);
311 systemAbilityId = "sessionId";
312
313 service->GetSessionDescriptorsBySessionId(systemAbilityId, descriptor);
314 }
315
AvSessionServiceAVPlaybackTest(sptr<AVSessionService> service)316 void AvSessionServiceAVPlaybackTest(sptr<AVSessionService> service)
317 {
318 std::string bundleName = GetString();
319 std::string assetId = GetString();
320 AVMetaData meta = avsessionHere_->GetMetaData();
321
322 service->StartAVPlayback(bundleName, assetId);
323 service->DoMetadataImgClean(meta);
324 }
325
CreateNewControllerForSessionTest(sptr<AVSessionService> service)326 void CreateNewControllerForSessionTest(sptr<AVSessionService> service)
327 {
328 int32_t pid = GetData<int32_t>();
329
330 service->CreateNewControllerForSession(pid, avsessionHere_);
331 service->CancelCastAudioForClientExit(pid, avsessionHere_);
332 }
333
AvSessionServiceControllerTest(sptr<AVSessionService> service)334 static void AvSessionServiceControllerTest(sptr<AVSessionService> service)
335 {
336 sptr<AVSessionItem> avSessionItem = avsessionHere_;
337 if (avSessionItem == nullptr) {
338 std::string tag = GetString();
339 int32_t type = 0;
340 std::string bundleName = GetString();
341 std::string abilityName = GetString();
342 sptr<IRemoteObject> avSessionItemObj = service->CreateSessionInner(tag, type, elementName);
343 avSessionItem = (sptr<AVSessionItem>&)avSessionItemObj;
344 if (avSessionItem == nullptr) {
345 return;
346 }
347 }
348 ResourceAutoDestroy<sptr<AVSessionItem>> avSessionItemRelease(avSessionItem);
349 service->AddAvQueueInfoToFile(*avSessionItem);
350 sptr<IRemoteObject> avControllerItemObj;
351 std::string sessionId = GetString();
352 auto ret = service->CreateControllerInner(avSessionItem->GetSessionId(), avControllerItemObj);
353 if (ret != AVSESSION_SUCCESS) {
354 return;
355 }
356 sptr<AVControllerItem> avControllerItem = (sptr<AVControllerItem>&)avControllerItemObj;
357 if (!avControllerItem) {
358 return;
359 }
360 ResourceAutoDestroy<sptr<AVControllerItem>> avControllerItemRelease(avControllerItem);
361 service->HandleControllerRelease(*avControllerItem);
362 service->HandleSessionRelease(avSessionItem->GetSessionId());
363 int32_t uid = GetData<int32_t>();
364
365 service->NotifyAudioSessionCheckTrigger(uid);
366 service->CreateControllerInner("default", avControllerItemObj);
367 }
368
AvSessionServiceCastTest(sptr<AVSessionService> service)369 static void AvSessionServiceCastTest(sptr<AVSessionService> service)
370 {
371 sptr<AVSessionItem> avSessionItem = avsessionHere_;
372 if (avSessionItem == nullptr) {
373 std::string tag = GetString();
374 int32_t type = 0;
375 std::string bundleName = GetString();
376 std::string abilityName = GetString();
377 sptr<IRemoteObject> avSessionItemObj = service->CreateSessionInner(tag, type, elementName);
378 avSessionItem = (sptr<AVSessionItem>&)avSessionItemObj;
379 if (avSessionItem == nullptr) {
380 return;
381 }
382 }
383 SessionToken token;
384 token.sessionId = avSessionItem->GetSessionId();
385 token.pid = GetData<int32_t>();
386 token.uid = GetData<int32_t>();
387
388 std::vector<AudioStandard::AudioDeviceDescriptor> audioDeviceDescriptors;
389 AudioStandard::AudioDeviceDescriptor descriptor;
390 descriptor.deviceType_ = OHOS::AudioStandard::DEVICE_TYPE_WIRED_HEADSET;
391 audioDeviceDescriptors.push_back(descriptor);
392 OutputDeviceInfo outputDeviceInfo;
393 OHOS::AVSession::DeviceInfo deviceInfo;
394 deviceInfo.castCategory_ = 1;
395 deviceInfo.deviceId_ = "deviceId";
396 outputDeviceInfo.deviceInfos_.push_back(deviceInfo);
397 service->CastAudio(token, audioDeviceDescriptors);
398 if (audioDeviceDescriptors.empty()) {
399 audioDeviceDescriptors.emplace_back();
400 }
401 std::string sourceSessionInfo = "SOURCE";
402 service->CastAudioForAll(audioDeviceDescriptors);
403 service->CastAudioProcess(audioDeviceDescriptors, sourceSessionInfo, avsessionHere_);
404 service->CastAudioInner(audioDeviceDescriptors, sourceSessionInfo, avsessionHere_);
405 service->CancelCastAudioInner(audioDeviceDescriptors, sourceSessionInfo, avsessionHere_);
406 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
407 service->StartCast(token, outputDeviceInfo);
408 service->StopCast(token);
409
410 std::string info = GetString();
411 service->SplitExtraInfo(info);
412 bool enable = GetData<bool>();
413 service->checkEnableCast(enable);
414 service->setInCast(enable);
415 #endif
416 }
417
418
AVSessionServiceSendSystemControlCommandTest(sptr<AVSessionService> service)419 void AVSessionServiceSendSystemControlCommandTest(sptr<AVSessionService> service)
420 {
421 AVControlCommand command;
422 command.SetCommand(GetData<int32_t>());
423 service->SendSystemControlCommand(command);
424 sptr<FuzzTestISessionListener> listener = new FuzzTestISessionListener();
425 service->RegisterSessionListener(listener);
426 service->RegisterSessionListenerForAllUsers(listener);
427 }
428
AvSessionServiceClientTest(sptr<AVSessionService> service)429 void AvSessionServiceClientTest(sptr<AVSessionService> service)
430 {
431 int32_t pid = GetData<int32_t>();
432 int32_t uid = GetData<int32_t>();
433 service->OnClientDied(pid, uid);
434
435 sptr<IClientDeath> clientDeath = new ClientDeathStub();
436 auto func = []() {};
437 sptr<ClientDeathRecipient> recipient = new ClientDeathRecipient(func);
438 std::vector<AVSessionDescriptor> descriptors;
439 AVSessionDescriptor descriptor;
440 service->AddClientDeathObserver(pid, clientDeath, recipient);
441 service->RegisterClientDeathObserver(clientDeath);
442
443 service->NotifyTopSessionChanged(descriptor);
444 service->CreateWantAgent(&descriptor);
445 }
446
AvSessionServiceHandleEventTest(sptr<AVSessionService> service)447 void AvSessionServiceHandleEventTest(sptr<AVSessionService> service)
448 {
449 std::string sessionId = GetString();
450 service->HandleSessionRelease(sessionId);
451 service->HandleCallStartEvent();
452
453 int32_t fd = GetData<int32_t>();
454 string strArg = GetString();
455 std::u16string u16strArg(strArg.begin(), strArg.end());
456 std::vector<std::u16string> args;
457 args.emplace_back(u16strArg);
458 service->Dump(fd, args);
459 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
460 OutputDeviceInfo outputDeviceInfo;
461 OHOS::AVSession::DeviceInfo deviceInfo;
462 deviceInfo.castCategory_ = 1;
463 deviceInfo.deviceId_ = "deviceId";
464 outputDeviceInfo.deviceInfos_.push_back(deviceInfo);
465 avsessionService_->NotifyDeviceAvailable(outputDeviceInfo);
466 avsessionService_->UpdateTopSession(avsessionHere_);
467 avsessionService_->NotifyMirrorToStreamCast();
468 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
469
470 static std::vector<DeviceLogEventCode> eventIds {
471 DEVICE_LOG_FULL,
472 DEVICE_LOG_EXCEPTION
473 };
474 uint32_t randomNumber = GetData<uint32_t>();
475 auto eventId = eventIds[randomNumber % eventIds.size()];
476 int64_t param = GetData<int64_t>();
477 avsessionService_->NotifyDeviceLogEvent(eventId, param);
478
479 std::string deviceId = GetString();
480 avsessionService_->NotifyDeviceOffline(deviceId);
481 avsessionService_->IsMirrorToStreamCastAllowed(avsessionHere_);
482 #endif
483 }
484
AvSessionServiceSuperLauncherTest001(sptr<AVSessionService> service)485 void AvSessionServiceSuperLauncherTest001(sptr<AVSessionService> service)
486 {
487 vector<string> states { "UNKNOWN", "IDLE", "CONNECTING" };
488 vector<string> serviceNames {"Unknown", "SuperLauncher-Dual", "HuaweiCast" };
489 auto randomNumber = GetData<uint32_t>();
490 std::string serviceName = serviceNames[randomNumber % serviceNames.size()];
491 std::string state = states[randomNumber % states.size()];
492 std::string deviceId = GetString();
493 std::string extraInfo = GetString();
494 service->SuperLauncher(deviceId, serviceName, extraInfo, state);
495 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
496 avsessionService_->NotifyMirrorToStreamCast();
497 #endif
498
499 std::string deviceId2 = GetString();
500 std::string serviceName2 = serviceNames[randomNumber % serviceNames.size()];
501 std::string extraInfo2 = GetString();
502 service->SuperLauncher(deviceId2, serviceName2, extraInfo2, state);
503 service->ReleaseSuperLauncher(serviceName);
504 service->ConnectSuperLauncher(deviceId, serviceName);
505 service->SucceedSuperLauncher(deviceId, extraInfo);
506 }
507
StartDefaultAbilityByCall001()508 void StartDefaultAbilityByCall001()
509 {
510 SLOGI("StartDefaultAbilityByCall001 begin!");
511 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
512 avsessionService_->UpdateTopSession(avsessionHere_);
513 avsessionService_->NotifyMirrorToStreamCast();
514 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
515 avsessionService_->is2in1_ = true;
516 avsessionService_->MirrorToStreamCast(avsessionHere_);
517 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
518 #endif
519 AudioRendererChangeInfo info = {};
520 info.clientUID = avsessionHere_->GetUid();
521
522 std::shared_ptr<AudioRendererChangeInfo> info_ = std::make_shared<AudioRendererChangeInfo>();
523 info_->clientUID = CLIENT_UID;
524 info_->sessionId = TEST_SESSION_ID;
525 info_->rendererState = RendererState::RENDERER_RELEASED;
526 AudioRendererChangeInfos infos;
527 infos.push_back(std::move(info_));
528 avsessionService_->SelectSessionByUid(info);
529 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
530 avsessionService_->SaveSessionInfoInFile(avsessionHere_->GetSessionId(),
531 "audio", elementName);
532 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
533 std::string sessionId = GetString();
534 avsessionService_->SaveSessionInfoInFile(avsessionHere_->GetSessionId(),
535 "audio", elementName);
536 avsessionService_->StartDefaultAbilityByCall(sessionId);
537 std::vector<AVQueueInfo> avQueueInfos_;
538 avsessionService_->GetHistoricalAVQueueInfos(0, 0, avQueueInfos_);
539 info = {};
540 info.clientUID = avsessionHere_->GetUid();
541 }
542
StartAVPlayback001()543 void StartAVPlayback001()
544 {
545 SLOGI("StartAVPlayback001 begin!");
546 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
547 avsessionService_->is2in1_ = true;
548 avsessionService_->MirrorToStreamCast(avsessionHere_);
549 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
550 #endif
551 avsessionService_->AddAvQueueInfoToFile(*avsessionHere_);
552 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
553 vector<string> assetNames { "FAKE_ASSET_NAME1", "FAKE_ASSET_NAME2" };
554 auto randomNumber = GetData<uint32_t>();
555 std::string assetName = assetNames[randomNumber % assetNames.size()];
556 avsessionService_->StartAVPlayback(g_testAnotherBundleName, assetName);
557
558 cJSON* value = cJSON_CreateObject();
559 if (value == nullptr) {
560 SLOGE("get value nullptr");
561 } else {
562 if (cJSON_IsInvalid(value)) {
563 SLOGE("get value invalid");
564 cJSON_Delete(value);
565 value = nullptr;
566 } else {
567 cJSON_AddStringToObject(value, "bundleName", g_testAnotherBundleName);
568 }
569 }
570
571 avsessionService_->GetSubNode(value, "FAKE_NAME");
572 avsessionService_->DeleteHistoricalRecord(g_testAnotherBundleName);
573 std::vector<std::u16string> argsList;
574 avsessionService_->Dump(1, argsList);
575
576 cJSON_Delete(value);
577 value = nullptr;
578 SLOGI("StartAVPlayback001 end!");
579 }
580
ReportStartCastBegin001()581 void ReportStartCastBegin001()
582 {
583 SLOGI("ReportStartCastBegin001 begin!");
584 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
585 avsessionService_->is2in1_ = false;
586 avsessionService_->MirrorToStreamCast(avsessionHere_);
587 avsessionService_->HandleSessionRelease(avsessionHere_->GetSessionId());
588 #endif
589 std::string sourceSessionInfo = "SOURCE";
590 std::string sinkSessionInfo = " SINK";
591 avsessionService_->ProcessCastAudioCommand(
592 OHOS::AVSession::AVSessionServiceStub::RemoteServiceCommand::COMMAND_CAST_AUDIO,
593 sourceSessionInfo, sinkSessionInfo);
594 OutputDeviceInfo outputDeviceInfo;
595 std::string func = GetString();
596 auto uid = GetData<int32_t>();
597 avsessionService_->ReportStartCastBegin(func, outputDeviceInfo, uid);
598 SLOGI("ReportStartCastBegin001 end!");
599 }
600
ReportStartCastEnd001()601 void ReportStartCastEnd001()
602 {
603 SLOGI("ReportStartCastEnd001 begin!");
604 std::string sourceSessionInfo = "SOURCE";
605 std::string sinkSessionInfo = " SINK";
606 avsessionService_->ProcessCastAudioCommand(
607 OHOS::AVSession::AVSessionServiceStub::RemoteServiceCommand::COMMAND_CANCEL_CAST_AUDIO,
608 sourceSessionInfo, sinkSessionInfo);
609 OutputDeviceInfo outputDeviceInfo;
610 int32_t ret = AVSESSION_SUCCESS;
611 std::string func = GetString();
612 auto uid = GetData<int32_t>();
613 avsessionService_->ReportStartCastEnd(func, outputDeviceInfo, uid, ret);
614 SLOGI("ReportStartCastEnd001 end!");
615 }
616
ReportStartCastEnd002()617 void ReportStartCastEnd002()
618 {
619 SLOGI("ReportStartCastEnd002 begin!");
620 OutputDeviceInfo outputDeviceInfo;
621 int32_t ret = AVSESSION_ERROR;
622 std::string func = GetString();
623 auto uid = GetData<int32_t>();
624 avsessionService_->ReportStartCastEnd(func, outputDeviceInfo, uid, ret);
625 SLOGI("ReportStartCastEnd002 end!");
626 }
627
ConvertKeyCodeToCommand001()628 void ConvertKeyCodeToCommand001()
629 {
630 auto keyCode = GetData<int32_t>();
631 avsessionService_->ConvertKeyCodeToCommand(keyCode);
632 std::vector<std::shared_ptr<AudioDeviceDescriptor>> audioDeviceDescriptors;
633 std::shared_ptr<AudioDeviceDescriptor> descriptor = std::make_shared<AudioDeviceDescriptor>();
634 descriptor->deviceType_ = OHOS::AudioStandard::DEVICE_TYPE_WIRED_HEADSET;
635 audioDeviceDescriptors.push_back(descriptor);
636 }
637
GetTrustedDeviceName001()638 void GetTrustedDeviceName001()
639 {
640 SLOGI("GetTrustedDeviceName001 begin!");
641 auto keyEvent = OHOS::MMI::KeyEvent::Create();
642 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HOME);
643 keyEvent->SetActionTime(1);
644 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_CANCEL);
645 avsessionService_->SendSystemAVKeyEvent(*(keyEvent.get()));
646 std::string networkId = "networkId";
647 std::string deviceName = GetString();
648 avsessionService_->GetTrustedDeviceName(networkId, deviceName);
649
650 deviceName = "LocalDevice";
651 avsessionService_->GetTrustedDeviceName(networkId, deviceName);
652 networkId = "networkId";
653 std::string deviceId = "deviceId";
654 avsessionService_->GetService(deviceId);
655 std::vector<AudioStandard::AudioDeviceDescriptor> castAudioDescriptors;
656 AudioStandard::AudioDeviceDescriptor des;
657 castAudioDescriptors.push_back(des);
658 avsessionService_->SetDeviceInfo(castAudioDescriptors, avsessionHere_);
659 avsessionService_->CastAudioForNewSession(avsessionHere_);
660 SLOGI("GetTrustedDeviceName001 end!");
661 }
662
CheckInterfaceTokenTest()663 void CheckInterfaceTokenTest()
664 {
665 constexpr size_t maxRawDataSize = 128 * 1024 * 1024;
666 constexpr size_t maxTokenSize = 32;
667 FuzzedDataProvider provider(RAW_DATA, min(maxRawDataSize >> 1, g_totalSize));
668 MessageParcel dataMessageParcel;
669 std::u16string token;
670 if (provider.remaining_bytes() < (maxTokenSize << 1)) {
671 token = u"";
672 }
673 token.resize(maxTokenSize);
674 for (size_t i = 0; i < maxTokenSize; ++i) {
675 uint16_t charVal = provider.ConsumeIntegral<uint16_t>();
676 token[i] = static_cast<char16_t>(charVal);
677 }
678 dataMessageParcel.WriteInterfaceToken(token);
679 avsessionService_->CheckInterfaceToken(dataMessageParcel);
680 }
681
GetAVQueueInfosImgLengthTest()682 void GetAVQueueInfosImgLengthTest()
683 {
684 std::vector<AVQueueInfo> avQueueInfos;
685 AVQueueInfo avQueueInfo1;
686 avQueueInfos.push_back(avQueueInfo1);
687
688 std::shared_ptr<AVSessionPixelMap> avQueuePixelMap = std::make_shared<AVSessionPixelMap>();
689 std::vector<uint8_t> imgBuffer = {1, 1, 0, 1, 1};
690 avQueuePixelMap->SetInnerImgBuffer(imgBuffer);
691 AVQueueInfo avQueueInfo2;
692 avQueueInfo2.avQueueImage_ = avQueuePixelMap;
693 avQueueInfos.push_back(avQueueInfo1);
694 avsessionService_->GetAVQueueInfosImgLength(avQueueInfos);
695 }
696
HandleRegisterSessionListenerTest()697 void HandleRegisterSessionListenerTest()
698 {
699 MessageParcel data;
700 MessageParcel reply;
701 OHOS::sptr<IRemoteObject> iRemoteObject;
702 auto sessionListenerProxy = std::make_shared<SessionListenerProxy>(iRemoteObject);
703 data.WriteRemoteObject(sessionListenerProxy->AsObject());
704 avsessionService_->HandleRegisterSessionListener(data, reply);
705 }
706
HandleRegisterSessionListenerForAllUsersTest()707 void HandleRegisterSessionListenerForAllUsersTest()
708 {
709 MessageParcel data;
710 MessageParcel reply;
711 OHOS::sptr<IRemoteObject> iRemoteObject;
712 auto sessionListenerProxy = std::make_shared<SessionListenerProxy>(iRemoteObject);
713 data.WriteRemoteObject(sessionListenerProxy->AsObject());
714 avsessionService_->HandleRegisterSessionListenerForAllUsers(data, reply);
715 }
716
HandleRegisterClientDeathObserverTest()717 void HandleRegisterClientDeathObserverTest()
718 {
719 MessageParcel data;
720 MessageParcel reply;
721 OHOS::sptr<IRemoteObject> iRemoteObject;
722 auto clientDeathProxy = std::make_shared<ClientDeathProxy>(iRemoteObject);
723 data.WriteRemoteObject(clientDeathProxy->AsObject());
724 avsessionService_->HandleRegisterClientDeathObserver(data, reply);
725 }
726
OnStartProcessTest()727 void OnStartProcessTest()
728 {
729 avsessionService_->OnStartProcess();
730 }
731
OnIdleTest()732 void OnIdleTest()
733 {
734 SystemAbilityOnDemandReason reason;
735 avsessionService_->OnIdle(reason);
736 }
737
OnActiveTest()738 void OnActiveTest()
739 {
740 SystemAbilityOnDemandReason reason;
741 avsessionService_->OnActive(reason);
742 }
743
HandleRemoveMediaCardEventTest()744 void HandleRemoveMediaCardEventTest()
745 {
746 SystemAbilityOnDemandReason reason;
747 avsessionService_->HandleRemoveMediaCardEvent();
748 }
749
IsTopSessionPlayingTest()750 void IsTopSessionPlayingTest()
751 {
752 avsessionService_->IsTopSessionPlaying();
753 }
754
HandleMediaCardStateChangeEventTest()755 void HandleMediaCardStateChangeEventTest()
756 {
757 const string isAppear[] = {"APPEAR", "DISAPPEAR", GetString()};
758 const uint32_t isAppearSize = 3;
759 avsessionService_->HandleMediaCardStateChangeEvent(isAppear[GetData<uint32_t>() % isAppearSize]);
760
761 int32_t userId = GetData<int32_t>();
762 avsessionService_->RegisterBundleDeleteEventForHistory(userId);
763 }
764
PullMigrateStubTest()765 void PullMigrateStubTest()
766 {
767 avsessionService_->PullMigrateStub();
768 }
769
InitCollaborationTest()770 void InitCollaborationTest()
771 {
772 avsessionService_->InitCollaboration();
773 }
774
InitCastEngineServiceTest()775 void InitCastEngineServiceTest()
776 {
777 avsessionService_->InitCastEngineService();
778 }
779
LowQualityCheckTest()780 void LowQualityCheckTest()
781 {
782 StreamUsage usage = static_cast<StreamUsage>(GetData<int32_t>() % StreamUsage::STREAM_USAGE_MAX);
783 RendererState state = static_cast<RendererState>(GetData<uint32_t>() % RendererState::RENDERER_PAUSED -
784 RendererState::RENDERER_PREPARED);
785 std::string abilityName = GetString();
786 int32_t uid = GetData<int32_t>();
787 int32_t pid = GetData<int32_t>();
788 if (avsessionHere_ == nullptr) {
789 return;
790 }
791 avsessionHere_->SetUid(uid);
792 avsessionHere_->SetPid(pid);
793 AVSessionService::GetContainer().AddSession(pid, abilityName, avsessionHere_);
794 avsessionService_->LowQualityCheck(uid, pid, usage, state);
795 avsessionService_->PlayStateCheck(uid, usage, state);
796 avsessionService_->NotifyBackgroundReportCheck(uid, pid, usage, state);
797 avsessionService_->CheckAncoAudio();
798 }
799
StartAVPlaybackTest()800 void StartAVPlaybackTest()
801 {
802 string bundleName = GetString();
803 string assetId = GetString();
804 string deviceId = GetString();
805 avsessionService_->StartAVPlayback(bundleName, assetId, deviceId);
806 }
807
IsHistoricalSessionTest()808 void IsHistoricalSessionTest()
809 {
810 string sessionId = GetString();
811 avsessionService_->IsHistoricalSession(sessionId);
812 }
813
StartDefaultAbilityByCallTest()814 void StartDefaultAbilityByCallTest()
815 {
816 string sessionId = GetString();
817 avsessionService_->StartDefaultAbilityByCall(sessionId);
818 }
819
SendSystemAVKeyEventTest()820 void SendSystemAVKeyEventTest()
821 {
822 MMI::KeyEvent keyEvent = static_cast<MMI::KeyEvent>(GetData<int32_t>());
823 AAFwk::Want wantParam;
824 avsessionService_->SendSystemAVKeyEvent(keyEvent, wantParam);
825 }
826
827 class FuzzSessionListener : public SessionListener {
828 public:
OnSessionCreate(const AVSessionDescriptor & descriptor)829 void OnSessionCreate(const AVSessionDescriptor& descriptor) override
830 {
831 SLOGI("sessionId=%{public}s created", descriptor.sessionId_.c_str());
832 }
833
OnSessionRelease(const AVSessionDescriptor & descripter)834 void OnSessionRelease(const AVSessionDescriptor& descripter) override
835 {
836 SLOGI("sessionId=%{public}s released", descripter.sessionId_.c_str());
837 }
838
OnTopSessionChange(const AVSessionDescriptor & descriptor)839 void OnTopSessionChange(const AVSessionDescriptor& descriptor) override
840 {
841 SLOGI("sessionId=%{public}s be top session", descriptor.sessionId_.c_str());
842 }
843
OnAudioSessionChecked(const int32_t uid)844 void OnAudioSessionChecked(const int32_t uid) override
845 {
846 SLOGI("uid=%{public}d checked", uid);
847 }
848 };
849
handleusereventTest(sptr<AVSessionService> service)850 void handleusereventTest(sptr<AVSessionService> service)
851 {
852 FuzzSessionListener listener;
853 avsessionService_->AddInnerSessionListener(&listener);
854 avsessionService_->RemoveInnerSessionListener(&listener);
855 OHOS::EventFwk::CommonEventData eventData;
856 string action = OHOS::EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_ON;
857 OHOS::AAFwk::Want want = eventData.GetWant();
858 want.SetAction(action);
859 eventData.SetWant(want);
860 OHOS::EventFwk::MatchingSkills matchingSkills;
861 OHOS::EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
862 EventSubscriber eventSubscriber(subscriberInfo, avsessionService_);
863 eventSubscriber.OnReceiveEvent(eventData);
864 auto userId = GetData<int32_t>();
865 std::string type = GetString();
866 service->HandleUserEvent(type, userId);
867 }
868
869
OnReceiveEventTest(sptr<AVSessionService> service)870 void OnReceiveEventTest(sptr<AVSessionService> service)
871 {
872 const string actions[] = {
873 EventFwk::CommonEventSupport::COMMON_EVENT_USER_FOREGROUND,
874 EventFwk::CommonEventSupport::COMMON_EVENT_USER_SWITCHED,
875 EventFwk::CommonEventSupport::COMMON_EVENT_USER_REMOVED,
876 EventFwk::CommonEventSupport::COMMON_EVENT_USER_UNLOCKED,
877 EventFwk::CommonEventSupport::COMMON_EVENT_BOOT_COMPLETED,
878 EventFwk::CommonEventSupport::COMMON_EVENT_LOCKED_BOOT_COMPLETED,
879 GetString()
880 };
881 FuzzSessionListener listener;
882 avsessionService_->AddInnerSessionListener(&listener);
883 avsessionService_->RemoveInnerSessionListener(&listener);
884 OHOS::EventFwk::CommonEventData eventData;
885 string action = actions[GetData<uint32_t>() % 7];
886 OHOS::AAFwk::Want want = eventData.GetWant();
887 want.SetAction(action);
888 eventData.SetWant(want);
889 OHOS::EventFwk::MatchingSkills matchingSkills;
890 OHOS::EventFwk::CommonEventSubscribeInfo subscriberInfo(matchingSkills);
891 EventSubscriber eventSubscriber(subscriberInfo, avsessionService_);
892 eventSubscriber.OnReceiveEvent(eventData);
893 }
894
HandleKeyEventTest()895 void HandleKeyEventTest()
896 {
897 auto keyEvent = OHOS::MMI::KeyEvent::Create();
898 keyEvent->SetKeyCode(OHOS::MMI::KeyEvent::KEYCODE_HOME);
899 keyEvent->SetActionTime(1);
900 keyEvent->SetKeyAction(OHOS::MMI::KeyEvent::KEY_ACTION_CANCEL);
901 avsessionService_->HandleKeyEvent(*(keyEvent.get()));
902 }
903
GetAVCastControllerInnerTest(sptr<AVSessionService> service)904 void GetAVCastControllerInnerTest(sptr<AVSessionService> service)
905 {
906 sptr<IRemoteObject> avControllerItemObj;
907 std::string sessionId = GetString();
908
909 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
910 service->GetAVCastControllerInner(sessionId, avControllerItemObj);
911 #endif
912 }
913
CastSessionTest(sptr<AVSessionService> service)914 void CastSessionTest(sptr<AVSessionService> service)
915 {
916 auto castHandle = GetData<int64_t>();
917
918 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
919 service->CreateSessionByCast(castHandle);
920 service->ReleaseCastSession();
921 #endif
922 }
923
GetAVQueueDirTest(sptr<AVSessionService> service)924 void GetAVQueueDirTest(sptr<AVSessionService> service)
925 {
926 int32_t userId = GetData<int32_t>();
927 std::string dirPath = service->GetAVQueueDir(userId);
928 SLOGI("GetAVQueueDirTest dirPath=%{public}s", dirPath.c_str());
929 }
930
GetAVSortDirTest(sptr<AVSessionService> service)931 void GetAVSortDirTest(sptr<AVSessionService> service)
932 {
933 int32_t userId = GetData<int32_t>();
934 std::string dirPath = service->GetAVSortDir(userId);
935 SLOGI("GetAVSortDirTest dirPath=%{public}s", dirPath.c_str());
936 }
937
NotifyMigrateStopTest(sptr<AVSessionService> service)938 void NotifyMigrateStopTest(sptr<AVSessionService> service)
939 {
940 std::string deviceId = GetString();
941 service->NotifyMigrateStop(deviceId);
942 }
943
ProcessTargetMigrateTest(sptr<AVSessionService> service)944 void ProcessTargetMigrateTest(sptr<AVSessionService> service)
945 {
946 OHOS::DistributedHardware::DmDeviceInfo deviceInfo;
947 memset_s(&deviceInfo, sizeof(deviceInfo), 0, sizeof(deviceInfo));
948 constexpr size_t DEVICE_ID_MAX_LEN = sizeof(deviceInfo.deviceId) - 1;
949 std::string deviceId = GenerateString(DEVICE_ID_MAX_LEN);
950 strncpy_s(deviceInfo.deviceId, sizeof(deviceInfo.deviceId),
951 deviceId.c_str(), deviceId.length());
952
953 constexpr size_t DEVICE_NAME_MAX_LEN = sizeof(deviceInfo.deviceName) - 1;
954 std::string deviceName = GenerateString(DEVICE_NAME_MAX_LEN);
955 strncpy_s(deviceInfo.deviceName, sizeof(deviceInfo.deviceName),
956 deviceName.c_str(), deviceName.length());
957
958 deviceInfo.deviceTypeId = GetData<uint16_t>();
959
960 constexpr size_t NETWORK_ID_MAX_LEN = sizeof(deviceInfo.networkId) - 1;
961 std::string networkId = GenerateString(NETWORK_ID_MAX_LEN);
962 strncpy_s(deviceInfo.networkId, sizeof(deviceInfo.networkId),
963 networkId.c_str(), networkId.length());
964 deviceInfo.range = GetData<int32_t>();
965 deviceInfo.networkType = GetData<int32_t>();
966 static std::vector<OHOS::DistributedHardware::DmAuthForm> authForms {
967 OHOS::DistributedHardware::DmAuthForm::INVALID_TYPE,
968 OHOS::DistributedHardware::DmAuthForm::PEER_TO_PEER,
969 OHOS::DistributedHardware::DmAuthForm::IDENTICAL_ACCOUNT,
970 OHOS::DistributedHardware::DmAuthForm::ACROSS_ACCOUNT
971 };
972 auto randomNumber = GetData<uint32_t>();
973 deviceInfo.authForm = authForms[randomNumber % authForms.size()];
974 deviceInfo.extraData = GetString();
975 bool isOnline = GetData<bool>();
976 service->ProcessTargetMigrate(isOnline, deviceInfo);
977 }
978
NotifyRemoteBundleChangeTest(sptr<AVSessionService> service)979 void NotifyRemoteBundleChangeTest(sptr<AVSessionService> service)
980 {
981 std::string bundleName = GetString();
982 service->NotifyRemoteBundleChange(bundleName);
983 }
984
AbilityHasSessionTest(sptr<AVSessionService> service)985 void AbilityHasSessionTest(sptr<AVSessionService> service)
986 {
987 std::vector<pid_t> pids {
988 GetData<int32_t>(),
989 getpid()
990 };
991 auto randomNumber = GetData<uint32_t>();
992 service->AbilityHasSession(pids[randomNumber % pids.size()]);
993 }
994
GetPresentControllerTest(sptr<AVSessionService> service)995 void GetPresentControllerTest(sptr<AVSessionService> service)
996 {
997 pid_t pid = GetData<pid_t>();
998 std::string sessionId = GetString();
999 service->GetPresentController(pid, sessionId);
1000 }
1001
StartAbilityByCallTest()1002 void StartAbilityByCallTest()
1003 {
1004 FuzzedDataProvider provider(RAW_DATA, g_totalSize);
1005
1006 std::string sessionIdNeeded = provider.ConsumeRandomLengthString();
1007 std::string sessionId;
1008 avsessionService_->StartAbilityByCall(sessionIdNeeded, sessionId);
1009 avsessionService_->IsCapsuleNeeded();
1010 avsessionService_->NotifyFlowControl();
1011 int32_t uid = provider.ConsumeIntegral<int32_t>();
1012 avsessionService_->CreateNftRemoveWant(uid);
1013 }
1014
CallbackTest()1015 void CallbackTest()
1016 {
1017 FuzzedDataProvider provider(RAW_DATA, g_totalSize);
1018 if (avsessionHere_ == nullptr) {
1019 return;
1020 }
1021
1022 DeviceInfo deviceInfo;
1023 bool isNeedRemove = provider.ConsumeBool();
1024 avsessionHere_->DealDisconnect(deviceInfo, isNeedRemove);
1025
1026 AVMetaData meta;
1027 shared_ptr<AVSessionPixelMap> mediaImage = std::make_shared<AVSessionPixelMap>();
1028 meta.SetMediaImage(mediaImage);
1029 avsessionHere_->isMediaChange_ = true;
1030 avsessionHere_->CheckUseAVMetaData(meta);
1031 avsessionHere_->isDestroyed_ = false;
1032 avsessionHere_->Destroy();
1033 }
1034
AvSessionServiceTest001()1035 void AvSessionServiceTest001()
1036 {
1037 GetDeviceInfoTest();
1038 StartDefaultAbilityByCall001();
1039 StartAVPlayback001();
1040 ReportStartCastBegin001();
1041 ReportStartCastEnd001();
1042 ReportStartCastEnd002();
1043 GetTrustedDeviceName001();
1044 CheckInterfaceTokenTest();
1045 GetAVQueueInfosImgLengthTest();
1046 HandleRegisterSessionListenerTest();
1047 HandleRegisterSessionListenerForAllUsersTest();
1048 HandleRegisterClientDeathObserverTest();
1049 OnStartProcessTest();
1050 OnIdleTest();
1051 OnActiveTest();
1052 HandleRemoveMediaCardEventTest();
1053 IsTopSessionPlayingTest();
1054 HandleMediaCardStateChangeEventTest();
1055 InitCollaborationTest();
1056 InitCastEngineServiceTest();
1057 LowQualityCheckTest();
1058 StartAVPlaybackTest();
1059 IsHistoricalSessionTest();
1060 StartDefaultAbilityByCallTest();
1061 SendSystemAVKeyEventTest();
1062 HandleKeyEventTest();
1063 StartAbilityByCallTest();
1064 CallbackTest();
1065 }
1066
AvSessionServiceTest002(sptr<AVSessionService> service)1067 void AvSessionServiceTest002(sptr<AVSessionService> service)
1068 {
1069 GetAVCastControllerInnerTest(service);
1070 CastSessionTest(service);
1071 GetAVQueueDirTest(service);
1072 GetAVSortDirTest(service);
1073 NotifyMigrateStopTest(service);
1074 ProcessTargetMigrateTest(service);
1075 NotifyRemoteBundleChangeTest(service);
1076 AbilityHasSessionTest(service);
1077 GetPresentControllerTest(service);
1078 }
1079
AvSessionServiceTest()1080 void AvSessionServiceTest()
1081 {
1082 if (avsessionService_ == nullptr) {
1083 SLOGI("check service null, try create");
1084 avsessionService_ = new AVSessionService(AVSESSION_SERVICE_ID);
1085 }
1086 if (avsessionService_ == nullptr) {
1087 SLOGE("service is null, return");
1088 return;
1089 }
1090 elementName.SetBundleName(g_testAnotherBundleName);
1091 elementName.SetAbilityName(g_testAnotherAbilityName);
1092 avsessionHere_ = avsessionService_->CreateSessionInner(
1093 g_testSessionTag, AVSession::SESSION_TYPE_AUDIO, false, elementName);
1094 AvSessionServiceSystemAbilityTest(avsessionService_);
1095 AvSessionServiceGetAVQueueInfosTest(avsessionService_);
1096 AvSessionServiceGetDescriptorsTest(avsessionService_);
1097 AvSessionServiceAVPlaybackTest(avsessionService_);
1098 CreateNewControllerForSessionTest(avsessionService_);
1099 AvSessionServiceControllerTest(avsessionService_);
1100 AvSessionServiceCastTest(avsessionService_);
1101 AVSessionServiceSendSystemControlCommandTest(avsessionService_);
1102 AvSessionServiceClientTest(avsessionService_);
1103 AvSessionServiceHandleEventTest(avsessionService_);
1104 ConvertKeyCodeToCommand001();
1105 handleusereventTest(avsessionService_);
1106 OnReceiveEventTest(avsessionService_);
1107 AvSessionServiceTest001();
1108 AvSessionServiceTest002(avsessionService_);
1109 avsessionService_->OnStop();
1110 SLOGI("AvSessionServiceTest done");
1111 }
1112
OnRemoteRequest()1113 int32_t AVSessionServiceStubFuzzer::OnRemoteRequest()
1114 {
1115 uint32_t code = GetData<uint32_t>();
1116 code %= static_cast<uint32_t>(AvsessionSeviceInterfaceCode::SERVICE_CMD_MAX);
1117
1118 if (avsessionService_ == nullptr) {
1119 SLOGI("check service null, try create");
1120 avsessionService_ = new AVSessionService(AVSESSION_SERVICE_ID);
1121 }
1122 if (avsessionService_ == nullptr) {
1123 SLOGE("service is null, return");
1124 return AVSESSION_ERROR;
1125 }
1126 MessageParcel dataMessageParcel;
1127 if (!dataMessageParcel.WriteInterfaceToken(avsessionService_->GetDescriptor())) {
1128 return AVSESSION_ERROR;
1129 }
1130 dataMessageParcel.WriteBuffer(RAW_DATA, g_sizePos);
1131 g_sizePos += sizeof(uint32_t);
1132 dataMessageParcel.RewindRead(0);
1133 MessageParcel reply;
1134 MessageOption option;
1135 int32_t ret = avsessionService_->OnRemoteRequest(code, dataMessageParcel, reply, option);
1136 return ret;
1137 }
1138
AVSessionServiceStubRemoteRequestTest()1139 void AVSessionServiceStubRemoteRequestTest()
1140 {
1141 auto serviceStub = std::make_unique<AVSessionServiceStubFuzzer>();
1142 if (serviceStub == nullptr) {
1143 return;
1144 }
1145 serviceStub->OnRemoteRequest();
1146 if (avsessionService_ == nullptr) {
1147 SLOGI("check service null, try create");
1148 avsessionService_ = new AVSessionService(AVSESSION_SERVICE_ID);
1149 }
1150 if (avsessionService_ == nullptr) {
1151 SLOGE("service is null, return");
1152 return;
1153 }
1154 avsessionService_->Close();
1155 avsessionService_ = nullptr;
1156 }
1157
1158 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)1159 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
1160 {
1161 if (size < MIN_SIZE_NUM) {
1162 return 0;
1163 }
1164 /* Run your code on data */
1165 FuzzTest(data, size);
1166 return 0;
1167 }
1168 } // namespace AVSession
1169 } // namespace OHOS
1170