1020a203aSopenharmony_ci/*
2020a203aSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3020a203aSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4020a203aSopenharmony_ci * you may not use this file except in compliance with the License.
5020a203aSopenharmony_ci * You may obtain a copy of the License at
6020a203aSopenharmony_ci *
7020a203aSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8020a203aSopenharmony_ci *
9020a203aSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10020a203aSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11020a203aSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12020a203aSopenharmony_ci * See the License for the specific language governing permissions and
13020a203aSopenharmony_ci * limitations under the License.
14020a203aSopenharmony_ci */
15020a203aSopenharmony_ci#include "plugin_test.h"
16020a203aSopenharmony_ci
17020a203aSopenharmony_ci#include "plugin.h"
18020a203aSopenharmony_ci#include "pipeline.h"
19020a203aSopenharmony_ci
20020a203aSopenharmony_cinamespace OHOS {
21020a203aSopenharmony_cinamespace HiviewDFX {
22020a203aSopenharmony_civoid PluginTest::SetUpTestCase()
23020a203aSopenharmony_ci{
24020a203aSopenharmony_ci}
25020a203aSopenharmony_ci
26020a203aSopenharmony_civoid PluginTest::TearDownTestCase()
27020a203aSopenharmony_ci{
28020a203aSopenharmony_ci}
29020a203aSopenharmony_ci
30020a203aSopenharmony_civoid PluginTest::SetUp()
31020a203aSopenharmony_ci{
32020a203aSopenharmony_ci}
33020a203aSopenharmony_ci
34020a203aSopenharmony_civoid PluginTest::TearDown()
35020a203aSopenharmony_ci{
36020a203aSopenharmony_ci}
37020a203aSopenharmony_ci
38020a203aSopenharmony_ci/**
39020a203aSopenharmony_ci * @tc.name: PluginTest001
40020a203aSopenharmony_ci * @tc.desc: Test the api of Plugin.
41020a203aSopenharmony_ci * @tc.type: FUNC
42020a203aSopenharmony_ci * @tc.require:
43020a203aSopenharmony_ci */
44020a203aSopenharmony_ciHWTEST_F(PluginTest, PluginTest001, testing::ext::TestSize.Level0)
45020a203aSopenharmony_ci{
46020a203aSopenharmony_ci    /**
47020a203aSopenharmony_ci     * @tc.steps: step1. create Plugin object.
48020a203aSopenharmony_ci     * @tc.steps: step2. invoke the function of the plugin object.
49020a203aSopenharmony_ci     */
50020a203aSopenharmony_ci    printf("PluginTest001 start\n");
51020a203aSopenharmony_ci    Plugin plugin;
52020a203aSopenharmony_ci    ASSERT_FALSE(plugin.HasLoaded());
53020a203aSopenharmony_ci
54020a203aSopenharmony_ci    plugin.OnLoad();
55020a203aSopenharmony_ci    auto event = plugin.GetEvent(Event::SYS_EVENT);
56020a203aSopenharmony_ci    ASSERT_NE(event, nullptr);
57020a203aSopenharmony_ci    ASSERT_TRUE(plugin.OnEvent(event));
58020a203aSopenharmony_ci
59020a203aSopenharmony_ci    /* default null function test */
60020a203aSopenharmony_ci    // Dump
61020a203aSopenharmony_ci    plugin.Dump(0, {});
62020a203aSopenharmony_ci    // OnEventListeningCallback
63020a203aSopenharmony_ci    plugin.OnEventListeningCallback(*(event.get()));
64020a203aSopenharmony_ci    // OnConfigUpdate
65020a203aSopenharmony_ci    std::string localCfgPath = "test/local/config";
66020a203aSopenharmony_ci    std::string cloudCfgPath = "test/cloud/config";
67020a203aSopenharmony_ci    plugin.OnConfigUpdate(localCfgPath, cloudCfgPath);
68020a203aSopenharmony_ci
69020a203aSopenharmony_ci    // delay to handle event
70020a203aSopenharmony_ci    auto pipelineEvent = std::make_shared<PipelineEvent>(*(event.get()));
71020a203aSopenharmony_ci    ASSERT_FALSE(pipelineEvent->hasPending_);
72020a203aSopenharmony_ci    auto workLoop = std::make_shared<EventLoop>("testLoop");
73020a203aSopenharmony_ci    plugin.BindWorkLoop(workLoop);
74020a203aSopenharmony_ci    ASSERT_NE(plugin.GetWorkLoop(), nullptr);
75020a203aSopenharmony_ci    plugin.DelayProcessEvent(pipelineEvent, 1); // 1s delay
76020a203aSopenharmony_ci    ASSERT_TRUE(pipelineEvent->hasPending_);
77020a203aSopenharmony_ci    sleep(3);
78020a203aSopenharmony_ci
79020a203aSopenharmony_ci    // udpate the active time
80020a203aSopenharmony_ci    auto lastActiveTime1 = plugin.GetLastActiveTime();
81020a203aSopenharmony_ci    ASSERT_GT(lastActiveTime1, 0);
82020a203aSopenharmony_ci    plugin.UpdateTimeByDelay(1000); // delay 1s
83020a203aSopenharmony_ci    auto lastActiveTime2 = plugin.GetLastActiveTime();
84020a203aSopenharmony_ci    ASSERT_GT(lastActiveTime2, lastActiveTime1);
85020a203aSopenharmony_ci
86020a203aSopenharmony_ci    // set/get function
87020a203aSopenharmony_ci    std::string version = "1.0";
88020a203aSopenharmony_ci    plugin.SetVersion(version);
89020a203aSopenharmony_ci    ASSERT_EQ(version, plugin.GetVersion());
90020a203aSopenharmony_ci
91020a203aSopenharmony_ci    // bundle test
92020a203aSopenharmony_ci    ASSERT_FALSE(plugin.IsBundlePlugin());
93020a203aSopenharmony_ci    std::string bundleName = "testBundle";
94020a203aSopenharmony_ci    plugin.SetBundleName(bundleName);
95020a203aSopenharmony_ci    ASSERT_TRUE(plugin.IsBundlePlugin());
96020a203aSopenharmony_ci
97020a203aSopenharmony_ci    ASSERT_EQ(plugin.GetUseCount(), 0);
98020a203aSopenharmony_ci    plugin.AddUseCount();
99020a203aSopenharmony_ci    ASSERT_EQ(plugin.GetUseCount(), 1);
100020a203aSopenharmony_ci    plugin.SubUseCount();
101020a203aSopenharmony_ci    ASSERT_EQ(plugin.GetUseCount(), 0);
102020a203aSopenharmony_ci
103020a203aSopenharmony_ci    plugin.OnUnload();
104020a203aSopenharmony_ci    printf("PluginTest001 end\n");
105020a203aSopenharmony_ci}
106020a203aSopenharmony_ci
107020a203aSopenharmony_ci/**
108020a203aSopenharmony_ci * @tc.name: HiviewContextTest001
109020a203aSopenharmony_ci * @tc.desc: Test the api of HiviewContext.
110020a203aSopenharmony_ci * @tc.type: FUNC
111020a203aSopenharmony_ci * @tc.require:
112020a203aSopenharmony_ci */
113020a203aSopenharmony_ciHWTEST_F(PluginTest, HiviewContextTest001, testing::ext::TestSize.Level0)
114020a203aSopenharmony_ci{
115020a203aSopenharmony_ci    /**
116020a203aSopenharmony_ci     * @tc.steps: step1. create HiviewContext object.
117020a203aSopenharmony_ci     * @tc.steps: step2. invoke the function of the HiviewContext object.
118020a203aSopenharmony_ci     */
119020a203aSopenharmony_ci    printf("HiviewContextTest001 start\n");
120020a203aSopenharmony_ci    HiviewContext context;
121020a203aSopenharmony_ci
122020a203aSopenharmony_ci    /* default null function test */
123020a203aSopenharmony_ci    // PostUnorderedEvent
124020a203aSopenharmony_ci    context.PostUnorderedEvent(nullptr, nullptr);
125020a203aSopenharmony_ci    // RegisterUnorderedEventListener
126020a203aSopenharmony_ci    std::weak_ptr<EventListener> eventListenerPtr;
127020a203aSopenharmony_ci    context.RegisterUnorderedEventListener(eventListenerPtr);
128020a203aSopenharmony_ci    // PostAsyncEventToTarget
129020a203aSopenharmony_ci    context.PostAsyncEventToTarget(nullptr, "", nullptr);
130020a203aSopenharmony_ci    // RequestUnloadPlugin
131020a203aSopenharmony_ci    context.RequestUnloadPlugin(nullptr);
132020a203aSopenharmony_ci    // AppendPluginToPipeline
133020a203aSopenharmony_ci    context.AppendPluginToPipeline("", "");
134020a203aSopenharmony_ci    // RequestLoadBundle
135020a203aSopenharmony_ci    context.RequestLoadBundle("");
136020a203aSopenharmony_ci    // RequestUnloadBundle
137020a203aSopenharmony_ci    context.RequestUnloadBundle("");
138020a203aSopenharmony_ci    // AddListenerInfo
139020a203aSopenharmony_ci    context.AddListenerInfo(0, "", {}, {});
140020a203aSopenharmony_ci    context.AddListenerInfo(0, "");
141020a203aSopenharmony_ci    // AddDispatchInfo
142020a203aSopenharmony_ci    std::weak_ptr<Plugin> pluginPtr;
143020a203aSopenharmony_ci    context.AddDispatchInfo(pluginPtr, {}, {}, {}, {});
144020a203aSopenharmony_ci
145020a203aSopenharmony_ci    /* default null function test with return value */
146020a203aSopenharmony_ci    // PostSyncEventToTarget
147020a203aSopenharmony_ci    ASSERT_TRUE(context.PostSyncEventToTarget(nullptr, "", nullptr));
148020a203aSopenharmony_ci    // GetSharedWorkLoop
149020a203aSopenharmony_ci    ASSERT_EQ(context.GetSharedWorkLoop(), nullptr);
150020a203aSopenharmony_ci    // GetPipelineSequenceByName
151020a203aSopenharmony_ci    ASSERT_TRUE(context.GetPipelineSequenceByName("").empty());
152020a203aSopenharmony_ci    // IsReady
153020a203aSopenharmony_ci    ASSERT_FALSE(context.IsReady());
154020a203aSopenharmony_ci    // GetHiViewDirectory
155020a203aSopenharmony_ci    ASSERT_TRUE(context.GetHiViewDirectory(HiviewContext::DirectoryType::CONFIG_DIRECTORY).empty());
156020a203aSopenharmony_ci    ASSERT_TRUE(context.GetHiViewDirectory(HiviewContext::DirectoryType::WORK_DIRECTORY).empty());
157020a203aSopenharmony_ci    ASSERT_TRUE(context.GetHiViewDirectory(HiviewContext::DirectoryType::PERSIST_DIR).empty());
158020a203aSopenharmony_ci    // GetHiviewProperty
159020a203aSopenharmony_ci    ASSERT_EQ(context.GetHiviewProperty("test_key", "test_value"), "test_value");
160020a203aSopenharmony_ci    // SetHiviewProperty
161020a203aSopenharmony_ci    ASSERT_TRUE(context.SetHiviewProperty("test_key", "test_value", true));
162020a203aSopenharmony_ci    // InstancePluginByProxy
163020a203aSopenharmony_ci    ASSERT_EQ(context.InstancePluginByProxy(nullptr), nullptr);
164020a203aSopenharmony_ci    // GetPluginByName
165020a203aSopenharmony_ci    ASSERT_EQ(context.GetPluginByName(""), nullptr);
166020a203aSopenharmony_ci    // GetListenerInfo
167020a203aSopenharmony_ci    ASSERT_TRUE(context.GetListenerInfo(0, "", "").empty());
168020a203aSopenharmony_ci    // GetDisPatcherInfo
169020a203aSopenharmony_ci    ASSERT_TRUE(context.GetDisPatcherInfo(0, "", "", "").empty());
170020a203aSopenharmony_ci
171020a203aSopenharmony_ci    printf("HiviewContextTest001 end\n");
172020a203aSopenharmony_ci}
173020a203aSopenharmony_ci} // namespace HiviewDFX
174020a203aSopenharmony_ci} // namespace OHOS
175