1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "bootchart.h" 17#include "bootstage.h" 18#include "init_utils.h" 19#include "param_stub.h" 20#include "securec.h" 21 22using namespace std; 23using namespace testing::ext; 24 25namespace init_ut { 26extern "C" { 27long long GetJiffies(void); 28char *ReadFileToBuffer(const char *fileName, char *buffer, uint32_t bufferSize); 29void BootchartLogHeader(void); 30void BootchartLogFile(FILE *log, const char *procfile); 31void BootchartLogProcessStat(FILE *log, pid_t pid); 32void bootchartLogProcess(FILE *log); 33void *BootchartThreadMain(void *data); 34void BootchartDestory(void); 35int DoBootchartStart(void); 36int DoBootchartStop(void); 37int DoBootchartCmd(int id, const char *name, int argc, const char **argv); 38int BootchartInit(void); 39void BootchartExit(void); 40} 41 42class ModulesUnitTest : public testing::Test { 43public: 44 static void SetUpTestCase(void) {}; 45 static void TearDownTestCase(void) {}; 46 void SetUp() {}; 47 void TearDown() {}; 48}; 49 50HWTEST_F(ModulesUnitTest, TestBootchartInit, TestSize.Level1) 51{ 52 EXPECT_EQ(BootchartInit(), 0); 53 EXPECT_NE(GetJiffies(), -1); 54 EXPECT_NE(DoBootchartStart(), 1); 55 EXPECT_EQ(DoBootchartStop(), 0); 56 BootchartExit(); 57} 58 59HWTEST_F(ModulesUnitTest, TestReadFileToBuffer, TestSize.Level1) 60{ 61 const char *fileName = "ModulesTest"; 62 char buffer[MAX_BUFFER_LEN] = {0}; 63 EXPECT_EQ(ReadFileToBuffer(fileName, buffer, MAX_BUFFER_LEN), nullptr); 64 buffer[1] = 'a'; 65 EXPECT_EQ(ReadFileToBuffer(nullptr, buffer, MAX_BUFFER_LEN), nullptr); 66 EXPECT_EQ(ReadFileToBuffer(nullptr, nullptr, MAX_BUFFER_LEN), nullptr); 67} 68 69HWTEST_F(ModulesUnitTest, TestBootchartLogFile, TestSize.Level1) 70{ 71 DoBootchartStart(); 72 FILE *log = fopen("/data/init_ut/ModulesTest.log", "w"); 73 if (log) { 74 BootchartLogFile(log, "/proc/stat"); 75 (void)fflush(log); 76 (void)fclose(log); 77 } 78} 79 80HWTEST_F(ModulesUnitTest, TestBootchartLogProcessStat, TestSize.Level1) 81{ 82 FILE *log = fopen("/data/init_ut/ModulesTest.log", "w"); 83 pid_t selfPid = getpid(); 84 if (log != nullptr) { 85 BootchartLogProcessStat(log, selfPid); 86 (void)fflush(log); 87 (void)fclose(log); 88 } 89} 90 91HWTEST_F(ModulesUnitTest, TestbootchartLogProcess, TestSize.Level1) 92{ 93 FILE *log = fopen("/data/init_ut/ModulesTest.log", "w"); 94 if (log) { 95 bootchartLogProcess(log); 96 (void)fflush(log); 97 (void)fclose(log); 98 } 99} 100 101HWTEST_F(ModulesUnitTest, TestDoBootchartCmd, TestSize.Level1) 102{ 103 const char *argv1[] = { "start" }; 104 const char *argv2[] = { "stop" }; 105 EXPECT_NE(DoBootchartCmd(0, "bootchart", 1, argv1), 1); 106 EXPECT_NE(DoBootchartCmd(0, "bootchart", 1, argv2), 1); 107} 108 109HWTEST_F(ModulesUnitTest, TestDoBootchartInsall, TestSize.Level1) 110{ 111 TestSetParamCheckResult("ohos.servicectrl.", 0777, 0); 112 SystemWriteParam("persist.init.bootchart.enabled", "1"); 113 SystemWriteParam("persist.init.debug.dump.trigger", "1"); 114 SystemWriteParam("persist.init.debug.loglevel", "6"); 115 SystemWriteParam("ohos.servicectrl.cmd", "setloglevel 10"); 116 HookMgrExecute(GetBootStageHookMgr(), INIT_POST_PERSIST_PARAM_LOAD, nullptr, nullptr); 117} 118} // namespace init_ut 119