• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025 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 <filesystem>
17 #include <fstream>
18 
19 #include <gtest/gtest.h>
20 
21 #include "movedir_core.h"
22 
23 namespace OHOS::FileManagement::ModuleFileIO::Test {
24 using namespace testing;
25 using namespace testing::ext;
26 using namespace std;
27 
28 class MoveDirCoreTest : public testing::Test {
29 public:
30     static filesystem::path srcPath;
31     static filesystem::path destPath;
32     static void SetUpTestCase(void);
33     static void TearDownTestCase(void);
34     void SetUp();
35     void TearDown();
36 };
37 
38 filesystem::path MoveDirCoreTest::srcPath;
39 filesystem::path MoveDirCoreTest::destPath;
40 
SetUpTestCase(void)41 void MoveDirCoreTest::SetUpTestCase(void)
42 {
43     srcPath = filesystem::temp_directory_path() / "src/";
44     destPath = filesystem::temp_directory_path() / "dest/";
45     std::filesystem::create_directory(srcPath);
46     std::filesystem::create_directory(destPath);
47     GTEST_LOG_(INFO) << "SetUpTestCase";
48 }
49 
TearDownTestCase(void)50 void MoveDirCoreTest::TearDownTestCase(void)
51 {
52     GTEST_LOG_(INFO) << "TearDownTestCase";
53     filesystem::remove_all(srcPath);
54     filesystem::remove_all(destPath);
55 }
56 
SetUp(void)57 void MoveDirCoreTest::SetUp(void)
58 {
59     GTEST_LOG_(INFO) << "SetUp";
60 }
61 
TearDown(void)62 void MoveDirCoreTest::TearDown(void)
63 {
64     GTEST_LOG_(INFO) << "TearDown";
65 }
66 
67 /**
68  * @tc.name: MoveDirCoreTest_DoMoveDir_0001
69  * @tc.desc: Test function of DoMoveDir() interface for SUCCESS.
70  * @tc.size: MEDIUM
71  * @tc.type: FUNC
72  * @tc.level Level 1
73  */
74 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0001, testing::ext::TestSize.Level1)
75 {
76     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0001";
77 
78     string src = srcPath.string() + "/test01";
79     string dest = destPath.string();
80     filesystem::create_directories(src);
81 
82     auto result = MoveDirCore::DoMoveDir(src, dest, optional<int32_t>());
83 
84     EXPECT_TRUE(result.fsResult.IsSuccess());
85     EXPECT_FALSE(result.errFiles.has_value());
86 
87     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0001";
88 }
89 
90 /**
91  * @tc.name: MoveDirCoreTest_DoMoveDir_0002
92  * @tc.desc: Test function of DoMoveDir() interface for FAILED.
93  * @tc.size: MEDIUM
94  * @tc.type: FUNC
95  * @tc.level Level 1
96  */
97 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0002, testing::ext::TestSize.Level1)
98 {
99     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0002";
100 
101     string src = srcPath.string() + "/test02";
102     string dest = destPath.string();
103     filesystem::create_directories(src);
104 
105     int invalidMode = DIRMODE_MAX + 1;
106     auto result = MoveDirCore::DoMoveDir(src, dest, optional<int32_t>(invalidMode));
107 
108     EXPECT_FALSE(result.fsResult.IsSuccess());
109     auto err = result.fsResult.GetError();
110     EXPECT_EQ(err.GetErrNo(), 13900020);
111     EXPECT_FALSE(result.errFiles.has_value());
112 
113     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0002";
114 }
115 
116 /**
117  * @tc.name: MoveDirCoreTest_DoMoveDir_0003
118  * @tc.desc: Test function of DoMoveDir() interface for FAILED.
119  * @tc.size: MEDIUM
120  * @tc.type: FUNC
121  * @tc.level Level 1
122  */
123 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0003, testing::ext::TestSize.Level1)
124 {
125     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0002";
126 
127     string src = srcPath.string() + "/test03";
128     string dest = destPath.string();
129 
130     auto result = MoveDirCore::DoMoveDir(src, dest, optional<int32_t>(DIRMODE_DIRECTORY_REPLACE));
131 
132     EXPECT_FALSE(result.fsResult.IsSuccess());
133     auto err = result.fsResult.GetError();
134     EXPECT_EQ(err.GetErrNo(), 13900020);
135     EXPECT_FALSE(result.errFiles.has_value());
136 
137     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0003";
138 }
139 
140 /**
141  * @tc.name: MoveDirCoreTest_DoMoveDir_0004
142  * @tc.desc: Test function of DoMoveDir() interface for FAILED.
143  * @tc.size: MEDIUM
144  * @tc.type: FUNC
145  * @tc.level Level 1
146  */
147 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0004, testing::ext::TestSize.Level1)
148 {
149     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0002";
150 
151     string src = srcPath.string();
152     string dest = destPath.string() + "/test04";
153 
154     auto result = MoveDirCore::DoMoveDir(src, dest, optional<int32_t>(DIRMODE_DIRECTORY_REPLACE));
155 
156     EXPECT_FALSE(result.fsResult.IsSuccess());
157     auto err = result.fsResult.GetError();
158     EXPECT_EQ(err.GetErrNo(), 13900020);
159     EXPECT_FALSE(result.errFiles.has_value());
160 
161     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0004";
162 }
163 
164 /**
165  * @tc.name: MoveDirCoreTest_DoMoveDir_0005
166  * @tc.desc: Test function of DoMoveDir() interface for FAILED.
167  * @tc.size: MEDIUM
168  * @tc.type: FUNC
169  * @tc.level Level 1
170  */
171 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0005, testing::ext::TestSize.Level1)
172 {
173     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0005";
174 
175     string src = "/data/local/test05/src/src/src/test05";
176     string dest = destPath.string() + "/src";
177     filesystem::create_directories(src);
178     filesystem::create_directories(dest);
179 
180     auto result = MoveDirCore::DoMoveDir(
181         "/data/local/test05/", destPath.string(), optional<int32_t>(DIRMODE_DIRECTORY_THROW_ERR));
182 
183     EXPECT_FALSE(result.fsResult.IsSuccess());
184     auto err = result.fsResult.GetError();
185     EXPECT_EQ(err.GetErrNo(), 13900032);
186     EXPECT_FALSE(result.errFiles.has_value());
187 
188     filesystem::remove_all("/data/local/test05");
189 
190     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0005";
191 }
192 
193 /**
194  * @tc.name: MoveDirCoreTest_DoMoveDir_0006
195  * @tc.desc: Test function of DoMoveDir() interface for SUCCESS.
196  * @tc.size: MEDIUM
197  * @tc.type: FUNC
198  * @tc.level Level 1
199  */
200 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0006, testing::ext::TestSize.Level1)
201 {
202     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0006";
203 
204     string src = "/data/local/test06/src/src/src/test06";
205     string dest = destPath.string() + "/src";
206     filesystem::create_directories(src);
207     filesystem::create_directories(dest);
208 
209     auto result = MoveDirCore::DoMoveDir(
210         "/data/local/test06/src", destPath.string(), optional<int32_t>(DIRMODE_DIRECTORY_REPLACE));
211 
212     EXPECT_TRUE(result.fsResult.IsSuccess());
213 
214     filesystem::remove_all("/data/local/test06");
215 
216     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0006";
217 }
218 
219 /**
220  * @tc.name: MoveDirCoreTest_DoMoveDir_0007
221  * @tc.desc: Test function of DoMoveDir() interface for SUCCESS.
222  * @tc.size: MEDIUM
223  * @tc.type: FUNC
224  * @tc.level Level 1
225  */
226 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0007, testing::ext::TestSize.Level1)
227 {
228     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0007";
229 
230     filesystem::create_directories("/data/local/test07/src");
231     filesystem::create_directories("/data/local/test07/dest");
232     filesystem::path srcFile = "/data/local/test07/src/test_file.txt";
233     ofstream(srcFile) << "Test content\n123\n456";
234     filesystem::path destFile = "/data/local/test07/dest/test_file.txt";
235     ofstream(destFile) << "Test content\ndest";
236 
237     auto result = MoveDirCore::DoMoveDir(
238         "/data/local/test07/src/", "/data/local/test07/dest/", optional<int32_t>(DIRMODE_FILE_THROW_ERR));
239 
240     EXPECT_FALSE(result.fsResult.IsSuccess());
241     auto err = result.fsResult.GetError();
242     EXPECT_EQ(err.GetErrNo(), 13900015);
243     EXPECT_TRUE(result.errFiles.has_value());
244 
245     filesystem::remove_all("/data/local/test07");
246 
247     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0007";
248 }
249 
250 /**
251  * @tc.name: MoveDirCoreTest_DoMoveDir_0008
252  * @tc.desc: Test function of DoMoveDir() interface for FAILED.
253  * @tc.size: MEDIUM
254  * @tc.type: FUNC
255  * @tc.level Level 1
256  */
257 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0008, testing::ext::TestSize.Level1)
258 {
259     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0008";
260 
261     filesystem::create_directories("/data/local/test08/src");
262     filesystem::create_directories("/data/local/test08/dest/test_file/test_file");
263     filesystem::path srcFile = "/data/local/test08/src/test_file";
264     ofstream(srcFile) << "Test content\n123\n456";
265 
266     auto result = MoveDirCore::DoMoveDir(
267         "/data/local/test08/src/", "/data/local/test08/dest/test_file/", optional<int32_t>(DIRMODE_FILE_REPLACE));
268 
269     EXPECT_FALSE(result.fsResult.IsSuccess());
270     EXPECT_TRUE(result.errFiles.has_value());
271 
272     filesystem::remove_all("/data/local/test08");
273 
274     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0008";
275 }
276 
277 /**
278  * @tc.name: MoveDirCoreTest_DoMoveDir_0009
279  * @tc.desc: Test function of DoMoveDir() interface for SUCCESS.
280  * @tc.size: MEDIUM
281  * @tc.type: FUNC
282  * @tc.level Level 1
283  */
284 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0009, testing::ext::TestSize.Level1)
285 {
286     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0009";
287 
288     filesystem::create_directories("/data/local/test09/src");
289     filesystem::create_directories("/data/local/test09/dest");
290     filesystem::path srcFile = "/data/local/test09/src/test_file.txt";
291     ofstream(srcFile) << "Test content\n123\n456";
292     filesystem::path destFile = "/data/local/test09/dest/test_file.txt";
293     ofstream(destFile) << "Test content\ndest";
294 
295     auto result = MoveDirCore::DoMoveDir(
296         "/data/local/test09/src/", "/data/local/test09/dest/", optional<int32_t>(DIRMODE_FILE_REPLACE));
297 
298     EXPECT_TRUE(result.fsResult.IsSuccess());
299     EXPECT_FALSE(result.errFiles.has_value());
300 
301     filesystem::remove_all("/data/local/test09");
302 
303     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0009";
304 }
305 
306 /**
307  * @tc.name: MoveDirCoreTest_DoMoveDir_0010
308  * @tc.desc: Test function of DoMoveDir() interface for SUCCESS.
309  * @tc.size: MEDIUM
310  * @tc.type: FUNC
311  * @tc.level Level 1
312  */
313 HWTEST_F(MoveDirCoreTest, MoveDirCoreTest_DoMoveDir_0010, testing::ext::TestSize.Level1)
314 {
315     GTEST_LOG_(INFO) << "MoveDirCoreTest-begin MoveDirCoreTest_DoMoveDir_0010";
316 
317     filesystem::create_directories("/data/local/test09/src/test_file.txt");
318     filesystem::create_directories("/data/local/test09/dest");
319     filesystem::path destFile = "/data/local/test09/dest/test_file.txt";
320     ofstream(destFile) << "Test content\ndest";
321 
322     auto result = MoveDirCore::DoMoveDir(
323         "/data/local/test09/src/", "/data/local/test09/dest/", optional<int32_t>(DIRMODE_FILE_REPLACE));
324 
325     EXPECT_FALSE(result.fsResult.IsSuccess());
326     EXPECT_TRUE(result.errFiles.has_value());
327 
328     filesystem::remove_all("/data/local/test09");
329 
330     GTEST_LOG_(INFO) << "MoveDirCoreTest-end MoveDirCoreTest_DoMoveDir_0010";
331 }
332 
333 } // namespace OHOS::FileManagement::ModuleFileIO::Test