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