• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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     KernelInterface::GetInstance().RemoveFile(path);
167 }
168 
169 HWTEST_F(KernelInterfaceTest, SingleLineFileReadWriteLinesTest, TestSize.Level1)
170 {
171     const std::string BASE_PATH = "/data/local/tmp";
172     std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testFile");
173     KernelInterface::GetInstance().RemoveFile(path);
174     bool ret = KernelInterface::GetInstance().CreateFile(path);
175     ret = ret && KernelInterface::GetInstance().IsFileExists(path);
176     EXPECT_EQ(ret, true);
177     std::string line1 = "line1";
178     std::vector<std::string> inputLines = {line1};
179     std::string output;
180     std::vector<std::string> outputLines;
181 
182     ret = KernelInterface::GetInstance().WriteLinesToFile(path, inputLines); // curr content: "line1\n"
183     ret = ret && KernelInterface::GetInstance().ReadLinesFromFile(path, outputLines);
184     EXPECT_EQ(ret, true);
185     EXPECT_EQ(outputLines.size(), 2u);
186     EXPECT_EQ(outputLines[0].compare(line1), 0);
187     EXPECT_EQ(outputLines[1].length(), 0u);
188     KernelInterface::GetInstance().RemoveFile(path);
189 }
190 
191 HWTEST_F(KernelInterfaceTest, MultLinesFileReadWriteTest, TestSize.Level1)
192 {
193     const std::string BASE_PATH = "/data/local/tmp";
194     std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testFile");
195     KernelInterface::GetInstance().RemoveFile(path);
196     bool ret = KernelInterface::GetInstance().CreateFile(path);
197     ret = ret && KernelInterface::GetInstance().IsFileExists(path);
198     EXPECT_EQ(ret, true);
199     std::string line1 = "line1";
200     std::string line2 = "line2";
201     std::string line3 = "line3";
202     std::string lines = line1 + "\n" + line2 + "\n" + line3; // "line1\nline2\nline3"
203     std::string output;
204 
205     ret = KernelInterface::GetInstance().WriteToFile(path, line1); // curr content: "line1"
206     ret = ret && KernelInterface::GetInstance().WriteToFile(path, "\n", false); // curr content: "line1\n"
207     ret = ret && KernelInterface::GetInstance().WriteToFile(path, line2, false); // curr content: "line1\nline2"
208     ret = ret && KernelInterface::GetInstance().ReadFromFile(path, output);
209     EXPECT_EQ(ret, true);
210     EXPECT_EQ(output.compare(line1 + "\n" + line2), 0);
211 
212     ret = KernelInterface::GetInstance().WriteToFile(path, lines); // curr content: "line1\nline2\nline3"
213     ret = ret && KernelInterface::GetInstance().ReadFromFile(path, output);
214     EXPECT_EQ(ret, true);
215     EXPECT_EQ(output.compare(lines), 0);
216     KernelInterface::GetInstance().RemoveFile(path);
217 }
218 
219 HWTEST_F(KernelInterfaceTest, MultLinesFileReadWriteLinesTest, TestSize.Level1)
220 {
221     const std::string BASE_PATH = "/data/local/tmp";
222     std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testFile");
223     KernelInterface::GetInstance().RemoveFile(path);
224     bool ret = KernelInterface::GetInstance().CreateFile(path);
225     ret = ret && KernelInterface::GetInstance().IsFileExists(path);
226     EXPECT_EQ(ret, true);
227     std::string line1 = "line1";
228     std::string line2 = "line2";
229     std::string line3 = "line3";
230     std::vector<std::string> outputLines;
231     std::vector<std::string> inputLines = {line1, line2, line3};
232 
233     ret = KernelInterface::GetInstance().WriteLinesToFile(path, inputLines); // curr content: "line1\nline2\nline3\n"
234     ret = ret && KernelInterface::GetInstance().ReadLinesFromFile(path, outputLines);
235     EXPECT_EQ(ret, true);
236     EXPECT_EQ(outputLines.size(), 4u);
237     EXPECT_EQ(outputLines[0].compare(line1), 0);
238     EXPECT_EQ(outputLines[1].compare(line2), 0);
239     EXPECT_EQ(outputLines[2].compare(line3), 0);
240     EXPECT_EQ(outputLines[3].length(), 0u);
241     KernelInterface::GetInstance().RemoveFile(path);
242 }
243 
244 HWTEST_F(KernelInterfaceTest, NoSuchFileCreateTest, TestSize.Level1)
245 {
246     std::string basedir = "/NoSuchDir";
247     std::string path = "/NoSuchDir/file";
248     KernelInterface::GetInstance().RemoveDirRecursively(basedir);
249     bool ret = KernelInterface::GetInstance().CreateFile("");
250     ret = ret || KernelInterface::GetInstance().CreateFile(path);
251     ret = ret || KernelInterface::GetInstance().IsFileExists(path);
252     EXPECT_EQ(ret, false);
253 }
254 
255 HWTEST_F(KernelInterfaceTest, NoSuchFileRemoveTest, TestSize.Level1)
256 {
257     std::string basedir = "/NoSuchDir";
258     std::string path1 = "/NoSuchDir/file";
259     std::string path2 = "/proc/NoSuchFile";
260     KernelInterface::GetInstance().RemoveDirRecursively(basedir);
261     KernelInterface::GetInstance().RemoveFile(path2);
262     bool ret = KernelInterface::GetInstance().RemoveFile(path1);
263     ret = ret && KernelInterface::GetInstance().RemoveFile(path2);
264     EXPECT_EQ(ret, true);
265 }
266 
267 HWTEST_F(KernelInterfaceTest, NoSuchFileReadWriteTest, TestSize.Level1)
268 {
269     std::string path = "/NoSuchDir/NoSuchFile";
270     KernelInterface::GetInstance().RemoveFile(path);
271     std::string line1 = "line1";
272     std::string line2 = "line2";
273     std::string line3 = "line3";
274     std::string output;
275     std::vector<std::string> outputLines;
276     std::vector<std::string> inputLines = {line1, line2, line3};
277 
278     bool ret = KernelInterface::GetInstance().WriteToFile(path, line1, false);
279     ret = ret || KernelInterface::GetInstance().WriteToFile(path, line1);
280     ret = ret || KernelInterface::GetInstance().WriteToFile("", line1);
281     ret = ret || KernelInterface::GetInstance().ReadFromFile(path, output);
282     ret = ret || KernelInterface::GetInstance().ReadFromFile("", output);
283     EXPECT_EQ(ret, false);
284 
285     ret = KernelInterface::GetInstance().WriteLinesToFile(path, inputLines);
286     ret = ret || KernelInterface::GetInstance().ReadLinesFromFile(path, outputLines);
287     ret = ret || KernelInterface::GetInstance().WriteLinesToFile("", inputLines);
288     ret = ret || KernelInterface::GetInstance().ReadLinesFromFile("", outputLines);
289     EXPECT_EQ(ret, false);
290 }
291 
292 HWTEST_F(KernelInterfaceTest, DirCreateTest, TestSize.Level1)
293 {
294     const std::string BASE_PATH = "/data/local/tmp";
295     bool ret = KernelInterface::GetInstance().IsDirExists(BASE_PATH);
296     std::string path = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testDir");
297     KernelInterface::GetInstance().RemoveDirRecursively(path);
298     ret = ret && KernelInterface::GetInstance().CreateDir(path);
299     ret = ret && KernelInterface::GetInstance().IsDirExists(path);
300     EXPECT_EQ(ret, true);
301     KernelInterface::GetInstance().RemoveDirRecursively(path);
302 
303     path = KernelInterface::GetInstance().JoinPath(path, "midDir", "subDir");
304     ret = ret && KernelInterface::GetInstance().CreateDir(path);
305     ret = ret && KernelInterface::GetInstance().IsDirExists(path);
306     EXPECT_EQ(ret, true);
307     KernelInterface::GetInstance().RemoveDirRecursively(path);
308 }
309 
310 HWTEST_F(KernelInterfaceTest, DirRemoveTest, TestSize.Level1)
311 {
312     const std::string BASE_PATH = "/data/local/tmp";
313     bool ret = KernelInterface::GetInstance().IsDirExists(BASE_PATH);
314     std::string basedir = KernelInterface::GetInstance().JoinPath(BASE_PATH, "testDir");
315     std::string subDir1 = KernelInterface::GetInstance().JoinPath(basedir, "subDir1");
316     std::string subDir2 = KernelInterface::GetInstance().JoinPath(basedir, "subDir2");
317     std::string file1 = KernelInterface::GetInstance().JoinPath(subDir1, "testFile1");
318     std::string file2 = KernelInterface::GetInstance().JoinPath(subDir2, "testFile2");
319     KernelInterface::GetInstance().CreateDir(subDir1); // ../testDir/subDir1/
320     KernelInterface::GetInstance().CreateFile(file1); // ../testDir/subDir1/testFile1
321 
322     ret = KernelInterface::GetInstance().RemoveDirRecursively(subDir1);
323     ret = ret && KernelInterface::GetInstance().IsEmptyDir(basedir);
324     EXPECT_EQ(ret, true);
325     ret = KernelInterface::GetInstance().IsDirExists(subDir1);
326     EXPECT_EQ(ret, false);
327 
328     KernelInterface::GetInstance().CreateDir(subDir1);
329     KernelInterface::GetInstance().CreateDir(subDir2); // ../testDir/subDir2/
330     KernelInterface::GetInstance().CreateFile(file1); // ../testDir/subDir1/testFile1
331     KernelInterface::GetInstance().CreateFile(file2); // ../testDir/subDir2/testFile2
332     ret = KernelInterface::GetInstance().RemoveDirRecursively(basedir);
333     EXPECT_EQ(ret, true);
334     ret = KernelInterface::GetInstance().IsDirExists(basedir);
335     EXPECT_EQ(ret, false);
336 }
337 
338 HWTEST_F(KernelInterfaceTest, GetPidProcInfoTest, TestSize.Level1)
339 {
340     ProcInfo procInfo;
341     procInfo.pid = 1;
342     bool ret = KernelInterface::GetInstance().GetPidProcInfo(procInfo);
343     printf("pid=[%d], name=[%s], status=[%s], size=[%d KB]\n",
344            procInfo.pid, procInfo.name.c_str(), procInfo.status.c_str(), procInfo.size);
345     EXPECT_EQ(ret, true);
346 }
347 
348 HWTEST_F(KernelInterfaceTest, GetCurrentBufferTest, TestSize.Level1)
349 {
350     int buffer = KernelInterface::GetInstance().GetCurrentBuffer();
351     printf("buffer=%d", buffer);
352     EXPECT_GT(buffer, 0);
353 }
354 }
355 }
356