11401458bSopenharmony_ci/* 21401458bSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 31401458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41401458bSopenharmony_ci * you may not use this file except in compliance with the License. 51401458bSopenharmony_ci * You may obtain a copy of the License at 61401458bSopenharmony_ci * 71401458bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81401458bSopenharmony_ci * 91401458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101401458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111401458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121401458bSopenharmony_ci * See the License for the specific language governing permissions and 131401458bSopenharmony_ci * limitations under the License. 141401458bSopenharmony_ci */ 151401458bSopenharmony_ci 161401458bSopenharmony_ci#include "hisyseventmanager_fuzzer.h" 171401458bSopenharmony_ci 181401458bSopenharmony_ci#include <cstddef> 191401458bSopenharmony_ci#include <cstdint> 201401458bSopenharmony_ci#include <vector> 211401458bSopenharmony_ci 221401458bSopenharmony_ci#include "hisysevent_manager.h" 231401458bSopenharmony_ci 241401458bSopenharmony_cinamespace OHOS { 251401458bSopenharmony_cinamespace HiviewDFX { 261401458bSopenharmony_cinamespace { 271401458bSopenharmony_ciclass TestQueryCallback : public HiSysEventQueryCallback { 281401458bSopenharmony_cipublic: 291401458bSopenharmony_ci TestQueryCallback() {} 301401458bSopenharmony_ci virtual ~TestQueryCallback() {} 311401458bSopenharmony_ci 321401458bSopenharmony_ci void OnQuery(std::shared_ptr<std::vector<HiSysEventRecord>> sysEvents) override 331401458bSopenharmony_ci {} 341401458bSopenharmony_ci 351401458bSopenharmony_ci void OnComplete(int32_t reason, int32_t total) override 361401458bSopenharmony_ci {} 371401458bSopenharmony_ci}; 381401458bSopenharmony_ci 391401458bSopenharmony_civoid HiSysEventRecordTest(const HiSysEventRecord& record, const std::string& data) 401401458bSopenharmony_ci{ 411401458bSopenharmony_ci (void)record.AsJson(); 421401458bSopenharmony_ci (void)record.GetDomain(); 431401458bSopenharmony_ci (void)record.GetEventName(); 441401458bSopenharmony_ci (void)record.GetLevel(); 451401458bSopenharmony_ci (void)record.GetTag(); 461401458bSopenharmony_ci (void)record.GetTimeZone(); 471401458bSopenharmony_ci (void)record.GetEventType(); 481401458bSopenharmony_ci (void)record.GetTraceFlag(); 491401458bSopenharmony_ci (void)record.GetPid(); 501401458bSopenharmony_ci (void)record.GetTid(); 511401458bSopenharmony_ci (void)record.GetUid(); 521401458bSopenharmony_ci (void)record.GetPspanId(); 531401458bSopenharmony_ci (void)record.GetSpanId(); 541401458bSopenharmony_ci (void)record.GetTime(); 551401458bSopenharmony_ci (void)record.GetTraceId(); 561401458bSopenharmony_ci std::vector<std::string> params; 571401458bSopenharmony_ci record.GetParamNames(params); 581401458bSopenharmony_ci 591401458bSopenharmony_ci int64_t intValue = 0; 601401458bSopenharmony_ci (void)record.GetParamValue(data, intValue); 611401458bSopenharmony_ci uint64_t uintValue = 0; 621401458bSopenharmony_ci (void)record.GetParamValue(data, uintValue); 631401458bSopenharmony_ci double dValue = 0; 641401458bSopenharmony_ci (void)record.GetParamValue(data, dValue); 651401458bSopenharmony_ci std::string strValue; 661401458bSopenharmony_ci (void)record.GetParamValue(data, strValue); 671401458bSopenharmony_ci std::vector<int64_t> intValues; 681401458bSopenharmony_ci (void)record.GetParamValue(data, intValues); 691401458bSopenharmony_ci std::vector<uint64_t> uintValues; 701401458bSopenharmony_ci (void)record.GetParamValue(data, uintValues); 711401458bSopenharmony_ci std::vector<double> dValues; 721401458bSopenharmony_ci (void)record.GetParamValue(data, dValues); 731401458bSopenharmony_ci std::vector<std::string> strValues; 741401458bSopenharmony_ci (void)record.GetParamValue(data, strValues); 751401458bSopenharmony_ci} 761401458bSopenharmony_ci 771401458bSopenharmony_civoid HiSysEventQueryTest(const std::string& strData, int64_t intData) 781401458bSopenharmony_ci{ 791401458bSopenharmony_ci auto callback = std::make_shared<TestQueryCallback>(); 801401458bSopenharmony_ci QueryArg arg(0, intData, intData); 811401458bSopenharmony_ci std::vector<QueryRule> rules = { QueryRule(strData, {strData}) }; 821401458bSopenharmony_ci (void)HiSysEventManager::Query(arg, rules, callback); 831401458bSopenharmony_ci} 841401458bSopenharmony_ci} 851401458bSopenharmony_ci 861401458bSopenharmony_civoid HiSysEventRecordFuzzTest(const uint8_t* data, size_t size) 871401458bSopenharmony_ci{ 881401458bSopenharmony_ci std::string strData((const char*) data, size); 891401458bSopenharmony_ci const std::string jsonStr = R"~({"domain_":"test_domain","name_":"test_name"})~"; 901401458bSopenharmony_ci HiSysEventRecord record(jsonStr); 911401458bSopenharmony_ci HiSysEventRecordTest(record, strData); 921401458bSopenharmony_ci} 931401458bSopenharmony_ci 941401458bSopenharmony_civoid HiSysEventQueryFuzzTest(const uint8_t* data, size_t size) 951401458bSopenharmony_ci{ 961401458bSopenharmony_ci std::string strData((const char*) data, size); 971401458bSopenharmony_ci int64_t intData = static_cast<int64_t>(*data); 981401458bSopenharmony_ci HiSysEventQueryTest(strData, intData); 991401458bSopenharmony_ci} 1001401458bSopenharmony_ci} // namespace HiviewDFX 1011401458bSopenharmony_ci} // namespace OHOS 1021401458bSopenharmony_ci 1031401458bSopenharmony_ci/* Fuzzer entry point */ 1041401458bSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 1051401458bSopenharmony_ci{ 1061401458bSopenharmony_ci /* Run your code on data */ 1071401458bSopenharmony_ci OHOS::HiviewDFX::HiSysEventRecordFuzzTest(data, size); 1081401458bSopenharmony_ci OHOS::HiviewDFX::HiSysEventQueryFuzzTest(data, size); 1091401458bSopenharmony_ci return 0; 1101401458bSopenharmony_ci} 1111401458bSopenharmony_ci 112