diff --git a/test/fuzztest/concurrent_fuzzer/BUILD.gn b/test/fuzztest/concurrent_fuzzer/BUILD.gn index ba299d596e35a6693ffceae9090b4ba3163902c6..04066162147aa51c810fe3ec830cb47d7324a85a 100644 --- a/test/fuzztest/concurrent_fuzzer/BUILD.gn +++ b/test/fuzztest/concurrent_fuzzer/BUILD.gn @@ -34,6 +34,7 @@ ohos_fuzztest("ConcurrentFuzzTest") { deps = [ "../../../frameworks/concurrent_task_client:concurrent_task_client", "../../../services:concurrentsvc", + "../../../qos:qos", ] external_deps = [ "c_utils:utils", diff --git a/test/fuzztest/concurrent_fuzzer/concurrent_fuzzer.cpp b/test/fuzztest/concurrent_fuzzer/concurrent_fuzzer.cpp index 112650ecbf65bb5be613d846649c4cf8cb3e8b1a..f735e05e86a963cda77c78decc44989901b36898 100644 --- a/test/fuzztest/concurrent_fuzzer/concurrent_fuzzer.cpp +++ b/test/fuzztest/concurrent_fuzzer/concurrent_fuzzer.cpp @@ -20,9 +20,11 @@ #include "concurrent_task_service_proxy.h" #include "concurrent_task_service.h" #include "securec.h" +#include"qos.h" +#include"concurrent_task_client.h" #include "concurrent_fuzzer.h" - using namespace OHOS::ConcurrentTask; +using namespace OHOS::QOS; namespace OHOS { const uint8_t *g_baseFuzzData = nullptr; @@ -126,6 +128,85 @@ bool FuzzConcurrentTaskServiceQueryDeadline(const uint8_t* data, size_t size) } return true; } + +bool FuzzConcurrentTaskServiceStopRemoteObject(const uint8_t* data, size_t size) +{ + g_baseFuzzData = data; + g_baseFuzzSize = size; + g_baseFuzzPos = 0; + ConcurrentTaskClient::GetInstance().StopRemoteObject(); + return true; +} + +bool FuzzConcurrentTaskServiceSetThreadQos(const uint8_t* data, size_t size) +{ + g_baseFuzzData = data; + g_baseFuzzSize = size; + g_baseFuzzPos = 0; + if (size > sizeof(int) + sizeof(int)) { + int level = GetData(); + level = level % 10; // get single digit + if (level == 1 || level == 2) { // corresponding to QOS_BACKGROUNG + QOS::SetThreadQos(QOS::QosLevel::QOS_BACKGROUND); + } + else if (level == 3 || level == 4) { // corresponding to QOS_UTILITY + QOS::SetThreadQos(QOS::QosLevel::QOS_UTILITY); + } + else if (level == 5 || level == 6) { // corresponding to QOS_DEFAULT + QOS::SetThreadQos(QOS::QosLevel::QOS_DEFAULT); + } + else if (level == 7 || level == 8) { // corresponding to QOS_INITIATED + QOS::SetThreadQos(QOS::QosLevel::QOS_USER_INITIATED); + } + } + return true; +} + +bool FuzzConcurrentTaskServiceSetQosForOtherThread(const uint8_t* data, size_t size) +{ + g_baseFuzzData = data; + g_baseFuzzSize = size; + g_baseFuzzPos = 0; + if (size > sizeof(int) + sizeof(int)) { + int level = GetData(); + int tid = GetData(); + level = level % 10; // get single digit + if (level == 1 || level == 2) { // corresponding to QOS_BACKGROUND + QOS::SetQosForOtherThread(QOS::QosLevel::QOS_BACKGROUND, tid); + } + else if (level == 2) { // corresponding to QOS_UTILITY + QOS::SetQosForOtherThread(QOS::QosLevel::QOS_UTILITY, tid); + } + else if (level == 3) { // corresponding to QOS_DEFAULT + QOS::SetQosForOtherThread(QOS::QosLevel::QOS_DEFAULT, tid); + } + else if (level == 4) { // corresponding to QOS_INITIATED + QOS::SetQosForOtherThread(QOS::QosLevel::QOS_USER_INITIATED, tid); + } + } + return true; +} + +bool FuzzConcurrentTaskServiceResetThreadQos(const uint8_t* data, size_t size) +{ + g_baseFuzzData = data; + g_baseFuzzSize = size; + g_baseFuzzPos = 0; + QOS::ResetThreadQos(); + return true; +} + +bool FuzzConcurrentTaskServiceResetQosForOtherThread(const uint8_t* data, size_t size) +{ + g_baseFuzzData = data; + g_baseFuzzSize = size; + g_baseFuzzPos = 0; + if (size > sizeof(int) + sizeof(int)) { + int tid = GetData(); + QOS::ResetQosForOtherThread(tid); + } + return true; +} } // namespace OHOS /* Fuzzer entry point */ @@ -135,5 +216,10 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) OHOS::FuzzConcurrentTaskTryConnect(data, size); OHOS::FuzzConcurrentTaskServiceReportData(data, size); OHOS::FuzzConcurrentTaskServiceQueryInterval(data, size); + OHOS::FuzzConcurrentTaskServiceStopRemoteObject(data, size); + OHOS::FuzzConcurrentTaskServiceSetThreadQos(data, size); + OHOS::FuzzConcurrentTaskServiceSetQosForOtherThread(data, size); + OHOS::FuzzConcurrentTaskServiceResetThreadQos(data, size); + OHOS::FuzzConcurrentTaskServiceResetQosForOtherThread(data, size); return 0; }