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