11401458bSopenharmony_ci/*
21401458bSopenharmony_ci * Copyright (c) 2022-2024 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 <gtest/gtest.h>
171401458bSopenharmony_ci
181401458bSopenharmony_ci#include <chrono>
191401458bSopenharmony_ci#include <iosfwd>
201401458bSopenharmony_ci#include <string>
211401458bSopenharmony_ci#include <thread>
221401458bSopenharmony_ci#include <unistd.h>
231401458bSopenharmony_ci#include <vector>
241401458bSopenharmony_ci
251401458bSopenharmony_ci#include "gtest/gtest-message.h"
261401458bSopenharmony_ci#include "gtest/gtest-test-part.h"
271401458bSopenharmony_ci#include "gtest/hwext/gtest-ext.h"
281401458bSopenharmony_ci#include "gtest/hwext/gtest-tag.h"
291401458bSopenharmony_ci
301401458bSopenharmony_ci#include "ash_mem_utils.h"
311401458bSopenharmony_ci#include "file_util.h"
321401458bSopenharmony_ci#include "hilog/log.h"
331401458bSopenharmony_ci#include "hisysevent_base_listener.h"
341401458bSopenharmony_ci#include "hisysevent_base_query_callback.h"
351401458bSopenharmony_ci#include "hisysevent_delegate.h"
361401458bSopenharmony_ci#include "hisysevent_listener_proxy.h"
371401458bSopenharmony_ci#include "hisysevent_query_proxy.h"
381401458bSopenharmony_ci#include "hisysevent_rules.h"
391401458bSopenharmony_ci#include "iquery_sys_event_callback.h"
401401458bSopenharmony_ci#include "query_argument.h"
411401458bSopenharmony_ci#include "query_sys_event_callback_stub.h"
421401458bSopenharmony_ci#include "ret_code.h"
431401458bSopenharmony_ci#include "string_ex.h"
441401458bSopenharmony_ci#include "string_util.h"
451401458bSopenharmony_ci#include "sys_event_service_proxy.h"
461401458bSopenharmony_ci
471401458bSopenharmony_ci
481401458bSopenharmony_ciusing namespace testing::ext;
491401458bSopenharmony_ciusing namespace OHOS;
501401458bSopenharmony_ciusing namespace OHOS::HiviewDFX;
511401458bSopenharmony_ci
521401458bSopenharmony_cinamespace {
531401458bSopenharmony_ciconstexpr char ASH_MEM_NAME[] = "TestSharedMemory";
541401458bSopenharmony_ciconstexpr int32_t ASH_MEM_SIZE = 1024 * 2; // 2K
551401458bSopenharmony_ciconstexpr char LOG_DIR_PATH[] = "/data/test/adapter_native_test";
561401458bSopenharmony_ciconstexpr char FILE_PATH[] = "/data/test/adapter_native_test/test.log";
571401458bSopenharmony_ci
581401458bSopenharmony_cisptr<Ashmem> GetAshmem()
591401458bSopenharmony_ci{
601401458bSopenharmony_ci    auto ashmem = Ashmem::CreateAshmem(ASH_MEM_NAME, ASH_MEM_SIZE);
611401458bSopenharmony_ci    if (ashmem == nullptr) {
621401458bSopenharmony_ci        return nullptr;
631401458bSopenharmony_ci    }
641401458bSopenharmony_ci    if (!ashmem->MapReadAndWriteAshmem()) {
651401458bSopenharmony_ci        return ashmem;
661401458bSopenharmony_ci    }
671401458bSopenharmony_ci    return ashmem;
681401458bSopenharmony_ci}
691401458bSopenharmony_ci
701401458bSopenharmony_ciuint64_t GetMilliseconds()
711401458bSopenharmony_ci{
721401458bSopenharmony_ci    auto now = std::chrono::system_clock::now();
731401458bSopenharmony_ci    auto millisecs = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch());
741401458bSopenharmony_ci    return millisecs.count();
751401458bSopenharmony_ci}
761401458bSopenharmony_ci
771401458bSopenharmony_ciclass QuerySysEventCallbackStubTest : public QuerySysEventCallbackStub {
781401458bSopenharmony_cipublic:
791401458bSopenharmony_ci    QuerySysEventCallbackStubTest() {}
801401458bSopenharmony_ci    virtual ~QuerySysEventCallbackStubTest() {}
811401458bSopenharmony_ci
821401458bSopenharmony_ci    void OnQuery(const std::vector<std::u16string>& sysEvent, const std::vector<int64_t>& seq) {}
831401458bSopenharmony_ci    void OnComplete(int32_t reason, int32_t total, int64_t seq) {}
841401458bSopenharmony_ci
851401458bSopenharmony_cipublic:
861401458bSopenharmony_ci    enum Code {
871401458bSopenharmony_ci        DEFAULT = -1,
881401458bSopenharmony_ci        ON_QUERY = 0,
891401458bSopenharmony_ci        ON_COMPLETE,
901401458bSopenharmony_ci    };
911401458bSopenharmony_ci};
921401458bSopenharmony_ci
931401458bSopenharmony_ciclass SysEventCallbackStubTest : public SysEventCallbackStub {
941401458bSopenharmony_cipublic:
951401458bSopenharmony_ci    SysEventCallbackStubTest() {}
961401458bSopenharmony_ci    virtual ~SysEventCallbackStubTest() {}
971401458bSopenharmony_ci
981401458bSopenharmony_ci    void Handle(const std::u16string& domain, const std::u16string& eventName, uint32_t eventType,
991401458bSopenharmony_ci        const std::u16string& eventDetail) {}
1001401458bSopenharmony_ci
1011401458bSopenharmony_cipublic:
1021401458bSopenharmony_ci    enum Code {
1031401458bSopenharmony_ci        DEFAULT = -1,
1041401458bSopenharmony_ci        HANDLE = 0,
1051401458bSopenharmony_ci    };
1061401458bSopenharmony_ci};
1071401458bSopenharmony_ci}
1081401458bSopenharmony_ci
1091401458bSopenharmony_ciclass HiSysEventAdapterNativeTest : public testing::Test {
1101401458bSopenharmony_cipublic:
1111401458bSopenharmony_ci    static void SetUpTestCase(void);
1121401458bSopenharmony_ci    static void TearDownTestCase(void);
1131401458bSopenharmony_ci    void SetUp();
1141401458bSopenharmony_ci    void TearDown();
1151401458bSopenharmony_ci};
1161401458bSopenharmony_ci
1171401458bSopenharmony_civoid HiSysEventAdapterNativeTest::SetUpTestCase(void)
1181401458bSopenharmony_ci{
1191401458bSopenharmony_ci}
1201401458bSopenharmony_ci
1211401458bSopenharmony_civoid HiSysEventAdapterNativeTest::TearDownTestCase(void)
1221401458bSopenharmony_ci{
1231401458bSopenharmony_ci}
1241401458bSopenharmony_ci
1251401458bSopenharmony_civoid HiSysEventAdapterNativeTest::SetUp(void)
1261401458bSopenharmony_ci{
1271401458bSopenharmony_ci}
1281401458bSopenharmony_ci
1291401458bSopenharmony_civoid HiSysEventAdapterNativeTest::TearDown(void)
1301401458bSopenharmony_ci{
1311401458bSopenharmony_ci}
1321401458bSopenharmony_ci
1331401458bSopenharmony_ci/**
1341401458bSopenharmony_ci * @tc.name: TestAshMemory
1351401458bSopenharmony_ci * @tc.desc: Ashmemory test
1361401458bSopenharmony_ci * @tc.type: FUNC
1371401458bSopenharmony_ci * @tc.require: issueI62BDW
1381401458bSopenharmony_ci */
1391401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, TestAshMemory, TestSize.Level1)
1401401458bSopenharmony_ci{
1411401458bSopenharmony_ci    MessageParcel data;
1421401458bSopenharmony_ci    std::vector<std::u16string> src = {
1431401458bSopenharmony_ci        Str8ToStr16(std::string("0")),
1441401458bSopenharmony_ci        Str8ToStr16(std::string("1")),
1451401458bSopenharmony_ci    };
1461401458bSopenharmony_ci    auto ret = AshMemUtils::WriteBulkData(data, src);
1471401458bSopenharmony_ci    ASSERT_NE(ret, nullptr);
1481401458bSopenharmony_ci    std::vector<std::u16string> dest;
1491401458bSopenharmony_ci    auto ret1 = AshMemUtils::ReadBulkData(data, dest);
1501401458bSopenharmony_ci    ASSERT_TRUE(ret1);
1511401458bSopenharmony_ci    ASSERT_EQ(src.size(), dest.size());
1521401458bSopenharmony_ci    ASSERT_EQ(Str16ToStr8(dest[0]), "0");
1531401458bSopenharmony_ci    ASSERT_EQ(Str16ToStr8(dest[1]), "1");
1541401458bSopenharmony_ci    AshMemUtils::CloseAshmem(nullptr);
1551401458bSopenharmony_ci    ASSERT_TRUE(true);
1561401458bSopenharmony_ci    AshMemUtils::CloseAshmem(GetAshmem());
1571401458bSopenharmony_ci    ASSERT_TRUE(true);
1581401458bSopenharmony_ci}
1591401458bSopenharmony_ci
1601401458bSopenharmony_ci/**
1611401458bSopenharmony_ci * @tc.name: TestHiSysEventDelegateApisWithInvalidInstance
1621401458bSopenharmony_ci * @tc.desc: Call Add/Removelistener/SetDebugMode with a HiSysEventDelegate instance directly
1631401458bSopenharmony_ci * @tc.type: FUNC
1641401458bSopenharmony_ci * @tc.require: issueI62BDW
1651401458bSopenharmony_ci */
1661401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, TestHiSysEventDelegateApisWithInvalidInstance, TestSize.Level1)
1671401458bSopenharmony_ci{
1681401458bSopenharmony_ci    std::shared_ptr<OHOS::HiviewDFX::HiSysEventDelegate> delegate =
1691401458bSopenharmony_ci        std::make_shared<OHOS::HiviewDFX::HiSysEventDelegate>();
1701401458bSopenharmony_ci    std::thread t([delegate] () {
1711401458bSopenharmony_ci        delegate->BinderFunc();
1721401458bSopenharmony_ci    });
1731401458bSopenharmony_ci    t.detach();
1741401458bSopenharmony_ci    auto ret = delegate->RemoveListener(nullptr);
1751401458bSopenharmony_ci    ASSERT_EQ(ret, ERR_LISTENER_NOT_EXIST);
1761401458bSopenharmony_ci    ret = delegate->SetDebugMode(nullptr, true);
1771401458bSopenharmony_ci    ASSERT_EQ(ret, ERR_LISTENER_NOT_EXIST);
1781401458bSopenharmony_ci    auto listener = std::make_shared<HiSysEventBaseListener>();
1791401458bSopenharmony_ci    std::vector<ListenerRule> rules;
1801401458bSopenharmony_ci    ListenerRule listenerRule("DOMAIN", "EVENT_NAME", "TAG", RuleType::WHOLE_WORD);
1811401458bSopenharmony_ci    rules.emplace_back(listenerRule);
1821401458bSopenharmony_ci    ret = delegate->AddListener(listener, rules);
1831401458bSopenharmony_ci    ASSERT_EQ(ret, IPC_CALL_SUCCEED);
1841401458bSopenharmony_ci    ret = delegate->SetDebugMode(listener, true);
1851401458bSopenharmony_ci    if (ret == IPC_CALL_SUCCEED) {
1861401458bSopenharmony_ci        ret = delegate->SetDebugMode(listener, false);
1871401458bSopenharmony_ci        ASSERT_EQ(ret, IPC_CALL_SUCCEED);
1881401458bSopenharmony_ci    }
1891401458bSopenharmony_ci    ret = delegate->RemoveListener(listener);
1901401458bSopenharmony_ci    ASSERT_EQ(ret, IPC_CALL_SUCCEED);
1911401458bSopenharmony_ci    long long defaultTimeStap = -1;
1921401458bSopenharmony_ci    int queryCount = 10;
1931401458bSopenharmony_ci    struct QueryArg args(defaultTimeStap, defaultTimeStap, queryCount);
1941401458bSopenharmony_ci    std::vector<QueryRule> queryRules;
1951401458bSopenharmony_ci    std::vector<std::string> eventNames {"START_ABILITY"};
1961401458bSopenharmony_ci    QueryRule rule("AAFWK", eventNames);
1971401458bSopenharmony_ci    queryRules.emplace_back(rule);
1981401458bSopenharmony_ci    auto baseQuerier = std::make_shared<HiSysEventBaseQueryCallback>();
1991401458bSopenharmony_ci    ret = delegate->Query(args, queryRules, baseQuerier);
2001401458bSopenharmony_ci    ASSERT_EQ(ret, IPC_CALL_SUCCEED);
2011401458bSopenharmony_ci    int64_t currentTime = static_cast<int64_t>(GetMilliseconds());
2021401458bSopenharmony_ci    auto result = delegate->Subscribe(queryRules);
2031401458bSopenharmony_ci    ASSERT_GE(std::to_string(result).length(), std::to_string(currentTime).length());
2041401458bSopenharmony_ci    ret = delegate->Unsubscribe();
2051401458bSopenharmony_ci    ASSERT_EQ(ret, 0);
2061401458bSopenharmony_ci}
2071401458bSopenharmony_ci
2081401458bSopenharmony_ci/**
2091401458bSopenharmony_ci * @tc.name: TestQuerySysEventCallback
2101401458bSopenharmony_ci * @tc.desc: QuerySysEventCallbackStub test
2111401458bSopenharmony_ci * @tc.type: FUNC
2121401458bSopenharmony_ci * @tc.require: issueI62WJT
2131401458bSopenharmony_ci */
2141401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, TestQuerySysEventCallback, TestSize.Level1)
2151401458bSopenharmony_ci{
2161401458bSopenharmony_ci    QuerySysEventCallbackStub* querySysEventCallbackStub = new(std::nothrow) QuerySysEventCallbackStubTest();
2171401458bSopenharmony_ci    MessageParcel data, reply;
2181401458bSopenharmony_ci    MessageOption option;
2191401458bSopenharmony_ci    querySysEventCallbackStub->OnRemoteRequest(QuerySysEventCallbackStubTest::Code::DEFAULT, data, reply, option);
2201401458bSopenharmony_ci    ASSERT_TRUE(true);
2211401458bSopenharmony_ci    querySysEventCallbackStub->OnRemoteRequest(QuerySysEventCallbackStubTest::Code::ON_QUERY, data, reply, option);
2221401458bSopenharmony_ci    ASSERT_TRUE(true);
2231401458bSopenharmony_ci    querySysEventCallbackStub->OnRemoteRequest(QuerySysEventCallbackStubTest::Code::ON_COMPLETE, data, reply, option);
2241401458bSopenharmony_ci    ASSERT_TRUE(true);
2251401458bSopenharmony_ci}
2261401458bSopenharmony_ci
2271401458bSopenharmony_ci/**
2281401458bSopenharmony_ci * @tc.name: TestSysEventCallback
2291401458bSopenharmony_ci * @tc.desc: SysEventCallbackStub test
2301401458bSopenharmony_ci * @tc.type: FUNC
2311401458bSopenharmony_ci * @tc.require: issueI62WJT
2321401458bSopenharmony_ci */
2331401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, TestSysEventCallback, TestSize.Level1)
2341401458bSopenharmony_ci{
2351401458bSopenharmony_ci    SysEventCallbackStub* sysEventCallbackStub = new(std::nothrow) SysEventCallbackStubTest();
2361401458bSopenharmony_ci    MessageParcel data, reply;
2371401458bSopenharmony_ci    MessageOption option;
2381401458bSopenharmony_ci    sysEventCallbackStub->OnRemoteRequest(SysEventCallbackStubTest::Code::DEFAULT, data, reply, option);
2391401458bSopenharmony_ci    ASSERT_TRUE(true);
2401401458bSopenharmony_ci    sysEventCallbackStub->OnRemoteRequest(SysEventCallbackStubTest::Code::HANDLE, data, reply, option);
2411401458bSopenharmony_ci    ASSERT_TRUE(true);
2421401458bSopenharmony_ci}
2431401458bSopenharmony_ci
2441401458bSopenharmony_ci/**
2451401458bSopenharmony_ci * @tc.name: FileUtilOhosTest001
2461401458bSopenharmony_ci * @tc.desc: FileUtil test
2471401458bSopenharmony_ci * @tc.type: FUNC
2481401458bSopenharmony_ci * @tc.require: SR000I1G43
2491401458bSopenharmony_ci */
2501401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, FileUtilOhosTest001, TestSize.Level3)
2511401458bSopenharmony_ci{
2521401458bSopenharmony_ci    auto ret = FileUtil::ForceCreateDirectory(LOG_DIR_PATH);
2531401458bSopenharmony_ci    ASSERT_TRUE(ret);
2541401458bSopenharmony_ci    ret = FileUtil::IsDirectory(LOG_DIR_PATH);
2551401458bSopenharmony_ci    ASSERT_TRUE(ret);
2561401458bSopenharmony_ci    ret = FileUtil::RemoveDirectory(LOG_DIR_PATH);
2571401458bSopenharmony_ci    ASSERT_TRUE(ret);
2581401458bSopenharmony_ci    ret = FileUtil::IsDirectory(LOG_DIR_PATH);
2591401458bSopenharmony_ci    ASSERT_TRUE(!ret);
2601401458bSopenharmony_ci    auto result = FileUtil::GetFilePathByDir(LOG_DIR_PATH, "test.log");
2611401458bSopenharmony_ci    ASSERT_EQ(result, FILE_PATH);
2621401458bSopenharmony_ci}
2631401458bSopenharmony_ci
2641401458bSopenharmony_ci/**
2651401458bSopenharmony_ci * @tc.name: FileUtilOhosTest002
2661401458bSopenharmony_ci * @tc.desc: FileUtil test
2671401458bSopenharmony_ci * @tc.type: FUNC
2681401458bSopenharmony_ci * @tc.require: SR000I1G43
2691401458bSopenharmony_ci */
2701401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, FileUtilOhosTest002, TestSize.Level3)
2711401458bSopenharmony_ci{
2721401458bSopenharmony_ci    auto ret = FileUtil::IsLegalPath("aa/../bb");
2731401458bSopenharmony_ci    ASSERT_TRUE(!ret);
2741401458bSopenharmony_ci    ret = FileUtil::IsLegalPath("aa/./bb");
2751401458bSopenharmony_ci    ASSERT_TRUE(!ret);
2761401458bSopenharmony_ci    ret = FileUtil::IsLegalPath("aa/bb/");
2771401458bSopenharmony_ci    ASSERT_TRUE(ret);
2781401458bSopenharmony_ci    ret = FileUtil::IsLegalPath("aa/bb/cc");
2791401458bSopenharmony_ci    ASSERT_TRUE(ret);
2801401458bSopenharmony_ci}
2811401458bSopenharmony_ci
2821401458bSopenharmony_ci/**
2831401458bSopenharmony_ci * @tc.name: MarshallingTAndUnmarshallingTest
2841401458bSopenharmony_ci * @tc.desc: Unmarshalling test
2851401458bSopenharmony_ci * @tc.type: FUNC
2861401458bSopenharmony_ci * @tc.require: issueI62WJT
2871401458bSopenharmony_ci */
2881401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, MarshallingTAndUnmarshallingTest, TestSize.Level1)
2891401458bSopenharmony_ci{
2901401458bSopenharmony_ci    long long defaultTimeStap = -1;
2911401458bSopenharmony_ci    int queryCount = 10;
2921401458bSopenharmony_ci    OHOS::HiviewDFX::QueryArgument args(defaultTimeStap, defaultTimeStap, queryCount);
2931401458bSopenharmony_ci    MessageParcel parcel1;
2941401458bSopenharmony_ci    auto ret = args.Marshalling(parcel1);
2951401458bSopenharmony_ci    ASSERT_TRUE(ret);
2961401458bSopenharmony_ci    QueryArgument* argsPtr = args.Unmarshalling(parcel1);
2971401458bSopenharmony_ci    ASSERT_NE(argsPtr, nullptr);
2981401458bSopenharmony_ci    ASSERT_EQ(argsPtr->maxEvents, 10); // 10 is a expcted test value
2991401458bSopenharmony_ci    ASSERT_EQ(argsPtr->beginTime, -1); // -1 is a expcted test value
3001401458bSopenharmony_ci    OHOS::HiviewDFX::SysEventRule sysEventRule("DOMAIN", "EVENT_NAME", "TAG", OHOS::HiviewDFX::RuleType::WHOLE_WORD);
3011401458bSopenharmony_ci    MessageParcel parcel2;
3021401458bSopenharmony_ci    ret = sysEventRule.Marshalling(parcel2);
3031401458bSopenharmony_ci    ASSERT_TRUE(ret);
3041401458bSopenharmony_ci    OHOS::HiviewDFX::SysEventRule* sysEventRulePtr = sysEventRule.Unmarshalling(parcel2);
3051401458bSopenharmony_ci    ASSERT_NE(sysEventRulePtr, nullptr);
3061401458bSopenharmony_ci    ASSERT_EQ(sysEventRulePtr->domain, "DOMAIN");
3071401458bSopenharmony_ci    ASSERT_EQ(sysEventRulePtr->eventName, "EVENT_NAME");
3081401458bSopenharmony_ci    ASSERT_EQ(sysEventRulePtr->tag, "TAG");
3091401458bSopenharmony_ci    std::vector<std::string> eventNames { "EVENT_NAME1", "EVENT_NAME2" };
3101401458bSopenharmony_ci    OHOS::HiviewDFX::SysEventQueryRule queryRule("DOMAIN", eventNames);
3111401458bSopenharmony_ci    MessageParcel parcel3;
3121401458bSopenharmony_ci    ret = queryRule.Marshalling(parcel3);
3131401458bSopenharmony_ci    ASSERT_TRUE(ret);
3141401458bSopenharmony_ci    OHOS::HiviewDFX::SysEventQueryRule* queryRulePtr = queryRule.Unmarshalling(parcel3);
3151401458bSopenharmony_ci    ASSERT_NE(queryRulePtr, nullptr);
3161401458bSopenharmony_ci    ASSERT_EQ(queryRulePtr->domain, "DOMAIN");;
3171401458bSopenharmony_ci    ASSERT_EQ(queryRulePtr->eventList.size(), 2); // 2 is a expcted test value
3181401458bSopenharmony_ci    ASSERT_EQ(queryRulePtr->eventList[0], "EVENT_NAME1");
3191401458bSopenharmony_ci}
3201401458bSopenharmony_ci
3211401458bSopenharmony_ci/**
3221401458bSopenharmony_ci * @tc.name: CStringUtilTest
3231401458bSopenharmony_ci * @tc.desc: Test methods which defined in namespace StringUtil
3241401458bSopenharmony_ci * @tc.type: FUNC
3251401458bSopenharmony_ci * @tc.require: issueI62WJT
3261401458bSopenharmony_ci */
3271401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, CStringUtilTest, TestSize.Level1)
3281401458bSopenharmony_ci{
3291401458bSopenharmony_ci    char dest[100] {}; // 100 is a test length
3301401458bSopenharmony_ci    std::string src = "01234567";
3311401458bSopenharmony_ci
3321401458bSopenharmony_ci    auto ret = StringUtil::CopyCString(dest, src, 3); // 3 is a test length
3331401458bSopenharmony_ci    ASSERT_EQ(ret, -1); // -1 is a expected result
3341401458bSopenharmony_ci    ret = StringUtil::CopyCString(dest, src, 10); // 3 is a test length
3351401458bSopenharmony_ci    ASSERT_NE(ret, -1); // -1 is a expected result
3361401458bSopenharmony_ci    char* dest2p = dest;
3371401458bSopenharmony_ci    char** dest2pp = &dest2p;
3381401458bSopenharmony_ci    ret = StringUtil::CreateCString(dest2pp, src, 3); // 3 is a test length
3391401458bSopenharmony_ci    ASSERT_EQ(ret, -1); // -1 is a expected result
3401401458bSopenharmony_ci    ret = StringUtil::CreateCString(dest2pp, src, 10); // 3 is a test length
3411401458bSopenharmony_ci    ASSERT_NE(ret, -1); // -1 is a expected result
3421401458bSopenharmony_ci    ret = StringUtil::ConvertCString(src, dest2pp, 3); // 3 is a test length
3431401458bSopenharmony_ci    ASSERT_EQ(ret, -1); // -1 is a expected result
3441401458bSopenharmony_ci    ret = StringUtil::ConvertCString(src, dest2pp, 10); // 3 is a test length
3451401458bSopenharmony_ci    ASSERT_NE(ret, -1); // -1 is a expected result
3461401458bSopenharmony_ci    char v3[10][100] {};
3471401458bSopenharmony_ci    char* dest3p = v3[0];
3481401458bSopenharmony_ci    char** dest3pp = &dest3p;
3491401458bSopenharmony_ci    char*** dest3ppp = &dest3pp;
3501401458bSopenharmony_ci    std::vector<std::string> srcs1 = {};
3511401458bSopenharmony_ci    std::vector<std::string> srcs2 = {
3521401458bSopenharmony_ci        "01234567",
3531401458bSopenharmony_ci        "01234567",
3541401458bSopenharmony_ci    };
3551401458bSopenharmony_ci    size_t len;
3561401458bSopenharmony_ci    ret = StringUtil::ConvertCStringVec(srcs1, dest3ppp, len);
3571401458bSopenharmony_ci    ASSERT_EQ(ret, 0);
3581401458bSopenharmony_ci    ASSERT_EQ(len, 0);
3591401458bSopenharmony_ci    ret = StringUtil::ConvertCStringVec(srcs2, dest3ppp, len);
3601401458bSopenharmony_ci    ASSERT_EQ(ret, 0);
3611401458bSopenharmony_ci    ASSERT_EQ(len, 2); // 2 is a expected length
3621401458bSopenharmony_ci    char dest4[3] = {'0', '1', '2'};
3631401458bSopenharmony_ci    StringUtil::MemsetSafe(reinterpret_cast<void*>(dest4), 3); // 3 is a test length
3641401458bSopenharmony_ci    ASSERT_EQ(dest4[0], 0);
3651401458bSopenharmony_ci    ASSERT_EQ(dest4[1], 0); // 1 is a test index
3661401458bSopenharmony_ci    ASSERT_EQ(dest4[2], 0); // 2 is a test index
3671401458bSopenharmony_ci}
3681401458bSopenharmony_ci
3691401458bSopenharmony_ci/**
3701401458bSopenharmony_ci * @tc.name: HiSysEventListenerProxyTest
3711401458bSopenharmony_ci * @tc.desc: Test apis of HiSysEventListenerProxy
3721401458bSopenharmony_ci * @tc.type: FUNC
3731401458bSopenharmony_ci * @tc.require: issueI62WJT
3741401458bSopenharmony_ci */
3751401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, HiSysEventListenerProxyTest, TestSize.Level1)
3761401458bSopenharmony_ci{
3771401458bSopenharmony_ci    auto baseListener = std::make_shared<HiSysEventBaseListener>();
3781401458bSopenharmony_ci    HiSysEventListenerProxy proxy(baseListener);
3791401458bSopenharmony_ci    proxy.Handle(Str8ToStr16(std::string("DOMAIN")), Str8ToStr16(std::string("EVENT_NAME")), 0,
3801401458bSopenharmony_ci        Str8ToStr16(std::string("{}")));
3811401458bSopenharmony_ci    auto listener = proxy.GetEventListener();
3821401458bSopenharmony_ci    ASSERT_NE(listener, nullptr);
3831401458bSopenharmony_ci    auto deathRecipient = proxy.GetCallbackDeathRecipient();
3841401458bSopenharmony_ci    ASSERT_NE(deathRecipient, nullptr);
3851401458bSopenharmony_ci    if (deathRecipient != nullptr) {
3861401458bSopenharmony_ci        deathRecipient->OnRemoteDied(nullptr);
3871401458bSopenharmony_ci        ASSERT_NE(deathRecipient->GetEventListener(), nullptr);
3881401458bSopenharmony_ci    }
3891401458bSopenharmony_ci}
3901401458bSopenharmony_ci
3911401458bSopenharmony_ci/**
3921401458bSopenharmony_ci * @tc.name: HiSysEventQueryProxyTest
3931401458bSopenharmony_ci * @tc.desc: Test apis of HiSysEventQueryProxy
3941401458bSopenharmony_ci * @tc.type: FUNC
3951401458bSopenharmony_ci * @tc.require: issueI62WJT
3961401458bSopenharmony_ci */
3971401458bSopenharmony_ciHWTEST_F(HiSysEventAdapterNativeTest, HiSysEventQueryProxyTest, TestSize.Level1)
3981401458bSopenharmony_ci{
3991401458bSopenharmony_ci    auto baseQuerier = std::make_shared<HiSysEventBaseQueryCallback>();
4001401458bSopenharmony_ci    HiSysEventQueryProxy proxy(baseQuerier);
4011401458bSopenharmony_ci    std::vector<std::u16string> sysEvent {};
4021401458bSopenharmony_ci    std::vector<int64_t> seq {};
4031401458bSopenharmony_ci    proxy.OnQuery(sysEvent, seq);
4041401458bSopenharmony_ci    ASSERT_TRUE(true);
4051401458bSopenharmony_ci    proxy.OnComplete(0, 0, 0);
4061401458bSopenharmony_ci    ASSERT_TRUE(true);
4071401458bSopenharmony_ci}