diff --git a/modules/common/appspawn_namespace.c b/modules/common/appspawn_namespace.c index 8122410fee0cb3f3690732b197a201110b930bca..e128c4ae55627b5ed4c655c4882a9e69fb6a0323 100644 --- a/modules/common/appspawn_namespace.c +++ b/modules/common/appspawn_namespace.c @@ -39,7 +39,7 @@ typedef struct TagAppSpawnNamespace { } AppSpawnNamespace; APPSPAWN_STATIC pid_t GetPidByName(const char *name); -static int AppSpawnExtDataCompareDataId(ListNode *node, void *data) +APPSPAWN_STATIC int AppSpawnExtDataCompareDataId(ListNode *node, void *data) { AppSpawnExtData *extData = (AppSpawnExtData *)ListEntry(node, AppSpawnExtData, node); return extData->dataId - *(uint32_t *)data; @@ -223,7 +223,7 @@ APPSPAWN_STATIC int PreLoadEnablePidNs(AppSpawnMgr *content) } // after calling setns, new process will be in the same pid namespace of the input pid -static int SetPidNamespace(int nsPidFd, int nsType) +APPSPAWN_STATIC int SetPidNamespace(int nsPidFd, int nsType) { APPSPAWN_LOGI("SetPidNamespace 0x%{public}x", nsType); #ifndef APPSPAWN_TEST diff --git a/test/mock/app_spawn_stub.h b/test/mock/app_spawn_stub.h index 1e70b90f29d36121d38476ba751fcc8e5e53c4c4..75222f45ce74fc431b8cf0871c4010dc24c6ea87 100644 --- a/test/mock/app_spawn_stub.h +++ b/test/mock/app_spawn_stub.h @@ -49,10 +49,17 @@ typedef struct TagPathMountNode PathMountNode; typedef struct TagMountArg MountArg; typedef struct TagVarExtraData VarExtraData; typedef struct TagSandboxSection SandboxSection; -typedef struct TagAppSpawnNamespace AppSpawnNamespace; +typedef struct TagAppSpawnNamespace { + AppSpawnExtData extData; + int nsSelfPidFd; + int nsInitPidFd; +} AppSpawnNamespace; typedef struct TagAppSpawnedProcess AppSpawnedProcessInfo; +int AppSpawnExtDataCompareDataId(ListNode *node, void *data); AppSpawnNamespace *GetAppSpawnNamespace(const AppSpawnMgr *content); +int SetPidNamespace(int nsPidFd, int nsType); +AppSpawnNamespace *CreateAppSpawnNamespace(void); void DeleteAppSpawnNamespace(AppSpawnNamespace *ns); void FreeAppSpawnNamespace(struct TagAppSpawnExtData *data); int PreForkSetPidNamespace(AppSpawnMgr *content, AppSpawningCtx *property); diff --git a/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp b/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp index c0e73013a74a2a7b3112df468e14a5bc828555fe..22462e2fdecdc4194f6a3fd56ea9bc103f420467 100644 --- a/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp +++ b/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp @@ -658,6 +658,81 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_Common_031, TestSize.Level0) AppSpawnClientInit(nullptr, nullptr); } +HWTEST_F(AppSpawnCommonTest, App_Spawn_Common_GetAppSpawnNamespace, TestSize.Level0) +{ + int ret = -1; + AppSpawnMgr *mgr = nullptr; + AppSpawnNamespace *appSpawnNamespace = nullptr; + mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN); + EXPECT_EQ(mgr != nullptr, 1); + appSpawnNamespace = CreateAppSpawnNamespace(); + appSpawnNamespace->nsSelfPidFd = GetNsPidFd(getpid()); + OH_ListInit(&appSpawnNamespace->extData.node); + OH_ListAddTail(&mgr->extData, &appSpawnNamespace->extData.node); + AppSpawnNamespace *appSpawnNamespace1 = nullptr; + appSpawnNamespace1 = GetAppSpawnNamespace(mgr); + EXPECT_EQ(appSpawnNamespace1 != nullptr, 1); + uint32_t dataId = EXT_DATA_NAMESPACE; + AppSpawnExtDataCompareDataId(&mgr->extData, (void *)&dataId); + DeleteAppSpawnNamespace(appSpawnNamespace); + DeleteAppSpawnMgr(mgr); +} + +HWTEST_F(AppSpawnCommonTest, App_Spawn_Common_GetPidByName, TestSize.Level0) +{ + int ret = -1; + AppSpawnMgr *mgr = nullptr; + AppSpawnNamespace *appSpawnNamespace = nullptr; + mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN); + EXPECT_EQ(mgr != nullptr, 1); + appSpawnNamespace = CreateAppSpawnNamespace(); + OH_ListInit(&appSpawnNamespace->extData.node); + OH_ListAddTail(&mgr->extData, &appSpawnNamespace->extData.node); + appSpawnNamespace->nsInitPidFd = GetNsPidFd(getpid()); + pid_t pid = GetPidByName("appspawn"); + EXPECT_EQ(pid > 0, 1); + DeleteAppSpawnNamespace(appSpawnNamespace); + DeleteAppSpawnMgr(mgr); +} + +HWTEST_F(AppSpawnCommonTest, App_Spawn_Common_PreLoadEnablePidNs, TestSize.Level0) +{ + int ret = -1; + AppSpawnMgr *mgr = nullptr; + AppSpawnNamespace *appSpawnNamespace = nullptr; + mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN); + EXPECT_EQ(mgr != nullptr, 1); + mgr->content.sandboxNsFlags = CLONE_NEWPID; + ret = PreLoadEnablePidNs(mgr); + EXPECT_EQ(ret, 0); + AppSpawnNamespace *appSpawnNamespace1 = nullptr; + appSpawnNamespace1 = GetAppSpawnNamespace(mgr); + EXPECT_EQ(appSpawnNamespace1 != nullptr, 1); + DeleteAppSpawnNamespace(appSpawnNamespace); + DeleteAppSpawnMgr(mgr); + SetPidNamespace(0, 0); +} + +HWTEST_F(AppSpawnCommonTest, App_Spawn_Common_PreForkSetPidNamespace, TestSize.Level0) +{ + int ret = -1; + AppSpawnMgr *mgr = nullptr; + AppSpawnNamespace *appSpawnNamespace = nullptr; + mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN); + EXPECT_EQ(mgr != nullptr, 1); + mgr->content.sandboxNsFlags = CLONE_NEWPID; + ret = PreLoadEnablePidNs(mgr); + EXPECT_EQ(ret, 0); + PreForkSetPidNamespace(mgr, nullptr); + PostForkSetPidNamespace(mgr, nullptr); + mgr->content.sandboxNsFlags = 0; + PreForkSetPidNamespace(mgr, nullptr); + PostForkSetPidNamespace(mgr, nullptr); + DeleteAppSpawnNamespace(appSpawnNamespace); + DeleteAppSpawnMgr(mgr); + SetPidNamespace(0, 0); +} + HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_001, TestSize.Level0) { const char encapsJsonStr[] = "{\"name\":\"Permissions\",\"ohos.encaps.count\":0,\"permissions\":" diff --git a/test/unittest/app_spawn_standard_test/app_spawn_silk_test.cpp b/test/unittest/app_spawn_standard_test/app_spawn_silk_test.cpp index a95e9db0e6e86e280842e8c5b0b7f75ba24cdc8d..475eb46342e004c0e7115db9f1f5fe04af4c5476 100644 --- a/test/unittest/app_spawn_standard_test/app_spawn_silk_test.cpp +++ b/test/unittest/app_spawn_standard_test/app_spawn_silk_test.cpp @@ -75,3 +75,13 @@ HWTEST_F(ParseSilkConfigTest, Parse_Silk_Config_002, TestSize.Level0) ASSERT_EQ(g_silkConfig.configItems, NULL); ASSERT_EQ(g_silkConfig.configCursor, 0); } + +HWTEST_F(ParseSilkConfigTest, Parse_Silk_Config_003, TestSize.Level0) +{ + const char *silkJsonStr = "{\"enabled_app_list0\":[\"com.taobao.taobao\",\"com.tencent.mm\"]}"; + cJSON *root = cJSON_Parse(silkJsonStr); + const char* testEnableSilkProcessName = NULL; + bool ret = ParseSilkConfig(root, &g_silkConfig); + cJSON_Delete(root); + ASSERT_EQ(ret, false); +}