1 /*
2 * Copyright (c) 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
16 #include "adapter_utility_ohos_test.h"
17
18 #include <fcntl.h>
19 #include <fstream>
20 #include <sys/types.h>
21 #include <sys/stat.h>
22
23 #include "common_utils.h"
24 #include "file_util.h"
25 #include "socket_util.h"
26 #include "time_util.h"
27
28 using namespace std;
29
30 namespace OHOS {
31 namespace HiviewDFX {
32 namespace {
33 const char LOG_FILE_PATH[] = "/data/test/adapter_utility_test/";
34 constexpr int SUFFIX_0 = 0;
35 constexpr int SUFFIX_1 = 1;
36
GetLogDir(std::string & testCaseName)37 std::string GetLogDir(std::string& testCaseName)
38 {
39 std::string workPath = std::string(LOG_FILE_PATH);
40 if (workPath.back() != '/') {
41 workPath = workPath + "/";
42 }
43 workPath.append(testCaseName);
44 workPath.append("/");
45 std::string logDestDir = workPath;
46 if (!FileUtil::FileExists(logDestDir)) {
47 FileUtil::ForceCreateDirectory(logDestDir, FileUtil::FILE_PERM_770);
48 }
49 return logDestDir;
50 }
51
GenerateLogFileName(std::string & testCaseName,int index)52 std::string GenerateLogFileName(std::string& testCaseName, int index)
53 {
54 return GetLogDir(testCaseName) + "testFile" + std::to_string(index);
55 }
56 }
57
SetUpTestCase()58 void AdapterUtilityOhosTest::SetUpTestCase() {}
59
TearDownTestCase()60 void AdapterUtilityOhosTest::TearDownTestCase() {}
61
SetUp()62 void AdapterUtilityOhosTest::SetUp() {}
63
TearDown()64 void AdapterUtilityOhosTest::TearDown()
65 {
66 (void)FileUtil::ForceRemoveDirectory(LOG_FILE_PATH);
67 }
68
69 /**
70 * @tc.name: SocketUtilOhosTest001
71 * @tc.desc: Test GetExistingSocketServer defined in namespace SocketUtil
72 * @tc.type: FUNC
73 * @tc.require: issueI65DUW
74 */
75 HWTEST_F(AdapterUtilityOhosTest, SocketUtilOhosTest001, testing::ext::TestSize.Level3)
76 {
77 int socketFdIndex = 0;
78 auto ret = SocketUtil::GetExistingSocketServer("/dev/socket/unix/hisysevent", socketFdIndex);
79 int expectedRet = -1;
80 ASSERT_EQ(expectedRet, ret);
81 }
82
83 /**
84 * @tc.name: CommonUtilsOhosTest001
85 * @tc.desc: Test ExecCommand defined in namespace CommonUtils
86 * @tc.type: FUNC
87 * @tc.require: issueI65DUW
88 */
89 HWTEST_F(AdapterUtilityOhosTest, CommonUtilsOhosTest001, testing::ext::TestSize.Level3)
90 {
91 std::vector<std::string> cmdRet;
92 auto ret = CommonUtils::ExecCommand("hisysevent -l -m 10000", cmdRet);
93 int expectRet = 0;
94 ASSERT_EQ(expectRet, ret);
95 ret = CommonUtils::ExecCommand("", cmdRet);
96 ASSERT_EQ(expectRet, ret);
97 }
98
99 /**
100 * @tc.name: CommonUtilsOhosTest002
101 * @tc.desc: Test GetPidByName defined in namespace CommonUtils
102 * @tc.type: FUNC
103 * @tc.require: issueI65DUW
104 */
105 HWTEST_F(AdapterUtilityOhosTest, CommonUtilsOhosTest002, testing::ext::TestSize.Level3)
106 {
107 std::vector<std::string> cmdRet;
108 auto hiviewProcessId = CommonUtils::GetPidByName("hiview");
109 ASSERT_TRUE(hiviewProcessId > 0);
110 }
111
112 /**
113 * @tc.name: CommonUtilsOhosTest003
114 * @tc.desc: Test WriteCommandResultToFile defined in namespace CommonUtils
115 * @tc.type: FUNC
116 * @tc.require: issueI65DUW
117 */
118 HWTEST_F(AdapterUtilityOhosTest, CommonUtilsOhosTest003, testing::ext::TestSize.Level3)
119 {
120 std::string caseName("CommonUtilsOhosTest003");
121 std::string cmd = "";
122 auto ret = CommonUtils::WriteCommandResultToFile(0, cmd);
123 ASSERT_EQ(false, ret);
124 std::string cmd2 = "hisysevent -l -m 1 | wc -l";
125 auto fd = FileUtil::Open(GenerateLogFileName(caseName, SUFFIX_0),
126 O_CREAT | O_WRONLY | O_TRUNC, FileUtil::FILE_PERM_770);
127 ret = CommonUtils::WriteCommandResultToFile(fd, cmd2);
128 ASSERT_EQ(true, ret);
129 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_0), "");
130 fd = FileUtil::Open(GenerateLogFileName(caseName, SUFFIX_0),
131 O_CREAT | O_WRONLY | O_TRUNC, FileUtil::FILE_PERM_770);
132 ret = CommonUtils::WriteCommandResultToFile(fd, cmd2);
133 ASSERT_EQ(true, ret);
134 }
135
136 /**
137 * @tc.name: TimeUtilOhosTest001
138 * @tc.desc: Test Sleep/GetMillSecOfSec defined in namespace TimeUtil
139 * @tc.type: FUNC
140 * @tc.require: issueI65DUW
141 */
142 HWTEST_F(AdapterUtilityOhosTest, TimeUtilOhosTest001, testing::ext::TestSize.Level3)
143 {
144 auto time = TimeUtil::GetMillSecOfSec();
145 ASSERT_GE(time, 0);
146 int sleepSecs = 1;
147 TimeUtil::Sleep(sleepSecs);
148 ASSERT_TRUE(true);
149 }
150
151 /**
152 * @tc.name: TimeUtilOhosTest002
153 * @tc.desc: Test Get0ClockStampMs/GetSteadyClockTimeMs defined in namespace TimeUtil
154 * @tc.type: FUNC
155 * @tc.require: issueI65DUW
156 */
157 HWTEST_F(AdapterUtilityOhosTest, TimeUtilOhosTest002, testing::ext::TestSize.Level3)
158 {
159 auto time1 = TimeUtil::Get0ClockStampMs();
160 auto time2 = TimeUtil::GetSteadyClockTimeMs();
161 ASSERT_GE(time1, 0);
162 ASSERT_GE(time2, 0);
163 }
164
165 /**
166 * @tc.name: FileUtilOhosTest001
167 * @tc.desc: Test LoadBufferFromFile/SaveBufferToFile defined in namespace FileUtil
168 * @tc.type: FUNC
169 * @tc.require: issueI65DUW
170 */
171 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest001, testing::ext::TestSize.Level3)
172 {
173 std::string caseName("FileUtilOhosTest001");
174 std::vector<char> content;
175 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_0), "123");
176 (void)FileUtil::LoadBufferFromFile(GenerateLogFileName(caseName, SUFFIX_0), content);
177 ASSERT_TRUE(true);
178 (void)FileUtil::SaveBufferToFile(GenerateLogFileName(caseName, SUFFIX_0), content, true);
179 ASSERT_TRUE(true);
180 }
181
182 /**
183 * @tc.name: FileUtilOhosTest002
184 * @tc.desc: Test ExtractFilePath/ExtractFileName defined in namespace FileUtil
185 * @tc.type: FUNC
186 * @tc.require: issueI65DUW
187 */
188 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest002, testing::ext::TestSize.Level3)
189 {
190 std::string path = "ohos/test/123.txt";
191 auto dir = FileUtil::ExtractFilePath(path);
192 ASSERT_EQ("ohos/test/", dir);
193 auto name = FileUtil::ExtractFileName(path);
194 ASSERT_EQ("123.txt", name);
195 }
196
197 /**
198 * @tc.name: FileUtilOhosTest003
199 * @tc.desc: Test ExcludeTrailingPathDelimiter/IncludeTrailingPathDelimiter defined in namespace FileUtil
200 * @tc.type: FUNC
201 * @tc.require: issueI65DUW
202 */
203 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest003, testing::ext::TestSize.Level3)
204 {
205 auto excludeRet = FileUtil::ExcludeTrailingPathDelimiter("ohos/test/123.txt");
206 ASSERT_EQ("ohos/test/123.txt", excludeRet);
207 auto name = FileUtil::IncludeTrailingPathDelimiter("ohos/test/123.txt/");
208 ASSERT_EQ("ohos/test/123.txt/", name);
209 }
210
211 /**
212 * @tc.name: FileUtilOhosTest004
213 * @tc.desc: Test ChangeModeFile defined in namespace FileUtil
214 * @tc.type: FUNC
215 * @tc.require: issueI65DUW
216 */
217 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest004, testing::ext::TestSize.Level3)
218 {
219 std::string caseName("FileUtilOhosTest004");
220 (void)FileUtil::ChangeModeFile(GenerateLogFileName(caseName, SUFFIX_0), FileUtil::FILE_PERM_755);
221 ASSERT_TRUE(true);
222 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_0), "test content");
223 (void)FileUtil::ChangeModeFile(GenerateLogFileName(caseName, SUFFIX_0), FileUtil::FILE_PERM_660);
224 ASSERT_TRUE(true);
225 }
226
227 /**
228 * @tc.name: FileUtilOhosTest005
229 * @tc.desc: Test Umask defined in namespace FileUtil
230 * @tc.type: FUNC
231 * @tc.require: issueI65DUW
232 */
233 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest005, testing::ext::TestSize.Level3)
234 {
235 auto umask = FileUtil::Umask(FileUtil::FILE_PERM_755);
236 auto expectedRet = 18;
237 ASSERT_EQ(expectedRet, umask);
238 }
239
240 /**
241 * @tc.name: FileUtilOhosTest006
242 * @tc.desc: Test FormatPath2UnixStyle/RemoveFolderBeginWith defined in namespace FileUtil
243 * @tc.type: FUNC
244 * @tc.require: issueI65DUW
245 */
246 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest006, testing::ext::TestSize.Level3)
247 {
248 std::string path = std::string(LOG_FILE_PATH);
249 FileUtil::FormatPath2UnixStyle(path);
250 ASSERT_TRUE(true);
251 FileUtil::RemoveFolderBeginWith(path, "data");
252 ASSERT_TRUE(true);
253 }
254
255 /**
256 * @tc.name: FileUtilOhosTest007
257 * @tc.desc: Test WriteBufferToFd defined in namespace FileUtil
258 * @tc.type: FUNC
259 * @tc.require: issueI65DUW
260 */
261 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest007, testing::ext::TestSize.Level3)
262 {
263 std::string caseName("FileUtilOhosTest007");
264 auto fd = -1;
265 std::string writeContent = "write content";
266 auto ret = FileUtil::WriteBufferToFd(fd, writeContent.c_str(), writeContent.size());
267 ASSERT_TRUE(!ret);
268 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_0), "test");
269 fd = FileUtil::Open(GenerateLogFileName(caseName, SUFFIX_0),
270 O_CREAT | O_WRONLY | O_TRUNC, FileUtil::FILE_PERM_770);
271 ret = FileUtil::WriteBufferToFd(fd, nullptr, writeContent.size());
272 ASSERT_TRUE(!ret);
273 (void)FileUtil::WriteBufferToFd(fd, "", writeContent.size());
274 ASSERT_TRUE(true);
275 (void)FileUtil::WriteBufferToFd(fd, writeContent.c_str(), writeContent.size());
276 ASSERT_TRUE(true);
277 }
278
279 /**
280 * @tc.name: FileUtilOhosTest008
281 * @tc.desc: Test CreateFile defined in namespace FileUtil
282 * @tc.type: FUNC
283 * @tc.require: issueI65DUW
284 */
285 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest008, testing::ext::TestSize.Level3)
286 {
287 std::string caseName("FileUtilOhosTest008");
288 int expectedFailedRet = -1;
289 auto ret = FileUtil::CreateFile(GenerateLogFileName(caseName, SUFFIX_0));
290 ASSERT_EQ(expectedFailedRet, ret);
291 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_0), "1111");
292 (void)FileUtil::CreateFile(GenerateLogFileName(caseName, SUFFIX_0));
293 ASSERT_TRUE(true);
294 }
295
296 /**
297 * @tc.name: FileUtilOhosTest009
298 * @tc.desc: Test CopyFile defined in namespace FileUtil
299 * @tc.type: FUNC
300 * @tc.require: issueI65DUW
301 */
302 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest009, testing::ext::TestSize.Level3)
303 {
304 std::string caseName("FileUtilOhosTest009");
305 int expectedFailedRet = -1;
306 auto ret = FileUtil::CopyFile("//...../invalid_dest_file", GenerateLogFileName(caseName, SUFFIX_1));
307 ASSERT_EQ(expectedFailedRet, ret);
308 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_0), "test");
309 ret = FileUtil::CopyFile(GenerateLogFileName(caseName, SUFFIX_0), "//...../invalid_dest_file");
310 ASSERT_EQ(expectedFailedRet, ret);
311 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_1), "test");
312 (void)FileUtil::CopyFile(GenerateLogFileName(caseName, SUFFIX_0), GenerateLogFileName(caseName, SUFFIX_1));
313 ASSERT_TRUE(true);
314 }
315
316 /**
317 * @tc.name: FileUtilOhosTest010
318 * @tc.desc: Test GetLastLine defined in namespace FileUtil
319 * @tc.type: FUNC
320 * @tc.require: issueI65DUW
321 */
322 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest010, testing::ext::TestSize.Level3)
323 {
324 std::string caseName("FileUtilOhosTest010");
325 ifstream in(GenerateLogFileName(caseName, SUFFIX_0));
326 std::string line;
327 int invalidMaxLen = 5;
328 auto ret = FileUtil::GetLastLine(in, line, invalidMaxLen);
329 ASSERT_TRUE(!ret);
330 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_1), "line1");
331 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_1), "\nline2");
332 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_1), "\nline3");
333 ifstream in1(GenerateLogFileName(caseName, SUFFIX_1));
334 ret = FileUtil::GetLastLine(in1, line, invalidMaxLen);
335 ASSERT_TRUE(!ret);
336 int validMaxLen = 2;
337 ret = FileUtil::GetLastLine(in1, line, validMaxLen);
338 ASSERT_TRUE(!ret);
339 validMaxLen = 3;
340 ret = FileUtil::GetLastLine(in1, line, validMaxLen);
341 ASSERT_TRUE(!ret);
342 }
343
344 /**
345 * @tc.name: FileUtilOhosTest011
346 * @tc.desc: Test GetParentDir defined in namespace FileUtil
347 * @tc.type: FUNC
348 * @tc.require: issueI65DUW
349 */
350 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest011, testing::ext::TestSize.Level3)
351 {
352 auto ret = FileUtil::GetParentDir("");
353 ASSERT_EQ("", ret);
354 ret = FileUtil::GetParentDir("123/345/789");
355 ASSERT_EQ("123/345", ret);
356 }
357
358 /**
359 * @tc.name: FileUtilOhosTest012
360 * @tc.desc: Test IslegalPath defined in namespace FileUtil
361 * @tc.type: FUNC
362 * @tc.require: issueI65DUW
363 */
364 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest012, testing::ext::TestSize.Level3)
365 {
366 auto ret = FileUtil::IsLegalPath("aa/../bb");
367 ASSERT_TRUE(!ret);
368 ret = FileUtil::IsLegalPath("aa/./bb");
369 ASSERT_TRUE(!ret);
370 ret = FileUtil::IsLegalPath("aa/bb/");
371 ASSERT_TRUE(ret);
372 ret = FileUtil::IsLegalPath("aa/bb/cc");
373 ASSERT_TRUE(ret);
374 }
375
376 /**
377 * @tc.name: FileUtilOhosTest013
378 * @tc.desc: Test RenameFile defined in namespace FileUtil
379 * @tc.type: FUNC
380 * @tc.require: issueI65DUW
381 */
382 HWTEST_F(AdapterUtilityOhosTest, FileUtilOhosTest013, testing::ext::TestSize.Level3)
383 {
384 std::string caseName("FileUtilOhosTest013");
385 auto ret = FileUtil::RenameFile(GenerateLogFileName(caseName, SUFFIX_0),
386 GenerateLogFileName(caseName, SUFFIX_1));
387 ASSERT_TRUE(!ret);
388 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_0), "line1");
389 (void)FileUtil::SaveStringToFile(GenerateLogFileName(caseName, SUFFIX_1), "line1");
390 (void)FileUtil::RenameFile(GenerateLogFileName(caseName, SUFFIX_0),
391 GenerateLogFileName(caseName, SUFFIX_1));
392 ASSERT_TRUE(true);
393 }
394 }
395 }