1f6603c60Sopenharmony_ci/* 2f6603c60Sopenharmony_ci * Copyright (C) 2021-2022 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and 13f6603c60Sopenharmony_ci * limitations under the License. 14f6603c60Sopenharmony_ci */ 15f6603c60Sopenharmony_ci#ifndef TEST_COMMON_H 16f6603c60Sopenharmony_ci#define TEST_COMMON_H 17f6603c60Sopenharmony_ci#include "file_utils.h" 18f6603c60Sopenharmony_ci#include <cstdio> 19f6603c60Sopenharmony_ci#include <cstdlib> 20f6603c60Sopenharmony_ci#include <cstring> 21f6603c60Sopenharmony_ci#include <string> 22f6603c60Sopenharmony_ci#include <fstream> 23f6603c60Sopenharmony_ci#include <sstream> 24f6603c60Sopenharmony_ci#include <iostream> 25f6603c60Sopenharmony_ci#include <unistd.h> 26f6603c60Sopenharmony_ci#include <sys/types.h> 27f6603c60Sopenharmony_ci#include <sys/stat.h> 28f6603c60Sopenharmony_ci#include <chrono> 29f6603c60Sopenharmony_ci#include <dirent.h> 30f6603c60Sopenharmony_ci#include <condition_variable> 31f6603c60Sopenharmony_ci#include <vector> 32f6603c60Sopenharmony_ci#include "include/securec.h" 33f6603c60Sopenharmony_ci#include "string_util.h" 34f6603c60Sopenharmony_ci 35f6603c60Sopenharmony_ciusing namespace OHOS::HiviewDFX; 36f6603c60Sopenharmony_ciint ExecCmdWithRet(std::string cmd, std::vector<std::string> &resvec) 37f6603c60Sopenharmony_ci{ 38f6603c60Sopenharmony_ci if (cmd.size() == 0) { 39f6603c60Sopenharmony_ci return 0; 40f6603c60Sopenharmony_ci } 41f6603c60Sopenharmony_ci 42f6603c60Sopenharmony_ci std::cout<< "cmd is " + cmd <<std::endl; 43f6603c60Sopenharmony_ci if ((cmd.find("hilog") == std::string::npos) && (cmd.find("hidumper") == std::string::npos) 44f6603c60Sopenharmony_ci && (cmd.find("ps") == std::string::npos) && (cmd.find("rm") == std::string::npos) && 45f6603c60Sopenharmony_ci (cmd.find("hiperf") == std::string::npos) && (cmd.find("hisysevent") == std::string::npos) && 46f6603c60Sopenharmony_ci (cmd.find("mkdir") == std::string::npos) && (cmd.find("dd") == std::string::npos)) { 47f6603c60Sopenharmony_ci std::cout<<"unsupport cmd!" + cmd <<std::endl; 48f6603c60Sopenharmony_ci return 0; 49f6603c60Sopenharmony_ci } 50f6603c60Sopenharmony_ci resvec.clear(); 51f6603c60Sopenharmony_ci FILE *pp = popen(cmd.c_str(), "r"); 52f6603c60Sopenharmony_ci if (pp == nullptr) { 53f6603c60Sopenharmony_ci return -1; 54f6603c60Sopenharmony_ci } 55f6603c60Sopenharmony_ci char tmp[1024]; 56f6603c60Sopenharmony_ci while (fgets(tmp, sizeof(tmp), pp) != nullptr) { 57f6603c60Sopenharmony_ci if (tmp[strlen(tmp) - 1] == '\n') { 58f6603c60Sopenharmony_ci tmp[strlen(tmp) - 1] = '\0'; 59f6603c60Sopenharmony_ci } 60f6603c60Sopenharmony_ci resvec.push_back(tmp); 61f6603c60Sopenharmony_ci } 62f6603c60Sopenharmony_ci pclose(pp); 63f6603c60Sopenharmony_ci return resvec.size(); 64f6603c60Sopenharmony_ci} 65f6603c60Sopenharmony_ci 66f6603c60Sopenharmony_civoid ExeCmd(std::string cmd) 67f6603c60Sopenharmony_ci{ 68f6603c60Sopenharmony_ci std::vector<std::string> cmdret; 69f6603c60Sopenharmony_ci ExecCmdWithRet(cmd, cmdret); 70f6603c60Sopenharmony_ci} 71f6603c60Sopenharmony_ci 72f6603c60Sopenharmony_civoid CmdRun(std::string cmd, std::string &result) 73f6603c60Sopenharmony_ci{ 74f6603c60Sopenharmony_ci std::vector<std::string> cmdret; 75f6603c60Sopenharmony_ci int resultlen; 76f6603c60Sopenharmony_ci int i = 0; 77f6603c60Sopenharmony_ci std::string rst; 78f6603c60Sopenharmony_ci resultlen = ExecCmdWithRet(cmd, cmdret); 79f6603c60Sopenharmony_ci while (i < resultlen) { 80f6603c60Sopenharmony_ci rst = rst + cmdret[i]; 81f6603c60Sopenharmony_ci i = i + 1; 82f6603c60Sopenharmony_ci } 83f6603c60Sopenharmony_ci result = rst; 84f6603c60Sopenharmony_ci} 85f6603c60Sopenharmony_ci 86f6603c60Sopenharmony_civoid CleanCmd() 87f6603c60Sopenharmony_ci{ 88f6603c60Sopenharmony_ci std::string cmdResult; 89f6603c60Sopenharmony_ci std::string cleanCmd = "hilog -r"; 90f6603c60Sopenharmony_ci CmdRun(cleanCmd, cmdResult); 91f6603c60Sopenharmony_ci std::cout << cmdResult; 92f6603c60Sopenharmony_ci} 93f6603c60Sopenharmony_ci 94f6603c60Sopenharmony_cistd::string ExecuteCmd(std::string cmd) 95f6603c60Sopenharmony_ci{ 96f6603c60Sopenharmony_ci std::vector<std::string> cmdret; 97f6603c60Sopenharmony_ci int resultlen; 98f6603c60Sopenharmony_ci int i = 0; 99f6603c60Sopenharmony_ci std::string rst; 100f6603c60Sopenharmony_ci resultlen = ExecCmdWithRet(cmd, cmdret); 101f6603c60Sopenharmony_ci while (i < resultlen) { 102f6603c60Sopenharmony_ci rst = rst + cmdret[i] + "\n"; 103f6603c60Sopenharmony_ci i = i + 1; 104f6603c60Sopenharmony_ci } 105f6603c60Sopenharmony_ci return rst; 106f6603c60Sopenharmony_ci} 107f6603c60Sopenharmony_civoid SaveCmdOutput(std::string cmd, std::string saveFile) 108f6603c60Sopenharmony_ci{ 109f6603c60Sopenharmony_ci std::fstream fstr(saveFile, std::ios::out); 110f6603c60Sopenharmony_ci std::string cmdRet = ExecuteCmd(cmd); 111f6603c60Sopenharmony_ci fstr << cmdRet; 112f6603c60Sopenharmony_ci fstr.close(); 113f6603c60Sopenharmony_ci} 114f6603c60Sopenharmony_civoid RedirecthiLog(std::string &hilogredirect, std::string &timeout) 115f6603c60Sopenharmony_ci{ 116f6603c60Sopenharmony_ci unsigned long i; 117f6603c60Sopenharmony_ci std::vector<std::string> cmdret; 118f6603c60Sopenharmony_ci unsigned long cmdretlen; 119f6603c60Sopenharmony_ci std::string cmd = "rm " + hilogredirect; 120f6603c60Sopenharmony_ci cmdretlen = ExecCmdWithRet(cmd, cmdret); 121f6603c60Sopenharmony_ci for (i = 0; i < cmdretlen; i++) { 122f6603c60Sopenharmony_ci std::cout<<cmdret[i].c_str()<<std::endl; 123f6603c60Sopenharmony_ci } 124f6603c60Sopenharmony_ci cmd = "timeout " + timeout + " hilog >" + hilogredirect; 125f6603c60Sopenharmony_ci std::cout<<cmd<<std::endl; 126f6603c60Sopenharmony_ci cmdretlen = ExecCmdWithRet(cmd, cmdret); 127f6603c60Sopenharmony_ci for (i = 0; i < cmdretlen; i++) { 128f6603c60Sopenharmony_ci std::cout<<cmdret[i].c_str()<<std::endl; 129f6603c60Sopenharmony_ci } 130f6603c60Sopenharmony_ci} 131f6603c60Sopenharmony_ci 132f6603c60Sopenharmony_cibool CheckInfo(std::vector<std::string> ¶, std::string info) 133f6603c60Sopenharmony_ci{ 134f6603c60Sopenharmony_ci if (info.empty()) { 135f6603c60Sopenharmony_ci return false; 136f6603c60Sopenharmony_ci } 137f6603c60Sopenharmony_ci bool result = false; 138f6603c60Sopenharmony_ci unsigned long matchcnt = 0; 139f6603c60Sopenharmony_ci for (unsigned long i = 0; i < para.size(); i++) { 140f6603c60Sopenharmony_ci if (int(info.find(para[i])) >= 0) { 141f6603c60Sopenharmony_ci matchcnt++; 142f6603c60Sopenharmony_ci } 143f6603c60Sopenharmony_ci } 144f6603c60Sopenharmony_ci std::cout<< matchcnt <<std::endl; 145f6603c60Sopenharmony_ci if (matchcnt == para.size()) { 146f6603c60Sopenharmony_ci result = true; 147f6603c60Sopenharmony_ci } 148f6603c60Sopenharmony_ci return result; 149f6603c60Sopenharmony_ci} 150f6603c60Sopenharmony_ci 151f6603c60Sopenharmony_cibool CompareString(const std::string& x, const std::string& y) 152f6603c60Sopenharmony_ci{ 153f6603c60Sopenharmony_ci int len = x.length() - 1; 154f6603c60Sopenharmony_ci while (x[len] == y[len] && len >= 0) { 155f6603c60Sopenharmony_ci len--; 156f6603c60Sopenharmony_ci } 157f6603c60Sopenharmony_ci if (len >= 0 && x[len] > y[len]) { 158f6603c60Sopenharmony_ci return false; 159f6603c60Sopenharmony_ci } 160f6603c60Sopenharmony_ci return true; 161f6603c60Sopenharmony_ci} 162f6603c60Sopenharmony_ci 163f6603c60Sopenharmony_ciint GetTxtLine(std::string filename) 164f6603c60Sopenharmony_ci{ 165f6603c60Sopenharmony_ci FILE *fd = fopen(filename.c_str(), "r"); 166f6603c60Sopenharmony_ci int count = 0; 167f6603c60Sopenharmony_ci if (fd != nullptr) { 168f6603c60Sopenharmony_ci while (!feof(fd)) { 169f6603c60Sopenharmony_ci if (fgetc(fd) == '\n') { 170f6603c60Sopenharmony_ci count++; 171f6603c60Sopenharmony_ci } 172f6603c60Sopenharmony_ci } 173f6603c60Sopenharmony_ci } 174f6603c60Sopenharmony_ci std::cout << count << std::endl; 175f6603c60Sopenharmony_ci if (fd != nullptr) { 176f6603c60Sopenharmony_ci fclose(fd); 177f6603c60Sopenharmony_ci } 178f6603c60Sopenharmony_ci return count; 179f6603c60Sopenharmony_ci} 180f6603c60Sopenharmony_ci 181f6603c60Sopenharmony_cistd::string ReadFile(std::string filename) 182f6603c60Sopenharmony_ci{ 183f6603c60Sopenharmony_ci std::ifstream ifile(filename); 184f6603c60Sopenharmony_ci std::ostringstream buf; 185f6603c60Sopenharmony_ci char ch; 186f6603c60Sopenharmony_ci if (ifile.fail()) { 187f6603c60Sopenharmony_ci std::cout<<"open file fail!"<<std::endl; 188f6603c60Sopenharmony_ci return ""; 189f6603c60Sopenharmony_ci } 190f6603c60Sopenharmony_ci while (buf && ifile.get(ch)) { 191f6603c60Sopenharmony_ci buf.put(ch); 192f6603c60Sopenharmony_ci } 193f6603c60Sopenharmony_ci ifile.close(); 194f6603c60Sopenharmony_ci return buf.str(); 195f6603c60Sopenharmony_ci} 196f6603c60Sopenharmony_ci 197f6603c60Sopenharmony_cistd::vector<std::string> getfileinpath(std::string path) 198f6603c60Sopenharmony_ci{ 199f6603c60Sopenharmony_ci std::vector<std::string> filelist; 200f6603c60Sopenharmony_ci DIR *dir; 201f6603c60Sopenharmony_ci struct dirent *pdirent; 202f6603c60Sopenharmony_ci dir = opendir(path.c_str()); 203f6603c60Sopenharmony_ci if (dir != nullptr) { 204f6603c60Sopenharmony_ci while ((pdirent = readdir(dir)) != nullptr) { 205f6603c60Sopenharmony_ci if (strncmp(pdirent->d_name, ".", strlen(pdirent->d_name)) == 0 || 206f6603c60Sopenharmony_ci strncmp(pdirent->d_name, "..", strlen(pdirent->d_name)) == 0) { 207f6603c60Sopenharmony_ci continue; 208f6603c60Sopenharmony_ci } else if (pdirent->d_type == 4) { 209f6603c60Sopenharmony_ci continue; 210f6603c60Sopenharmony_ci } else { 211f6603c60Sopenharmony_ci filelist.push_back(pdirent->d_name); 212f6603c60Sopenharmony_ci } 213f6603c60Sopenharmony_ci } 214f6603c60Sopenharmony_ci closedir(dir); 215f6603c60Sopenharmony_ci } 216f6603c60Sopenharmony_ci return filelist; 217f6603c60Sopenharmony_ci} 218f6603c60Sopenharmony_ci#endif 219