* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define private public
#define protected public
#include "downloaduploadmanager_fuzzer.h"
#include <fuzzer/FuzzedDataProvider.h>
#include <securec.h>
#include <cstddef>
#include <cstdint>
#include "accesstoken_kit.h"
#include "message_parcel.h"
#include "nativetoken_kit.h"
#include "request.h"
#include "request_common.h"
#include "request_manager.h"
#include "request_manager_impl.h"
#include "request_running_task_count.h"
#include "request_service_interface.h"
#include "runcount_notify_stub.h"
#include "running_task_count.h"
#include "system_ability_definition.h"
#include "token_setproc.h"
using namespace OHOS::Request;
using namespace OHOS::Security::AccessToken;
#undef private
#undef protected
const int MAX_NUM = 20;
const int MAX_LENGTH = 50;
namespace OHOS {
constexpr std::array<OHOS::Request::ExceptionErrorCode, 19> exceptionErrorCodes = {
E_OK, E_UNLOADING_SA, E_IPC_SIZE_TOO_LARGE, E_MIMETYPE_NOT_FOUND, E_TASK_INDEX_TOO_LARGE,
E_CHANNEL_NOT_OPEN, E_PERMISSION, E_NOT_SYSTEM_APP, E_PARAMETER_CHECK, E_UNSUPPORTED,
E_FILE_IO, E_FILE_PATH, E_SERVICE_ERROR, E_OTHER, E_TASK_QUEUE, E_TASK_MODE,
E_TASK_NOT_FOUND, E_TASK_STATE, E_GROUP_NOT_FOUND
};
constexpr std::array<Action, 3> actions = {
Action::DOWNLOAD,
Action::UPLOAD,
Action::ANY,
};
constexpr std::array<OHOS::Request::Version, 3> versions = {
Version::API8,
Version::API9,
Version::API10,
};
constexpr std::array<OHOS::Request::Mode, 3> modes = {
Mode::BACKGROUND,
Mode::FOREGROUND,
Mode::ANY,
};
Filter convertToFilter(FuzzedDataProvider &provider)
{
std::string bundle = provider.ConsumeRandomLengthString(MAX_LENGTH);
int64_t before = provider.ConsumeIntegral<int64_t>();
int64_t after = provider.ConsumeIntegral<int64_t>();
Filter filter;
filter.bundle = bundle;
filter.before = before;
filter.after = after;
return filter;
}
std::vector<TaskIdAndToken> convertToVectorTaskIdAndToken(FuzzedDataProvider &provider)
{
std::vector<TaskIdAndToken> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string token = provider.ConsumeRandomLengthString(MAX_LENGTH);
TaskIdAndToken taskIdAndToken;
taskIdAndToken.tid = tid;
taskIdAndToken.token = token;
result.push_back(taskIdAndToken);
}
return result;
}
std::vector<TaskInfoRet> convertToVectorTaskInfoRet(FuzzedDataProvider &provider)
{
std::vector<TaskInfoRet> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
size_t index = provider.ConsumeIntegralInRange<size_t>(0, exceptionErrorCodes.size() - 1);
ExceptionErrorCode code = exceptionErrorCodes[index];
TaskInfoRet infoRet{ .code = code };
result.push_back(infoRet);
}
return result;
}
std::vector<FormItem> convertToVectorFormItem(FuzzedDataProvider &provider)
{
std::vector<FormItem> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
std::string name = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string value = provider.ConsumeRandomLengthString(MAX_LENGTH);
FormItem forItem;
forItem.name = name;
forItem.value = value;
result.push_back(forItem);
}
return result;
}
std::vector<FileSpec> convertToVectorFileSpec(FuzzedDataProvider &provider)
{
std::vector<FileSpec> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
std::string name = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string uri = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string filename = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string type = provider.ConsumeRandomLengthString(MAX_LENGTH);
FileSpec fileSpec;
fileSpec.name = name;
fileSpec.uri = uri;
fileSpec.filename = filename;
fileSpec.type = type;
result.push_back(fileSpec);
}
return result;
}
std::vector<std::string> convertToVectorString(FuzzedDataProvider &provider)
{
std::vector<std::string> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
std::string name = provider.ConsumeRandomLengthString(MAX_LENGTH);
result.push_back(name);
}
return result;
}
std::map<std::string, std::string> convertToMapString(FuzzedDataProvider &provider)
{
std::map<std::string, std::string> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
std::string key = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string value = provider.ConsumeRandomLengthString(MAX_LENGTH);
result.insert({key, value});
}
return result;
}
std::vector<TaskRet> convertToVectorTaskRet(FuzzedDataProvider &provider)
{
std::vector<TaskRet> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
size_t index = provider.ConsumeIntegralInRange<size_t>(0, exceptionErrorCodes.size() - 1);
ExceptionErrorCode code = exceptionErrorCodes[index];
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
TaskRet task;
task.code = code;
task.tid = tid;
result.push_back(task);
}
return result;
}
std::vector<ExceptionErrorCode> convertToVectorExceptionErrorCode(FuzzedDataProvider &provider)
{
std::vector<ExceptionErrorCode> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
size_t index = provider.ConsumeIntegralInRange<size_t>(0, exceptionErrorCodes.size() - 1);
ExceptionErrorCode code = exceptionErrorCodes[index];
result.push_back(code);
}
return result;
}
Config convertToConfig(FuzzedDataProvider &provider)
{
size_t actionIndex = provider.ConsumeIntegralInRange<size_t>(0, actions.size() - 1);
Action action = actions[actionIndex];
std::string url = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::vector<std::string> certsPath = convertToVectorString(provider);
size_t versionIndex = provider.ConsumeIntegralInRange<size_t>(0, versions.size() - 1);
Version version = versions[versionIndex];
std::string bundleName = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string title = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string saveas = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string method = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string description = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string data = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string proxy = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::string certificatePins = provider.ConsumeRandomLengthString(MAX_LENGTH);
std::map<std::string, std::string> headers = convertToMapString(provider);
std::vector<FormItem> forms = convertToVectorFormItem(provider);
std::vector<FileSpec> files = convertToVectorFileSpec(provider);
std::vector<std::string> bodyFileNames = convertToVectorString(provider);
std::map<std::string, std::string> extras = convertToMapString(provider);
Config config;
config.action = action;
config.url = url;
config.certsPath = certsPath;
config.version = version;
config.bundleName = bundleName;
config.title = title;
config.saveas = saveas;
config.method = method;
config.description = description;
config.data = data;
config.proxy = proxy;
config.certificatePins = certificatePins;
config.headers = headers;
config.forms = forms;
config.files = files;
config.bodyFileNames = bodyFileNames;
config.extras = extras;
return config;
}
std::vector<Config> convertToVectorConfig(FuzzedDataProvider &provider)
{
std::vector<Config> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
Config config = convertToConfig(provider);
result.push_back(config);
}
return result;
}
std::vector<SpeedConfig> convertToVectorSpeedConfig(FuzzedDataProvider &provider)
{
std::vector<SpeedConfig> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
int32_t speed = provider.ConsumeIntegral<int32_t>();
SpeedConfig speedConfig;
speedConfig.tid = tid;
speedConfig.maxSpeed = speed;
result.push_back(speedConfig);
}
return result;
}
std::vector<uint8_t> convertToVectorUint8_t(FuzzedDataProvider &provider)
{
std::vector<uint8_t> result;
int len = provider.ConsumeIntegralInRange<int>(1, MAX_NUM);
for (int i = 0; i < len; i++) {
uint8_t value = provider.ConsumeIntegral<uint8_t>();
result.push_back(value);
}
return result;
}
void GrantNativePermission()
{
const char **perms = new const char *[1];
perms[0] = "ohos.permission.INTERNET";
TokenInfoParams infoInstance = {
.dcapsNum = 0,
.permsNum = 1,
.aclsNum = 0,
.dcaps = nullptr,
.perms = perms,
.acls = nullptr,
.processName = "request_service",
.aplStr = "system_core",
};
uint64_t tokenId = GetAccessTokenId(&infoInstance);
SetSelfTokenID(tokenId);
AccessTokenKit::ReloadNativeTokenInfo();
delete[] perms;
}
void CreateRequestFuzzTest(FuzzedDataProvider &provider)
{
Config config;
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
int32_t seq = RequestManager::GetInstance()->GetNextSeq();
RequestManager::GetInstance()->Create(config, seq, tid);
}
void StartRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
RequestManager::GetInstance()->Start(tid);
}
void StopRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
RequestManager::GetInstance()->Stop(tid);
}
void ShowRequestFuzzTest(FuzzedDataProvider &provider)
{
TaskInfo info;
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
RequestManager::GetInstance()->Show(tid, info);
}
void TouchRequestFuzzTest(FuzzedDataProvider &provider)
{
TaskInfo info;
std::string tid = provider.ConsumeRandomLengthString();
std::string token = provider.ConsumeRandomLengthString();
GrantNativePermission();
RequestManager::GetInstance()->Touch(tid, token, info);
}
void SearchRequestFuzzTest(FuzzedDataProvider &provider)
{
Filter filter;
std::vector<std::string> tids;
std::string str = provider.ConsumeRandomLengthString(MAX_LENGTH);
tids.push_back(str);
GrantNativePermission();
RequestManager::GetInstance()->Search(filter, tids);
}
void PauseRequestFuzzTest(FuzzedDataProvider &provider)
{
size_t versionIndex = provider.ConsumeIntegralInRange<size_t>(0, versions.size() - 1);
Version version = versions[versionIndex];
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
RequestManager::GetInstance()->Pause(tid, version);
}
void QueryMimeTypeRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString();
std::string mimeType = provider.ConsumeRandomLengthString();
GrantNativePermission();
RequestManager::GetInstance()->QueryMimeType(tid, mimeType);
}
void RemoveRequestFuzzTest(FuzzedDataProvider &provider)
{
size_t versionIndex = provider.ConsumeIntegralInRange<size_t>(0, versions.size() - 1);
Version version = versions[versionIndex];
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
RequestManager::GetInstance()->Remove(tid, version);
}
void ResumeRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
RequestManager::GetInstance()->Resume(tid);
}
void GetTaskRequestFuzzTest(FuzzedDataProvider &provider)
{
Config config;
std::string tid = provider.ConsumeRandomLengthString();
std::string token = provider.ConsumeRandomLengthString();
GrantNativePermission();
RequestManager::GetInstance()->GetTask(tid, token, config);
}
void SubscribeRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
RequestManager::GetInstance()->Subscribe(tid);
}
void UnsubscribeRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
RequestManager::GetInstance()->Unsubscribe(tid);
}
void IsSaReadyRequestFuzzTest(FuzzedDataProvider &provider)
{
GrantNativePermission();
RequestManager::GetInstance()->IsSaReady();
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
RequestManager::GetInstance()->Start(tid);
}
void ReopenChannelRequestFuzzTest(FuzzedDataProvider &provider)
{
GrantNativePermission();
RequestManager::GetInstance()->ReopenChannel();
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
RequestManager::GetInstance()->Start(tid);
}
void SubscribeSARequestFuzzTest(FuzzedDataProvider &provider)
{
GrantNativePermission();
RequestManager::GetInstance()->SubscribeSA();
RequestManager::GetInstance()->UnsubscribeSA();
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
RequestManager::GetInstance()->Start(tid);
}
class FuzzResponseListenerImpl : public IResponseListener {
public:
~FuzzResponseListenerImpl(){};
void OnResponseReceive(const std::shared_ptr<Response> &response) override
{
(void)response;
return;
}
};
class FuzzNotifyDataListenerImpl : public INotifyDataListener {
public:
~FuzzNotifyDataListenerImpl(){};
void OnNotifyDataReceive(const std::shared_ptr<NotifyData> ¬ifyData) override
{
(void)notifyData;
return;
}
void OnFaultsReceive(const std::shared_ptr<int32_t> &tid, const std::shared_ptr<SubscribeType> &type,
const std::shared_ptr<Reason> &reason) override
{
}
void OnWaitReceive(std::int32_t taskId, WaitingReason reason) override
{
}
};
void AddAndRemoveListenerRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string taskId = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
SubscribeType type = SubscribeType::RESPONSE;
std::shared_ptr<FuzzResponseListenerImpl> listener = std::make_shared<FuzzResponseListenerImpl>();
RequestManager::GetInstance()->AddListener(taskId, type, listener);
RequestManager::GetInstance()->RemoveListener(taskId, type, listener);
type = SubscribeType::COMPLETED;
std::shared_ptr<FuzzNotifyDataListenerImpl> listener2 = std::make_shared<FuzzNotifyDataListenerImpl>();
RequestManager::GetInstance()->AddListener(taskId, type, listener2);
RequestManager::GetInstance()->RemoveListener(taskId, type, listener2);
}
void RemoveAllListenersRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string taskId = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
SubscribeType type = SubscribeType::RESPONSE;
std::shared_ptr<FuzzResponseListenerImpl> listener = std::make_shared<FuzzResponseListenerImpl>();
RequestManager::GetInstance()->AddListener(taskId, type, listener);
type = SubscribeType::COMPLETED;
std::shared_ptr<FuzzNotifyDataListenerImpl> listener2 = std::make_shared<FuzzNotifyDataListenerImpl>();
RequestManager::GetInstance()->AddListener(taskId, type, listener2);
RequestManager::GetInstance()->RemoveAllListeners(taskId);
RequestManager::GetInstance()->RestoreListener(nullptr);
}
void TestFunc(void)
{
return;
}
void RestoreListenerRequestFuzzTest(FuzzedDataProvider &provider)
{
GrantNativePermission();
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
RequestManager::GetInstance()->Start(tid);
RequestManager::GetInstance()->RestoreListener(TestFunc);
}
void QueryRequestFuzzTest(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
TaskInfo taskinfo;
GrantNativePermission();
RequestManager::GetInstance()->Query(tid, taskinfo);
}
void RequestFuzzTestGetId(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
GrantNativePermission();
auto request = OHOS::Request::Request(tid);
request.getId();
}
void RequestFuzzTestHasListener(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
SubscribeType type = SubscribeType::RESPONSE;
auto request = OHOS::Request::Request(tid);
std::shared_ptr<FuzzResponseListenerImpl> listenerPtr = std::make_shared<FuzzResponseListenerImpl>();
GrantNativePermission();
request.AddListener(type, listenerPtr);
request.HasListener();
request.RemoveListener(type, listenerPtr);
}
void RequestFuzzTestOnNotifyDataReceive(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
SubscribeType type = SubscribeType::COMPLETED;
auto request = OHOS::Request::Request(tid);
std::shared_ptr<NotifyData> notifyData = std::make_shared<NotifyData>();
notifyData->type = type;
notifyData->version = Version::API9;
GrantNativePermission();
request.OnNotifyDataReceive(notifyData);
std::shared_ptr<FuzzNotifyDataListenerImpl> listenerPtr = std::make_shared<FuzzNotifyDataListenerImpl>();
request.AddListener(type, listenerPtr);
request.OnNotifyDataReceive(notifyData);
}
void RequestFuzzTestAddAndRemoveListener(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
SubscribeType type = SubscribeType::COMPLETED;
GrantNativePermission();
auto request = OHOS::Request::Request(tid);
std::shared_ptr<NotifyData> notifyData = std::make_shared<NotifyData>();
notifyData->type = type;
notifyData->version = Version::API9;
request.OnNotifyDataReceive(notifyData);
std::shared_ptr<FuzzNotifyDataListenerImpl> listenerPtr = std::make_shared<FuzzNotifyDataListenerImpl>();
request.AddListener(type, listenerPtr);
request.RemoveListener(type, listenerPtr);
}
void RequestFuzzTestOnResponseReceive(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
SubscribeType type = SubscribeType::RESPONSE;
std::shared_ptr<Response> response = std::make_shared<Response>();
GrantNativePermission();
auto request = OHOS::Request::Request(tid);
request.OnResponseReceive(response);
std::shared_ptr<FuzzResponseListenerImpl> listenerPtr = std::make_shared<FuzzResponseListenerImpl>();
request.AddListener(type, listenerPtr);
request.OnResponseReceive(response);
}
class FuzzFwkTestOberver : public IRunningTaskObserver {
public:
void OnRunningTaskCountUpdate(int count) override;
~FuzzFwkTestOberver() = default;
FuzzFwkTestOberver() = default;
};
void FuzzFwkTestOberver::OnRunningTaskCountUpdate(int count)
{
}
void RunningTaskCountFuzzTestSubscribeRunningTaskCount(FuzzedDataProvider &provider)
{
GrantNativePermission();
auto proxy = RequestManagerImpl::GetInstance()->GetRequestServiceProxy(true);
if (proxy == nullptr) {
std::shared_ptr<IRunningTaskObserver> ob = std::make_shared<FuzzFwkTestOberver>();
ob->OnRunningTaskCountUpdate(provider.ConsumeIntegral<int8_t>());
SubscribeRunningTaskCount(ob);
UnsubscribeRunningTaskCount(ob);
}
std::shared_ptr<IRunningTaskObserver> ob1 = std::make_shared<FuzzFwkTestOberver>();
SubscribeRunningTaskCount(ob1);
std::shared_ptr<IRunningTaskObserver> ob2 = std::make_shared<FuzzFwkTestOberver>();
FwkRunningTaskCountManager::GetInstance()->AttachObserver(ob2);
SubscribeRunningTaskCount(ob2);
FwkRunningTaskCountManager::GetInstance()->DetachObserver(ob1);
FwkRunningTaskCountManager::GetInstance()->DetachObserver(ob2);
}
void RunningTaskCountFuzzTestUnubscribeRunning(FuzzedDataProvider &provider)
{
GrantNativePermission();
std::shared_ptr<IRunningTaskObserver> ob1 = std::make_shared<FuzzFwkTestOberver>();
FwkRunningTaskCountManager::GetInstance()->AttachObserver(ob1);
ob1->OnRunningTaskCountUpdate(provider.ConsumeIntegral<int8_t>());
std::shared_ptr<IRunningTaskObserver> ob2 = std::make_shared<FuzzFwkTestOberver>();
UnsubscribeRunningTaskCount(ob2);
UnsubscribeRunningTaskCount(ob1);
}
void RunningTaskCountFuzzTestGetAndSetCount(FuzzedDataProvider &provider)
{
GrantNativePermission();
int old = provider.ConsumeIntegral<int8_t>();
int except = 1;
FwkRunningTaskCountManager::GetInstance()->SetCount(except);
FwkRunningTaskCountManager::GetInstance()->GetCount();
FwkRunningTaskCountManager::GetInstance()->SetCount(old);
FwkRunningTaskCountManager::GetInstance()->GetCount();
}
void RunningTaskCountFuzzTestUpdateRunningTaskCount(FuzzedDataProvider &provider)
{
GrantNativePermission();
std::shared_ptr<IRunningTaskObserver> ob = std::make_shared<FuzzFwkTestOberver>();
ob->OnRunningTaskCountUpdate(provider.ConsumeIntegral<int8_t>());
FwkIRunningTaskObserver runningOb = FwkIRunningTaskObserver(ob);
runningOb.UpdateRunningTaskCount();
}
void RunningTaskCountFuzzTestNotifyAllObservers(FuzzedDataProvider &provider)
{
GrantNativePermission();
std::shared_ptr<IRunningTaskObserver> ob1 = std::make_shared<FuzzFwkTestOberver>();
FwkRunningTaskCountManager::GetInstance()->AttachObserver(ob1);
FwkRunningTaskCountManager::GetInstance()->NotifyAllObservers();
FwkRunningTaskCountManager::GetInstance()->DetachObserver(ob1);
ob1->OnRunningTaskCountUpdate(provider.ConsumeIntegral<int8_t>());
}
void RunCountNotifyStubFuzzTestGetInstanceDoneCallBack(FuzzedDataProvider &provider)
{
TaskInfo taskInfo;
taskInfo.tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
Notify notify;
GrantNativePermission();
RunCountNotifyStub::GetInstance();
RunCountNotifyStub::GetInstance()->Done(taskInfo);
RunCountNotifyStub::GetInstance()->CallBack(notify);
}
void RunCountNotifyStubFuzzTestOnCallBack(FuzzedDataProvider &provider)
{
int64_t except = provider.ConsumeIntegral<int64_t>();
int old = FwkRunningTaskCountManager::GetInstance()->GetCount();
OHOS::MessageParcel parcel;
parcel.WriteInt64(except);
GrantNativePermission();
RunCountNotifyStub::GetInstance()->OnCallBack(parcel);
FwkRunningTaskCountManager::GetInstance()->GetCount();
FwkRunningTaskCountManager::GetInstance()->SetCount(old);
FwkRunningTaskCountManager::GetInstance()->GetCount();
}
static constexpr int32_t ARRAY_LEN = 256;
static constexpr int32_t INT64_SIZE = 8;
static constexpr int32_t INT32_SIZE = 4;
static constexpr int32_t INT16_SIZE = 2;
void ResponseMessageFuzzTestInt64FromParcel(FuzzedDataProvider &provider)
{
int64_t except = provider.ConsumeIntegral<int64_t>();
char *parcel = reinterpret_cast<char *>(&except);
int64_t num;
int testSize = INT32_SIZE;
ResponseMessageReceiver::Int64FromParcel(num, parcel, testSize);
testSize = INT64_SIZE;
ResponseMessageReceiver::Int64FromParcel(num, parcel, testSize);
}
void ResponseMessageFuzzTestUint64FromParcel(FuzzedDataProvider &provider)
{
uint64_t except = provider.ConsumeIntegral<uint64_t>();
char *parcel = reinterpret_cast<char *>(&except);
uint64_t num;
int testSize = INT32_SIZE;
ResponseMessageReceiver::Uint64FromParcel(num, parcel, testSize);
testSize = INT64_SIZE;
ResponseMessageReceiver::Uint64FromParcel(num, parcel, testSize);
}
void ResponseMessageFuzzTestInt32FromParcel(FuzzedDataProvider &provider)
{
int32_t except = provider.ConsumeIntegral<int32_t>();
char *parcel = reinterpret_cast<char *>(&except);
int32_t num;
int testSize = INT16_SIZE;
ResponseMessageReceiver::Int32FromParcel(num, parcel, testSize);
testSize = INT32_SIZE;
ResponseMessageReceiver::Int32FromParcel(num, parcel, testSize);
}
void ResponseMessageFuzzTestUint32FromParcel(FuzzedDataProvider &provider)
{
uint32_t except = provider.ConsumeIntegral<uint32_t>();
char *parcel = reinterpret_cast<char *>(&except);
uint32_t num;
int testSize = INT16_SIZE;
ResponseMessageReceiver::Uint32FromParcel(num, parcel, testSize);
testSize = INT32_SIZE;
ResponseMessageReceiver::Uint32FromParcel(num, parcel, testSize);
}
void ResponseMessageFuzzTestInt16FromParcel(FuzzedDataProvider &provider)
{
int16_t except = provider.ConsumeIntegral<int16_t>();
char *parcel = reinterpret_cast<char *>(&except);
int16_t num;
int testSize = 0;
ResponseMessageReceiver::Int16FromParcel(num, parcel, testSize);
testSize = INT16_SIZE;
ResponseMessageReceiver::Int16FromParcel(num, parcel, testSize);
}
void ResponseMessageFuzzTestStateFromParcel(FuzzedDataProvider &provider)
{
size_t stateIndex = provider.ConsumeIntegralInRange<size_t>(0, static_cast<size_t>(State::ANY));
State state = static_cast<State>(stateIndex);
uint32_t except = static_cast<uint32_t>(State::ANY) + 1;
char *parcel = reinterpret_cast<char *>(&except);
int testSize = INT32_SIZE;
ResponseMessageReceiver::StateFromParcel(state, parcel, testSize);
except = static_cast<uint32_t>(State::ANY);
parcel = reinterpret_cast<char *>(&except);
testSize = INT32_SIZE;
ResponseMessageReceiver::StateFromParcel(state, parcel, testSize);
}
void ResponseMessageFuzzTestActionFromParcel(FuzzedDataProvider &provider)
{
size_t actionIndex = provider.ConsumeIntegralInRange<size_t>(0, static_cast<size_t>(Action::ANY));
Action action = static_cast<Action>(actionIndex);
uint32_t except = static_cast<uint32_t>(Action::ANY) + 1;
char *parcel = reinterpret_cast<char *>(&except);
int testSize = INT32_SIZE;
ResponseMessageReceiver::ActionFromParcel(action, parcel, testSize);
except = static_cast<uint32_t>(Action::ANY);
parcel = reinterpret_cast<char *>(&except);
testSize = INT32_SIZE;
ResponseMessageReceiver::ActionFromParcel(action, parcel, testSize);
}
void ResponseMessageFuzzTestVersionFromParcel(FuzzedDataProvider &provider)
{
size_t versionIndex = provider.ConsumeIntegralInRange<size_t>(0, versions.size() - 1);
Version version = versions[versionIndex];
uint32_t except = static_cast<uint32_t>(Version::API10) + 1;
char *parcel = reinterpret_cast<char *>(&except);
int testSize = INT32_SIZE;
ResponseMessageReceiver::VersionFromParcel(version, parcel, testSize);
except = static_cast<uint32_t>(Version::API10);
parcel = reinterpret_cast<char *>(&except);
testSize = INT32_SIZE;
ResponseMessageReceiver::VersionFromParcel(version, parcel, testSize);
}
void ResponseMessageFuzzTestSubscribeTypeFromParcel(FuzzedDataProvider &provider)
{
size_t typeIndex = provider.ConsumeIntegralInRange<size_t>(0, static_cast<size_t>(SubscribeType::BUTT));
SubscribeType type = static_cast<SubscribeType>(typeIndex);
uint32_t except = static_cast<uint32_t>(SubscribeType::BUTT) + 1;
char *parcel = reinterpret_cast<char *>(&except);
int testSize = INT32_SIZE;
ResponseMessageReceiver::SubscribeTypeFromParcel(type, parcel, testSize);
except = static_cast<uint32_t>(SubscribeType::BUTT);
parcel = reinterpret_cast<char *>(&except);
testSize = INT32_SIZE;
ResponseMessageReceiver::SubscribeTypeFromParcel(type, parcel, testSize);
}
void ResponseMessageFuzzTestStringFromParcel(FuzzedDataProvider &provider)
{
std::string str;
std::string except = provider.ConsumeRandomLengthString(MAX_LENGTH);
char *parcel = const_cast<char *>(except.c_str());
int testSize = except.size() - 1;
ResponseMessageReceiver::StringFromParcel(str, parcel, testSize);
testSize = except.size() + 1;
ResponseMessageReceiver::StringFromParcel(str, parcel, testSize);
}
void ResponseMessageFuzzTestResponseHeaderFromParcel(FuzzedDataProvider &provider)
{
std::map<std::string, std::vector<std::string>> headers;
std::string except = "header:aaa,bbb,ccc\n";
char *parcel = const_cast<char *>(except.c_str());
int testSize = except.size();
ResponseMessageReceiver::ResponseHeaderFromParcel(headers, parcel, testSize);
std::string str = provider.ConsumeRandomLengthString(MAX_LENGTH);
parcel = const_cast<char *>(str.c_str());
testSize = except.size();
ResponseMessageReceiver::ResponseHeaderFromParcel(headers, parcel, testSize);
}
void ResponseMessageFuzzTestProgressExtrasFromParcel(FuzzedDataProvider &provider)
{
int arraySize = 64;
char except[arraySize];
uint32_t length = provider.ConsumeIntegral<uint32_t>();
int ret = memcpy_s(except, static_cast<size_t>(arraySize), reinterpret_cast<void *>(&length), sizeof(length));
if (ret != 0) {
return;
}
char keyValue[] = "key\0value\0";
ret = memcpy_s(except + sizeof(length), static_cast<size_t>(arraySize - sizeof(length)), keyValue,
9);
if (ret != 0) {
return;
}
std::map<std::string, std::string> extras;
char *parcel = except;
int testSize = INT16_SIZE;
ResponseMessageReceiver::ProgressExtrasFromParcel(extras, parcel, testSize);
parcel = except;
testSize = sizeof(length) + 1;
ResponseMessageReceiver::ProgressExtrasFromParcel(extras, parcel, testSize);
parcel = except;
testSize = sizeof(length) + 6;
ResponseMessageReceiver::ProgressExtrasFromParcel(extras, parcel, testSize);
parcel = except;
testSize = arraySize;
ResponseMessageReceiver::ProgressExtrasFromParcel(extras, parcel, testSize);
}
void ResponseMessageFuzzTestVecInt64FromParcel(FuzzedDataProvider &provider)
{
int arraySize = INT32_SIZE + INT64_SIZE;
char except[arraySize];
uint32_t length = provider.ConsumeIntegral<uint32_t>();
int ret = memcpy_s(except, static_cast<size_t>(arraySize), reinterpret_cast<void *>(&length), sizeof(length));
if (ret != 0) {
return;
}
int64_t value = 123456;
ret = memcpy_s(except + sizeof(length), static_cast<size_t>(arraySize - sizeof(length)),
reinterpret_cast<void *>(&value), sizeof(value));
if (ret != 0) {
return;
}
std::vector<int64_t> vec;
char *parcel = except;
int testSize = INT16_SIZE;
ResponseMessageReceiver::VecInt64FromParcel(vec, parcel, testSize);
parcel = except;
testSize = INT64_SIZE;
ResponseMessageReceiver::VecInt64FromParcel(vec, parcel, testSize);
parcel = except;
testSize = arraySize;
ResponseMessageReceiver::VecInt64FromParcel(vec, parcel, testSize);
}
void ResponseMessageFuzzTestResponseMessageReceiver(FuzzedDataProvider &provider)
{
IResponseMessageHandler *handler = nullptr;
int32_t sockFd = provider.ConsumeIntegral<int32_t>();
ResponseMessageReceiver receiver = ResponseMessageReceiver(handler, sockFd);
}
void ResponseMessageFuzzTestMsgHeaderParcel(FuzzedDataProvider &provider)
{
uint32_t magicNum = ResponseMessageReceiver::RESPONSE_MAGIC_NUM - 1;
int pos = 0;
int arraySize = INT32_SIZE + INT64_SIZE;
char except[arraySize];
int ret = memcpy_s(except, static_cast<size_t>(arraySize), reinterpret_cast<void *>(&magicNum), sizeof(magicNum));
if (ret != 0) {
return;
}
pos += sizeof(magicNum);
int32_t msgId = provider.ConsumeIntegral<int32_t>();
ret = memcpy_s(except + pos, static_cast<size_t>(arraySize - pos), reinterpret_cast<void *>(&msgId), sizeof(msgId));
if (ret != 0) {
return;
}
pos += sizeof(msgId);
int16_t msgType = 123;
ret = memcpy_s(
except + pos, static_cast<size_t>(arraySize - pos), reinterpret_cast<void *>(&msgType), sizeof(msgType));
if (ret != 0) {
return;
}
pos += sizeof(msgType);
int16_t bodySize = 456;
ret = memcpy_s(
except + pos, static_cast<size_t>(arraySize - pos), reinterpret_cast<void *>(&bodySize), sizeof(bodySize));
if (ret != 0) {
return;
}
pos += sizeof(bodySize);
msgId = 0;
msgType = 0;
bodySize = 0;
char *parcel = except;
int testSize = INT16_SIZE;
ResponseMessageReceiver::MsgHeaderParcel(msgId, msgType, bodySize, parcel, testSize);
parcel = except;
testSize = INT32_SIZE;
ResponseMessageReceiver::MsgHeaderParcel(msgId, msgType, bodySize, parcel, testSize);
parcel = except;
testSize = INT32_SIZE;
magicNum = ResponseMessageReceiver::RESPONSE_MAGIC_NUM;
ret = memcpy_s(except, static_cast<size_t>(arraySize), reinterpret_cast<void *>(&magicNum), sizeof(magicNum));
if (ret != 0) {
return;
}
ResponseMessageReceiver::MsgHeaderParcel(msgId, msgType, bodySize, parcel, testSize);
parcel = except;
testSize = INT32_SIZE + INT16_SIZE;
ResponseMessageReceiver::MsgHeaderParcel(msgId, msgType, bodySize, parcel, testSize);
parcel = except;
testSize = INT64_SIZE;
ResponseMessageReceiver::MsgHeaderParcel(msgId, msgType, bodySize, parcel, testSize);
parcel = except;
testSize = INT64_SIZE + INT16_SIZE;
ResponseMessageReceiver::MsgHeaderParcel(msgId, msgType, bodySize, parcel, testSize);
parcel = except;
testSize = arraySize;
ResponseMessageReceiver::MsgHeaderParcel(msgId, msgType, bodySize, parcel, testSize);
}
void ResponseMessageFuzzTestResponseFromParcel(FuzzedDataProvider &provider)
{
std::shared_ptr<Response> response = std::make_shared<Response>();
int pos = 0;
int32_t tid = provider.ConsumeIntegral<int32_t>();
std::string version = "version";
int32_t statusCode = 456;
std::string reason = "reason";
std::string headers = "header:aaa,bbb,ccc\n";
char except[ARRAY_LEN];
int ret = memcpy_s(except, static_cast<size_t>(ARRAY_LEN), reinterpret_cast<void *>(&tid), sizeof(tid));
if (ret != 0) {
return;
}
pos += sizeof(tid);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), version.c_str(), version.size() + 1);
if (ret != 0) {
return;
}
pos += (version.size() + 1);
ret = memcpy_s(
except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&statusCode), sizeof(statusCode));
if (ret != 0) {
return;
}
pos += sizeof(statusCode);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), reason.c_str(), reason.size() + 1);
if (ret != 0) {
return;
}
pos += (reason.size() + 1);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), headers.c_str(), headers.size() + 1);
if (ret != 0) {
return;
}
pos += (headers.size() + 1);
char *parcel = except;
int testSize = INT16_SIZE;
ResponseMessageReceiver::ResponseFromParcel(response, parcel, testSize);
parcel = except;
testSize = INT32_SIZE;
ResponseMessageReceiver::ResponseFromParcel(response, parcel, testSize);
parcel = except;
testSize = INT32_SIZE + version.size() + 1;
ResponseMessageReceiver::ResponseFromParcel(response, parcel, testSize);
parcel = except;
testSize = INT64_SIZE + version.size() + 1;
ResponseMessageReceiver::ResponseFromParcel(response, parcel, testSize);
parcel = except;
testSize = ARRAY_LEN;
ResponseMessageReceiver::ResponseFromParcel(response, parcel, testSize);
}
void ResponseMessageFuzzTestTaskStatesFromParcel(FuzzedDataProvider &provider)
{
std::vector<TaskState> taskStates;
int pos = 0;
int32_t length = provider.ConsumeIntegral<int32_t>();
std::string path = "path";
int32_t responseCode = NETWORK_OFFLINE;
std::string message = "message";
char except[ARRAY_LEN];
int ret = memcpy_s(except, static_cast<size_t>(ARRAY_LEN), reinterpret_cast<void *>(&length), sizeof(length));
if (ret != 0) {
return;
}
pos += sizeof(length);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), path.c_str(), path.size() + 1);
if (ret != 0) {
return;
}
pos += (path.size() + 1);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&responseCode),
sizeof(responseCode));
if (ret != 0) {
return;
}
pos += sizeof(responseCode);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), message.c_str(), message.size() + 1);
if (ret != 0) {
return;
}
pos += (message.size() + 1);
char *parcel = except;
int testSize = INT16_SIZE;
ResponseMessageReceiver::TaskStatesFromParcel(taskStates, parcel, testSize);
parcel = except;
testSize = INT32_SIZE;
ResponseMessageReceiver::TaskStatesFromParcel(taskStates, parcel, testSize);
parcel = except;
testSize = INT32_SIZE + path.size() + 1;
ResponseMessageReceiver::TaskStatesFromParcel(taskStates, parcel, testSize);
parcel = except;
testSize = INT64_SIZE + path.size() + 1;
ResponseMessageReceiver::TaskStatesFromParcel(taskStates, parcel, testSize);
parcel = except;
testSize = ARRAY_LEN;
ResponseMessageReceiver::TaskStatesFromParcel(taskStates, parcel, testSize);
}
void ResponseMessageFuzzTestNotifyDataFromParcel(FuzzedDataProvider &provider)
{
std::shared_ptr<NotifyData> notifyData = std::make_shared<NotifyData>();
int pos = 0;
int32_t length = provider.ConsumeIntegral<int32_t>();
SubscribeType type = SubscribeType::BUTT;
uint32_t taskId = 123;
State state = State::ANY;
uint32_t index = 456;
uint64_t processed = 123456;
uint64_t totalProcessed = 111222;
int64_t value = 333444;
int ketValueLen = 10;
char keyValue[] = "key\0value\0";
Action action = Action::UPLOAD;
Version version = Version::API10;
std::string path = "path";
int32_t responseCode = NETWORK_OFFLINE;
std::string message = "message";
char except[ARRAY_LEN];
int ret = memcpy_s(except, static_cast<size_t>(ARRAY_LEN), reinterpret_cast<void *>(&type), sizeof(type));
if (ret != 0) {
return;
}
pos += sizeof(type);
ret = memcpy_s(
except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&taskId), sizeof(taskId));
if (ret != 0) {
return;
}
pos += sizeof(taskId);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&state), sizeof(state));
if (ret != 0) {
return;
}
pos += sizeof(state);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&index), sizeof(index));
if (ret != 0) {
return;
}
pos += sizeof(index);
ret = memcpy_s(
except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&processed), sizeof(processed));
if (ret != 0) {
return;
}
pos += sizeof(processed);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&totalProcessed),
sizeof(totalProcessed));
if (ret != 0) {
return;
}
pos += sizeof(totalProcessed);
ret = memcpy_s(
except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&length), sizeof(length));
if (ret != 0) {
return;
}
pos += sizeof(length);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&value), sizeof(value));
if (ret != 0) {
return;
}
pos += sizeof(value);
ret = memcpy_s(
except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&length), sizeof(length));
if (ret != 0) {
return;
}
pos += sizeof(length);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), keyValue, ketValueLen);
if (ret != 0) {
return;
}
pos += ketValueLen;
ret = memcpy_s(
except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&action), sizeof(action));
if (ret != 0) {
return;
}
pos += sizeof(action);
ret = memcpy_s(
except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&version), sizeof(version));
if (ret != 0) {
return;
}
pos += sizeof(version);
ret = memcpy_s(
except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&length), sizeof(length));
if (ret != 0) {
return;
}
pos += sizeof(length);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), path.c_str(), path.size() + 1);
if (ret != 0) {
return;
}
pos += (path.size() + 1);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), reinterpret_cast<void *>(&responseCode),
sizeof(responseCode));
if (ret != 0) {
return;
}
pos += sizeof(responseCode);
ret = memcpy_s(except + pos, static_cast<size_t>(ARRAY_LEN - pos), message.c_str(), message.size() + 1);
if (ret != 0) {
return;
}
pos += (message.size() + 1);
char *parcel = except;
int testSize = INT16_SIZE;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
testSize = INT32_SIZE;
int maxLen = testSize;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += INT32_SIZE;
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += INT32_SIZE;
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += INT32_SIZE;
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += INT64_SIZE;
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += INT64_SIZE;
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += (sizeof(length) + sizeof(value));
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += (sizeof(length) + ketValueLen);
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += INT32_SIZE;
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
maxLen += INT32_SIZE;
testSize = maxLen;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
parcel = except;
testSize = ARRAY_LEN;
ResponseMessageReceiver::NotifyDataFromParcel(notifyData, parcel, testSize);
}
void RequestManagerFuzzTestCreateTasks(FuzzedDataProvider &provider)
{
std::vector<Config> configs = convertToVectorConfig(provider);
std::vector<TaskRet> rets = convertToVectorTaskRet(provider);
RequestManager::GetInstance()->CreateTasks(configs, rets);
}
void RequestManagerFuzzTestStartTasks(FuzzedDataProvider &provider)
{
std::vector<std::string> tids = convertToVectorString(provider);
std::vector<ExceptionErrorCode> err = convertToVectorExceptionErrorCode(provider);
RequestManager::GetInstance()->StartTasks(tids, err);
}
void RequestManagerFuzzTestStopTasks(FuzzedDataProvider &provider)
{
std::vector<std::string> tids = convertToVectorString(provider);
std::vector<ExceptionErrorCode> err = convertToVectorExceptionErrorCode(provider);
RequestManager::GetInstance()->StopTasks(tids, err);
}
void RequestManagerFuzzTestResumeTasks(FuzzedDataProvider &provider)
{
std::vector<std::string> tids = convertToVectorString(provider);
std::vector<ExceptionErrorCode> err = convertToVectorExceptionErrorCode(provider);
RequestManager::GetInstance()->ResumeTasks(tids, err);
}
void RequestManagerFuzzTestRemoveTasks(FuzzedDataProvider &provider)
{
std::vector<std::string> tids = convertToVectorString(provider);
std::vector<ExceptionErrorCode> err = convertToVectorExceptionErrorCode(provider);
Version version = versions[provider.ConsumeIntegralInRange<size_t>(0, versions.size() - 1)];
RequestManager::GetInstance()->RemoveTasks(tids, version, err);
}
void RequestManagerFuzzTestPauseTasks(FuzzedDataProvider &provider)
{
std::vector<std::string> tids = convertToVectorString(provider);
std::vector<ExceptionErrorCode> err = convertToVectorExceptionErrorCode(provider);
Version version = versions[provider.ConsumeIntegralInRange<size_t>(0, versions.size() - 1)];
RequestManager::GetInstance()->PauseTasks(tids, version, err);
}
void RequestManagerFuzzTestShowTasks(FuzzedDataProvider &provider)
{
std::vector<std::string> tids = convertToVectorString(provider);
std::vector<TaskInfoRet> tasks = convertToVectorTaskInfoRet(provider);
RequestManager::GetInstance()->ShowTasks(tids, tasks);
}
void RequestManagerFuzzTestTouchTasks(FuzzedDataProvider &provider)
{
std::vector<TaskIdAndToken> taskid = convertToVectorTaskIdAndToken(provider);
std::vector<TaskInfoRet> taskinfo = convertToVectorTaskInfoRet(provider);
RequestManager::GetInstance()->TouchTasks(taskid, taskinfo);
}
void RequestManagerFuzzTestSetMaxSpeeds(FuzzedDataProvider &provider)
{
std::vector<SpeedConfig> speedconfig = convertToVectorSpeedConfig(provider);
std::vector<ExceptionErrorCode> err = convertToVectorExceptionErrorCode(provider);
RequestManager::GetInstance()->SetMaxSpeeds(speedconfig, err);
}
void RequestManagerFuzzTestSetMode(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
Mode mode = modes[provider.ConsumeIntegralInRange<size_t>(0, modes.size() - 1)];
RequestManager::GetInstance()->SetMode(tid, mode);
}
void RequestManagerFuzzTestDisableTaskNotification(FuzzedDataProvider &provider)
{
std::vector<std::string> tids = convertToVectorString(provider);
std::vector<ExceptionErrorCode> err = convertToVectorExceptionErrorCode(provider);
RequestManager::GetInstance()->DisableTaskNotification(tids, err);
}
void RequestManagerFuzzTestSetMaxSpeed(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
int64_t maxSpeed = provider.ConsumeIntegral<int64_t>();
RequestManager::GetInstance()->SetMaxSpeed(tid, maxSpeed);
RequestManager::GetInstance()->LoadRequestServer();
}
void RequestManagerFuzzTestCreateGroup(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
bool gauge = provider.ConsumeBool();
Notification notification;
RequestManager::GetInstance()->CreateGroup(tid, gauge, notification);
}
void RequestManagerFuzzTestAttachGroup(FuzzedDataProvider &provider)
{
std::vector<std::string> tids = convertToVectorString(provider);
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
RequestManager::GetInstance()->AttachGroup(tid, tids);
}
void RequestManagerFuzzTestDeleteGroup(FuzzedDataProvider &provider)
{
std::string tid = provider.ConsumeRandomLengthString(MAX_LENGTH);
RequestManager::GetInstance()->DeleteGroup(tid);
}
void RequestManagerFuzzTest(FuzzedDataProvider &provider)
{
OHOS::RequestManagerFuzzTestCreateTasks(provider);
OHOS::RequestManagerFuzzTestStartTasks(provider);
OHOS::RequestManagerFuzzTestStopTasks(provider);
OHOS::RequestManagerFuzzTestResumeTasks(provider);
OHOS::RequestManagerFuzzTestRemoveTasks(provider);
OHOS::RequestManagerFuzzTestPauseTasks(provider);
OHOS::RequestManagerFuzzTestShowTasks(provider);
OHOS::RequestManagerFuzzTestTouchTasks(provider);
OHOS::RequestManagerFuzzTestSetMaxSpeeds(provider);
OHOS::RequestManagerFuzzTestSetMode(provider);
OHOS::RequestManagerFuzzTestDisableTaskNotification(provider);
OHOS::RequestManagerFuzzTestSetMaxSpeed(provider);
OHOS::RequestManagerFuzzTestCreateGroup(provider);
OHOS::RequestManagerFuzzTestAttachGroup(provider);
OHOS::RequestManagerFuzzTestDeleteGroup(provider);
}
class FuzzRemoteObjectImpl : public OHOS::IRemoteObject {};
}
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
FuzzedDataProvider provider(data, size);
OHOS::CreateRequestFuzzTest(provider);
OHOS::StartRequestFuzzTest(provider);
OHOS::StopRequestFuzzTest(provider);
OHOS::ShowRequestFuzzTest(provider);
OHOS::SearchRequestFuzzTest(provider);
OHOS::PauseRequestFuzzTest(provider);
OHOS::RemoveRequestFuzzTest(provider);
OHOS::ResumeRequestFuzzTest(provider);
OHOS::SubscribeRequestFuzzTest(provider);
OHOS::UnsubscribeRequestFuzzTest(provider);
OHOS::RestoreListenerRequestFuzzTest(provider);
OHOS::IsSaReadyRequestFuzzTest(provider);
OHOS::ReopenChannelRequestFuzzTest(provider);
OHOS::SubscribeSARequestFuzzTest(provider);
OHOS::AddAndRemoveListenerRequestFuzzTest(provider);
OHOS::RemoveAllListenersRequestFuzzTest(provider);
OHOS::QueryRequestFuzzTest(provider);
OHOS::RequestFuzzTestGetId(provider);
OHOS::RequestFuzzTestHasListener(provider);
OHOS::RequestFuzzTestOnNotifyDataReceive(provider);
OHOS::RequestFuzzTestAddAndRemoveListener(provider);
OHOS::RequestFuzzTestOnResponseReceive(provider);
OHOS::RunningTaskCountFuzzTestSubscribeRunningTaskCount(provider);
OHOS::RunningTaskCountFuzzTestUnubscribeRunning(provider);
OHOS::RunningTaskCountFuzzTestGetAndSetCount(provider);
OHOS::RunningTaskCountFuzzTestUpdateRunningTaskCount(provider);
OHOS::RunningTaskCountFuzzTestNotifyAllObservers(provider);
OHOS::RunCountNotifyStubFuzzTestGetInstanceDoneCallBack(provider);
OHOS::RunCountNotifyStubFuzzTestOnCallBack(provider);
OHOS::ResponseMessageFuzzTestInt64FromParcel(provider);
OHOS::ResponseMessageFuzzTestUint64FromParcel(provider);
OHOS::ResponseMessageFuzzTestInt32FromParcel(provider);
OHOS::ResponseMessageFuzzTestUint32FromParcel(provider);
OHOS::ResponseMessageFuzzTestInt16FromParcel(provider);
OHOS::ResponseMessageFuzzTestStateFromParcel(provider);
OHOS::ResponseMessageFuzzTestActionFromParcel(provider);
OHOS::ResponseMessageFuzzTestVersionFromParcel(provider);
OHOS::ResponseMessageFuzzTestSubscribeTypeFromParcel(provider);
OHOS::ResponseMessageFuzzTestStringFromParcel(provider);
OHOS::ResponseMessageFuzzTestResponseHeaderFromParcel(provider);
OHOS::ResponseMessageFuzzTestProgressExtrasFromParcel(provider);
OHOS::ResponseMessageFuzzTestVecInt64FromParcel(provider);
OHOS::ResponseMessageFuzzTestResponseMessageReceiver(provider);
OHOS::ResponseMessageFuzzTestMsgHeaderParcel(provider);
OHOS::ResponseMessageFuzzTestResponseFromParcel(provider);
OHOS::ResponseMessageFuzzTestTaskStatesFromParcel(provider);
OHOS::ResponseMessageFuzzTestNotifyDataFromParcel(provider);
OHOS::RequestManagerFuzzTest(provider);
OHOS::GetTaskRequestFuzzTest(provider);
OHOS::QueryMimeTypeRequestFuzzTest(provider);
OHOS::TouchRequestFuzzTest(provider);
return 0;
}