• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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