1 /*
2 * Copyright (c) 2021 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 #include "bootstage.h"
16 #include "init_cmds.h"
17 #include "init_group_manager.h"
18 #include "init_hashmap.h"
19 #include "init_param.h"
20 #include "init_module_engine.h"
21 #include "init_cmdexecutor.h"
22 #include "param_stub.h"
23 #include "init_utils.h"
24 #include "securec.h"
25
26 using namespace testing::ext;
27 using namespace std;
28
29 namespace init_ut {
30 class ModuleMgrUnitTest : public testing::Test {
31 public:
SetUpTestCase(void)32 static void SetUpTestCase(void) {};
TearDownTestCase(void)33 static void TearDownTestCase(void) {};
SetUp(void)34 void SetUp(void) {};
TearDown(void)35 void TearDown(void) {};
36 };
37
38 int g_cmdExecId = 0;
TestCmdExecutor(int id,const char * name,int argc,const char ** argv)39 int TestCmdExecutor(int id, const char *name, int argc, const char **argv)
40 {
41 printf("TestCmdExecutor id %d, name %s \n", id, name);
42 g_cmdExecId = id;
43 return 0;
44 }
45
46 HWTEST_F(ModuleMgrUnitTest, Init_ModuleMgrTest_PluginAddCmd001, TestSize.Level1)
47 {
48 InitServiceSpace();
49 const char *testName = "testCmd1";
50 const char *cmdContent = "testCmd1 test1 test2 test3";
51 const char *cmdContentNotValid = "testCmd1 t e s t 1 t e s t 2 t";
52 int cmdExecId1 = AddCmdExecutor(testName, TestCmdExecutor);
53 ASSERT_NE(cmdExecId1 > 0, 0);
54 int cmdExecId2 = AddCmdExecutor("testCmd2", TestCmdExecutor);
55 ASSERT_NE(cmdExecId2 > 0, 0);
56 cmdExecId2 = AddCmdExecutor("testCmd3", TestCmdExecutor);
57 ASSERT_NE(cmdExecId2 > 0, 0);
58 int cmdExecId4 = AddCmdExecutor("testCmd4", TestCmdExecutor);
59 ASSERT_NE(cmdExecId4 > 0, 0);
60 PluginExecCmd("testCmd4", 0, nullptr);
61
62 int cmdIndex = 0;
63 const char *cmdName = PluginGetCmdIndex(cmdContent, &cmdIndex);
64 ASSERT_EQ(strcmp(cmdName, testName), 0);
65 printf("TestCmdExecutor cmdIndex 0x%04x, name %s \n", cmdIndex, cmdName);
66 ASSERT_NE(GetPluginCmdNameByIndex(cmdIndex), nullptr);
67
68 // exec
69 g_cmdExecId = -1;
70 PluginExecCmdByName(cmdName, cmdContent);
71 ASSERT_EQ(cmdExecId1, g_cmdExecId);
72 PluginExecCmdByName(cmdName, nullptr);
73 PluginExecCmdByName(cmdName, cmdContentNotValid);
74 g_cmdExecId = -1;
75 PluginExecCmdByCmdIndex(cmdIndex, cmdContent, nullptr);
76 ASSERT_EQ(cmdExecId1, g_cmdExecId);
77 const char *argv[] = {"test.value"};
78 PluginExecCmd("install", 1, argv);
79 PluginExecCmd("uninstall", 1, argv);
80 PluginExecCmd("setloglevel", 1, argv);
81
82 // del
83 RemoveCmdExecutor("testCmd4", cmdExecId4);
84 AddCareContextCmdExecutor("", nullptr);
85 RemoveCmdExecutor("testCmd4", -1);
86 }
87
TestModuleDump(const MODULE_INFO * moduleInfo)88 static void TestModuleDump(const MODULE_INFO *moduleInfo)
89 {
90 printf("%s\n", moduleInfo->name);
91 }
92
93 HWTEST_F(ModuleMgrUnitTest, Init_ModuleMgrTest_ModuleTraversal001, TestSize.Level1)
94 {
95 // Create module manager
96 MODULE_MGR *moduleMgr = ModuleMgrCreate("init");
97 ASSERT_NE(moduleMgr, nullptr);
98 int cnt = ModuleMgrGetCnt(moduleMgr);
99 ASSERT_EQ(cnt, 0);
100 // Install one module
101 int ret = ModuleMgrInstall(moduleMgr, "libbootchart", 0, nullptr);
102 ASSERT_EQ(ret, 0);
103 cnt = ModuleMgrGetCnt(moduleMgr);
104 ASSERT_EQ(cnt, 1);
105 ModuleMgrTraversal(nullptr, nullptr, nullptr);
106 ModuleMgrTraversal(moduleMgr, nullptr, TestModuleDump);
107 InitModuleMgrDump();
108
109 InitModuleMgrInstall("/");
110
111 // Scan all modules
112 ModuleMgrScan(nullptr);
113 ModuleMgrScan("/");
114 moduleMgr = ModuleMgrScan("init");
115 moduleMgr = ModuleMgrScan(STARTUP_INIT_UT_PATH MODULE_LIB_NAME "/autorun");
116 ASSERT_NE(moduleMgr, nullptr);
117 cnt = ModuleMgrGetCnt(moduleMgr);
118 ASSERT_GE(cnt, 0);
119
120 ModuleMgrUninstall(moduleMgr, nullptr);
121 cnt = ModuleMgrGetCnt(moduleMgr);
122 ASSERT_EQ(cnt, 0);
123
124 ModuleMgrGetArgs();
125 ModuleMgrDestroy(moduleMgr);
126 }
127
128 HWTEST_F(ModuleMgrUnitTest, Init_ModuleMgrTest_ModuleAbnormal001, TestSize.Level1)
129 {
130 int ret = InitModuleMgrInstall(nullptr);
131 ASSERT_EQ(ret, -1);
132 }
133 } // namespace init_ut
134