1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci#include <cstdlib> 16d9f0492fSopenharmony_ci#include "init_cmds.h" 17d9f0492fSopenharmony_ci#include "init_group_manager.h" 18d9f0492fSopenharmony_ci#include "init_hashmap.h" 19d9f0492fSopenharmony_ci#include "init_param.h" 20d9f0492fSopenharmony_ci#include "init_service_manager.h" 21d9f0492fSopenharmony_ci#include "init_utils.h" 22d9f0492fSopenharmony_ci#include "init_unittest.h" 23d9f0492fSopenharmony_ci#include "le_timer.h" 24d9f0492fSopenharmony_ci#include "param_stub.h" 25d9f0492fSopenharmony_ci#include "securec.h" 26d9f0492fSopenharmony_ci#include "control_fd.h" 27d9f0492fSopenharmony_ci 28d9f0492fSopenharmony_ciusing namespace testing::ext; 29d9f0492fSopenharmony_ciusing namespace std; 30d9f0492fSopenharmony_ci 31d9f0492fSopenharmony_citypedef struct { 32d9f0492fSopenharmony_ci HashNode node; 33d9f0492fSopenharmony_ci char name[0]; 34d9f0492fSopenharmony_ci} TestHashNode; 35d9f0492fSopenharmony_ci 36d9f0492fSopenharmony_cistatic int TestHashNodeCompare(const HashNode *node1, const HashNode *node2) 37d9f0492fSopenharmony_ci{ 38d9f0492fSopenharmony_ci TestHashNode *testNode1 = HASHMAP_ENTRY(node1, TestHashNode, node); 39d9f0492fSopenharmony_ci TestHashNode *testNode2 = HASHMAP_ENTRY(node2, TestHashNode, node); 40d9f0492fSopenharmony_ci return strcmp(testNode1->name, testNode2->name); 41d9f0492fSopenharmony_ci} 42d9f0492fSopenharmony_ci 43d9f0492fSopenharmony_cistatic int TestHashKeyCompare(const HashNode *node1, const void *key) 44d9f0492fSopenharmony_ci{ 45d9f0492fSopenharmony_ci TestHashNode *testNode1 = HASHMAP_ENTRY(node1, TestHashNode, node); 46d9f0492fSopenharmony_ci return strcmp(testNode1->name, reinterpret_cast<char *>(const_cast<void *>(key))); 47d9f0492fSopenharmony_ci} 48d9f0492fSopenharmony_ci 49d9f0492fSopenharmony_cistatic int TestHashNodeFunction(const HashNode *node) 50d9f0492fSopenharmony_ci{ 51d9f0492fSopenharmony_ci TestHashNode *testNode = HASHMAP_ENTRY(node, TestHashNode, node); 52d9f0492fSopenharmony_ci int code = 0; 53d9f0492fSopenharmony_ci size_t nameLen = strlen(testNode->name); 54d9f0492fSopenharmony_ci for (size_t i = 0; i < nameLen; i++) { 55d9f0492fSopenharmony_ci code += testNode->name[i] - 'A'; 56d9f0492fSopenharmony_ci } 57d9f0492fSopenharmony_ci return code; 58d9f0492fSopenharmony_ci} 59d9f0492fSopenharmony_ci 60d9f0492fSopenharmony_cistatic int TestHashKeyFunction(const void *key) 61d9f0492fSopenharmony_ci{ 62d9f0492fSopenharmony_ci int code = 0; 63d9f0492fSopenharmony_ci const char *buff = static_cast<const char *>(key); 64d9f0492fSopenharmony_ci size_t buffLen = strlen(buff); 65d9f0492fSopenharmony_ci for (size_t i = 0; i < buffLen; i++) { 66d9f0492fSopenharmony_ci code += buff[i] - 'A'; 67d9f0492fSopenharmony_ci } 68d9f0492fSopenharmony_ci return code; 69d9f0492fSopenharmony_ci} 70d9f0492fSopenharmony_ci 71d9f0492fSopenharmony_cistatic void TestHashNodeFree(const HashNode *node, void *context) 72d9f0492fSopenharmony_ci{ 73d9f0492fSopenharmony_ci TestHashNode *testNode = HASHMAP_ENTRY(node, TestHashNode, node); 74d9f0492fSopenharmony_ci printf("TestHashNodeFree %s\n", testNode->name); 75d9f0492fSopenharmony_ci free(testNode); 76d9f0492fSopenharmony_ci} 77d9f0492fSopenharmony_ci 78d9f0492fSopenharmony_cistatic TestHashNode *TestCreateHashNode(const char *value) 79d9f0492fSopenharmony_ci{ 80d9f0492fSopenharmony_ci TestHashNode *node = reinterpret_cast<TestHashNode *>(malloc(sizeof(TestHashNode) + strlen(value) + 1)); 81d9f0492fSopenharmony_ci if (node == nullptr) { 82d9f0492fSopenharmony_ci return nullptr; 83d9f0492fSopenharmony_ci } 84d9f0492fSopenharmony_ci int ret = strcpy_s(node->name, strlen(value) + 1, value); 85d9f0492fSopenharmony_ci if (ret != 0) { 86d9f0492fSopenharmony_ci free(node); 87d9f0492fSopenharmony_ci return nullptr; 88d9f0492fSopenharmony_ci } 89d9f0492fSopenharmony_ci HASHMAPInitNode(&node->node); 90d9f0492fSopenharmony_ci return node; 91d9f0492fSopenharmony_ci} 92d9f0492fSopenharmony_ci 93d9f0492fSopenharmony_cistatic void DoCmdByName(const char *name, const char *cmdContent) 94d9f0492fSopenharmony_ci{ 95d9f0492fSopenharmony_ci int cmdIndex = 0; 96d9f0492fSopenharmony_ci (void)GetMatchCmd(name, &cmdIndex); 97d9f0492fSopenharmony_ci DoCmdByIndex(cmdIndex, cmdContent, nullptr); 98d9f0492fSopenharmony_ci} 99d9f0492fSopenharmony_ci 100d9f0492fSopenharmony_cinamespace init_ut { 101d9f0492fSopenharmony_ciclass InitGroupManagerUnitTest : public testing::Test { 102d9f0492fSopenharmony_cipublic: 103d9f0492fSopenharmony_ci static void SetUpTestCase(void) {}; 104d9f0492fSopenharmony_ci static void TearDownTestCase(void) {}; 105d9f0492fSopenharmony_ci void SetUp(void) {}; 106d9f0492fSopenharmony_ci void TearDown(void) {}; 107d9f0492fSopenharmony_ci}; 108d9f0492fSopenharmony_ci 109d9f0492fSopenharmony_ciHashInfo g_info = { 110d9f0492fSopenharmony_ci TestHashNodeCompare, 111d9f0492fSopenharmony_ci TestHashKeyCompare, 112d9f0492fSopenharmony_ci TestHashNodeFunction, 113d9f0492fSopenharmony_ci TestHashKeyFunction, 114d9f0492fSopenharmony_ci TestHashNodeFree, 115d9f0492fSopenharmony_ci 2 116d9f0492fSopenharmony_ci}; 117d9f0492fSopenharmony_ci 118d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestHashMap001, TestSize.Level1) 119d9f0492fSopenharmony_ci{ 120d9f0492fSopenharmony_ci HashMapHandle handle; 121d9f0492fSopenharmony_ci OH_HashMapCreate(&handle, &g_info); 122d9f0492fSopenharmony_ci const char *str1 = "Test hash map node 1"; 123d9f0492fSopenharmony_ci const char *str2 = "Test hash map node 2"; 124d9f0492fSopenharmony_ci const char *str3 = "Test hash map node 3"; 125d9f0492fSopenharmony_ci TestHashNode *node1 = TestCreateHashNode(str1); 126d9f0492fSopenharmony_ci TestHashNode *node2 = TestCreateHashNode(str2); 127d9f0492fSopenharmony_ci OH_HashMapAdd(handle, &node1->node); 128d9f0492fSopenharmony_ci OH_HashMapAdd(handle, &node2->node); 129d9f0492fSopenharmony_ci HashNode *node = OH_HashMapGet(handle, (const void *)str1); 130d9f0492fSopenharmony_ci EXPECT_NE(node != nullptr, 0); 131d9f0492fSopenharmony_ci if (node) { 132d9f0492fSopenharmony_ci TestHashNode *tmp = HASHMAP_ENTRY(node, TestHashNode, node); 133d9f0492fSopenharmony_ci EXPECT_EQ(strcmp(tmp->name, str1), 0); 134d9f0492fSopenharmony_ci } 135d9f0492fSopenharmony_ci node = OH_HashMapGet(handle, (const void *)str2); 136d9f0492fSopenharmony_ci EXPECT_NE(node != nullptr, 0); 137d9f0492fSopenharmony_ci if (node) { 138d9f0492fSopenharmony_ci TestHashNode *tmp = HASHMAP_ENTRY(node, TestHashNode, node); 139d9f0492fSopenharmony_ci EXPECT_EQ(strcmp(tmp->name, str2), 0); 140d9f0492fSopenharmony_ci } 141d9f0492fSopenharmony_ci TestHashNode *node3 = TestCreateHashNode(str3); 142d9f0492fSopenharmony_ci OH_HashMapAdd(handle, &node3->node); 143d9f0492fSopenharmony_ci node3 = TestCreateHashNode("Test hash map node 4"); 144d9f0492fSopenharmony_ci OH_HashMapAdd(handle, &node3->node); 145d9f0492fSopenharmony_ci node3 = TestCreateHashNode("Test hash map node 5"); 146d9f0492fSopenharmony_ci OH_HashMapAdd(handle, &node3->node); 147d9f0492fSopenharmony_ci node = OH_HashMapGet(handle, (const void *)str3); 148d9f0492fSopenharmony_ci EXPECT_NE(node != nullptr, 0); 149d9f0492fSopenharmony_ci if (node) { 150d9f0492fSopenharmony_ci TestHashNode *tmp = HASHMAP_ENTRY(node, TestHashNode, node); 151d9f0492fSopenharmony_ci EXPECT_EQ(strcmp(tmp->name, str3), 0); 152d9f0492fSopenharmony_ci } 153d9f0492fSopenharmony_ci OH_HashMapIsEmpty(handle); 154d9f0492fSopenharmony_ci OH_HashMapTraverse(handle, [](const HashNode *node, const void *context) {return;}, nullptr); 155d9f0492fSopenharmony_ci OH_HashMapDestory(handle, nullptr); 156d9f0492fSopenharmony_ci} 157d9f0492fSopenharmony_ci 158d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestHashMap002, TestSize.Level1) 159d9f0492fSopenharmony_ci{ 160d9f0492fSopenharmony_ci HashMapHandle handle; 161d9f0492fSopenharmony_ci OH_HashMapCreate(&handle, &g_info); 162d9f0492fSopenharmony_ci TestHashNode *node4 = TestCreateHashNode("pre-init"); 163d9f0492fSopenharmony_ci OH_HashMapAdd(handle, &node4->node); 164d9f0492fSopenharmony_ci OH_HashMapRemove(handle, "pre-init"); 165d9f0492fSopenharmony_ci TestHashNodeFree(&node4->node, nullptr); 166d9f0492fSopenharmony_ci 167d9f0492fSopenharmony_ci const char *act = "load_persist_props_action"; 168d9f0492fSopenharmony_ci TestHashNode *node5 = TestCreateHashNode(act); 169d9f0492fSopenharmony_ci OH_HashMapAdd(handle, &node5->node); 170d9f0492fSopenharmony_ci HashNode *node = OH_HashMapGet(handle, (const void *)act); 171d9f0492fSopenharmony_ci EXPECT_NE(node != nullptr, 0); 172d9f0492fSopenharmony_ci if (node) { 173d9f0492fSopenharmony_ci TestHashNode *tmp = HASHMAP_ENTRY(node, TestHashNode, node); 174d9f0492fSopenharmony_ci EXPECT_EQ(strcmp(tmp->name, act), 0); 175d9f0492fSopenharmony_ci } 176d9f0492fSopenharmony_ci OH_HashMapIsEmpty(handle); 177d9f0492fSopenharmony_ci OH_HashMapTraverse(handle, [](const HashNode *node, const void *context) {return;}, nullptr); 178d9f0492fSopenharmony_ci OH_HashMapDestory(handle, nullptr); 179d9f0492fSopenharmony_ci} 180d9f0492fSopenharmony_ci 181d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestInitGroupMgrInit, TestSize.Level1) 182d9f0492fSopenharmony_ci{ 183d9f0492fSopenharmony_ci InitServiceSpace(); 184d9f0492fSopenharmony_ci InitWorkspace *workspace = GetInitWorkspace(); 185d9f0492fSopenharmony_ci EXPECT_EQ(workspace->groupMode, GROUP_BOOT); 186d9f0492fSopenharmony_ci workspace->groupMode = GROUP_BOOT; 187d9f0492fSopenharmony_ci if (strcpy_s(workspace->groupModeStr, GROUP_NAME_MAX_LENGTH, "device.boot.group") != EOK) { 188d9f0492fSopenharmony_ci EXPECT_EQ(1, 0); 189d9f0492fSopenharmony_ci } 190d9f0492fSopenharmony_ci // test read cfgfile 191d9f0492fSopenharmony_ci int ret = InitParseGroupCfg(); 192d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 193d9f0492fSopenharmony_ci} 194d9f0492fSopenharmony_ci 195d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestAddService, TestSize.Level1) 196d9f0492fSopenharmony_ci{ 197d9f0492fSopenharmony_ci const char *serviceStr = "{" 198d9f0492fSopenharmony_ci "\"services\": [{" 199d9f0492fSopenharmony_ci "\"name\" : \"test-service\"," 200d9f0492fSopenharmony_ci "\"path\" : [\"/dev/test_service\"]," 201d9f0492fSopenharmony_ci "\"start-mode\" : \"condition\"," 202d9f0492fSopenharmony_ci "\"end-mode\" : \"after-exec\"," 203d9f0492fSopenharmony_ci "\"console\":1," 204d9f0492fSopenharmony_ci "\"writepid\":[\"/dev/test_service\"]," 205d9f0492fSopenharmony_ci "\"jobs\" : {" 206d9f0492fSopenharmony_ci "\"on-boot\" : \"boot:bootjob1\"," 207d9f0492fSopenharmony_ci "\"on-start\" : \"service:startjob\"," 208d9f0492fSopenharmony_ci "\"on-stop\" : \"service:stopjob\"," 209d9f0492fSopenharmony_ci "\"on-restart\" : \"service:restartjob\"" 210d9f0492fSopenharmony_ci "}" 211d9f0492fSopenharmony_ci "},{" 212d9f0492fSopenharmony_ci "\"name\" : \"test-service2\"," 213d9f0492fSopenharmony_ci "\"path\" : [\"/dev/test_service\"]," 214d9f0492fSopenharmony_ci "\"console\":1," 215d9f0492fSopenharmony_ci "\"start-mode\" : \"boot\"," 216d9f0492fSopenharmony_ci "\"writepid\":[\"/dev/test_service\"]," 217d9f0492fSopenharmony_ci "\"jobs\" : {" 218d9f0492fSopenharmony_ci "\"on-boot\" : \"boot:bootjob1\"," 219d9f0492fSopenharmony_ci "\"on-start\" : \"service:startjob\"," 220d9f0492fSopenharmony_ci "\"on-stop\" : \"service:stopjob\"," 221d9f0492fSopenharmony_ci "\"on-restart\" : \"service:restartjob\"" 222d9f0492fSopenharmony_ci "}" 223d9f0492fSopenharmony_ci "}]" 224d9f0492fSopenharmony_ci "}"; 225d9f0492fSopenharmony_ci 226d9f0492fSopenharmony_ci cJSON *fileRoot = cJSON_Parse(serviceStr); 227d9f0492fSopenharmony_ci ASSERT_NE(nullptr, fileRoot); 228d9f0492fSopenharmony_ci ConfigContext context = { INIT_CONTEXT_MAIN }; 229d9f0492fSopenharmony_ci ParseAllServices(fileRoot, &context); 230d9f0492fSopenharmony_ci cJSON_Delete(fileRoot); 231d9f0492fSopenharmony_ci 232d9f0492fSopenharmony_ci Service *service = GetServiceByName("test-service"); 233d9f0492fSopenharmony_ci ServiceStartTimer(service, 1); 234d9f0492fSopenharmony_ci ServiceStopTimer(service); 235d9f0492fSopenharmony_ci ASSERT_NE(service != nullptr, 0); 236d9f0492fSopenharmony_ci EXPECT_EQ(service->startMode, START_MODE_CONDITION); 237d9f0492fSopenharmony_ci ReleaseService(service); 238d9f0492fSopenharmony_ci service = GetServiceByName("test-service2"); 239d9f0492fSopenharmony_ci ASSERT_NE(service != nullptr, 0); 240d9f0492fSopenharmony_ci EXPECT_EQ(service->startMode, START_MODE_BOOT); 241d9f0492fSopenharmony_ci ReleaseService(service); 242d9f0492fSopenharmony_ci} 243d9f0492fSopenharmony_ci 244d9f0492fSopenharmony_ci/** 245d9f0492fSopenharmony_ci * @brief 246d9f0492fSopenharmony_ci * 247d9f0492fSopenharmony_ci 248d9f0492fSopenharmony_ci "socket" : [{ 249d9f0492fSopenharmony_ci "name" : "ueventd", 250d9f0492fSopenharmony_ci "family" : "AF_INET", // AF_INET,AF_INET6,AF_UNIX(AF_LOCAL),AF_NETLINK 251d9f0492fSopenharmony_ci "type" : : "SOCK_STREAM", // SOCK_STREAM,SOCK_DGRAM,SOCK_RAW,SOCK_PACKET,SOCK_SEQPACKET 252d9f0492fSopenharmony_ci "protocol" : "IPPROTO_TCP", // IPPROTO_TCP,IPPTOTO_UDP,IPPROTO_SCTP,PPROTO_TIPC 253d9f0492fSopenharmony_ci "permissions" : "0660", 254d9f0492fSopenharmony_ci "uid" : "system", 255d9f0492fSopenharmony_ci "gid" : "system", 256d9f0492fSopenharmony_ci "option" : { 257d9f0492fSopenharmony_ci "passcred" : "true", 258d9f0492fSopenharmony_ci "rcvbufforce" : "", 259d9f0492fSopenharmony_ci "cloexec" : "", 260d9f0492fSopenharmony_ci "nonblock : "" 261d9f0492fSopenharmony_ci } 262d9f0492fSopenharmony_ci }], 263d9f0492fSopenharmony_ci */ 264d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestAddServiceDeny, TestSize.Level1) 265d9f0492fSopenharmony_ci{ 266d9f0492fSopenharmony_ci const char *serviceStr = "{" 267d9f0492fSopenharmony_ci "\"services\": [{" 268d9f0492fSopenharmony_ci "\"name\" : \"test-service5\"," 269d9f0492fSopenharmony_ci "\"path\" : [\"/dev/test_service\"]," 270d9f0492fSopenharmony_ci "\"start-mode\" : \"by-condition\"," 271d9f0492fSopenharmony_ci "\"end-mode\" : \"ready\"," 272d9f0492fSopenharmony_ci "\"console\":1," 273d9f0492fSopenharmony_ci "\"writepid\":[\"/dev/test_service\"]," 274d9f0492fSopenharmony_ci "\"jobs\" : {" 275d9f0492fSopenharmony_ci "\"on-boot\" : \"boot:bootjob1\"," 276d9f0492fSopenharmony_ci "\"on-start\" : \"service:startjob\"," 277d9f0492fSopenharmony_ci "\"on-stop\" : \"service:stopjob\"," 278d9f0492fSopenharmony_ci "\"on-restart\" : \"service:restartjob\"" 279d9f0492fSopenharmony_ci "}" 280d9f0492fSopenharmony_ci "}]" 281d9f0492fSopenharmony_ci "}"; 282d9f0492fSopenharmony_ci InitWorkspace *workspace = GetInitWorkspace(); 283d9f0492fSopenharmony_ci workspace->groupMode = GROUP_CHARGE; 284d9f0492fSopenharmony_ci 285d9f0492fSopenharmony_ci cJSON *fileRoot = cJSON_Parse(serviceStr); 286d9f0492fSopenharmony_ci ASSERT_NE(nullptr, fileRoot); 287d9f0492fSopenharmony_ci ConfigContext context = { INIT_CONTEXT_MAIN }; 288d9f0492fSopenharmony_ci ParseAllServices(fileRoot, &context); 289d9f0492fSopenharmony_ci cJSON_Delete(fileRoot); 290d9f0492fSopenharmony_ci 291d9f0492fSopenharmony_ci Service *service = GetServiceByName("test-service5"); 292d9f0492fSopenharmony_ci ASSERT_EQ(service, nullptr); 293d9f0492fSopenharmony_ci workspace->groupMode = GROUP_BOOT; 294d9f0492fSopenharmony_ci} 295d9f0492fSopenharmony_ci 296d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestAddService2, TestSize.Level1) 297d9f0492fSopenharmony_ci{ 298d9f0492fSopenharmony_ci const char *serviceStr = "{" 299d9f0492fSopenharmony_ci "\"services\": [{" 300d9f0492fSopenharmony_ci "\"name\" : \"test-service6\"," 301d9f0492fSopenharmony_ci "\"path\" : [\"/dev/test_service\"]," 302d9f0492fSopenharmony_ci "\"console\":1," 303d9f0492fSopenharmony_ci "\"writepid\":[\"/dev/test_service\"]," 304d9f0492fSopenharmony_ci "\"jobs\" : {" 305d9f0492fSopenharmony_ci "\"on-boot\" : \"boot:bootjob1\"," 306d9f0492fSopenharmony_ci "\"on-start\" : \"service:startjob\"," 307d9f0492fSopenharmony_ci "\"on-stop\" : \"service:stopjob\"," 308d9f0492fSopenharmony_ci "\"on-restart\" : \"service:restartjob\"" 309d9f0492fSopenharmony_ci "}" 310d9f0492fSopenharmony_ci "}]" 311d9f0492fSopenharmony_ci "}"; 312d9f0492fSopenharmony_ci 313d9f0492fSopenharmony_ci InitWorkspace *workspace = GetInitWorkspace(); 314d9f0492fSopenharmony_ci workspace->groupMode = GROUP_CHARGE; 315d9f0492fSopenharmony_ci 316d9f0492fSopenharmony_ci InitGroupNode *node = AddGroupNode(NODE_TYPE_SERVICES, "test-service6"); 317d9f0492fSopenharmony_ci ASSERT_NE(nullptr, node); 318d9f0492fSopenharmony_ci 319d9f0492fSopenharmony_ci cJSON *fileRoot = cJSON_Parse(serviceStr); 320d9f0492fSopenharmony_ci ASSERT_NE(nullptr, fileRoot); 321d9f0492fSopenharmony_ci ConfigContext context = { INIT_CONTEXT_MAIN }; 322d9f0492fSopenharmony_ci ParseAllServices(fileRoot, &context); 323d9f0492fSopenharmony_ci cJSON_Delete(fileRoot); 324d9f0492fSopenharmony_ci char cmdStr[] = "all#bootevent"; 325d9f0492fSopenharmony_ci char cmdStr1[] = "parameter_service"; 326d9f0492fSopenharmony_ci ProcessControlFd(ACTION_DUMP, "all", nullptr); 327d9f0492fSopenharmony_ci ProcessControlFd(ACTION_DUMP, cmdStr, nullptr); 328d9f0492fSopenharmony_ci ProcessControlFd(ACTION_DUMP, cmdStr1, nullptr); 329d9f0492fSopenharmony_ci ProcessControlFd(ACTION_SANDBOX, cmdStr, nullptr); 330d9f0492fSopenharmony_ci ProcessControlFd(ACTION_MODULEMGR, cmdStr, nullptr); 331d9f0492fSopenharmony_ci ProcessControlFd(ACTION_MAX, cmdStr, nullptr); 332d9f0492fSopenharmony_ci Service *service = GetServiceByName("test-service6"); 333d9f0492fSopenharmony_ci ASSERT_NE(service, nullptr); 334d9f0492fSopenharmony_ci workspace->groupMode = GROUP_BOOT; 335d9f0492fSopenharmony_ci} 336d9f0492fSopenharmony_ci 337d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestParseServiceCpucore, TestSize.Level1) 338d9f0492fSopenharmony_ci{ 339d9f0492fSopenharmony_ci const char *jsonStr = "{\"services\":{\"name\":\"test_service22\",\"path\":[\"/data/init_ut/test_service\"]," 340d9f0492fSopenharmony_ci "\"importance\":-20,\"uid\":\"root\",\"writepid\":[\"/dev/test_service\"],\"console\":1," 341d9f0492fSopenharmony_ci "\"gid\":[\"root\"], \"cpucore\":[5, 2, 4, 1, 2, 0, 1], \"critical\":[1]}}"; 342d9f0492fSopenharmony_ci cJSON* jobItem = cJSON_Parse(jsonStr); 343d9f0492fSopenharmony_ci ASSERT_NE(nullptr, jobItem); 344d9f0492fSopenharmony_ci cJSON *serviceItem = cJSON_GetObjectItem(jobItem, "services"); 345d9f0492fSopenharmony_ci ASSERT_NE(nullptr, serviceItem); 346d9f0492fSopenharmony_ci Service *service = AddService("test_service22"); 347d9f0492fSopenharmony_ci const int invalidImportantValue = 20; 348d9f0492fSopenharmony_ci SetImportantValue(service, "", invalidImportantValue, 1); 349d9f0492fSopenharmony_ci if (service != nullptr) { 350d9f0492fSopenharmony_ci int ret = ParseOneService(serviceItem, service); 351d9f0492fSopenharmony_ci GetAccessToken(); 352d9f0492fSopenharmony_ci DoCmdByName("timer_start ", "test_service22|5000"); 353d9f0492fSopenharmony_ci DoCmdByName("timer_start ", "test_service22|aa"); 354d9f0492fSopenharmony_ci DoCmdByName("timer_start ", ""); 355d9f0492fSopenharmony_ci EXPECT_EQ(ret, 0); 356d9f0492fSopenharmony_ci StartServiceByName("test_service22|path"); 357d9f0492fSopenharmony_ci ReleaseService(service); 358d9f0492fSopenharmony_ci } 359d9f0492fSopenharmony_ci cJSON_Delete(jobItem); 360d9f0492fSopenharmony_ci} 361d9f0492fSopenharmony_ci 362d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestUpdaterServiceFds, TestSize.Level1) 363d9f0492fSopenharmony_ci{ 364d9f0492fSopenharmony_ci Service *service = AddService("test_service8"); 365d9f0492fSopenharmony_ci ASSERT_NE(nullptr, service); 366d9f0492fSopenharmony_ci int fds[1] = { -1 }; // ServiceStop will release fds 367d9f0492fSopenharmony_ci UpdaterServiceFds(nullptr, nullptr, 0); 368d9f0492fSopenharmony_ci UpdaterServiceFds(service, fds, 1); 369d9f0492fSopenharmony_ci UpdaterServiceFds(service, fds, 0); 370d9f0492fSopenharmony_ci UpdaterServiceFds(service, fds, 1); 371d9f0492fSopenharmony_ci UpdaterServiceFds(service, nullptr, 1); 372d9f0492fSopenharmony_ci UpdaterServiceFds(service, fds, 1); 373d9f0492fSopenharmony_ci int ret = UpdaterServiceFds(service, nullptr, 2); // 2 is fd num 374d9f0492fSopenharmony_ci ASSERT_NE(ret, 0); 375d9f0492fSopenharmony_ci service->attribute = SERVICE_ATTR_TIMERSTART; 376d9f0492fSopenharmony_ci ServiceStartTimer(service, 0); 377d9f0492fSopenharmony_ci} 378d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestProcessWatchEvent, TestSize.Level1) 379d9f0492fSopenharmony_ci{ 380d9f0492fSopenharmony_ci Service *service = AddService("test_service9"); 381d9f0492fSopenharmony_ci ASSERT_NE(nullptr, service); 382d9f0492fSopenharmony_ci ServiceSocket servercfg = {.next = nullptr, .sockFd = 0}; 383d9f0492fSopenharmony_ci service->socketCfg = &servercfg; 384d9f0492fSopenharmony_ci ServiceWatcher watcher; 385d9f0492fSopenharmony_ci int ret = AddSocketWatcher(&watcher, service, 0); 386d9f0492fSopenharmony_ci ASSERT_EQ(ret, 0); 387d9f0492fSopenharmony_ci uint32_t event; 388d9f0492fSopenharmony_ci ((WatcherTask *)watcher)->processEvent((WatcherHandle)watcher, 0, &event, service); 389d9f0492fSopenharmony_ci service->socketCfg = nullptr; 390d9f0492fSopenharmony_ci} 391d9f0492fSopenharmony_ci 392d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestCheckNodeValid, TestSize.Level1) 393d9f0492fSopenharmony_ci{ 394d9f0492fSopenharmony_ci int ret = CheckNodeValid(NODE_TYPE_MAX, "charger"); 395d9f0492fSopenharmony_ci EXPECT_EQ(ret, -1); 396d9f0492fSopenharmony_ci ret = CheckNodeValid(NODE_TYPE_PLUGINS, "charger"); 397d9f0492fSopenharmony_ci EXPECT_EQ(ret, -1); 398d9f0492fSopenharmony_ci} 399d9f0492fSopenharmony_ci 400d9f0492fSopenharmony_ciHWTEST_F(InitGroupManagerUnitTest, TestGetGroupHashMap, TestSize.Level1) 401d9f0492fSopenharmony_ci{ 402d9f0492fSopenharmony_ci HashMapHandle handle = GetGroupHashMap(NODE_TYPE_GROUPS); 403d9f0492fSopenharmony_ci EXPECT_TRUE(handle == nullptr); 404d9f0492fSopenharmony_ci} 405d9f0492fSopenharmony_ci} // namespace init_ut 406