1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License.
5d9f0492fSopenharmony_ci * You may obtain a copy of the License at
6d9f0492fSopenharmony_ci *
7d9f0492fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8d9f0492fSopenharmony_ci *
9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and
13d9f0492fSopenharmony_ci * limitations under the License.
14d9f0492fSopenharmony_ci */
15d9f0492fSopenharmony_ci#include <gtest/gtest.h>
16d9f0492fSopenharmony_ci
17d9f0492fSopenharmony_ci#include "bootstage.h"
18d9f0492fSopenharmony_ci#include "init_jobs_internal.h"
19d9f0492fSopenharmony_ci#include "init_log.h"
20d9f0492fSopenharmony_ci#include "init_param.h"
21d9f0492fSopenharmony_ci#include "init_utils.h"
22d9f0492fSopenharmony_ci#include "init_hashmap.h"
23d9f0492fSopenharmony_ci#include "loop_event.h"
24d9f0492fSopenharmony_ci#include "param_manager.h"
25d9f0492fSopenharmony_ci#include "param_stub.h"
26d9f0492fSopenharmony_ci#include "param_utils.h"
27d9f0492fSopenharmony_ci#include "securec.h"
28d9f0492fSopenharmony_ci#include "trigger_checker.h"
29d9f0492fSopenharmony_ci#include "trigger_manager.h"
30d9f0492fSopenharmony_ci
31d9f0492fSopenharmony_ciusing namespace testing::ext;
32d9f0492fSopenharmony_ciusing namespace std;
33d9f0492fSopenharmony_ci
34d9f0492fSopenharmony_cistatic const int triggerBuffer = 512;
35d9f0492fSopenharmony_cistatic uint32_t g_execCmdId = 0;
36d9f0492fSopenharmony_cistatic int g_matchTrigger = 0;
37d9f0492fSopenharmony_cistatic char g_matchTriggerName[triggerBuffer] = { 0 };
38d9f0492fSopenharmony_cistatic void BootStateChange(int start, const char *content)
39d9f0492fSopenharmony_ci{
40d9f0492fSopenharmony_ci    UNUSED(content);
41d9f0492fSopenharmony_ci    return;
42d9f0492fSopenharmony_ci}
43d9f0492fSopenharmony_ci
44d9f0492fSopenharmony_cistatic int TestCmdExec(const TriggerNode *trigger, const char *content, uint32_t size)
45d9f0492fSopenharmony_ci{
46d9f0492fSopenharmony_ci    PARAM_CHECK(trigger != nullptr, return -1, "Invalid trigger");
47d9f0492fSopenharmony_ci    PARAM_LOGI("DoTriggerExecute_ trigger type: %d %s", trigger->type, GetTriggerName(trigger));
48d9f0492fSopenharmony_ci    PARAM_CHECK(trigger->type <= TRIGGER_UNKNOW, return -1, "Invalid trigger type %d", trigger->type);
49d9f0492fSopenharmony_ci    CommandNode *cmd = GetNextCmdNode(reinterpret_cast<const JobNode *>(trigger), nullptr);
50d9f0492fSopenharmony_ci    while (cmd != nullptr) {
51d9f0492fSopenharmony_ci        g_execCmdId = cmd->cmdKeyIndex;
52d9f0492fSopenharmony_ci        cmd = GetNextCmdNode(reinterpret_cast<const JobNode *>(trigger), cmd);
53d9f0492fSopenharmony_ci    }
54d9f0492fSopenharmony_ci    return 0;
55d9f0492fSopenharmony_ci}
56d9f0492fSopenharmony_ci
57d9f0492fSopenharmony_cistatic int TestTriggerExecute(TriggerNode *trigger, const char *content, uint32_t size)
58d9f0492fSopenharmony_ci{
59d9f0492fSopenharmony_ci    JobNode *node = reinterpret_cast<JobNode *>(trigger);
60d9f0492fSopenharmony_ci    int ret = memcpy_s(g_matchTriggerName, (int)sizeof(g_matchTriggerName) - 1, node->name, strlen(node->name));
61d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
62d9f0492fSopenharmony_ci    g_matchTriggerName[strlen(node->name)] = '\0';
63d9f0492fSopenharmony_ci    g_matchTrigger++;
64d9f0492fSopenharmony_ci    return 0;
65d9f0492fSopenharmony_ci}
66d9f0492fSopenharmony_ci
67d9f0492fSopenharmony_cistatic void Test_JobParseHook(JOB_PARSE_CTX *jobParseCtx)
68d9f0492fSopenharmony_ci{
69d9f0492fSopenharmony_ci    return;
70d9f0492fSopenharmony_ci}
71d9f0492fSopenharmony_ci
72d9f0492fSopenharmony_ciclass TriggerUnitTest : public ::testing::Test {
73d9f0492fSopenharmony_cipublic:
74d9f0492fSopenharmony_ci    TriggerUnitTest() {}
75d9f0492fSopenharmony_ci    virtual ~TriggerUnitTest() {}
76d9f0492fSopenharmony_ci
77d9f0492fSopenharmony_ci    void SetUp()
78d9f0492fSopenharmony_ci    {
79d9f0492fSopenharmony_ci        SetTestPermissionResult(0);
80d9f0492fSopenharmony_ci    }
81d9f0492fSopenharmony_ci    void TearDown() {}
82d9f0492fSopenharmony_ci    void TestBody() {}
83d9f0492fSopenharmony_ci
84d9f0492fSopenharmony_ci    int ParseInitCfg(const char *configFile)
85d9f0492fSopenharmony_ci    {
86d9f0492fSopenharmony_ci        char *fileBuf = ReadFileToBuf(configFile);
87d9f0492fSopenharmony_ci        INIT_ERROR_CHECK(fileBuf != nullptr, return -1, "Failed to read file content %s", configFile);
88d9f0492fSopenharmony_ci        cJSON *fileRoot = cJSON_Parse(fileBuf);
89d9f0492fSopenharmony_ci        INIT_ERROR_CHECK(fileRoot != nullptr, return -1, "Failed to parse json file %s", configFile);
90d9f0492fSopenharmony_ci        ParseTriggerConfig(fileRoot, nullptr, nullptr);
91d9f0492fSopenharmony_ci        cJSON_Delete(fileRoot);
92d9f0492fSopenharmony_ci        free(fileBuf);
93d9f0492fSopenharmony_ci        fileBuf = nullptr;
94d9f0492fSopenharmony_ci        return 0;
95d9f0492fSopenharmony_ci    }
96d9f0492fSopenharmony_ci
97d9f0492fSopenharmony_ci    int TestLoadTrigger()
98d9f0492fSopenharmony_ci    {
99d9f0492fSopenharmony_ci        RegisterBootStateChange(BootStateChange);
100d9f0492fSopenharmony_ci        InitAddJobParseHook(Test_JobParseHook);
101d9f0492fSopenharmony_ci
102d9f0492fSopenharmony_ci        int cmdKeyIndex = 0;
103d9f0492fSopenharmony_ci        const char *matchCmd = GetMatchCmd("setparam aaaa aaaa", &cmdKeyIndex);
104d9f0492fSopenharmony_ci        printf("cmd %d \n", matchCmd != nullptr);
105d9f0492fSopenharmony_ci        EXPECT_NE(matchCmd, nullptr);
106d9f0492fSopenharmony_ci
107d9f0492fSopenharmony_ci        ReadConfig();
108d9f0492fSopenharmony_ci        ParseInitCfg(STARTUP_INIT_UT_PATH "/trigger_test.cfg");
109d9f0492fSopenharmony_ci        // trigger
110d9f0492fSopenharmony_ci        PostTrigger(EVENT_TRIGGER_BOOT, "pre-init", strlen("pre-init"));
111d9f0492fSopenharmony_ci        PostTrigger(EVENT_TRIGGER_BOOT, "init", strlen("init"));
112d9f0492fSopenharmony_ci        PostTrigger(EVENT_TRIGGER_BOOT, "post-init", strlen("post-init"));
113d9f0492fSopenharmony_ci        LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
114d9f0492fSopenharmony_ci        return 0;
115d9f0492fSopenharmony_ci    }
116d9f0492fSopenharmony_ci
117d9f0492fSopenharmony_ci    TriggerHeader *GetTriggerHeader(int type)
118d9f0492fSopenharmony_ci    {
119d9f0492fSopenharmony_ci        return &GetTriggerWorkSpace()->triggerHead[type];
120d9f0492fSopenharmony_ci    }
121d9f0492fSopenharmony_ci
122d9f0492fSopenharmony_ci    JobNode *AddTrigger(int type, const char *name, const char *condition, uint32_t size)
123d9f0492fSopenharmony_ci    {
124d9f0492fSopenharmony_ci        return UpdateJobTrigger(GetTriggerWorkSpace(), type, condition, name);
125d9f0492fSopenharmony_ci    }
126d9f0492fSopenharmony_ci
127d9f0492fSopenharmony_ci    int TestAddTriggerForBoot()
128d9f0492fSopenharmony_ci    {
129d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_BOOT, "init-later", "", 0);
130d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), "init-later");
131d9f0492fSopenharmony_ci        EXPECT_EQ(node, trigger);
132d9f0492fSopenharmony_ci        if (trigger == nullptr) {
133d9f0492fSopenharmony_ci            return -1;
134d9f0492fSopenharmony_ci        }
135d9f0492fSopenharmony_ci        EXPECT_EQ(strcmp(trigger->name, "init-later"), 0);
136d9f0492fSopenharmony_ci
137d9f0492fSopenharmony_ci        // add command
138d9f0492fSopenharmony_ci        int cmdIndex = 0;
139d9f0492fSopenharmony_ci        GetMatchCmd("reboot ", &cmdIndex);
140d9f0492fSopenharmony_ci        int ret = AddCommand(trigger, cmdIndex, nullptr, nullptr);
141d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
142d9f0492fSopenharmony_ci        ret = AddCommand(trigger, cmdIndex, "update: aaaaaaa", nullptr);
143d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
144d9f0492fSopenharmony_ci        return 0;
145d9f0492fSopenharmony_ci    }
146d9f0492fSopenharmony_ci
147d9f0492fSopenharmony_ci    int TestAddTriggerForParm()
148d9f0492fSopenharmony_ci    {
149d9f0492fSopenharmony_ci        const char *triggerName = "param:test_param.000";
150d9f0492fSopenharmony_ci        int id = 0;
151d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, "test_param.000=1", 0);
152d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
153d9f0492fSopenharmony_ci        GetTriggerHeader(TRIGGER_PARAM)->compareData(reinterpret_cast<struct tagTriggerNode_ *>(trigger), &id);
154d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
155d9f0492fSopenharmony_ci        if (trigger == nullptr) {
156d9f0492fSopenharmony_ci            return -1;
157d9f0492fSopenharmony_ci        }
158d9f0492fSopenharmony_ci        EXPECT_EQ(strcmp(trigger->name, triggerName), 0);
159d9f0492fSopenharmony_ci
160d9f0492fSopenharmony_ci        // add command
161d9f0492fSopenharmony_ci        int cmdIndex = 0;
162d9f0492fSopenharmony_ci        GetMatchCmd("reboot ", &cmdIndex);
163d9f0492fSopenharmony_ci        int ret = AddCommand(trigger, cmdIndex, nullptr, nullptr);
164d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
165d9f0492fSopenharmony_ci        ret = AddCommand(trigger, cmdIndex, "update: aaaaaaa", nullptr);
166d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
167d9f0492fSopenharmony_ci        return 0;
168d9f0492fSopenharmony_ci    }
169d9f0492fSopenharmony_ci
170d9f0492fSopenharmony_ci    int TestParamEvent()
171d9f0492fSopenharmony_ci    {
172d9f0492fSopenharmony_ci        PostParamTrigger(EVENT_TRIGGER_PARAM, "net.tcp.default_init_rwnd", "60");
173d9f0492fSopenharmony_ci        const char *sysctrl = "ohos.startup.powerctrl=reboot, shutdown";
174d9f0492fSopenharmony_ci        PostTrigger(EVENT_TRIGGER_PARAM, sysctrl, strlen(sysctrl));
175d9f0492fSopenharmony_ci        PostParamTrigger(EVENT_TRIGGER_PARAM, "ohos.startup.powerctrl", "reboot, shutdown");
176d9f0492fSopenharmony_ci
177d9f0492fSopenharmony_ci        const char *startCmd = "ohos.ctl.start=hdc -t";
178d9f0492fSopenharmony_ci        PostTrigger(EVENT_TRIGGER_PARAM, startCmd, strlen(startCmd));
179d9f0492fSopenharmony_ci        PostParamTrigger(EVENT_TRIGGER_PARAM, "ohos.ctl.start", "hdc -t");
180d9f0492fSopenharmony_ci
181d9f0492fSopenharmony_ci        const char *stopCmd = "ohos.ctl.stop=hdc -t";
182d9f0492fSopenharmony_ci        PostTrigger(EVENT_TRIGGER_PARAM, stopCmd, strlen(stopCmd));
183d9f0492fSopenharmony_ci        PostParamTrigger(EVENT_TRIGGER_PARAM, "ohos.ctl.stop", "hdc -t");
184d9f0492fSopenharmony_ci        return 0;
185d9f0492fSopenharmony_ci    }
186d9f0492fSopenharmony_ci
187d9f0492fSopenharmony_ci    int TestBootEvent(const char *boot)
188d9f0492fSopenharmony_ci    {
189d9f0492fSopenharmony_ci        PostTrigger(EVENT_TRIGGER_BOOT, boot, strlen(boot));
190d9f0492fSopenharmony_ci        return 0;
191d9f0492fSopenharmony_ci    }
192d9f0492fSopenharmony_ci
193d9f0492fSopenharmony_ci    int TestCheckParamTrigger1()
194d9f0492fSopenharmony_ci    {
195d9f0492fSopenharmony_ci        const char *triggerName = "param:test_param.111";
196d9f0492fSopenharmony_ci        const char *param = "test_param.aaa.111.2222";
197d9f0492fSopenharmony_ci        const char *value = "1";
198d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
199d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param, value);
200d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
201d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, buffer, 0);
202d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
203d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
204d9f0492fSopenharmony_ci
205d9f0492fSopenharmony_ci        g_matchTrigger = 0;
206d9f0492fSopenharmony_ci        ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param, "2");
207d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
208d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, buffer, strlen(buffer), TestTriggerExecute);
209d9f0492fSopenharmony_ci        EXPECT_EQ(0, g_matchTrigger);
210d9f0492fSopenharmony_ci
211d9f0492fSopenharmony_ci        g_matchTrigger = 0;
212d9f0492fSopenharmony_ci        ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param, value);
213d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
214d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, buffer, strlen(buffer), TestTriggerExecute);
215d9f0492fSopenharmony_ci        EXPECT_EQ(1, g_matchTrigger);
216d9f0492fSopenharmony_ci        EXPECT_EQ(0, strcmp(triggerName, g_matchTriggerName));
217d9f0492fSopenharmony_ci
218d9f0492fSopenharmony_ci        // check for bug
219d9f0492fSopenharmony_ci        g_matchTrigger = 0;
220d9f0492fSopenharmony_ci        ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", "2222", value);
221d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
222d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, buffer, strlen(buffer), TestTriggerExecute);
223d9f0492fSopenharmony_ci        EXPECT_EQ(0, g_matchTrigger);
224d9f0492fSopenharmony_ci
225d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM_WATCH, buffer, strlen(buffer), TestTriggerExecute);
226d9f0492fSopenharmony_ci        return 0;
227d9f0492fSopenharmony_ci    }
228d9f0492fSopenharmony_ci
229d9f0492fSopenharmony_ci    int TestCheckParamTrigger2()
230d9f0492fSopenharmony_ci    {
231d9f0492fSopenharmony_ci        const char *triggerName = "param:test_param.222";
232d9f0492fSopenharmony_ci        const char *param = "test_param.aaa.222.2222";
233d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
234d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "%s=*", param);
235d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
236d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, buffer, 0);
237d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
238d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
239d9f0492fSopenharmony_ci
240d9f0492fSopenharmony_ci        g_matchTrigger = 0;
241d9f0492fSopenharmony_ci        ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param, "2");
242d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
243d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, buffer, strlen(buffer), TestTriggerExecute);
244d9f0492fSopenharmony_ci        EXPECT_EQ(1, g_matchTrigger);
245d9f0492fSopenharmony_ci        EXPECT_EQ(0, strcmp(triggerName, g_matchTriggerName));
246d9f0492fSopenharmony_ci
247d9f0492fSopenharmony_ci        g_matchTrigger = 0;
248d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, param, strlen(param), TestTriggerExecute);
249d9f0492fSopenharmony_ci        EXPECT_EQ(1, g_matchTrigger);
250d9f0492fSopenharmony_ci        EXPECT_EQ(0, strcmp(triggerName, g_matchTriggerName));
251d9f0492fSopenharmony_ci        return 0;
252d9f0492fSopenharmony_ci    }
253d9f0492fSopenharmony_ci
254d9f0492fSopenharmony_ci    int TestCheckParamTrigger3()
255d9f0492fSopenharmony_ci    {
256d9f0492fSopenharmony_ci        const char *triggerName = "param:test_param.333";
257d9f0492fSopenharmony_ci        const char *param1 = "test_param.aaa.333.2222=1";
258d9f0492fSopenharmony_ci        const char *param2 = "test_param.aaa.333.3333=2";
259d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
260d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "%s || %s", param1, param2);
261d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
262d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, buffer, 0);
263d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
264d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
265d9f0492fSopenharmony_ci
266d9f0492fSopenharmony_ci        g_matchTrigger = 0;
267d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, param1, strlen(param1), TestTriggerExecute);
268d9f0492fSopenharmony_ci        EXPECT_EQ(1, g_matchTrigger);
269d9f0492fSopenharmony_ci        EXPECT_EQ(0, strcmp(triggerName, g_matchTriggerName));
270d9f0492fSopenharmony_ci
271d9f0492fSopenharmony_ci        g_matchTrigger = 0;
272d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, param2, strlen(param2), TestTriggerExecute);
273d9f0492fSopenharmony_ci        EXPECT_EQ(1, g_matchTrigger);
274d9f0492fSopenharmony_ci        EXPECT_EQ(0, strcmp(triggerName, g_matchTriggerName));
275d9f0492fSopenharmony_ci        return 0;
276d9f0492fSopenharmony_ci    }
277d9f0492fSopenharmony_ci
278d9f0492fSopenharmony_ci    int TestCheckParamTrigger4()
279d9f0492fSopenharmony_ci    {
280d9f0492fSopenharmony_ci        const char *triggerName = "param:test_param.444";
281d9f0492fSopenharmony_ci        const char *param1 = "test_param.aaa.444.2222";
282d9f0492fSopenharmony_ci        const char *param2 = "test_param.aaa.444.3333";
283d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
284d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "%s=%s && %s=%s", param1, "1", param2, "2");
285d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
286d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, buffer, 0);
287d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
288d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
289d9f0492fSopenharmony_ci        DoJobNow(triggerName);
290d9f0492fSopenharmony_ci        ClearTrigger(nullptr, 0);
291d9f0492fSopenharmony_ci        g_matchTrigger = 0;
292d9f0492fSopenharmony_ci        SystemWriteParam(param1, "1");
293d9f0492fSopenharmony_ci        ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param1, "1");
294d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
295d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, buffer, strlen(buffer), TestTriggerExecute);
296d9f0492fSopenharmony_ci        EXPECT_EQ(0, g_matchTrigger);
297d9f0492fSopenharmony_ci
298d9f0492fSopenharmony_ci        SystemWriteParam(param2, "2");
299d9f0492fSopenharmony_ci        g_matchTrigger = 0;
300d9f0492fSopenharmony_ci        ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param2, "2");
301d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
302d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, buffer, strlen(buffer), TestTriggerExecute);
303d9f0492fSopenharmony_ci        EXPECT_EQ(1, g_matchTrigger);
304d9f0492fSopenharmony_ci        EXPECT_EQ(0, strcmp(triggerName, g_matchTriggerName));
305d9f0492fSopenharmony_ci        return 0;
306d9f0492fSopenharmony_ci    }
307d9f0492fSopenharmony_ci
308d9f0492fSopenharmony_ci    // test for trigger aaaa:test_param.aaa 被加入unknown执行
309d9f0492fSopenharmony_ci    int TestCheckParamTrigger5()
310d9f0492fSopenharmony_ci    {
311d9f0492fSopenharmony_ci        const char *triggerName = "aaaa:test_param.aaa";
312d9f0492fSopenharmony_ci        const char *param1 = "test_param.aaa.aaa.2222";
313d9f0492fSopenharmony_ci        const char *param2 = "test_param.aaa.aaa.3333";
314d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
315d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "aaaa && %s=%s && %s=%s", param1, "1", param2, "2");
316d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
317d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_UNKNOW, triggerName, buffer, 0);
318d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
319d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
320d9f0492fSopenharmony_ci
321d9f0492fSopenharmony_ci        g_matchTrigger = 0;
322d9f0492fSopenharmony_ci        SystemWriteParam(param1, "1");
323d9f0492fSopenharmony_ci        ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param1, "1");
324d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
325d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_PARAM, buffer, strlen(buffer), TestTriggerExecute);
326d9f0492fSopenharmony_ci        EXPECT_EQ(0, g_matchTrigger);
327d9f0492fSopenharmony_ci
328d9f0492fSopenharmony_ci        SystemWriteParam(param2, "2");
329d9f0492fSopenharmony_ci        g_matchTrigger = 0;
330d9f0492fSopenharmony_ci        CheckTrigger(GetTriggerWorkSpace(), TRIGGER_UNKNOW, "aaaa", strlen("aaaa"), TestTriggerExecute);
331d9f0492fSopenharmony_ci        EXPECT_EQ(1, g_matchTrigger);
332d9f0492fSopenharmony_ci        EXPECT_EQ(0, strcmp(triggerName, g_matchTriggerName));
333d9f0492fSopenharmony_ci        return 0;
334d9f0492fSopenharmony_ci    }
335d9f0492fSopenharmony_ci
336d9f0492fSopenharmony_ci    int TestComputeCondition(const char *condition)
337d9f0492fSopenharmony_ci    {
338d9f0492fSopenharmony_ci        u_int32_t size = strlen(condition) + CONDITION_EXTEND_LEN;
339d9f0492fSopenharmony_ci        char *prefix = reinterpret_cast<char *>(malloc(size));
340d9f0492fSopenharmony_ci        if (prefix == nullptr) {
341d9f0492fSopenharmony_ci            printf("prefix is null.\n");
342d9f0492fSopenharmony_ci            return -1;
343d9f0492fSopenharmony_ci        }
344d9f0492fSopenharmony_ci        ConvertInfixToPrefix(condition, prefix, size);
345d9f0492fSopenharmony_ci        printf("prefix %s \n", prefix);
346d9f0492fSopenharmony_ci        free(prefix);
347d9f0492fSopenharmony_ci        return 0;
348d9f0492fSopenharmony_ci    }
349d9f0492fSopenharmony_ci
350d9f0492fSopenharmony_ci    // 普通的属性trigger
351d9f0492fSopenharmony_ci    int TestExecuteParamTrigger1()
352d9f0492fSopenharmony_ci    {
353d9f0492fSopenharmony_ci        const char *triggerName = "aaaa:test_param.eee";
354d9f0492fSopenharmony_ci        const char *param = "test_param.eee.aaa.1111";
355d9f0492fSopenharmony_ci        const char *value = "eee";
356d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
357d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param, value);
358d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
359d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, buffer, 0);
360d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
361d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
362d9f0492fSopenharmony_ci
363d9f0492fSopenharmony_ci        const uint32_t cmdIndex = 100;
364d9f0492fSopenharmony_ci        ret = AddCommand(trigger, cmdIndex, value, nullptr);
365d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
366d9f0492fSopenharmony_ci        // 修改命令为测试执行
367d9f0492fSopenharmony_ci        RegisterTriggerExec(TRIGGER_PARAM, TestCmdExec);
368d9f0492fSopenharmony_ci        SystemWriteParam(param, value);
369d9f0492fSopenharmony_ci        LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
370d9f0492fSopenharmony_ci        EXPECT_EQ(g_execCmdId, cmdIndex);
371d9f0492fSopenharmony_ci        return 0;
372d9f0492fSopenharmony_ci    }
373d9f0492fSopenharmony_ci
374d9f0492fSopenharmony_ci    int TestExecuteParamTrigger2()
375d9f0492fSopenharmony_ci    {
376d9f0492fSopenharmony_ci        const char *triggerName = "param:test_param.dddd";
377d9f0492fSopenharmony_ci        const char *param = "test_param.dddd.aaa.2222";
378d9f0492fSopenharmony_ci        const char *value = "2222";
379d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
380d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param, value);
381d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
382d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, buffer, 0);
383d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
384d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
385d9f0492fSopenharmony_ci        const uint32_t cmdIndex = 102;
386d9f0492fSopenharmony_ci        ret = AddCommand(trigger, cmdIndex, value, nullptr);
387d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
388d9f0492fSopenharmony_ci        RegisterTriggerExec(TRIGGER_PARAM, TestCmdExec);
389d9f0492fSopenharmony_ci        SystemWriteParam(param, value);
390d9f0492fSopenharmony_ci        LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
391d9f0492fSopenharmony_ci        EXPECT_EQ(g_execCmdId, cmdIndex);
392d9f0492fSopenharmony_ci        return 0;
393d9f0492fSopenharmony_ci    }
394d9f0492fSopenharmony_ci
395d9f0492fSopenharmony_ci    // 测试执行后立刻删除
396d9f0492fSopenharmony_ci    int TestExecuteParamTrigger3()
397d9f0492fSopenharmony_ci    {
398d9f0492fSopenharmony_ci        const char *triggerName = "param:test_param.3333";
399d9f0492fSopenharmony_ci        const char *param = "test_param.dddd.aaa.3333";
400d9f0492fSopenharmony_ci        const char *value = "3333";
401d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
402d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param, value);
403d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
404d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, buffer, 0);
405d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
406d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
407d9f0492fSopenharmony_ci        if (trigger == nullptr) {
408d9f0492fSopenharmony_ci            return -1;
409d9f0492fSopenharmony_ci        }
410d9f0492fSopenharmony_ci        const uint32_t cmdIndex = 103;
411d9f0492fSopenharmony_ci        ret = AddCommand(trigger, cmdIndex, value, nullptr);
412d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
413d9f0492fSopenharmony_ci        TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_ONCE);
414d9f0492fSopenharmony_ci        SystemWriteParam(param, value);
415d9f0492fSopenharmony_ci
416d9f0492fSopenharmony_ci        RegisterTriggerExec(TRIGGER_PARAM, TestCmdExec);
417d9f0492fSopenharmony_ci        LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
418d9f0492fSopenharmony_ci        EXPECT_EQ(g_execCmdId, cmdIndex);
419d9f0492fSopenharmony_ci        trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
420d9f0492fSopenharmony_ci        if (trigger != nullptr) {
421d9f0492fSopenharmony_ci            EXPECT_EQ(1, 0);
422d9f0492fSopenharmony_ci        }
423d9f0492fSopenharmony_ci        return 0;
424d9f0492fSopenharmony_ci    }
425d9f0492fSopenharmony_ci
426d9f0492fSopenharmony_ci    // 测试删除队列中的trigger
427d9f0492fSopenharmony_ci    int TestExecuteParamTrigger4()
428d9f0492fSopenharmony_ci    {
429d9f0492fSopenharmony_ci        const char *triggerName = "param:test_param.4444";
430d9f0492fSopenharmony_ci        const char *param = "test_param.dddd.aaa.4444";
431d9f0492fSopenharmony_ci        const char *value = "4444";
432d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
433d9f0492fSopenharmony_ci        int ret = sprintf_s(buffer, sizeof(buffer), "%s=%s", param, value);
434d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
435d9f0492fSopenharmony_ci        JobNode *node = AddTrigger(TRIGGER_PARAM, triggerName, buffer, 0);
436d9f0492fSopenharmony_ci        JobNode *trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
437d9f0492fSopenharmony_ci        EXPECT_EQ(trigger, node);
438d9f0492fSopenharmony_ci        if (trigger == nullptr) {
439d9f0492fSopenharmony_ci            return -1;
440d9f0492fSopenharmony_ci        }
441d9f0492fSopenharmony_ci        const uint32_t cmdIndex = 105;
442d9f0492fSopenharmony_ci        ret = AddCommand(trigger, cmdIndex, value, nullptr);
443d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
444d9f0492fSopenharmony_ci        TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_ONCE);
445d9f0492fSopenharmony_ci        SystemWriteParam(param, value);
446d9f0492fSopenharmony_ci
447d9f0492fSopenharmony_ci        RegisterTriggerExec(TRIGGER_PARAM, TestCmdExec);
448d9f0492fSopenharmony_ci        FreeTrigger(GetTriggerWorkSpace(), reinterpret_cast<TriggerNode *>(trigger));
449d9f0492fSopenharmony_ci        LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
450d9f0492fSopenharmony_ci        EXPECT_NE(g_execCmdId, cmdIndex);
451d9f0492fSopenharmony_ci        trigger = GetTriggerByName(GetTriggerWorkSpace(), triggerName);
452d9f0492fSopenharmony_ci        if (trigger != nullptr) {
453d9f0492fSopenharmony_ci            EXPECT_EQ(1, 0);
454d9f0492fSopenharmony_ci        }
455d9f0492fSopenharmony_ci        return 0;
456d9f0492fSopenharmony_ci    }
457d9f0492fSopenharmony_ci
458d9f0492fSopenharmony_ci    // 测试执行后检查子trigger执行
459d9f0492fSopenharmony_ci    int TestExecuteParamTrigger5()
460d9f0492fSopenharmony_ci    {
461d9f0492fSopenharmony_ci        const char *boot = "boot2";
462d9f0492fSopenharmony_ci        const char *triggerName = "boot2:test_param.5555";
463d9f0492fSopenharmony_ci        const char *param = "test_param.dddd.aaa.5555";
464d9f0492fSopenharmony_ci        const char *value = "5555";
465d9f0492fSopenharmony_ci        JobNode *trigger = AddTrigger(TRIGGER_BOOT, boot, nullptr, 0);
466d9f0492fSopenharmony_ci        const int testCmdIndex = 1105;
467d9f0492fSopenharmony_ci        int ret = AddCommand(trigger, testCmdIndex, value, nullptr);
468d9f0492fSopenharmony_ci        EXPECT_EQ(ret, 0);
469d9f0492fSopenharmony_ci        if (trigger == nullptr) {
470d9f0492fSopenharmony_ci            return -1;
471d9f0492fSopenharmony_ci        }
472d9f0492fSopenharmony_ci        TRIGGER_SET_FLAG(trigger, TRIGGER_FLAGS_SUBTRIGGER);
473d9f0492fSopenharmony_ci
474d9f0492fSopenharmony_ci        char buffer[triggerBuffer];
475d9f0492fSopenharmony_ci        ret = sprintf_s(buffer, sizeof(buffer), "boot2 && %s=%s", param, value);
476d9f0492fSopenharmony_ci        EXPECT_GE(ret, 0);
477d9f0492fSopenharmony_ci        trigger = AddTrigger(TRIGGER_UNKNOW, triggerName, buffer, 0);
478d9f0492fSopenharmony_ci        const int testCmdIndex2 = 105;
479d9f0492fSopenharmony_ci        ret = AddCommand(trigger, testCmdIndex2, value, nullptr);
480d9f0492fSopenharmony_ci
481d9f0492fSopenharmony_ci        RegisterTriggerExec(TRIGGER_UNKNOW, TestCmdExec);
482d9f0492fSopenharmony_ci        SystemWriteParam(param, value);
483d9f0492fSopenharmony_ci
484d9f0492fSopenharmony_ci        TestBootEvent(boot);
485d9f0492fSopenharmony_ci        LE_DoAsyncEvent(LE_GetDefaultLoop(), GetTriggerWorkSpace()->eventHandle);
486d9f0492fSopenharmony_ci        EXPECT_EQ(g_execCmdId, (uint32_t)testCmdIndex2);
487d9f0492fSopenharmony_ci        return 0;
488d9f0492fSopenharmony_ci    }
489d9f0492fSopenharmony_ci
490d9f0492fSopenharmony_ci    int TestDumpTrigger()
491d9f0492fSopenharmony_ci    {
492d9f0492fSopenharmony_ci        (void)AddCompleteJob("param:ohos.servicectrl.display", "ohos.servicectrl.display=*", "display system");
493d9f0492fSopenharmony_ci        DoTriggerExec("param:ohos.servicectrl.display");
494d9f0492fSopenharmony_ci        return 0;
495d9f0492fSopenharmony_ci    }
496d9f0492fSopenharmony_ci};
497d9f0492fSopenharmony_ci
498d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestLoadTrigger_001, TestSize.Level0)
499d9f0492fSopenharmony_ci{
500d9f0492fSopenharmony_ci    TriggerUnitTest test;
501d9f0492fSopenharmony_ci    test.TestLoadTrigger();
502d9f0492fSopenharmony_ci}
503d9f0492fSopenharmony_ci
504d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestBootEvent_001, TestSize.Level0)
505d9f0492fSopenharmony_ci{
506d9f0492fSopenharmony_ci    TriggerUnitTest test;
507d9f0492fSopenharmony_ci    test.TestBootEvent("pre-init");
508d9f0492fSopenharmony_ci    test.TestBootEvent("init");
509d9f0492fSopenharmony_ci    test.TestBootEvent("post-init");
510d9f0492fSopenharmony_ci    test.TestBootEvent("early-init");
511d9f0492fSopenharmony_ci}
512d9f0492fSopenharmony_ci
513d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestAddTriggerForBoot_001, TestSize.Level0)
514d9f0492fSopenharmony_ci{
515d9f0492fSopenharmony_ci    TriggerUnitTest test;
516d9f0492fSopenharmony_ci    test.TestAddTriggerForBoot();
517d9f0492fSopenharmony_ci}
518d9f0492fSopenharmony_ci
519d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestAddTriggerForParm_001, TestSize.Level0)
520d9f0492fSopenharmony_ci{
521d9f0492fSopenharmony_ci    TriggerUnitTest test;
522d9f0492fSopenharmony_ci    test.TestAddTriggerForParm();
523d9f0492fSopenharmony_ci}
524d9f0492fSopenharmony_ci
525d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestCheckParamTrigger_001, TestSize.Level0)
526d9f0492fSopenharmony_ci{
527d9f0492fSopenharmony_ci    TriggerUnitTest test;
528d9f0492fSopenharmony_ci    test.TestCheckParamTrigger1();
529d9f0492fSopenharmony_ci}
530d9f0492fSopenharmony_ci
531d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestCheckParamTrigger_002, TestSize.Level0)
532d9f0492fSopenharmony_ci{
533d9f0492fSopenharmony_ci    TriggerUnitTest test;
534d9f0492fSopenharmony_ci    test.TestCheckParamTrigger2();
535d9f0492fSopenharmony_ci}
536d9f0492fSopenharmony_ci
537d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestCheckParamTrigger_003, TestSize.Level0)
538d9f0492fSopenharmony_ci{
539d9f0492fSopenharmony_ci    TriggerUnitTest test;
540d9f0492fSopenharmony_ci    test.TestCheckParamTrigger3();
541d9f0492fSopenharmony_ci}
542d9f0492fSopenharmony_ci
543d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestCheckParamTrigger_004, TestSize.Level0)
544d9f0492fSopenharmony_ci{
545d9f0492fSopenharmony_ci    TriggerUnitTest test;
546d9f0492fSopenharmony_ci    test.TestCheckParamTrigger4();
547d9f0492fSopenharmony_ci}
548d9f0492fSopenharmony_ci
549d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestCheckParamTrigger_005, TestSize.Level0)
550d9f0492fSopenharmony_ci{
551d9f0492fSopenharmony_ci    TriggerUnitTest test;
552d9f0492fSopenharmony_ci    test.TestCheckParamTrigger5();
553d9f0492fSopenharmony_ci}
554d9f0492fSopenharmony_ci
555d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestParamEvent_001, TestSize.Level0)
556d9f0492fSopenharmony_ci{
557d9f0492fSopenharmony_ci    TriggerUnitTest test;
558d9f0492fSopenharmony_ci    test.TestParamEvent();
559d9f0492fSopenharmony_ci}
560d9f0492fSopenharmony_ci
561d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestComputerCondition_001, TestSize.Level0)
562d9f0492fSopenharmony_ci{
563d9f0492fSopenharmony_ci    TriggerUnitTest test;
564d9f0492fSopenharmony_ci    test.TestComputeCondition("aaa=111||aaa=222||aaa=333");
565d9f0492fSopenharmony_ci    test.TestComputeCondition("aaa=111||aaa=222&&aaa=333");
566d9f0492fSopenharmony_ci    test.TestComputeCondition("(aaa=111||aaa=222)&&aaa=333");
567d9f0492fSopenharmony_ci    test.TestComputeCondition("aaa=111||(aaa=222&&aaa=333)");
568d9f0492fSopenharmony_ci}
569d9f0492fSopenharmony_ci
570d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestExecuteParamTrigger_001, TestSize.Level0)
571d9f0492fSopenharmony_ci{
572d9f0492fSopenharmony_ci    TriggerUnitTest test;
573d9f0492fSopenharmony_ci    test.TestExecuteParamTrigger1();
574d9f0492fSopenharmony_ci}
575d9f0492fSopenharmony_ci
576d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestExecuteParamTrigger_002, TestSize.Level0)
577d9f0492fSopenharmony_ci{
578d9f0492fSopenharmony_ci    TriggerUnitTest test;
579d9f0492fSopenharmony_ci    test.TestExecuteParamTrigger2();
580d9f0492fSopenharmony_ci}
581d9f0492fSopenharmony_ci
582d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestExecuteParamTrigger_003, TestSize.Level0)
583d9f0492fSopenharmony_ci{
584d9f0492fSopenharmony_ci    TriggerUnitTest test;
585d9f0492fSopenharmony_ci    test.TestExecuteParamTrigger3();
586d9f0492fSopenharmony_ci}
587d9f0492fSopenharmony_ci
588d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestExecuteParamTrigger_004, TestSize.Level0)
589d9f0492fSopenharmony_ci{
590d9f0492fSopenharmony_ci    TriggerUnitTest test;
591d9f0492fSopenharmony_ci    test.TestExecuteParamTrigger4();
592d9f0492fSopenharmony_ci}
593d9f0492fSopenharmony_ci
594d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestExecuteParamTrigger_005, TestSize.Level0)
595d9f0492fSopenharmony_ci{
596d9f0492fSopenharmony_ci    TriggerUnitTest test;
597d9f0492fSopenharmony_ci    test.TestExecuteParamTrigger5();
598d9f0492fSopenharmony_ci}
599d9f0492fSopenharmony_ci
600d9f0492fSopenharmony_ciHWTEST_F(TriggerUnitTest, Init_TestExecuteParamTrigger_006, TestSize.Level0)
601d9f0492fSopenharmony_ci{
602d9f0492fSopenharmony_ci    TriggerUnitTest test;
603d9f0492fSopenharmony_ci    test.TestDumpTrigger();
604d9f0492fSopenharmony_ci
605d9f0492fSopenharmony_ci}
606