1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2022 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 "bootchart.h" 17d9f0492fSopenharmony_ci#include "bootstage.h" 18d9f0492fSopenharmony_ci#include "init_utils.h" 19d9f0492fSopenharmony_ci#include "param_stub.h" 20d9f0492fSopenharmony_ci#include "securec.h" 21d9f0492fSopenharmony_ci 22d9f0492fSopenharmony_ciusing namespace std; 23d9f0492fSopenharmony_ciusing namespace testing::ext; 24d9f0492fSopenharmony_ci 25d9f0492fSopenharmony_cinamespace init_ut { 26d9f0492fSopenharmony_ciextern "C" { 27d9f0492fSopenharmony_cilong long GetJiffies(void); 28d9f0492fSopenharmony_cichar *ReadFileToBuffer(const char *fileName, char *buffer, uint32_t bufferSize); 29d9f0492fSopenharmony_civoid BootchartLogHeader(void); 30d9f0492fSopenharmony_civoid BootchartLogFile(FILE *log, const char *procfile); 31d9f0492fSopenharmony_civoid BootchartLogProcessStat(FILE *log, pid_t pid); 32d9f0492fSopenharmony_civoid bootchartLogProcess(FILE *log); 33d9f0492fSopenharmony_civoid *BootchartThreadMain(void *data); 34d9f0492fSopenharmony_civoid BootchartDestory(void); 35d9f0492fSopenharmony_ciint DoBootchartStart(void); 36d9f0492fSopenharmony_ciint DoBootchartStop(void); 37d9f0492fSopenharmony_ciint DoBootchartCmd(int id, const char *name, int argc, const char **argv); 38d9f0492fSopenharmony_ciint BootchartInit(void); 39d9f0492fSopenharmony_civoid BootchartExit(void); 40d9f0492fSopenharmony_ci} 41d9f0492fSopenharmony_ci 42d9f0492fSopenharmony_ciclass ModulesUnitTest : public testing::Test { 43d9f0492fSopenharmony_cipublic: 44d9f0492fSopenharmony_ci static void SetUpTestCase(void) {}; 45d9f0492fSopenharmony_ci static void TearDownTestCase(void) {}; 46d9f0492fSopenharmony_ci void SetUp() {}; 47d9f0492fSopenharmony_ci void TearDown() {}; 48d9f0492fSopenharmony_ci}; 49d9f0492fSopenharmony_ci 50d9f0492fSopenharmony_ciHWTEST_F(ModulesUnitTest, TestBootchartInit, TestSize.Level1) 51d9f0492fSopenharmony_ci{ 52d9f0492fSopenharmony_ci EXPECT_EQ(BootchartInit(), 0); 53d9f0492fSopenharmony_ci EXPECT_NE(GetJiffies(), -1); 54d9f0492fSopenharmony_ci EXPECT_NE(DoBootchartStart(), 1); 55d9f0492fSopenharmony_ci EXPECT_EQ(DoBootchartStop(), 0); 56d9f0492fSopenharmony_ci BootchartExit(); 57d9f0492fSopenharmony_ci} 58d9f0492fSopenharmony_ci 59d9f0492fSopenharmony_ciHWTEST_F(ModulesUnitTest, TestReadFileToBuffer, TestSize.Level1) 60d9f0492fSopenharmony_ci{ 61d9f0492fSopenharmony_ci const char *fileName = "ModulesTest"; 62d9f0492fSopenharmony_ci char buffer[MAX_BUFFER_LEN] = {0}; 63d9f0492fSopenharmony_ci EXPECT_EQ(ReadFileToBuffer(fileName, buffer, MAX_BUFFER_LEN), nullptr); 64d9f0492fSopenharmony_ci buffer[1] = 'a'; 65d9f0492fSopenharmony_ci EXPECT_EQ(ReadFileToBuffer(nullptr, buffer, MAX_BUFFER_LEN), nullptr); 66d9f0492fSopenharmony_ci EXPECT_EQ(ReadFileToBuffer(nullptr, nullptr, MAX_BUFFER_LEN), nullptr); 67d9f0492fSopenharmony_ci} 68d9f0492fSopenharmony_ci 69d9f0492fSopenharmony_ciHWTEST_F(ModulesUnitTest, TestBootchartLogFile, TestSize.Level1) 70d9f0492fSopenharmony_ci{ 71d9f0492fSopenharmony_ci DoBootchartStart(); 72d9f0492fSopenharmony_ci FILE *log = fopen("/data/init_ut/ModulesTest.log", "w"); 73d9f0492fSopenharmony_ci if (log) { 74d9f0492fSopenharmony_ci BootchartLogFile(log, "/proc/stat"); 75d9f0492fSopenharmony_ci (void)fflush(log); 76d9f0492fSopenharmony_ci (void)fclose(log); 77d9f0492fSopenharmony_ci } 78d9f0492fSopenharmony_ci} 79d9f0492fSopenharmony_ci 80d9f0492fSopenharmony_ciHWTEST_F(ModulesUnitTest, TestBootchartLogProcessStat, TestSize.Level1) 81d9f0492fSopenharmony_ci{ 82d9f0492fSopenharmony_ci FILE *log = fopen("/data/init_ut/ModulesTest.log", "w"); 83d9f0492fSopenharmony_ci pid_t selfPid = getpid(); 84d9f0492fSopenharmony_ci if (log != nullptr) { 85d9f0492fSopenharmony_ci BootchartLogProcessStat(log, selfPid); 86d9f0492fSopenharmony_ci (void)fflush(log); 87d9f0492fSopenharmony_ci (void)fclose(log); 88d9f0492fSopenharmony_ci } 89d9f0492fSopenharmony_ci} 90d9f0492fSopenharmony_ci 91d9f0492fSopenharmony_ciHWTEST_F(ModulesUnitTest, TestbootchartLogProcess, TestSize.Level1) 92d9f0492fSopenharmony_ci{ 93d9f0492fSopenharmony_ci FILE *log = fopen("/data/init_ut/ModulesTest.log", "w"); 94d9f0492fSopenharmony_ci if (log) { 95d9f0492fSopenharmony_ci bootchartLogProcess(log); 96d9f0492fSopenharmony_ci (void)fflush(log); 97d9f0492fSopenharmony_ci (void)fclose(log); 98d9f0492fSopenharmony_ci } 99d9f0492fSopenharmony_ci} 100d9f0492fSopenharmony_ci 101d9f0492fSopenharmony_ciHWTEST_F(ModulesUnitTest, TestDoBootchartCmd, TestSize.Level1) 102d9f0492fSopenharmony_ci{ 103d9f0492fSopenharmony_ci const char *argv1[] = { "start" }; 104d9f0492fSopenharmony_ci const char *argv2[] = { "stop" }; 105d9f0492fSopenharmony_ci EXPECT_NE(DoBootchartCmd(0, "bootchart", 1, argv1), 1); 106d9f0492fSopenharmony_ci EXPECT_NE(DoBootchartCmd(0, "bootchart", 1, argv2), 1); 107d9f0492fSopenharmony_ci} 108d9f0492fSopenharmony_ci 109d9f0492fSopenharmony_ciHWTEST_F(ModulesUnitTest, TestDoBootchartInsall, TestSize.Level1) 110d9f0492fSopenharmony_ci{ 111d9f0492fSopenharmony_ci TestSetParamCheckResult("ohos.servicectrl.", 0777, 0); 112d9f0492fSopenharmony_ci SystemWriteParam("persist.init.bootchart.enabled", "1"); 113d9f0492fSopenharmony_ci SystemWriteParam("persist.init.debug.dump.trigger", "1"); 114d9f0492fSopenharmony_ci SystemWriteParam("persist.init.debug.loglevel", "6"); 115d9f0492fSopenharmony_ci SystemWriteParam("ohos.servicectrl.cmd", "setloglevel 10"); 116d9f0492fSopenharmony_ci HookMgrExecute(GetBootStageHookMgr(), INIT_POST_PERSIST_PARAM_LOAD, nullptr, nullptr); 117d9f0492fSopenharmony_ci} 118d9f0492fSopenharmony_ci} // namespace init_ut 119