• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 <cerrno>
17 #include <cstring>
18 #include <gtest/gtest.h>
19 #include <cJSON.h>
20 
21 #include "appspawn.h"
22 #include "appspawn_hook.h"
23 #include "appspawn_manager.h"
24 #include "app_spawn_stub.h"
25 #include "app_spawn_test_helper.h"
26 
27 using namespace testing;
28 using namespace testing::ext;
29 using namespace OHOS;
30 
31 APPSPAWN_STATIC int RunChildThread(const AppSpawnMgr *content, const AppSpawningCtx *property);
32 APPSPAWN_STATIC int RunChildByRenderCmd(const AppSpawnMgr *content, const AppSpawningCtx *property);
33 APPSPAWN_STATIC int PreLoadAppSpawn(AppSpawnMgr *content);
34 APPSPAWN_STATIC int DlopenAppSpawn(AppSpawnMgr *content);
35 
36 namespace OHOS {
37 static AppSpawnTestHelper g_testHelper;
38 class AppSpawnAceTest : public testing::Test {
39 public:
SetUpTestCase()40     static void SetUpTestCase() {}
TearDownTestCase()41     static void TearDownTestCase() {}
SetUp()42     void SetUp() {}
TearDown()43     void TearDown() {}
44 };
45 
46 /**
47  * @brief nwebspawn进行预加载
48  * @note 预期结果: nwebspawn不支持预加载,直接返回
49  *
50  */
51 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Preload_001, TestSize.Level0)
52 {
53     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_NWEB_SPAWN);
54     ASSERT_NE(mgr, nullptr);
55     mgr->content.longProcName = const_cast<char *>(NWEBSPAWN_SERVER_NAME);
56     mgr->content.longProcNameLen = APP_LEN_PROC_NAME;
57 
58     int ret = PreLoadAppSpawn(mgr);
59     DeleteAppSpawnMgr(mgr);
60     EXPECT_EQ(ret, 0);
61 }
62 
63 /**
64  * @brief cjappspawn进行预加载
65  * @note 预期结果: cjappspawn通过processName校验,执行LoadExtendCJLib预加载
66  *
67  */
68 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Preload_002, TestSize.Level0)
69 {
70     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_CJAPP_SPAWN);
71     ASSERT_NE(mgr, nullptr);
72     mgr->content.longProcName = const_cast<char *>(CJAPPSPAWN_SERVER_NAME);
73     mgr->content.longProcNameLen = APP_LEN_PROC_NAME;
74 
75     int ret = PreLoadAppSpawn(mgr);
76     DeleteAppSpawnMgr(mgr);
77     EXPECT_EQ(ret, 0);
78 }
79 
80 /**
81  * @brief 未设置preload参数时(使用参数默认值),appspawn进行预加载
82  * @note 预期结果: appspawn根据参数默认值判断是否执行preload预加载
83  *
84  */
85 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Preload_003, TestSize.Level0)
86 {
87     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN);
88     ASSERT_NE(mgr, nullptr);
89     mgr->content.longProcName = const_cast<char *>(APPSPAWN_SERVER_NAME);
90     mgr->content.longProcNameLen = APP_LEN_PROC_NAME;
91 
92     int ret = PreLoadAppSpawn(mgr);
93     DeleteAppSpawnMgr(mgr);
94     EXPECT_EQ(ret, 0);
95 }
96 
97 /**
98  * @brief preload参数设置为true时,测试appspawn进行预加载
99  * @note 预期结果: appspawn执行preload预加载
100  *
101  */
102 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Preload_004, TestSize.Level0)
103 {
104     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN);
105     ASSERT_NE(mgr, nullptr);
106     mgr->content.longProcName = const_cast<char *>(APPSPAWN_SERVER_NAME);
107     mgr->content.longProcNameLen = APP_LEN_PROC_NAME;
108 
109     SetBoolParamResult("persist.appspawn.preload", true);
110     int ret = PreLoadAppSpawn(mgr);
111     SetBoolParamResult("persist.appspawn.preload", false);
112     DeleteAppSpawnMgr(mgr);
113     EXPECT_EQ(ret, 0);
114 }
115 
116 /**
117  * @brief preload参数和preloadets参数均设置为true时,测试appspawn进行预加载
118  * @note 预期结果: appspawn执行preload和preloadets预加载
119  *
120  */
121 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Preload_005, TestSize.Level0)
122 {
123     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN);
124     ASSERT_NE(mgr, nullptr);
125     mgr->content.longProcName = const_cast<char *>(APPSPAWN_SERVER_NAME);
126     mgr->content.longProcNameLen = APP_LEN_PROC_NAME;
127 
128     SetBoolParamResult("persist.appspawn.preload", true);
129     SetBoolParamResult("persist.appspawn.preloadets", true);
130     int ret = PreLoadAppSpawn(mgr);
131     SetBoolParamResult("persist.appspawn.preload", false);
132     SetBoolParamResult("persist.appspawn.preloadets", false);
133     DeleteAppSpawnMgr(mgr);
134     EXPECT_EQ(ret, 0);
135 }
136 
137 /**
138  * @brief 未设置preload参数时(使用参数默认值),hybridspawn进行预加载
139  * @note 预期结果: appspawn根据参数默认值判断是否执行preload预加载
140  *
141  */
142 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Preload_006, TestSize.Level0)
143 {
144     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_HYBRID_SPAWN);
145     ASSERT_NE(mgr, nullptr);
146     mgr->content.longProcName = const_cast<char *>(HYBRIDSPAWN_SERVER_NAME);
147     mgr->content.longProcNameLen = APP_LEN_PROC_NAME;
148 
149     int ret = PreLoadAppSpawn(mgr);
150     DeleteAppSpawnMgr(mgr);
151     EXPECT_EQ(ret, 0);
152 }
153 
154 /**
155  * @brief preload参数设置为true时,测试hybridspawn进行预加载
156  * @note 预期结果: appspawn执行preload预加载
157  *
158  */
159 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Preload_007, TestSize.Level0)
160 {
161     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_HYBRID_SPAWN);
162     ASSERT_NE(mgr, nullptr);
163     mgr->content.longProcName = const_cast<char *>(HYBRIDSPAWN_SERVER_NAME);
164     mgr->content.longProcNameLen = APP_LEN_PROC_NAME;
165 
166     SetBoolParamResult("persist.appspawn.preload", true);
167     int ret = PreLoadAppSpawn(mgr);
168     SetBoolParamResult("persist.appspawn.preload", false);
169     DeleteAppSpawnMgr(mgr);
170     EXPECT_EQ(ret, 0);
171 }
172 
173 /**
174  * @brief preload参数和preloadets参数均设置为true时,测试hybridspawn进行预加载
175  * @note 预期结果: appspawn执行preload和preloadets预加载
176  *
177  */
178 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Preload_008, TestSize.Level0)
179 {
180     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_HYBRID_SPAWN);
181     ASSERT_NE(mgr, nullptr);
182     mgr->content.longProcName = const_cast<char *>(HYBRIDSPAWN_SERVER_NAME);
183     mgr->content.longProcNameLen = APP_LEN_PROC_NAME;
184 
185     SetBoolParamResult("persist.appspawn.preload", true);
186     SetBoolParamResult("persist.appspawn.preloadets", true);
187     int ret = PreLoadAppSpawn(mgr);
188     SetBoolParamResult("persist.appspawn.preload", false);
189     SetBoolParamResult("persist.appspawn.preloadets", false);
190     DeleteAppSpawnMgr(mgr);
191     EXPECT_EQ(ret, 0);
192 }
193 
194 /**
195  * @brief nwebspawn进行加载system libs
196  * @note 预期结果: nwebspawn不支持加载system libs,直接返回
197  *
198  */
199 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Dlopen_001, TestSize.Level0)
200 {
201     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_NWEB_SPAWN);
202     ASSERT_NE(mgr, nullptr);
203 
204     int ret = DlopenAppSpawn(mgr);
205     DeleteAppSpawnMgr(mgr);
206     EXPECT_EQ(ret, 0);
207 }
208 
209 /**
210  * @brief appspawn进行加载system libs
211  * @note 预期结果: appspawn加载system libs正常
212  *
213  */
214 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_Dlopen_002, TestSize.Level0)
215 {
216     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN);
217     ASSERT_NE(mgr, nullptr);
218 
219     int ret = DlopenAppSpawn(mgr);
220     DeleteAppSpawnMgr(mgr);
221     EXPECT_EQ(ret, 0);
222 }
223 
224 /**
225  * @brief appspawn执行RunChildThread
226  * @note 预期结果: 执行正常,分支覆盖
227  *
228  */
229 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_RunChild_001, TestSize.Level0)
230 {
231     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN);
232     ASSERT_NE(mgr, nullptr);
233     AppSpawningCtx *property = CreateAppSpawningCtx();
234     ASSERT_NE(property, nullptr);
235     property->message = CreateAppSpawnMsg();
236     ASSERT_NE(property->message, nullptr);
237 
238     int ret = RunChildThread(mgr, property);
239     DeleteAppSpawningCtx(property);
240     DeleteAppSpawnMgr(mgr);
241     EXPECT_EQ(ret, 0);
242 }
243 
244 /**
245  * @brief appspawn执行RunChildByRenderCmd
246  * @note 预期结果: 执行正常,分支覆盖
247  *
248  */
249 HWTEST_F(AppSpawnAceTest, App_Spawn_Ace_RunChild_002, TestSize.Level0)
250 {
251     AppSpawnMgr *mgr = CreateAppSpawnMgr(MODE_FOR_APP_SPAWN);
252     ASSERT_NE(mgr, nullptr);
253     AppSpawningCtx *property = CreateAppSpawningCtx();
254     ASSERT_NE(property, nullptr);
255     property->message = CreateAppSpawnMsg();
256     ASSERT_NE(property->message, nullptr);
257 
258     int ret = RunChildByRenderCmd(mgr, property);
259     DeleteAppSpawningCtx(property);
260     DeleteAppSpawnMgr(mgr);
261     EXPECT_EQ(ret, -1);
262 }
263 }   // namespace OHOS
264