1 /**
2  * Copyright (c) 2020-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  */
16 
17 #include "hctest.h"
18 #include <ohos_init.h>
19 #include <samgr_lite.h>
20 #include "samgr_api_test.h"
21 
22 static int g_initIndex = 0;
23 static int g_coreInit[API_PRI_MAX] = {0};
24 static int g_sysRun[API_PRI_MAX] = {0};
25 static int g_sysServiceInit[API_PRI_MAX] = {0};
26 static int g_sysFeatureInit[API_PRI_MAX] = {0};
27 static int g_sysExServiceInit[API_PRI_MAX] = {0};
28 static int g_sysExFeatureInit[API_PRI_MAX] = {0};
29 static int g_appServiceInit[API_PRI_MAX] = {0};
30 static int g_appFeatureInit[API_PRI_MAX] = {0};
31 
32 /**
33  * @tc.desc      : register a test suite, this suite is used to test basic flow and interface dependency
34  * @param        : subsystem name is startup
35  * @param        : module name is bootstrap
36  * @param        : test suit name is SamgrApiTestSuite
37  */
38 LITE_TEST_SUIT(startup, bootstrap, SamgrApiTestSuite);
39 
40 /**
41  * @tc.setup     : setup for all testcases
42  * @return       : setup result, TRUE is success, FALSE is fail
43  */
SamgrApiTestSuiteSetUp(void)44 static BOOL SamgrApiTestSuiteSetUp(void)
45 {
46     return TRUE;
47 }
48 
49 /**
50  * @tc.teardown  : teardown for all testcases
51  * @return       : teardown result, TRUE is success, FALSE is fail
52  */
SamgrApiTestSuiteTearDown(void)53 static BOOL SamgrApiTestSuiteTearDown(void)
54 {
55     printf("+-------------------------------------------+\n");
56     return TRUE;
57 }
58 
PrintInitIndex(const int initArr[])59 static void PrintInitIndex(const int initArr[])
60 {
61     for (int i = 0; i < API_PRI_MAX; i++) {
62         if (i == API_PRI_DEFAULT) {
63             printf("default: %d", initArr[i]);
64             continue;
65         }
66         printf("%d: %d", i, initArr[i]);
67     }
68 }
69 
CoreInitDef(void)70 static void CoreInitDef(void)
71 {
72     g_coreInit[API_PRI_DEFAULT] = g_initIndex;
73 }
74 
CoreInit0(void)75 static void CoreInit0(void)
76 {
77     g_coreInit[API_PRI0] = g_initIndex;
78 }
CoreInit1(void)79 static void CoreInit1(void)
80 {
81     g_coreInit[API_PRI1] = g_initIndex;
82 }
CoreInit2(void)83 static void CoreInit2(void)
84 {
85     g_coreInit[API_PRI2] = g_initIndex;
86 }
CoreInit3(void)87 static void CoreInit3(void)
88 {
89     g_coreInit[API_PRI3] = g_initIndex;
90 }
CoreInit4(void)91 static void CoreInit4(void)
92 {
93     g_coreInit[API_PRI4] = g_initIndex;
94 }
95 
SysRunDef(void)96 static void SysRunDef(void)
97 {
98     g_sysRun[API_PRI_DEFAULT] = g_initIndex;
99 }
SysRun0(void)100 static void SysRun0(void)
101 {
102     g_sysRun[API_PRI0] = g_initIndex;
103 }
SysRun1(void)104 static void SysRun1(void)
105 {
106     g_sysRun[API_PRI1] = g_initIndex;
107 }
SysRun2(void)108 static void SysRun2(void)
109 {
110     g_sysRun[API_PRI2] = g_initIndex;
111 }
SysRun3(void)112 static void SysRun3(void)
113 {
114     g_sysRun[API_PRI3] = g_initIndex;
115 }
SysRun4(void)116 static void SysRun4(void)
117 {
118     g_sysRun[API_PRI4] = g_initIndex;
119 }
120 
SysServiceInitDef(void)121 static void SysServiceInitDef(void)
122 {
123     g_sysServiceInit[API_PRI_DEFAULT] = g_initIndex;
124 }
SysServiceInit0(void)125 static void SysServiceInit0(void)
126 {
127     g_sysServiceInit[API_PRI0] = g_initIndex;
128 }
SysServiceInit1(void)129 static void SysServiceInit1(void)
130 {
131     g_sysServiceInit[API_PRI1] = g_initIndex;
132 }
SysServiceInit2(void)133 static void SysServiceInit2(void)
134 {
135     g_sysServiceInit[API_PRI2] = g_initIndex;
136 }
SysServiceInit3(void)137 static void SysServiceInit3(void)
138 {
139     g_sysServiceInit[API_PRI3] = g_initIndex;
140 }
SysServiceInit4(void)141 static void SysServiceInit4(void)
142 {
143     g_sysServiceInit[API_PRI4] = g_initIndex;
144 }
145 
SysFeatureInitDef(void)146 static void SysFeatureInitDef(void)
147 {
148     g_sysFeatureInit[API_PRI_DEFAULT] = g_initIndex;
149 }
SysFeatureInit0(void)150 static void SysFeatureInit0(void)
151 {
152     g_sysFeatureInit[API_PRI0] = g_initIndex;
153 }
SysFeatureInit1(void)154 static void SysFeatureInit1(void)
155 {
156     g_sysFeatureInit[API_PRI1] = g_initIndex;
157 }
SysFeatureInit2(void)158 static void SysFeatureInit2(void)
159 {
160     g_sysFeatureInit[API_PRI2] = g_initIndex;
161 }
SysFeatureInit3(void)162 static void SysFeatureInit3(void)
163 {
164     g_sysFeatureInit[API_PRI3] = g_initIndex;
165 }
SysFeatureInit4(void)166 static void SysFeatureInit4(void)
167 {
168     g_sysFeatureInit[API_PRI4] = g_initIndex;
169 }
170 
SysExSerInitDef(void)171 static void SysExSerInitDef(void)
172 {
173     g_sysExServiceInit[API_PRI_DEFAULT] = g_initIndex;
174 }
SysExSerInit0(void)175 static void SysExSerInit0(void)
176 {
177     g_sysExServiceInit[API_PRI0] = g_initIndex;
178 }
SysExSerInit1(void)179 static void SysExSerInit1(void)
180 {
181     g_sysExServiceInit[API_PRI1] = g_initIndex;
182 }
SysExSerInit2(void)183 static void SysExSerInit2(void)
184 {
185     g_sysExServiceInit[API_PRI2] = g_initIndex;
186 }
SysExSerInit3(void)187 static void SysExSerInit3(void)
188 {
189     g_sysExServiceInit[API_PRI3] = g_initIndex;
190 }
SysExSerInit4(void)191 static void SysExSerInit4(void)
192 {
193     g_sysExServiceInit[API_PRI4] = g_initIndex;
194 }
195 
SysExFeaInitDef(void)196 static void SysExFeaInitDef(void)
197 {
198     g_sysExFeatureInit[API_PRI_DEFAULT] = g_initIndex;
199 }
SysExFeaInit0(void)200 static void SysExFeaInit0(void)
201 {
202     g_sysExFeatureInit[API_PRI0] = g_initIndex;
203 }
SysExFeaInit1(void)204 static void SysExFeaInit1(void)
205 {
206     g_sysExFeatureInit[API_PRI1] = g_initIndex;
207 }
SysExFeaInit2(void)208 static void SysExFeaInit2(void)
209 {
210     g_sysExFeatureInit[API_PRI2] = g_initIndex;
211 }
SysExFeaInit3(void)212 static void SysExFeaInit3(void)
213 {
214     g_sysExFeatureInit[API_PRI3] = g_initIndex;
215 }
SysExFeaInit4(void)216 static void SysExFeaInit4(void)
217 {
218     g_sysExFeatureInit[API_PRI4] = g_initIndex;
219 }
220 
AppServiceInitDef(void)221 static void AppServiceInitDef(void)
222 {
223     g_appServiceInit[API_PRI_DEFAULT] = g_initIndex;
224 }
AppServiceInit0(void)225 static void AppServiceInit0(void)
226 {
227     g_appServiceInit[API_PRI0] = g_initIndex;
228 }
AppServiceInit1(void)229 static void AppServiceInit1(void)
230 {
231     g_appServiceInit[API_PRI1] = g_initIndex;
232 }
AppServiceInit2(void)233 static void AppServiceInit2(void)
234 {
235     g_appServiceInit[API_PRI2] = g_initIndex;
236 }
AppServiceInit3(void)237 static void AppServiceInit3(void)
238 {
239     g_appServiceInit[API_PRI3] = g_initIndex;
240 }
AppServiceInit4(void)241 static void AppServiceInit4(void)
242 {
243     g_appServiceInit[API_PRI4] = g_initIndex;
244 }
245 
AppFeatureInitDef(void)246 static void AppFeatureInitDef(void)
247 {
248     g_appFeatureInit[API_PRI_DEFAULT] = g_initIndex;
249 }
AppFeatureInit0(void)250 static void AppFeatureInit0(void)
251 {
252     g_appFeatureInit[API_PRI0] = g_initIndex;
253 }
AppFeatureInit1(void)254 static void AppFeatureInit1(void)
255 {
256     g_appFeatureInit[API_PRI1] = g_initIndex;
257 }
AppFeatureInit2(void)258 static void AppFeatureInit2(void)
259 {
260     g_appFeatureInit[API_PRI2] = g_initIndex;
261 }
AppFeatureInit3(void)262 static void AppFeatureInit3(void)
263 {
264     g_appFeatureInit[API_PRI3] = g_initIndex;
265 }
AppFeatureInit4(void)266 static void AppFeatureInit4(void)
267 {
268     g_appFeatureInit[API_PRI4] = g_initIndex;
269 }
270 
271 // 接口注册后的启动顺序依赖hos_init.h中的定义的数字大小
272 
273 // 第0个执行,内部按照0~4优先级执行,default优先级为2
274 CORE_INIT(CoreInitDef);
275 CORE_INIT_PRI(CoreInit0, 0);
276 CORE_INIT_PRI(CoreInit1, 1);
277 CORE_INIT_PRI(CoreInit4, 4);
278 CORE_INIT_PRI(CoreInit2, 2);
279 CORE_INIT_PRI(CoreInit3, 3);
280 
281 // 最后一个执行,内部按照0~4优先级执行,default优先级为2
282 SYS_RUN(SysRunDef);
283 SYS_RUN_PRI(SysRun0, 0);
284 SYS_RUN_PRI(SysRun1, 1);
285 SYS_RUN_PRI(SysRun4, 4);
286 SYS_RUN_PRI(SysRun2, 2);
287 SYS_RUN_PRI(SysRun3, 3);
288 
289 // 第1个执行,内部按照0~4优先级执行,default优先级为2
290 SYS_SERVICE_INIT(SysServiceInitDef);
291 SYS_SERVICE_INIT_PRI(SysServiceInit0, 0);
292 SYS_SERVICE_INIT_PRI(SysServiceInit1, 1);
293 SYS_SERVICE_INIT_PRI(SysServiceInit4, 4);
294 SYS_SERVICE_INIT_PRI(SysServiceInit2, 2);
295 SYS_SERVICE_INIT_PRI(SysServiceInit3, 3);
296 
297 // 第2个执行,内部按照0~4优先级执行,default优先级为2
298 SYS_FEATURE_INIT(SysFeatureInitDef);
299 SYS_FEATURE_INIT_PRI(SysFeatureInit0, 0);
300 SYS_FEATURE_INIT_PRI(SysFeatureInit2, 2);
301 SYS_FEATURE_INIT_PRI(SysFeatureInit1, 1);
302 SYS_FEATURE_INIT_PRI(SysFeatureInit3, 3);
303 SYS_FEATURE_INIT_PRI(SysFeatureInit4, 4);
304 
305 // 第3个执行,注意和APP_SERVICE_INIT_XXX并列,谁先注册先执行谁,内部按照0~4优先级执行,default优先级为2
306 SYSEX_SERVICE_INIT(SysExSerInitDef);
307 SYSEX_SERVICE_INIT_PRI(SysExSerInit0, 0);
308 SYSEX_SERVICE_INIT_PRI(SysExSerInit1, 1);
309 SYSEX_SERVICE_INIT_PRI(SysExSerInit2, 2);
310 SYSEX_SERVICE_INIT_PRI(SysExSerInit3, 3);
311 SYSEX_SERVICE_INIT_PRI(SysExSerInit4, 4);
312 
313 // 第4个执行,注意和APP_FEATURE_INIT_XXX并列,谁先注册先执行谁,内部按照0~4优先级执行,default优先级为2
314 SYSEX_FEATURE_INIT(SysExFeaInitDef);
315 SYSEX_FEATURE_INIT_PRI(SysExFeaInit0, 0);
316 SYSEX_FEATURE_INIT_PRI(SysExFeaInit1, 1);
317 SYSEX_FEATURE_INIT_PRI(SysExFeaInit2, 2);
318 SYSEX_FEATURE_INIT_PRI(SysExFeaInit3, 3);
319 SYSEX_FEATURE_INIT_PRI(SysExFeaInit4, 4);
320 
321 // 第3个执行,注意和SYSEX_SERVICE_INIT_XXX并列,谁先注册先执行谁,内部按照0~4优先级执行,default优先级为2
322 APP_SERVICE_INIT(AppServiceInitDef);
323 APP_SERVICE_INIT_PRI(AppServiceInit0, 0);
324 APP_SERVICE_INIT_PRI(AppServiceInit4, 4);
325 APP_SERVICE_INIT_PRI(AppServiceInit3, 3);
326 APP_SERVICE_INIT_PRI(AppServiceInit2, 2);
327 APP_SERVICE_INIT_PRI(AppServiceInit1, 1);
328 
329 // 第4个执行,注意和SYSEX_FEATURE_INIT_XXX并列,谁先注册先执行谁,内部按照0~4优先级执行,default优先级为2
330 APP_FEATURE_INIT(AppFeatureInitDef);
331 APP_FEATURE_INIT_PRI(AppFeatureInit0, 0);
332 APP_FEATURE_INIT_PRI(AppFeatureInit1, 1);
333 APP_FEATURE_INIT_PRI(AppFeatureInit3, 3);
334 APP_FEATURE_INIT_PRI(AppFeatureInit4, 4);
335 APP_FEATURE_INIT_PRI(AppFeatureInit2, 2);
336 
337 /**
338  * @tc.number    : SUB_START_Bootstrap_Samgr_0100
339  * @tc.name      : check total init index
340  * @tc.desc      : check total init index, return success
341  */
342 LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr001, Function | MediumTest | Level0)
343 {
344     printf("[TestStartBootstrapSamgr001:%d]", g_initIndex);
345     TEST_ASSERT_EQUAL_INT(g_initIndex, SAMGR_API_GROUP_NUM*SAMGR_API_CALL_NUM);
346 };
347 
348 /**
349  * @tc.number    : SUB_START_Bootstrap_Samgr_0200
350  * @tc.name      : check core init index
351  * @tc.desc      : check core init, return success
352  */
353 LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr002, Function | MediumTest | Level0)
354 {
355     printf("g_coreInit");
356     PrintInitIndex(g_coreInit);
357     TEST_ASSERT_EQUAL_INT(g_coreInit[API_PRI0], GET_INIT_INDEX(CORE_INIT_E, API_PRI0));
358 };
359 
360 /**
361  * @tc.number    : SUB_START_Bootstrap_Samgr_0300
362  * @tc.name      : check system service init index
363  * @tc.desc      : check system service init, return success
364  */
365 LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr003, Function | MediumTest | Level0)
366 {
367     printf("g_sysServiceInit");
368     PrintInitIndex(g_sysServiceInit);
369     TEST_ASSERT_EQUAL_INT(g_sysServiceInit[API_PRI0], GET_INIT_INDEX(SYS_SERVICE_INIT_E, API_PRI0));
370 };
371 
372 /**
373  * @tc.number    : SUB_START_Bootstrap_Samgr_0400
374  * @tc.name      : check system feature init index
375  * @tc.desc      : check system feature init, return success
376  */
377 LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr004, Function | MediumTest | Level0)
378 {
379     printf("g_sysFeatureInit");
380     PrintInitIndex(g_sysFeatureInit);
381     TEST_ASSERT_EQUAL_INT(g_sysFeatureInit[API_PRI0], GET_INIT_INDEX(SYS_FEATURE_INIT_E, API_PRI0));
382 };
383 
384 /**
385  * @tc.number    : SUB_START_Bootstrap_Samgr_0500
386  * @tc.name      : check system extend service and app service init index
387  * @tc.desc      : check system extend service and app service init, return success
388  */
389 LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr005, Function | MediumTest | Level0)
390 {
391     printf("g_sysExServiceInit");
392     PrintInitIndex(g_sysExServiceInit);
393     printf("g_appServiceInit");
394     PrintInitIndex(g_appServiceInit);
395     TEST_ASSERT_EQUAL_INT(g_sysExServiceInit[API_PRI0], GET_INIT_INDEX(APP_SERVICE_INIT_E, 0));
396 };
397 
398 /**
399  * @tc.number    : SUB_START_Bootstrap_Samgr_0600
400  * @tc.name      : check system extend feature and app feature init index
401  * @tc.desc      : check system extend feature and app feature init, return success
402  */
403 LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr006, Function | MediumTest | Level0)
404 {
405     printf("g_sysExFeatureInit");
406     PrintInitIndex(g_sysExFeatureInit);
407     printf("g_appFeatureInit");
408     PrintInitIndex(g_appFeatureInit);
409     TEST_ASSERT_EQUAL_INT(g_sysExFeatureInit[API_PRI0], GET_INIT_INDEX(APP_FEATURE_INIT_E, 0));
410 };
411 
412 /**
413  * @tc.number    : SUB_START_Bootstrap_Samgr_0700
414  * @tc.name      : check system run index
415  * @tc.desc      : check system run, return success
416  */
417 LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr007, Function | MediumTest | Level0)
418 {
419     printf("g_sysRun");
420     PrintInitIndex(g_sysRun);
421     TEST_ASSERT_EQUAL_INT(g_sysRun[API_PRI0], GET_INIT_INDEX(SYS_RUN_E, API_PRI0));
422 };
423 
424 RUN_TEST_SUITE(SamgrApiTestSuite);
425