diff --git a/build_lite/BUILD.gn b/build_lite/BUILD.gn index 10e3bb6ceca945dfcede5ec15de248bdbc4f4004..f2f92a238c5d9ed5a3a898a2f915e3c80259fb91 100755 --- a/build_lite/BUILD.gn +++ b/build_lite/BUILD.gn @@ -43,6 +43,7 @@ lite_component("acts_component") { "//test/xts/acts/distributed_schedule_lite/samgr_hal:ActsSamgrTest", "//test/xts/acts/update_lite/updater_hal:ActsUpdaterFuncTest", + "//test/xts/acts/startup_lite/bootstrap_hal:ActsBootstrapTest", ] } else if (ohos_kernel_type == "liteos_a") { all_features += [ diff --git a/startup_lite/bootstrap_hal/BUILD.gn b/startup_lite/bootstrap_hal/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..6fb0aa3025df83166a2e0bb7860023c152d729b6 --- /dev/null +++ b/startup_lite/bootstrap_hal/BUILD.gn @@ -0,0 +1,27 @@ +# Copyright (c) 2020-2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//test/xts/tools/lite/build/suite_lite.gni") + +hctest_suite("ActsBootstrapTest") { + suite_name = "acts" + sources = [ + "src/samgr_api_test.c" + ] + + include_dirs = [ + "src", + "//utils/native/native_lite/include", + ] + cflags = [ "-Wno-error" ] +} diff --git a/startup_lite/bootstrap_hal/Test.tmpl b/startup_lite/bootstrap_hal/Test.tmpl new file mode 100755 index 0000000000000000000000000000000000000000..be8407e1286041a5af2bdc75a15633337376eb9d --- /dev/null +++ b/startup_lite/bootstrap_hal/Test.tmpl @@ -0,0 +1,19 @@ +{ + "description": "Config for $module test cases", + "environment": [ + { + "type": "device", + "label": "wifiiot" + } + ], + "kits": [ + { + "type": "DeployKit", + "timeout": "20000", + "burn_file": "$subsystem/$module.bin" + } + ], + "driver": { + "type": "CTestLite" + } +} \ No newline at end of file diff --git a/startup_lite/bootstrap_hal/src/samgr_api_test.c b/startup_lite/bootstrap_hal/src/samgr_api_test.c new file mode 100644 index 0000000000000000000000000000000000000000..1cd41b0c97d34cfe22593046dfcee64acb525fa4 --- /dev/null +++ b/startup_lite/bootstrap_hal/src/samgr_api_test.c @@ -0,0 +1,427 @@ +/* +* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +*/ +/** + * Copyright (c) 2020-2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "hctest.h" +#include +#include +#include "samgr_api_test.h" + +static int g_initIndex = 0; +static int g_coreInit[API_PRI_MAX] = {0}; +static int g_sysRun[API_PRI_MAX] = {0}; +static int g_sysServiceInit[API_PRI_MAX] = {0}; +static int g_sysFeatureInit[API_PRI_MAX] = {0}; +static int g_sysExServiceInit[API_PRI_MAX] = {0}; +static int g_sysExFeatureInit[API_PRI_MAX] = {0}; +static int g_appServiceInit[API_PRI_MAX] = {0}; +static int g_appFeatureInit[API_PRI_MAX] = {0}; + +/** + * @tc.desc : register a test suite, this suite is used to test basic flow and interface dependency + * @param : subsystem name is startup + * @param : module name is bootstrap + * @param : test suit name is SamgrApiTestSuite + */ +LITE_TEST_SUIT(startup, bootstrap, SamgrApiTestSuite); + +/** + * @tc.setup : setup for all testcases + * @return : setup result, TRUE is success, FALSE is fail + */ +static BOOL SamgrApiTestSuiteSetUp(void) +{ + return TRUE; +} + +/** + * @tc.teardown : teardown for all testcases + * @return : teardown result, TRUE is success, FALSE is fail + */ +static BOOL SamgrApiTestSuiteTearDown(void) +{ + printf("+-------------------------------------------+\n"); + return TRUE; +} + +static void PrintInitIndex(const int initArr[]) +{ + for (int i = 0; i < API_PRI_MAX; i++) { + if (i == API_PRI_DEFAULT) { + printf("default: %d", initArr[i]); + continue; + } + printf("%d: %d", i, initArr[i]); + } +} + +static void CoreInitDef(void) +{ + g_coreInit[API_PRI_DEFAULT] = g_initIndex; +} + +static void CoreInit0(void) +{ + g_coreInit[API_PRI0] = g_initIndex; +} +static void CoreInit1(void) +{ + g_coreInit[API_PRI1] = g_initIndex; +} +static void CoreInit2(void) +{ + g_coreInit[API_PRI2] = g_initIndex; +} +static void CoreInit3(void) +{ + g_coreInit[API_PRI3] = g_initIndex; +} +static void CoreInit4(void) +{ + g_coreInit[API_PRI4] = g_initIndex; +} + +static void SysRunDef(void) +{ + g_sysRun[API_PRI_DEFAULT] = g_initIndex; +} +static void SysRun0(void) +{ + g_sysRun[API_PRI0] = g_initIndex; +} +static void SysRun1(void) +{ + g_sysRun[API_PRI1] = g_initIndex; +} +static void SysRun2(void) +{ + g_sysRun[API_PRI2] = g_initIndex; +} +static void SysRun3(void) +{ + g_sysRun[API_PRI3] = g_initIndex; +} +static void SysRun4(void) +{ + g_sysRun[API_PRI4] = g_initIndex; +} + +static void SysServiceInitDef(void) +{ + g_sysServiceInit[API_PRI_DEFAULT] = g_initIndex; +} +static void SysServiceInit0(void) +{ + g_sysServiceInit[API_PRI0] = g_initIndex; +} +static void SysServiceInit1(void) +{ + g_sysServiceInit[API_PRI1] = g_initIndex; +} +static void SysServiceInit2(void) +{ + g_sysServiceInit[API_PRI2] = g_initIndex; +} +static void SysServiceInit3(void) +{ + g_sysServiceInit[API_PRI3] = g_initIndex; +} +static void SysServiceInit4(void) +{ + g_sysServiceInit[API_PRI4] = g_initIndex; +} + +static void SysFeatureInitDef(void) +{ + g_sysFeatureInit[API_PRI_DEFAULT] = g_initIndex; +} +static void SysFeatureInit0(void) +{ + g_sysFeatureInit[API_PRI0] = g_initIndex; +} +static void SysFeatureInit1(void) +{ + g_sysFeatureInit[API_PRI1] = g_initIndex; +} +static void SysFeatureInit2(void) +{ + g_sysFeatureInit[API_PRI2] = g_initIndex; +} +static void SysFeatureInit3(void) +{ + g_sysFeatureInit[API_PRI3] = g_initIndex; +} +static void SysFeatureInit4(void) +{ + g_sysFeatureInit[API_PRI4] = g_initIndex; +} + +static void SysExSerInitDef(void) +{ + g_sysExServiceInit[API_PRI_DEFAULT] = g_initIndex; +} +static void SysExSerInit0(void) +{ + g_sysExServiceInit[API_PRI0] = g_initIndex; +} +static void SysExSerInit1(void) +{ + g_sysExServiceInit[API_PRI1] = g_initIndex; +} +static void SysExSerInit2(void) +{ + g_sysExServiceInit[API_PRI2] = g_initIndex; +} +static void SysExSerInit3(void) +{ + g_sysExServiceInit[API_PRI3] = g_initIndex; +} +static void SysExSerInit4(void) +{ + g_sysExServiceInit[API_PRI4] = g_initIndex; +} + +static void SysExFeaInitDef(void) +{ + g_sysExFeatureInit[API_PRI_DEFAULT] = g_initIndex; +} +static void SysExFeaInit0(void) +{ + g_sysExFeatureInit[API_PRI0] = g_initIndex; +} +static void SysExFeaInit1(void) +{ + g_sysExFeatureInit[API_PRI1] = g_initIndex; +} +static void SysExFeaInit2(void) +{ + g_sysExFeatureInit[API_PRI2] = g_initIndex; +} +static void SysExFeaInit3(void) +{ + g_sysExFeatureInit[API_PRI3] = g_initIndex; +} +static void SysExFeaInit4(void) +{ + g_sysExFeatureInit[API_PRI4] = g_initIndex; +} + +static void AppServiceInitDef(void) +{ + g_appServiceInit[API_PRI_DEFAULT] = g_initIndex; +} +static void AppServiceInit0(void) +{ + g_appServiceInit[API_PRI0] = g_initIndex; +} +static void AppServiceInit1(void) +{ + g_appServiceInit[API_PRI1] = g_initIndex; +} +static void AppServiceInit2(void) +{ + g_appServiceInit[API_PRI2] = g_initIndex; +} +static void AppServiceInit3(void) +{ + g_appServiceInit[API_PRI3] = g_initIndex; +} +static void AppServiceInit4(void) +{ + g_appServiceInit[API_PRI4] = g_initIndex; +} + +static void AppFeatureInitDef(void) +{ + g_appFeatureInit[API_PRI_DEFAULT] = g_initIndex; +} +static void AppFeatureInit0(void) +{ + g_appFeatureInit[API_PRI0] = g_initIndex; +} +static void AppFeatureInit1(void) +{ + g_appFeatureInit[API_PRI1] = g_initIndex; +} +static void AppFeatureInit2(void) +{ + g_appFeatureInit[API_PRI2] = g_initIndex; +} +static void AppFeatureInit3(void) +{ + g_appFeatureInit[API_PRI3] = g_initIndex; +} +static void AppFeatureInit4(void) +{ + g_appFeatureInit[API_PRI4] = g_initIndex; +} + +// 接口注册后的启动顺序依赖hos_init.h中的定义的数字大小 + +// 第0个执行,内部按照0~4优先级执行,default优先级为2 +CORE_INIT(CoreInitDef); +CORE_INIT_PRI(CoreInit0, 0); +CORE_INIT_PRI(CoreInit1, 1); +CORE_INIT_PRI(CoreInit4, 4); +CORE_INIT_PRI(CoreInit2, 2); +CORE_INIT_PRI(CoreInit3, 3); + +// 最后一个执行,内部按照0~4优先级执行,default优先级为2 +SYS_RUN(SysRunDef); +SYS_RUN_PRI(SysRun0, 0); +SYS_RUN_PRI(SysRun1, 1); +SYS_RUN_PRI(SysRun4, 4); +SYS_RUN_PRI(SysRun2, 2); +SYS_RUN_PRI(SysRun3, 3); + +// 第1个执行,内部按照0~4优先级执行,default优先级为2 +SYS_SERVICE_INIT(SysServiceInitDef); +SYS_SERVICE_INIT_PRI(SysServiceInit0, 0); +SYS_SERVICE_INIT_PRI(SysServiceInit1, 1); +SYS_SERVICE_INIT_PRI(SysServiceInit4, 4); +SYS_SERVICE_INIT_PRI(SysServiceInit2, 2); +SYS_SERVICE_INIT_PRI(SysServiceInit3, 3); + +// 第2个执行,内部按照0~4优先级执行,default优先级为2 +SYS_FEATURE_INIT(SysFeatureInitDef); +SYS_FEATURE_INIT_PRI(SysFeatureInit0, 0); +SYS_FEATURE_INIT_PRI(SysFeatureInit2, 2); +SYS_FEATURE_INIT_PRI(SysFeatureInit1, 1); +SYS_FEATURE_INIT_PRI(SysFeatureInit3, 3); +SYS_FEATURE_INIT_PRI(SysFeatureInit4, 4); + +// 第3个执行,注意和APP_SERVICE_INIT_XXX并列,谁先注册先执行谁,内部按照0~4优先级执行,default优先级为2 +SYSEX_SERVICE_INIT(SysExSerInitDef); +SYSEX_SERVICE_INIT_PRI(SysExSerInit0, 0); +SYSEX_SERVICE_INIT_PRI(SysExSerInit1, 1); +SYSEX_SERVICE_INIT_PRI(SysExSerInit2, 2); +SYSEX_SERVICE_INIT_PRI(SysExSerInit3, 3); +SYSEX_SERVICE_INIT_PRI(SysExSerInit4, 4); + +// 第4个执行,注意和APP_FEATURE_INIT_XXX并列,谁先注册先执行谁,内部按照0~4优先级执行,default优先级为2 +SYSEX_FEATURE_INIT(SysExFeaInitDef); +SYSEX_FEATURE_INIT_PRI(SysExFeaInit0, 0); +SYSEX_FEATURE_INIT_PRI(SysExFeaInit1, 1); +SYSEX_FEATURE_INIT_PRI(SysExFeaInit2, 2); +SYSEX_FEATURE_INIT_PRI(SysExFeaInit3, 3); +SYSEX_FEATURE_INIT_PRI(SysExFeaInit4, 4); + +// 第3个执行,注意和SYSEX_SERVICE_INIT_XXX并列,谁先注册先执行谁,内部按照0~4优先级执行,default优先级为2 +APP_SERVICE_INIT(AppServiceInitDef); +APP_SERVICE_INIT_PRI(AppServiceInit0, 0); +APP_SERVICE_INIT_PRI(AppServiceInit4, 4); +APP_SERVICE_INIT_PRI(AppServiceInit3, 3); +APP_SERVICE_INIT_PRI(AppServiceInit2, 2); +APP_SERVICE_INIT_PRI(AppServiceInit1, 1); + +// 第4个执行,注意和SYSEX_FEATURE_INIT_XXX并列,谁先注册先执行谁,内部按照0~4优先级执行,default优先级为2 +APP_FEATURE_INIT(AppFeatureInitDef); +APP_FEATURE_INIT_PRI(AppFeatureInit0, 0); +APP_FEATURE_INIT_PRI(AppFeatureInit1, 1); +APP_FEATURE_INIT_PRI(AppFeatureInit3, 3); +APP_FEATURE_INIT_PRI(AppFeatureInit4, 4); +APP_FEATURE_INIT_PRI(AppFeatureInit2, 2); + +/** + * @tc.number : SUB_START_Bootstrap_Samgr_0100 + * @tc.name : check total init index + * @tc.desc : check total init index, return success + */ +LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr001, Function | MediumTest | Level0) +{ + printf("[TestStartBootstrapSamgr001:%d]", g_initIndex); + TEST_ASSERT_EQUAL_INT(g_initIndex, SAMGR_API_GROUP_NUM*SAMGR_API_CALL_NUM); +}; + +/** + * @tc.number : SUB_START_Bootstrap_Samgr_0200 + * @tc.name : check core init index + * @tc.desc : check core init, return success + */ +LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr002, Function | MediumTest | Level0) +{ + printf("g_coreInit"); + PrintInitIndex(g_coreInit); + TEST_ASSERT_EQUAL_INT(g_coreInit[API_PRI0], GET_INIT_INDEX(CORE_INIT_E, API_PRI0)); +}; + +/** + * @tc.number : SUB_START_Bootstrap_Samgr_0300 + * @tc.name : check system service init index + * @tc.desc : check system service init, return success + */ +LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr003, Function | MediumTest | Level0) +{ + printf("g_sysServiceInit"); + PrintInitIndex(g_sysServiceInit); + TEST_ASSERT_EQUAL_INT(g_sysServiceInit[API_PRI0], GET_INIT_INDEX(SYS_SERVICE_INIT_E, API_PRI0)); +}; + +/** + * @tc.number : SUB_START_Bootstrap_Samgr_0400 + * @tc.name : check system feature init index + * @tc.desc : check system feature init, return success + */ +LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr004, Function | MediumTest | Level0) +{ + printf("g_sysFeatureInit"); + PrintInitIndex(g_sysFeatureInit); + TEST_ASSERT_EQUAL_INT(g_sysFeatureInit[API_PRI0], GET_INIT_INDEX(SYS_FEATURE_INIT_E, API_PRI0)); +}; + +/** + * @tc.number : SUB_START_Bootstrap_Samgr_0500 + * @tc.name : check system extend service and app service init index + * @tc.desc : check system extend service and app service init, return success + */ +LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr005, Function | MediumTest | Level0) +{ + printf("g_sysExServiceInit"); + PrintInitIndex(g_sysExServiceInit); + printf("g_appServiceInit"); + PrintInitIndex(g_appServiceInit); + TEST_ASSERT_EQUAL_INT(g_sysExServiceInit[API_PRI0], GET_INIT_INDEX(APP_SERVICE_INIT_E, 0)); +}; + +/** + * @tc.number : SUB_START_Bootstrap_Samgr_0600 + * @tc.name : check system extend feature and app feature init index + * @tc.desc : check system extend feature and app feature init, return success + */ +LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr006, Function | MediumTest | Level0) +{ + printf("g_sysExFeatureInit"); + PrintInitIndex(g_sysExFeatureInit); + printf("g_appFeatureInit"); + PrintInitIndex(g_appFeatureInit); + TEST_ASSERT_EQUAL_INT(g_sysExFeatureInit[API_PRI0], GET_INIT_INDEX(APP_FEATURE_INIT_E, 0)); +}; + +/** + * @tc.number : SUB_START_Bootstrap_Samgr_0700 + * @tc.name : check system run index + * @tc.desc : check system run, return success + */ +LITE_TEST_CASE(SamgrApiTestSuite, TestStartBootstrapSamgr007, Function | MediumTest | Level0) +{ + printf("g_sysRun"); + PrintInitIndex(g_sysRun); + TEST_ASSERT_EQUAL_INT(g_sysRun[API_PRI0], GET_INIT_INDEX(SYS_RUN_E, API_PRI0)); +}; + +RUN_TEST_SUITE(SamgrApiTestSuite); diff --git a/startup_lite/bootstrap_hal/src/samgr_api_test.h b/startup_lite/bootstrap_hal/src/samgr_api_test.h new file mode 100644 index 0000000000000000000000000000000000000000..6f1ef2cf239f204860446da8703a299db1e026ea --- /dev/null +++ b/startup_lite/bootstrap_hal/src/samgr_api_test.h @@ -0,0 +1,47 @@ +/* +* Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. +*/ +/* + * Copyright (c) 2020 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef XTS_HITS_SAMGR_API_EXPECT_H +#define XTS_HITS_SAMGR_API_EXPECT_H + +const int SAMGR_API_GROUP_NUM = 0; +const int SAMGR_API_CALL_NUM = 0; +#define GET_INIT_INDEX(G, pri) (((G)*(SAMGR_API_CALL_NUM))+((G)*(pri))) + +enum TagSamgrApiGroup { + CORE_INIT_E = 0, + SYS_SERVICE_INIT_E = 0, + SYS_FEATURE_INIT_E = 0, + APP_SERVICE_INIT_E = 0, + SYSEX_SERVICE_INIT_E = 0, + APP_FEATURE_INIT_E = 0, + SYSEX_FEATURE_INIT = 0, + SYS_RUN_E = 0, +}; + +enum TagSamgrApiPri { + API_PRI0 = 0, + API_PRI1 = 0, + API_PRI_DEFAULT = 0, + API_PRI2 = 0, + API_PRI3 = 0, + API_PRI4 = 0, + API_PRI_MAX = 0, +}; + +#endif // XTS_HITS_SAMGR_API_EXPECT_H \ No newline at end of file