137a09cd7Sopenharmony_ci/* 237a09cd7Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 337a09cd7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 437a09cd7Sopenharmony_ci * you may not use this file except in compliance with the License. 537a09cd7Sopenharmony_ci * You may obtain a copy of the License at 637a09cd7Sopenharmony_ci * 737a09cd7Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 837a09cd7Sopenharmony_ci * 937a09cd7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1037a09cd7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1137a09cd7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1237a09cd7Sopenharmony_ci * See the License for the specific language governing permissions and 1337a09cd7Sopenharmony_ci * limitations under the License. 1437a09cd7Sopenharmony_ci */ 1537a09cd7Sopenharmony_ci 1637a09cd7Sopenharmony_ci#include "thermal_test.h" 1737a09cd7Sopenharmony_ci 1837a09cd7Sopenharmony_ci#include <cstdio> 1937a09cd7Sopenharmony_ci#include <cstdlib> 2037a09cd7Sopenharmony_ci#include <dirent.h> 2137a09cd7Sopenharmony_ci#include <fcntl.h> 2237a09cd7Sopenharmony_ci#include <fstream> 2337a09cd7Sopenharmony_ci#include <securec.h> 2437a09cd7Sopenharmony_ci#include <sys/stat.h> 2537a09cd7Sopenharmony_ci 2637a09cd7Sopenharmony_ci#include "errors.h" 2737a09cd7Sopenharmony_ci#include "string_ex.h" 2837a09cd7Sopenharmony_ci#include "thermal_log.h" 2937a09cd7Sopenharmony_ci 3037a09cd7Sopenharmony_ciusing namespace testing::ext; 3137a09cd7Sopenharmony_ciusing namespace OHOS; 3237a09cd7Sopenharmony_ciusing namespace std; 3337a09cd7Sopenharmony_ci 3437a09cd7Sopenharmony_cinamespace OHOS { 3537a09cd7Sopenharmony_cinamespace PowerMgr { 3637a09cd7Sopenharmony_ciint32_t ThermalTest::WriteFile(std::string path, std::string buf) 3737a09cd7Sopenharmony_ci{ 3837a09cd7Sopenharmony_ci FILE *fp = fopen(path.c_str(), "w+"); 3937a09cd7Sopenharmony_ci if (fp == nullptr) { 4037a09cd7Sopenharmony_ci return ERR_INVALID_VALUE; 4137a09cd7Sopenharmony_ci } 4237a09cd7Sopenharmony_ci size_t num = fwrite(buf.c_str(), sizeof(char), buf.length(), fp); 4337a09cd7Sopenharmony_ci if (num != buf.length()) { 4437a09cd7Sopenharmony_ci THERMAL_HILOGD(COMP_SVC, "Failed to fwrite %{public}s, num=%{public}zu", path.c_str(), num); 4537a09cd7Sopenharmony_ci fclose(fp); 4637a09cd7Sopenharmony_ci return ERR_INVALID_OPERATION; 4737a09cd7Sopenharmony_ci } 4837a09cd7Sopenharmony_ci fclose(fp); 4937a09cd7Sopenharmony_ci return ERR_OK; 5037a09cd7Sopenharmony_ci} 5137a09cd7Sopenharmony_ci 5237a09cd7Sopenharmony_ciint32_t ThermalTest::ReadFile(std::string path, std::string& buf) 5337a09cd7Sopenharmony_ci{ 5437a09cd7Sopenharmony_ci std::ifstream input(path); 5537a09cd7Sopenharmony_ci if (!input.is_open()) { 5637a09cd7Sopenharmony_ci return ERR_INVALID_VALUE; 5737a09cd7Sopenharmony_ci } 5837a09cd7Sopenharmony_ci getline(input, buf); 5937a09cd7Sopenharmony_ci input.close(); 6037a09cd7Sopenharmony_ci return ERR_OK; 6137a09cd7Sopenharmony_ci} 6237a09cd7Sopenharmony_ci 6337a09cd7Sopenharmony_ciint32_t ThermalTest::ConvertInt(const std::string& value) 6437a09cd7Sopenharmony_ci{ 6537a09cd7Sopenharmony_ci int32_t result = -1; 6637a09cd7Sopenharmony_ci StrToInt(value, result); 6737a09cd7Sopenharmony_ci return result; 6837a09cd7Sopenharmony_ci} 6937a09cd7Sopenharmony_ci 7037a09cd7Sopenharmony_ciint32_t ThermalTest::InitNode() 7137a09cd7Sopenharmony_ci{ 7237a09cd7Sopenharmony_ci char bufTemp[MAX_PATH] = {0}; 7337a09cd7Sopenharmony_ci int32_t ret = -1; 7437a09cd7Sopenharmony_ci std::map<std::string, int32_t> sensor; 7537a09cd7Sopenharmony_ci sensor["battery"] = 0; 7637a09cd7Sopenharmony_ci sensor["charger"] = 0; 7737a09cd7Sopenharmony_ci sensor["pa"] = 0; 7837a09cd7Sopenharmony_ci sensor["ap"] = 0; 7937a09cd7Sopenharmony_ci sensor["ambient"] = 0; 8037a09cd7Sopenharmony_ci sensor["cpu"] = 0; 8137a09cd7Sopenharmony_ci sensor["soc"] = 0; 8237a09cd7Sopenharmony_ci sensor["shell"] = 0; 8337a09cd7Sopenharmony_ci for (auto iter : sensor) { 8437a09cd7Sopenharmony_ci ret = snprintf_s(bufTemp, MAX_PATH, sizeof(bufTemp) - 1, SIMULATION_TEMP_DIR, iter.first.c_str()); 8537a09cd7Sopenharmony_ci if (ret < EOK) { 8637a09cd7Sopenharmony_ci return ret; 8737a09cd7Sopenharmony_ci } 8837a09cd7Sopenharmony_ci std::string temp = std::to_string(iter.second); 8937a09cd7Sopenharmony_ci WriteFile(bufTemp, temp); 9037a09cd7Sopenharmony_ci } 9137a09cd7Sopenharmony_ci return ERR_OK; 9237a09cd7Sopenharmony_ci} 9337a09cd7Sopenharmony_ci 9437a09cd7Sopenharmony_cibool ThermalTest::IsMock(const std::string& path) 9537a09cd7Sopenharmony_ci{ 9637a09cd7Sopenharmony_ci struct stat pathStat; 9737a09cd7Sopenharmony_ci int32_t ret = stat(path.c_str(), &pathStat); 9837a09cd7Sopenharmony_ci if (ret != 0) { 9937a09cd7Sopenharmony_ci return false; 10037a09cd7Sopenharmony_ci } 10137a09cd7Sopenharmony_ci if (S_ISREG(pathStat.st_mode)) { 10237a09cd7Sopenharmony_ci return true; 10337a09cd7Sopenharmony_ci } 10437a09cd7Sopenharmony_ci if (!S_ISDIR(pathStat.st_mode)) { 10537a09cd7Sopenharmony_ci return false; 10637a09cd7Sopenharmony_ci } 10737a09cd7Sopenharmony_ci DIR* dir = opendir(path.c_str()); 10837a09cd7Sopenharmony_ci if (dir == nullptr) { 10937a09cd7Sopenharmony_ci return false; 11037a09cd7Sopenharmony_ci } 11137a09cd7Sopenharmony_ci struct dirent* ptr = nullptr; 11237a09cd7Sopenharmony_ci while ((ptr = readdir(dir)) != nullptr) { 11337a09cd7Sopenharmony_ci if (strcmp(".", ptr->d_name) != 0 && strcmp("..", ptr->d_name) != 0) { 11437a09cd7Sopenharmony_ci closedir(dir); 11537a09cd7Sopenharmony_ci return true; 11637a09cd7Sopenharmony_ci } 11737a09cd7Sopenharmony_ci } 11837a09cd7Sopenharmony_ci closedir(dir); 11937a09cd7Sopenharmony_ci return false; 12037a09cd7Sopenharmony_ci} 12137a09cd7Sopenharmony_ci 12237a09cd7Sopenharmony_cibool ThermalTest::IsVendor() 12337a09cd7Sopenharmony_ci{ 12437a09cd7Sopenharmony_ci if (access(VENDOR_CONFIG.c_str(), 0) != 0) { 12537a09cd7Sopenharmony_ci return false; 12637a09cd7Sopenharmony_ci } 12737a09cd7Sopenharmony_ci return true; 12837a09cd7Sopenharmony_ci} 12937a09cd7Sopenharmony_ci 13037a09cd7Sopenharmony_cistd::string ThermalTest::GetNodeValue(const std::string& path) 13137a09cd7Sopenharmony_ci{ 13237a09cd7Sopenharmony_ci std::string value {}; 13337a09cd7Sopenharmony_ci int32_t ret = ThermalTest::ReadFile(path, value); 13437a09cd7Sopenharmony_ci EXPECT_EQ(true, ret == ERR_OK); 13537a09cd7Sopenharmony_ci return value; 13637a09cd7Sopenharmony_ci} 13737a09cd7Sopenharmony_ci 13837a09cd7Sopenharmony_ciint32_t ThermalTest::SetNodeValue(int32_t value, const std::string& path) 13937a09cd7Sopenharmony_ci{ 14037a09cd7Sopenharmony_ci std::string sValue = to_string(value); 14137a09cd7Sopenharmony_ci int32_t ret = ThermalTest::WriteFile(path, sValue); 14237a09cd7Sopenharmony_ci EXPECT_EQ(true, ret == ERR_OK); 14337a09cd7Sopenharmony_ci return ret; 14437a09cd7Sopenharmony_ci} 14537a09cd7Sopenharmony_ci 14637a09cd7Sopenharmony_ciint32_t ThermalTest::SetNodeString(std::string str, const std::string& path) 14737a09cd7Sopenharmony_ci{ 14837a09cd7Sopenharmony_ci int32_t ret = ThermalTest::WriteFile(path, str); 14937a09cd7Sopenharmony_ci EXPECT_EQ(true, ret == ERR_OK); 15037a09cd7Sopenharmony_ci return ret; 15137a09cd7Sopenharmony_ci} 15237a09cd7Sopenharmony_ci} // namespace PowerMgr 15337a09cd7Sopenharmony_ci} // namespace OHOS 154