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