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 "gtest/gtest.h"
17
18 #include "utils.h"
19
20 #define private public
21 #define protected public
22 #include "kernel_interface.h"
23 #undef private
24 #undef protected
25
26 namespace OHOS {
27 namespace Memory {
28 using namespace testing;
29 using namespace testing::ext;
30
31 class KernelInterfaceTest : public testing::Test {
32 public:
33 static void SetUpTestCase();
34 static void TearDownTestCase();
35 void SetUp();
36 void TearDown();
37 };
38
SetUpTestCase()39 void KernelInterfaceTest::SetUpTestCase()
40 {
41 }
42
TearDownTestCase()43 void KernelInterfaceTest::TearDownTestCase()
44 {
45 }
46
SetUp()47 void KernelInterfaceTest::SetUp()
48 {
49 }
50
TearDown()51 void KernelInterfaceTest::TearDown()
52 {
53 }
54
55 HWTEST_F(KernelInterfaceTest, EchoToPath_InvalidPath, TestSize.Level1)
56 {
57 bool ret = KernelInterface::GetInstance().EchoToPath("", "");
58 EXPECT_EQ(ret, false);
59 }
60
61 HWTEST_F(KernelInterfaceTest, PathDelimiterAddAndRmTest, TestSize.Level1)
62 {
63 std::string base = "/test/tmp";
64 // add delimiter test
65 std::string pathWithDeli = KernelInterface::GetInstance().AddDelimiter(base);
66 EXPECT_EQ(pathWithDeli.compare(base + "/"), 0);
67
68 std::string pathTmp = KernelInterface::GetInstance().AddDelimiter("");
69 EXPECT_EQ(pathTmp.length(), 0u);
70
71 // rm delimiter test
72 pathTmp = KernelInterface::GetInstance().RmDelimiter(pathWithDeli);
73 EXPECT_EQ(pathTmp.compare(base), 0);
74
75 pathTmp = KernelInterface::GetInstance().RmDelimiter("");
76 EXPECT_EQ(pathTmp.length(), 0u);
77
78 pathTmp = KernelInterface::GetInstance().RmDelimiter(base);
79 EXPECT_EQ(pathTmp.compare(base), 0);
80 }
81
82 HWTEST_F(KernelInterfaceTest, JoinPathTest, TestSize.Level1)
83 {
84 std::string first = "/test/tmp";
85 std::string second = "2";
86 std::string third = "3";
87 std::string empty = "";
88 // JoinPath with 2 param test
89 std::string path = KernelInterface::GetInstance().JoinPath(first, second);
90 EXPECT_EQ(path.compare(first + "/" + second), 0);
91 path = KernelInterface::GetInstance().JoinPath(empty, second);
92 EXPECT_EQ(path.compare(second), 0);
93 path = KernelInterface::GetInstance().JoinPath(first, empty);
94 EXPECT_EQ(path.compare(first + "/"), 0);
95 path = KernelInterface::GetInstance().JoinPath(empty, empty);
96 EXPECT_EQ(path.compare(empty), 0);
97
98 // JoinPath with 3 param test
99 path = KernelInterface::GetInstance().JoinPath(first, second, third);
100 EXPECT_EQ(path.compare(first + "/" + second + "/" + third), 0);
101 path = KernelInterface::GetInstance().JoinPath(empty, second, third);
102 EXPECT_EQ(path.compare(second + "/" + third), 0);
103 path = KernelInterface::GetInstance().JoinPath(first, empty, third);
104 EXPECT_EQ(path.compare(first + "/" + third), 0);
105 path = KernelInterface::GetInstance().JoinPath(first, second, empty);
106 EXPECT_EQ(path.compare(first + "/" + second + "/"), 0);
107
108 path = KernelInterface::GetInstance().JoinPath(empty, empty, third);
109 EXPECT_EQ(path.compare(third), 0);
110 path = KernelInterface::GetInstance().JoinPath(empty, second, empty);
111 EXPECT_EQ(path.compare(second + "/"), 0);
112 path = KernelInterface::GetInstance().JoinPath(first, empty, empty);
113 EXPECT_EQ(path.compare(first + "/"), 0);
114
115 path = KernelInterface::GetInstance().JoinPath(empty, empty, empty);
116 EXPECT_EQ(path.compare(empty), 0);
117 }
118
119 HWTEST_F(KernelInterfaceTest, FileCreateTest, TestSize.Level1)
120 {
121 const std::string BASE_PATH = "/data/local/tmp";
122 bool ret = KernelInterface::GetInstance().IsDirExists(BASE_PATH);
123 EXPECT_EQ(ret, true);
124
125 std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testFile");
126 ret = KernelInterface::GetInstance().CreateFile(path);
127 EXPECT_EQ(ret, true);
128 ret = KernelInterface::GetInstance().IsFileExists(path);
129 EXPECT_EQ(ret, true);
130 KernelInterface::GetInstance().RemoveFile(path);
131 }
132
133 HWTEST_F(KernelInterfaceTest, FileRemoveTest, TestSize.Level1)
134 {
135 const std::string BASE_PATH = "/data/local/tmp";
136 std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testFile");
137 KernelInterface::GetInstance().RemoveFile(path);
138 bool ret = KernelInterface::GetInstance().CreateFile(path);
139 ret = ret && KernelInterface::GetInstance().IsFileExists(path);
140 ret = ret && KernelInterface::GetInstance().RemoveFile(path);
141 EXPECT_EQ(ret, true);
142 ret = KernelInterface::GetInstance().IsFileExists(path);
143 EXPECT_EQ(ret, false);
144 }
145
146 HWTEST_F(KernelInterfaceTest, SingleLineFileReadWriteTest, TestSize.Level1)
147 {
148 const std::string BASE_PATH = "/data/local/tmp";
149 std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testFile");
150 KernelInterface::GetInstance().RemoveFile(path);
151 bool ret = KernelInterface::GetInstance().CreateFile(path);
152 ret = ret && KernelInterface::GetInstance().IsFileExists(path);
153 EXPECT_EQ(ret, true);
154 std::string line1 = "line1";
155 std::string output;
156
157 ret = KernelInterface::GetInstance().WriteToFile(path, line1); // curr content: "line1"
158 ret = ret && KernelInterface::GetInstance().ReadFromFile(path, output);
159 EXPECT_EQ(ret, true);
160 EXPECT_EQ(output.compare(line1), 0);
161
162 ret = KernelInterface::GetInstance().WriteToFile(path, line1, false); // curr content: "line1line1"
163 ret = ret && KernelInterface::GetInstance().ReadFromFile(path, output);
164 EXPECT_EQ(ret, true);
165 EXPECT_EQ(output.compare(line1 + line1), 0);
166
167 ret = KernelInterface::GetInstance().WriteToFile(path, "", false); // curr content: "line1line1"
168 ret = ret && KernelInterface::GetInstance().ReadFromFile(path, output);
169 EXPECT_EQ(ret, true);
170 EXPECT_EQ(output.compare(line1 + line1), 0);
171
172 ret = KernelInterface::GetInstance().WriteToFile(path, "", true); // curr content: ""
173 ret = ret && KernelInterface::GetInstance().ReadFromFile(path, output);
174 EXPECT_EQ(ret, true);
175 EXPECT_EQ(output.compare(""), 0);
176 KernelInterface::GetInstance().RemoveFile(path);
177 }
178
179 HWTEST_F(KernelInterfaceTest, MultLinesFileReadWriteTest, TestSize.Level1)
180 {
181 const std::string BASE_PATH = "/data/local/tmp";
182 std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testFile");
183 KernelInterface::GetInstance().RemoveFile(path);
184 bool ret = KernelInterface::GetInstance().CreateFile(path);
185 ret = ret && KernelInterface::GetInstance().IsFileExists(path);
186 EXPECT_EQ(ret, true);
187 std::string line1 = "line1";
188 std::string line2 = "line2";
189 std::string line3 = "line3";
190 std::string lines = line1 + "\n" + line2 + "\n" + line3; // "line1\nline2\nline3"
191 std::string output;
192
193 ret = KernelInterface::GetInstance().WriteToFile(path, line1); // curr content: "line1"
194 ret = ret && KernelInterface::GetInstance().WriteToFile(path, "\n", false); // curr content: "line1\n"
195 ret = ret && KernelInterface::GetInstance().WriteToFile(path, line2, false); // curr content: "line1\nline2"
196 ret = ret && KernelInterface::GetInstance().ReadFromFile(path, output);
197 EXPECT_EQ(ret, true);
198 EXPECT_EQ(output.compare(line1 + "\n" + line2), 0);
199
200 ret = KernelInterface::GetInstance().WriteToFile(path, lines); // curr content: "line1\nline2\nline3"
201 ret = ret && KernelInterface::GetInstance().ReadFromFile(path, output);
202 EXPECT_EQ(ret, true);
203 EXPECT_EQ(output.compare(lines), 0);
204 KernelInterface::GetInstance().RemoveFile(path);
205 }
206
207 HWTEST_F(KernelInterfaceTest, NoSuchFileCreateTest, TestSize.Level1)
208 {
209 std::string basedir = "/NoSuchDir";
210 std::string path = "/NoSuchDir/file";
211 KernelInterface::GetInstance().RemoveDirRecursively(basedir);
212 bool ret = KernelInterface::GetInstance().CreateFile("");
213 ret = ret || KernelInterface::GetInstance().CreateFile(path);
214 ret = ret || KernelInterface::GetInstance().IsFileExists(path);
215 EXPECT_EQ(ret, false);
216 }
217
218 HWTEST_F(KernelInterfaceTest, NoSuchFileRemoveTest, TestSize.Level1)
219 {
220 std::string basedir = "/NoSuchDir";
221 std::string path1 = "/NoSuchDir/file";
222 std::string path2 = "/proc/NoSuchFile";
223 KernelInterface::GetInstance().RemoveDirRecursively(basedir);
224 KernelInterface::GetInstance().RemoveFile(path2);
225 bool ret = KernelInterface::GetInstance().RemoveFile(path1);
226 ret = ret && KernelInterface::GetInstance().RemoveFile(path2);
227 EXPECT_EQ(ret, true);
228 }
229
230 HWTEST_F(KernelInterfaceTest, NoSuchFileReadWriteTest, TestSize.Level1)
231 {
232 std::string path = "/NoSuchDir/NoSuchFile";
233 KernelInterface::GetInstance().RemoveFile(path);
234 std::string line1 = "line1";
235 std::string line2 = "line2";
236 std::string line3 = "line3";
237 std::string output;
238 std::vector<std::string> outputLines;
239 std::vector<std::string> inputLines = {line1, line2, line3};
240
241 bool ret = KernelInterface::GetInstance().WriteToFile(path, line1, false);
242 ret = ret || KernelInterface::GetInstance().WriteToFile(path, line1);
243 ret = ret || KernelInterface::GetInstance().WriteToFile("", line1);
244 ret = ret || KernelInterface::GetInstance().ReadFromFile(path, output);
245 ret = ret || KernelInterface::GetInstance().ReadFromFile("", output);
246 EXPECT_EQ(ret, false);
247
248 ret = ret || KernelInterface::GetInstance().ReadLinesFromFile(path, outputLines);
249 ret = ret || KernelInterface::GetInstance().ReadLinesFromFile("", outputLines);
250 EXPECT_EQ(ret, false);
251 }
252
253 HWTEST_F(KernelInterfaceTest, DirCreateTest, TestSize.Level1)
254 {
255 const std::string BASE_PATH = "/data/local/tmp";
256 bool ret = KernelInterface::GetInstance().IsDirExists(BASE_PATH);
257 std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testDir");
258 KernelInterface::GetInstance().RemoveDirRecursively(path);
259 ret = ret && KernelInterface::GetInstance().CreateDir(path);
260 ret = ret && KernelInterface::GetInstance().IsDirExists(path);
261 EXPECT_EQ(ret, true);
262 KernelInterface::GetInstance().RemoveDirRecursively(path);
263
264 path = KernelInterface::GetInstance().JoinPath(path, "midDir", "subDir");
265 ret = ret && KernelInterface::GetInstance().CreateDir(path);
266 ret = ret && KernelInterface::GetInstance().IsDirExists(path);
267 EXPECT_EQ(ret, true);
268 KernelInterface::GetInstance().RemoveDirRecursively(path);
269 }
270
271 HWTEST_F(KernelInterfaceTest, DirRemoveTest, TestSize.Level1)
272 {
273 const std::string BASE_PATH = "/data/local/tmp";
274 bool ret = KernelInterface::GetInstance().IsDirExists(BASE_PATH);
275 std::string basedir = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testDir");
276 std::string subDir1 = KernelInterface::GetInstance().JoinPath(basedir, "subDir1");
277 std::string subDir2 = KernelInterface::GetInstance().JoinPath(basedir, "subDir2");
278 std::string file1 = KernelInterface::GetInstance().JoinPath(subDir1, "testFile1");
279 std::string file2 = KernelInterface::GetInstance().JoinPath(subDir2, "testFile2");
280 KernelInterface::GetInstance().CreateDir(subDir1); // ../testDir/subDir1/
281 KernelInterface::GetInstance().CreateFile(file1); // ../testDir/subDir1/testFile1
282
283 ret = KernelInterface::GetInstance().RemoveDirRecursively(subDir1);
284 ret = ret && KernelInterface::GetInstance().IsEmptyDir(basedir);
285 EXPECT_EQ(ret, true);
286 ret = KernelInterface::GetInstance().IsDirExists(subDir1);
287 EXPECT_EQ(ret, false);
288
289 KernelInterface::GetInstance().CreateDir(subDir1);
290 KernelInterface::GetInstance().CreateDir(subDir2); // ../testDir/subDir2/
291 KernelInterface::GetInstance().CreateFile(file1); // ../testDir/subDir1/testFile1
292 KernelInterface::GetInstance().CreateFile(file2); // ../testDir/subDir2/testFile2
293 ret = KernelInterface::GetInstance().RemoveDirRecursively(basedir);
294 EXPECT_EQ(ret, true);
295 ret = KernelInterface::GetInstance().IsDirExists(basedir);
296 EXPECT_EQ(ret, false);
297 }
298
299 HWTEST_F(KernelInterfaceTest, GetPidProcInfoTest, TestSize.Level1)
300 {
301 ProcInfo procInfo;
302 procInfo.pid = 1;
303 bool ret = KernelInterface::GetInstance().GetPidProcInfo(procInfo);
304 printf("pid=[%d], name=[%s], status=[%s], size=[%d KB]\n",
305 procInfo.pid, procInfo.name.c_str(), procInfo.status.c_str(), procInfo.size);
306 EXPECT_EQ(ret, true);
307 }
308
309 HWTEST_F(KernelInterfaceTest, GetCurrentBufferTest, TestSize.Level1)
310 {
311 int buffer = KernelInterface::GetInstance().GetCurrentBuffer();
312 printf("buffer=%d", buffer);
313 EXPECT_GT(buffer, 0);
314 }
315 }
316 }
317