From 0a9593f15e35cdefc61bd1144f3554d87082fab8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A8=8A=E6=99=AF=E4=B9=90?= Date: Mon, 30 Jun 2025 10:52:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ut=20=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 樊景乐 --- modules/common/appspawn_namespace.c | 4 +- test/mock/app_spawn_stub.h | 9 ++- .../app_spawn_common_test.cpp | 75 +++++++++++++++++++ .../app_spawn_silk_test.cpp | 10 +++ 4 files changed, 95 insertions(+), 3 deletions(-) diff --git a/modules/common/appspawn_namespace.c b/modules/common/appspawn_namespace.c index 8122410f..e128c4ae 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 1e70b90f..75222f45 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 c0e73013..22462e2f 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 a95e9db0..475eb463 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); +} -- Gitee