1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2023 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
16d9f0492fSopenharmony_ci#include "bootstage.h"
17d9f0492fSopenharmony_ci#include "init_utils.h"
18d9f0492fSopenharmony_ci#include "init_cmds.h"
19d9f0492fSopenharmony_ci#include "init_cmdexecutor.h"
20d9f0492fSopenharmony_ci#include "param_stub.h"
21d9f0492fSopenharmony_ci#include "securec.h"
22d9f0492fSopenharmony_ci
23d9f0492fSopenharmony_ciusing namespace std;
24d9f0492fSopenharmony_ciusing namespace testing::ext;
25d9f0492fSopenharmony_ci
26d9f0492fSopenharmony_cinamespace init_ut {
27d9f0492fSopenharmony_cistatic const char *g_content =
28d9f0492fSopenharmony_ci    "\"KERNEL\" : ["
29d9f0492fSopenharmony_ci    "{"
30d9f0492fSopenharmony_ci        "\"name\" : \"disk\","
31d9f0492fSopenharmony_ci        "\"description\" : \"Disk I/O\","
32d9f0492fSopenharmony_ci        "\"tag\" : 0,"
33d9f0492fSopenharmony_ci        "\"type\" : \"KERNEL\","
34d9f0492fSopenharmony_ci        "\"sys-files\" : ["
35d9f0492fSopenharmony_ci            "\"events/f2fs/f2fs_sync_file_enter/enable\","
36d9f0492fSopenharmony_ci            "\"events/f2fs/f2fs_sync_file_exit/enable\","
37d9f0492fSopenharmony_ci            "\"events/f2fs/f2fs_write_begin/enable\","
38d9f0492fSopenharmony_ci            "\"events/f2fs/f2fs_write_end/enable\","
39d9f0492fSopenharmony_ci            "\"events/ext4/ext4_da_write_begin/enable\","
40d9f0492fSopenharmony_ci            "\"events/ext4/ext4_da_write_end/enable\","
41d9f0492fSopenharmony_ci            "\"events/ext4/ext4_sync_file_enter/enable\","
42d9f0492fSopenharmony_ci            "\"events/ext4/ext4_sync_file_exit/enable\","
43d9f0492fSopenharmony_ci            "\"events/block/block_rq_issue/enable\","
44d9f0492fSopenharmony_ci            "\"events/block/block_rq_complete/enable\""
45d9f0492fSopenharmony_ci        "]"
46d9f0492fSopenharmony_ci    "},"
47d9f0492fSopenharmony_ci    "{"
48d9f0492fSopenharmony_ci        "\"name\" : \"mmc\","
49d9f0492fSopenharmony_ci        "\"description\" : \"eMMC commands\","
50d9f0492fSopenharmony_ci        "\"tag\" : 0,"
51d9f0492fSopenharmony_ci        "\"type\" : \"KERNEL\","
52d9f0492fSopenharmony_ci        "\"sys-files\" : ["
53d9f0492fSopenharmony_ci            "\"events/mmc/enable\""
54d9f0492fSopenharmony_ci        "]"
55d9f0492fSopenharmony_ci    "},"
56d9f0492fSopenharmony_ci    "{"
57d9f0492fSopenharmony_ci        "\"name\" : \"test\","
58d9f0492fSopenharmony_ci        "\"description\" : \"test\","
59d9f0492fSopenharmony_ci        "\"tag\" : 0,"
60d9f0492fSopenharmony_ci        "\"type\" : \"KERNEL\","
61d9f0492fSopenharmony_ci        "\"sys-files\" : ["
62d9f0492fSopenharmony_ci        "]"
63d9f0492fSopenharmony_ci    "}"
64d9f0492fSopenharmony_ci    "],"
65d9f0492fSopenharmony_ci    "\"USER\" : ["
66d9f0492fSopenharmony_ci        "{"
67d9f0492fSopenharmony_ci            "\"name\" : \"ohos\","
68d9f0492fSopenharmony_ci            "\"description\" : \"OpenHarmony\","
69d9f0492fSopenharmony_ci            "\"tag\" : 30,"
70d9f0492fSopenharmony_ci            "\"type\" : \"USER\","
71d9f0492fSopenharmony_ci            "\"sys-files\" : ["
72d9f0492fSopenharmony_ci            "]"
73d9f0492fSopenharmony_ci        "},"
74d9f0492fSopenharmony_ci        "{"
75d9f0492fSopenharmony_ci            "\"name\" : \"ability\","
76d9f0492fSopenharmony_ci            "\"description\" : \"Ability Manager\","
77d9f0492fSopenharmony_ci            "\"tag\" : 31,"
78d9f0492fSopenharmony_ci            "\"type\" : \"USER\","
79d9f0492fSopenharmony_ci            "\"sys-files\" : ["
80d9f0492fSopenharmony_ci            "]"
81d9f0492fSopenharmony_ci        "},"
82d9f0492fSopenharmony_ci        "{"
83d9f0492fSopenharmony_ci            "\"name\" : \"usb\","
84d9f0492fSopenharmony_ci            "\"description\" : \"usb subsystem\","
85d9f0492fSopenharmony_ci            "\"tag\" : 19,"
86d9f0492fSopenharmony_ci            "\"type\" : \"USER\","
87d9f0492fSopenharmony_ci            "\"sys-files\" : ["
88d9f0492fSopenharmony_ci            "]"
89d9f0492fSopenharmony_ci        "}"
90d9f0492fSopenharmony_ci    "]"
91d9f0492fSopenharmony_ci"}";
92d9f0492fSopenharmony_civoid CreateInitTraceConfig(int compress)
93d9f0492fSopenharmony_ci{
94d9f0492fSopenharmony_ci    std::string config = "{ \"compress\" : ";
95d9f0492fSopenharmony_ci    if (!compress) {
96d9f0492fSopenharmony_ci        config += "false,";
97d9f0492fSopenharmony_ci    } else {
98d9f0492fSopenharmony_ci        config += "true, ";
99d9f0492fSopenharmony_ci    }
100d9f0492fSopenharmony_ci    config += g_content;
101d9f0492fSopenharmony_ci    // create trace cfg
102d9f0492fSopenharmony_ci    CreateTestFile(STARTUP_INIT_UT_PATH"/system/etc/init_trace.cfg", config.c_str());
103d9f0492fSopenharmony_ci}
104d9f0492fSopenharmony_ci
105d9f0492fSopenharmony_ciclass TraceUnitTest : public testing::Test {
106d9f0492fSopenharmony_cipublic:
107d9f0492fSopenharmony_ci    static void SetUpTestCase(void) {};
108d9f0492fSopenharmony_ci    static void TearDownTestCase(void) {};
109d9f0492fSopenharmony_ci    void SetUp() {};
110d9f0492fSopenharmony_ci    void TearDown() {};
111d9f0492fSopenharmony_ci};
112d9f0492fSopenharmony_ci
113d9f0492fSopenharmony_ciHWTEST_F(TraceUnitTest, TraceTest_001, TestSize.Level1)
114d9f0492fSopenharmony_ci{
115d9f0492fSopenharmony_ci    // open switch for trace
116d9f0492fSopenharmony_ci    uint32_t dataIndex = 0;
117d9f0492fSopenharmony_ci    WriteParam("persist.init.bootevent.enable", "true", &dataIndex, 0);
118d9f0492fSopenharmony_ci    HookMgrExecute(GetBootStageHookMgr(), INIT_POST_PERSIST_PARAM_LOAD, nullptr, nullptr);
119d9f0492fSopenharmony_ci    // close switch for trace
120d9f0492fSopenharmony_ci    WriteParam("persist.init.bootevent.enable", "false", &dataIndex, 0);
121d9f0492fSopenharmony_ci    HookMgrExecute(GetBootStageHookMgr(), INIT_POST_PERSIST_PARAM_LOAD, nullptr, nullptr);
122d9f0492fSopenharmony_ci}
123d9f0492fSopenharmony_ci
124d9f0492fSopenharmony_ciHWTEST_F(TraceUnitTest, TraceTest_002, TestSize.Level1)
125d9f0492fSopenharmony_ci{
126d9f0492fSopenharmony_ci    CreateInitTraceConfig(1);
127d9f0492fSopenharmony_ci    // start trace
128d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "start");
129d9f0492fSopenharmony_ci    // for run 1 s
130d9f0492fSopenharmony_ci    sleep(1);
131d9f0492fSopenharmony_ci    // stop trace
132d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "stop");
133d9f0492fSopenharmony_ci}
134d9f0492fSopenharmony_ci
135d9f0492fSopenharmony_ciHWTEST_F(TraceUnitTest, TraceTest_003, TestSize.Level1)
136d9f0492fSopenharmony_ci{
137d9f0492fSopenharmony_ci    CreateInitTraceConfig(0);
138d9f0492fSopenharmony_ci    // start trace
139d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "start");
140d9f0492fSopenharmony_ci    // for run 1 s
141d9f0492fSopenharmony_ci    sleep(1);
142d9f0492fSopenharmony_ci    // stop trace
143d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "stop");
144d9f0492fSopenharmony_ci}
145d9f0492fSopenharmony_ci
146d9f0492fSopenharmony_ciHWTEST_F(TraceUnitTest, TraceTest_004, TestSize.Level1)
147d9f0492fSopenharmony_ci{
148d9f0492fSopenharmony_ci    std::string cmdArgs = "/system/etc/init_trace.cfg  ";
149d9f0492fSopenharmony_ci    cmdArgs += STARTUP_INIT_UT_PATH"/system/etc/init_trace.cfg";
150d9f0492fSopenharmony_ci    int cmdIndex = 0;
151d9f0492fSopenharmony_ci    (void)GetMatchCmd("copy ", &cmdIndex);
152d9f0492fSopenharmony_ci    DoCmdByIndex(cmdIndex, cmdArgs.c_str(), nullptr);
153d9f0492fSopenharmony_ci
154d9f0492fSopenharmony_ci    // start trace
155d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "start");
156d9f0492fSopenharmony_ci    // for run 1 s
157d9f0492fSopenharmony_ci    sleep(1);
158d9f0492fSopenharmony_ci    // stop trace
159d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "stop");
160d9f0492fSopenharmony_ci}
161d9f0492fSopenharmony_ci
162d9f0492fSopenharmony_ciHWTEST_F(TraceUnitTest, TraceTest_005, TestSize.Level1)
163d9f0492fSopenharmony_ci{
164d9f0492fSopenharmony_ci    // start trace
165d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "start");
166d9f0492fSopenharmony_ci    // for run 1 s
167d9f0492fSopenharmony_ci    sleep(1);
168d9f0492fSopenharmony_ci    // interrupt trace
169d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "1");
170d9f0492fSopenharmony_ci}
171d9f0492fSopenharmony_ci
172d9f0492fSopenharmony_ciHWTEST_F(TraceUnitTest, TraceTest_006, TestSize.Level1)
173d9f0492fSopenharmony_ci{
174d9f0492fSopenharmony_ci    std::string cmdArgs = "/bin/test    ";
175d9f0492fSopenharmony_ci    cmdArgs += STARTUP_INIT_UT_PATH"/bin/test";
176d9f0492fSopenharmony_ci    int cmdIndex = 0;
177d9f0492fSopenharmony_ci    (void)GetMatchCmd("copy ", &cmdIndex);
178d9f0492fSopenharmony_ci    DoCmdByIndex(cmdIndex, cmdArgs.c_str(), nullptr);
179d9f0492fSopenharmony_ci
180d9f0492fSopenharmony_ci    // start trace
181d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "start");
182d9f0492fSopenharmony_ci    // for run 1 s
183d9f0492fSopenharmony_ci    sleep(1);
184d9f0492fSopenharmony_ci    // stop trace
185d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "stop");
186d9f0492fSopenharmony_ci}
187d9f0492fSopenharmony_ci
188d9f0492fSopenharmony_ciHWTEST_F(TraceUnitTest, TraceTest_007, TestSize.Level1)
189d9f0492fSopenharmony_ci{
190d9f0492fSopenharmony_ci    CreateInitTraceConfig(0);
191d9f0492fSopenharmony_ci    // other case
192d9f0492fSopenharmony_ci    PluginExecCmdByName("init_trace", "other");
193d9f0492fSopenharmony_ci}
194d9f0492fSopenharmony_ci} // namespace init_ut
195