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