1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2022 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 16d9f0492fSopenharmony_ci#include "test_utils.h" 17d9f0492fSopenharmony_ci 18d9f0492fSopenharmony_ci#include <iostream> 19d9f0492fSopenharmony_ci#include <map> 20d9f0492fSopenharmony_ci#include <string> 21d9f0492fSopenharmony_ci#include <vector> 22d9f0492fSopenharmony_ci#include <list> 23d9f0492fSopenharmony_ci#include <thread> 24d9f0492fSopenharmony_ci#include <memory> 25d9f0492fSopenharmony_ci#include <fcntl.h> 26d9f0492fSopenharmony_ci#include <cerrno> 27d9f0492fSopenharmony_ci#include <sys/stat.h> 28d9f0492fSopenharmony_ci 29d9f0492fSopenharmony_ci#include "parameters.h" 30d9f0492fSopenharmony_ci#include "service_control.h" 31d9f0492fSopenharmony_ci 32d9f0492fSopenharmony_cinamespace initModuleTest { 33d9f0492fSopenharmony_cinamespace { 34d9f0492fSopenharmony_ciconstexpr size_t MAX_BUFFER_SIZE = 4096; 35d9f0492fSopenharmony_ci} 36d9f0492fSopenharmony_ci 37d9f0492fSopenharmony_ci// File operator 38d9f0492fSopenharmony_ciint ReadFileContent(const std::string &fileName, std::string &content) 39d9f0492fSopenharmony_ci{ 40d9f0492fSopenharmony_ci content.clear(); 41d9f0492fSopenharmony_ci auto fp = std::unique_ptr<FILE, decltype(&fclose)>(fopen(fileName.c_str(), "r"), fclose); 42d9f0492fSopenharmony_ci if (fp == nullptr) { 43d9f0492fSopenharmony_ci std::cout << "Cannot open file " << fileName << std::endl; 44d9f0492fSopenharmony_ci return -1; 45d9f0492fSopenharmony_ci } 46d9f0492fSopenharmony_ci 47d9f0492fSopenharmony_ci struct stat st {}; 48d9f0492fSopenharmony_ci if (stat(fileName.c_str(), &st) < 0) { 49d9f0492fSopenharmony_ci std::cout << "Cannot get " << fileName << " stat\n"; 50d9f0492fSopenharmony_ci return -1; 51d9f0492fSopenharmony_ci } 52d9f0492fSopenharmony_ci 53d9f0492fSopenharmony_ci ssize_t n = 0; 54d9f0492fSopenharmony_ci char buffer[MAX_BUFFER_SIZE] = {}; 55d9f0492fSopenharmony_ci while ((n = fread(buffer, 1, MAX_BUFFER_SIZE, fp.get())) > 0) { 56d9f0492fSopenharmony_ci content.append(buffer, n); 57d9f0492fSopenharmony_ci } 58d9f0492fSopenharmony_ci return feof(fp.get()) ? 0 : -1; 59d9f0492fSopenharmony_ci} 60d9f0492fSopenharmony_ci 61d9f0492fSopenharmony_cibool StartsWith(const std::string &str, const std::string &prefix) 62d9f0492fSopenharmony_ci{ 63d9f0492fSopenharmony_ci return ((str.size() > prefix.size()) && (str.substr(0, prefix.size()) == prefix)); 64d9f0492fSopenharmony_ci} 65d9f0492fSopenharmony_ci 66d9f0492fSopenharmony_cibool EndsWith(const std::string &str, const std::string &suffix) 67d9f0492fSopenharmony_ci{ 68d9f0492fSopenharmony_ci return ((str.size() > suffix.size()) && (str.substr(str.size() - suffix.size(), suffix.size()) == suffix)); 69d9f0492fSopenharmony_ci} 70d9f0492fSopenharmony_ci 71d9f0492fSopenharmony_cistd::string Trim(const std::string &str) 72d9f0492fSopenharmony_ci{ 73d9f0492fSopenharmony_ci size_t start = 0; 74d9f0492fSopenharmony_ci size_t end = str.size() - 1; 75d9f0492fSopenharmony_ci 76d9f0492fSopenharmony_ci while (start < str.size()) { 77d9f0492fSopenharmony_ci if (!isspace(str[start])) { 78d9f0492fSopenharmony_ci break; 79d9f0492fSopenharmony_ci } 80d9f0492fSopenharmony_ci start++; 81d9f0492fSopenharmony_ci } 82d9f0492fSopenharmony_ci 83d9f0492fSopenharmony_ci while (start < end) { 84d9f0492fSopenharmony_ci if (!isspace(str[end])) { 85d9f0492fSopenharmony_ci break; 86d9f0492fSopenharmony_ci } 87d9f0492fSopenharmony_ci end--; 88d9f0492fSopenharmony_ci } 89d9f0492fSopenharmony_ci 90d9f0492fSopenharmony_ci if (end < start) { 91d9f0492fSopenharmony_ci return ""; 92d9f0492fSopenharmony_ci } 93d9f0492fSopenharmony_ci 94d9f0492fSopenharmony_ci return str.substr(start, end - start + 1); 95d9f0492fSopenharmony_ci} 96d9f0492fSopenharmony_ci 97d9f0492fSopenharmony_cistd::vector<std::string> Split(const std::string &str, const std::string &pattern) 98d9f0492fSopenharmony_ci{ 99d9f0492fSopenharmony_ci std::vector<std::string> result {}; 100d9f0492fSopenharmony_ci size_t pos = std::string::npos; 101d9f0492fSopenharmony_ci size_t start = 0; 102d9f0492fSopenharmony_ci while (true) { 103d9f0492fSopenharmony_ci pos = str.find_first_of(pattern, start); 104d9f0492fSopenharmony_ci result.push_back(str.substr(start, pos - start)); 105d9f0492fSopenharmony_ci if (pos == std::string::npos) { 106d9f0492fSopenharmony_ci break; 107d9f0492fSopenharmony_ci } 108d9f0492fSopenharmony_ci start = pos + 1; 109d9f0492fSopenharmony_ci } 110d9f0492fSopenharmony_ci return result; 111d9f0492fSopenharmony_ci} 112d9f0492fSopenharmony_ci 113d9f0492fSopenharmony_cistatic std::map<ServiceStatus, std::string> g_serviceStatusMap = { 114d9f0492fSopenharmony_ci { SERVICE_IDLE, "idle"}, 115d9f0492fSopenharmony_ci { SERVICE_STARTING, "starting"}, 116d9f0492fSopenharmony_ci { SERVICE_STARTED, "running"}, 117d9f0492fSopenharmony_ci { SERVICE_READY, "ready"}, 118d9f0492fSopenharmony_ci { SERVICE_STOPPING, "stopping"}, 119d9f0492fSopenharmony_ci { SERVICE_STOPPED, "stopped"}, 120d9f0492fSopenharmony_ci { SERVICE_ERROR, "error" }, 121d9f0492fSopenharmony_ci { SERVICE_SUSPENDED, "suspended" }, 122d9f0492fSopenharmony_ci { SERVICE_FREEZED, "freezed" }, 123d9f0492fSopenharmony_ci { SERVICE_DISABLED, "disabled" }, 124d9f0492fSopenharmony_ci { SERVICE_CRITICAL, "critical" }, 125d9f0492fSopenharmony_ci}; 126d9f0492fSopenharmony_ci 127d9f0492fSopenharmony_cistatic inline bool ValidStatus(ServiceStatus status) 128d9f0492fSopenharmony_ci{ 129d9f0492fSopenharmony_ci return status >= SERVICE_IDLE && status <= SERVICE_CRITICAL; 130d9f0492fSopenharmony_ci} 131d9f0492fSopenharmony_ci 132d9f0492fSopenharmony_cistd::string GetServiceStatus(const std::string &serviceName) 133d9f0492fSopenharmony_ci{ 134d9f0492fSopenharmony_ci if (serviceName.empty()) { 135d9f0492fSopenharmony_ci return ""; 136d9f0492fSopenharmony_ci } 137d9f0492fSopenharmony_ci const std::string serviceCtlPrefix = "startup.service.ctl."; 138d9f0492fSopenharmony_ci const std::string serviceCtlName = serviceCtlPrefix + serviceName; 139d9f0492fSopenharmony_ci uint32_t ret = OHOS::system::GetUintParameter<uint32_t>(serviceCtlName, 0); 140d9f0492fSopenharmony_ci ServiceStatus status = static_cast<ServiceStatus>(ret); 141d9f0492fSopenharmony_ci if (!ValidStatus(status)) { 142d9f0492fSopenharmony_ci return ""; 143d9f0492fSopenharmony_ci } 144d9f0492fSopenharmony_ci return g_serviceStatusMap[status]; 145d9f0492fSopenharmony_ci} 146d9f0492fSopenharmony_ci 147d9f0492fSopenharmony_ci} // initModuleTest 148