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> &para, 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