• 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 
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