提交 52d3410c 编写于 作者: M Mupceet

fix bug for module install

Signed-off-by: NMupceet <laiguizhong@huawei.com>
上级 a15da3dd
......@@ -129,7 +129,7 @@ int ModuleMgrInstall(MODULE_MGR *moduleMgr, const char *moduleName,
int argc, const char *argv[])
{
MODULE_ITEM *module;
BEGET_LOGV("ModuleMgrInstall moduleName %s", moduleName);
// Get module manager
BEGET_CHECK(!(moduleMgr == NULL || moduleName == NULL), return -1);
// Create module item
......@@ -148,6 +148,7 @@ int ModuleMgrInstall(MODULE_MGR *moduleMgr, const char *moduleName,
// Install
module->handle = moduleInstall(module, argc, argv);
if (module->handle == NULL) {
BEGET_LOGE("Failed to install module %s", moduleName);
moduleDestroy((ListNode *)module);
return -1;
}
......@@ -201,8 +202,13 @@ static void scanModules(MODULE_MGR *moduleMgr, const char *path)
}
file->d_name[end] = '\0';
BEGET_LOGV("scanModules module %s", file->d_name);
if (strncmp(file->d_name, "lib", strlen("lib")) == 0) {
ret = ModuleMgrInstall(moduleMgr, file->d_name + strlen("lib"), 0, NULL);
} else {
ret = ModuleMgrInstall(moduleMgr, file->d_name, 0, NULL);
}
}
closedir(dir);
}
......@@ -249,10 +255,10 @@ void ModuleMgrUninstall(MODULE_MGR *moduleMgr, const char *name)
ListRemoveAll(&(moduleMgr->modules), moduleDestroy);
return;
}
BEGET_LOGV("ModuleMgrUninstall moduleName %s", name);
// Find module by name
module = (MODULE_ITEM *)ListFind(&(moduleMgr->modules), (void *)name, moduleCompare);
BEGET_CHECK(module != NULL, return);
BEGET_ERROR_CHECK(module != NULL, return, "Can not find module %s", name);
// Remove from the list
ListRemove((ListNode *)module);
......
......@@ -19,33 +19,45 @@
#include "begetctl.h"
#include "control_fd.h"
#include "init_utils.h"
#include "init_param.h"
#include "securec.h"
#include "shell_utils.h"
#define MODULE_CTL_CMD_ARGS 2
static int main_cmd(BShellHandle shell, int argc, char **argv)
static int32_t ModuleInstallCmd(BShellHandle shell, int32_t argc, char *argv[])
{
if (argc != MODULE_CTL_CMD_ARGS) {
BShellCmdHelp(shell, argc, argv);
return 0;
}
BSH_LOGV("ModuleInstallCmd %s %s \n", argv[0], argv[1]);
char combinedArgs[MAX_BUFFER_LEN];
int ret = sprintf_s(combinedArgs, sizeof(combinedArgs), "ohos.servicectrl.%s", argv[0]);
BSH_CHECK(ret > 0, return -1, "Invalid buffer");
combinedArgs[ret] = '\0';
SystemSetParameter(combinedArgs, argv[1]);
return 0;
}
if (argc < MODULE_CTL_CMD_ARGS) {
static int ModuleDisplayCmd(BShellHandle shell, int argc, char **argv)
{
if (argc < 1) {
BShellCmdHelp(shell, argc, argv);
return 0;
}
if (argc > MODULE_CTL_CMD_ARGS) {
(void)snprintf_s(combinedArgs, sizeof(combinedArgs),
sizeof(combinedArgs) - 1, "%s:%s", argv[1], argv[2]);
CmdClientInit(INIT_CONTROL_FD_SOCKET_PATH, ACTION_MODULEMGR, combinedArgs, "FIFO");
} else {
CmdClientInit(INIT_CONTROL_FD_SOCKET_PATH, ACTION_MODULEMGR, argv[1], "FIFO");
}
CmdClientInit(INIT_CONTROL_FD_SOCKET_PATH, ACTION_MODULEMGR, argv[0], "FIFO");
return 0;
}
MODULE_CONSTRUCTOR(void)
{
const CmdInfo infos[] = {
{"modulectl", main_cmd, "dump all modules installed", "modulectl list", NULL},
{"modulectl", main_cmd, "install or uninstall specified module",
"modulectl install|uninstall moduleName", NULL},
{"modulectl", ModuleDisplayCmd, "dump all modules installed",
"modulectl list", "modulectl list"},
{"modulectl", ModuleInstallCmd, "install specified module",
"modulectl install moduleName", "modulectl install"},
{"modulectl", ModuleInstallCmd, "uninstall specified module",
"modulectl uninstall moduleName", "modulectl uninstall"},
};
for (size_t i = 0; i < sizeof(infos) / sizeof(infos[0]); i++) {
BShellEnvRegitsterCmd(GetShellHandle(), &infos[i]);
......
......@@ -57,29 +57,14 @@ static void ProcessDumpServiceControlFd(uint16_t type, const char *serviceCmd)
static void ProcessModuleMgrControlFd(uint16_t type, const char *serviceCmd)
{
#define MODULE_INSTALL_PREFIX "install:"
#define MODULE_UNINSTALL_PREFIX "uninstall:"
int cmdLen;
if ((type != ACTION_MODULEMGR) || (serviceCmd == NULL)) {
return;
}
INIT_LOGE("ProcessModuleMgrControlFd argc [%s] \n", serviceCmd);
if (strcmp(serviceCmd, "list") == 0) {
InitModuleMgrDump();
return;
}
cmdLen = strlen(MODULE_INSTALL_PREFIX);
if (strncmp(serviceCmd, MODULE_INSTALL_PREFIX, cmdLen) == 0) {
INIT_LOGI("Install %s now ...\n", serviceCmd + cmdLen);
InitModuleMgrInstall(serviceCmd + cmdLen);
return;
}
cmdLen = strlen(MODULE_UNINSTALL_PREFIX);
if (strncmp(serviceCmd, MODULE_UNINSTALL_PREFIX, cmdLen) == 0) {
INIT_LOGI("Uninstall %s now ...\n", serviceCmd + cmdLen);
InitModuleMgrUnInstall(serviceCmd + cmdLen);
return;
}
}
static void ProcessParamShellControlFd(uint16_t type, const char *serviceCmd)
......
......@@ -92,18 +92,18 @@ HWTEST_F(ModuleMgrUnitTest, ModuleInstallTest, TestSize.Level1)
ASSERT_EQ(cnt, 0);
// Install one module
ret = ModuleMgrInstall(moduleMgr, "libbootchart", 0, NULL);
ret = ModuleMgrInstall(moduleMgr, "bootchart", 0, NULL);
ASSERT_EQ(ret, 0);
cnt = ModuleMgrGetCnt(moduleMgr);
ASSERT_EQ(cnt, 1);
// Uninstall the module
ModuleMgrUninstall(moduleMgr, "libbootchart");
ModuleMgrUninstall(moduleMgr, "bootchart");
cnt = ModuleMgrGetCnt(moduleMgr);
ASSERT_EQ(cnt, 0);
// Install two module
ret = ModuleMgrInstall(moduleMgr, "libbootchart", 0, NULL);
ret = ModuleMgrInstall(moduleMgr, "bootchart", 0, NULL);
ASSERT_EQ(ret, 0);
cnt = ModuleMgrGetCnt(moduleMgr);
ASSERT_EQ(cnt, 1);
......@@ -113,7 +113,7 @@ HWTEST_F(ModuleMgrUnitTest, ModuleInstallTest, TestSize.Level1)
ASSERT_EQ(cnt, 1);
// Uninstall the module
ModuleMgrUninstall(moduleMgr, "libbootchart");
ModuleMgrUninstall(moduleMgr, "bootchart");
cnt = ModuleMgrGetCnt(moduleMgr);
ASSERT_EQ(cnt, 0);
ModuleMgrUninstall(moduleMgr, "notexist");
......
......@@ -366,10 +366,8 @@ void PrepareInitUnitTestEnv(void)
PrepareInnerKitsCfg();
PrepareModCfg();
PrepareGroupTestCfg();
EnableInitLog(INIT_DEBUG);
#if !(defined __LITEOS_A__ || defined __LITEOS_M__)
PrepareCmdLineHasSn();
// for dac
std::string dacData = "ohos.servicectrl. = system:servicectrl:0775 \n";
dacData += "test.permission. = root:root:0770\n";
......@@ -377,12 +375,16 @@ void PrepareInitUnitTestEnv(void)
dacData += "test.permission.write.= root:root:0772\n";
dacData += "test.permission.watcher. = root:root:0771\n";
CreateTestFile(STARTUP_INIT_UT_PATH "/system/etc/param/ohos.para.dac", dacData.c_str());
CreateTestFile(STARTUP_INIT_UT_PATH"/trigger_test.cfg", g_triggerData);
TestSetSelinuxOps();
#endif
InitParamService();
#if !(defined __LITEOS_A__ || defined __LITEOS_M__)
PrepareCmdLineHasSn();
TestSetSelinuxOps();
LoadSpecialParam();
#endif
// read system parameters
LoadDefaultParams("/system/etc/param/ohos_const", LOAD_PARAM_NORMAL);
LoadDefaultParams("/vendor/etc/param", LOAD_PARAM_NORMAL);
......@@ -408,6 +410,7 @@ int TestFreeLocalSecurityLabel(ParamSecurityLabel *srcLabel)
static __attribute__((constructor(101))) void ParamTestStubInit(void)
{
EnableInitLog(INIT_DEBUG);
PARAM_LOGI("ParamTestStubInit");
PrepareInitUnitTestEnv();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册