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