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 "move_core.h"
17 #include "uv_fs_mock.h"
18
19 #include <gtest/gtest.h>
20
21 namespace OHOS::FileManagement::ModuleFileIO::Test {
22 using namespace testing;
23 using namespace testing::ext;
24 using namespace std;
25
26 class MoveCoreMockTest : public testing::Test {
27 public:
28 static void SetUpTestCase(void);
29 static void TearDownTestCase(void);
30 void SetUp();
31 void TearDown();
32 static inline std::shared_ptr<UvfsMock> uvMock = nullptr;
33 };
34
SetUpTestCase(void)35 void MoveCoreMockTest::SetUpTestCase(void)
36 {
37 GTEST_LOG_(INFO) << "SetUpTestCase";
38 uvMock = std::make_shared<UvfsMock>();
39 Uvfs::ins = uvMock;
40 }
41
TearDownTestCase(void)42 void MoveCoreMockTest::TearDownTestCase(void)
43 {
44 GTEST_LOG_(INFO) << "TearDownTestCase";
45 Uvfs::ins = nullptr;
46 uvMock = nullptr;
47 }
48
SetUp(void)49 void MoveCoreMockTest::SetUp(void)
50 {
51 GTEST_LOG_(INFO) << "SetUp";
52 }
53
TearDown(void)54 void MoveCoreMockTest::TearDown(void)
55 {
56 GTEST_LOG_(INFO) << "TearDown";
57 }
58
59 extern "C" {
uv_err_name(int err)60 const char* uv_err_name(int err)
61 {
62 return "EXDEV";
63 }
64 }
65
66 /**
67 * @tc.name: MoveCoreMockTest_DoMove_000
68 * @tc.desc: Test function of MoveCore::DoMove interface for SUCCESS.
69 * @tc.size: MEDIUM
70 * @tc.type: FUNC
71 * @tc.level Level 1
72 */
73 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_000, testing::ext::TestSize.Level1)
74 {
75 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_000";
76
77 std::string src;
78 std::string dest;
79
80 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(0));
81 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(0));
82
83 auto res = MoveCore::DoMove(src, dest);
84 EXPECT_EQ(res.IsSuccess(), true);
85
86 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_000";
87 }
88
89 /**
90 * @tc.name: MoveCoreMockTest_DoMove_001
91 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
92 * @tc.size: MEDIUM
93 * @tc.type: FUNC
94 * @tc.level Level 1
95 */
96 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_001, testing::ext::TestSize.Level1)
97 {
98 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_001";
99
100 std::string src;
101 std::string dest;
102
103 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(0));
104 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
105
106 auto res = MoveCore::DoMove(src, dest);
107 EXPECT_EQ(res.IsSuccess(), false);
108
109 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_001";
110 }
111
112 /**
113 * @tc.name: MoveCoreMockTest_DoMove_002
114 * @tc.desc: Test function of MoveCore::DoMove interface for FAILED.
115 * @tc.size: MEDIUM
116 * @tc.type: FUNC
117 * @tc.level Level 1
118 */
119 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_002, testing::ext::TestSize.Level1)
120 {
121 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_002";
122
123 std::string src;
124 std::string dest;
125 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
126
127 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(0));
128 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
129
130 auto res = MoveCore::DoMove(src, dest, mode);
131 EXPECT_EQ(res.IsSuccess(), false);
132 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_002";
133 }
134
135 /**
136 * @tc.name: MoveCoreMockTest_DoMove_003
137 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
138 * @tc.size: MEDIUM
139 * @tc.type: FUNC
140 * @tc.level Level 1
141 */
142 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_003, testing::ext::TestSize.Level1)
143 {
144 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_003";
145
146 std::string src;
147 std::string dest;
148
149 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(-1));
150
151 auto res = MoveCore::DoMove(src, dest);
152 EXPECT_EQ(res.IsSuccess(), false);
153
154 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_003";
155 }
156
157 /**
158 * @tc.name: MoveCoreMockTest_DoMove_004
159 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
160 * @tc.size: MEDIUM
161 * @tc.type: FUNC
162 * @tc.level Level 1
163 */
164 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_004, testing::ext::TestSize.Level1)
165 {
166 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_004";
167
168 std::string src;
169 std::string dest;
170 optional<int> mode = std::make_optional<int>(MODE_THROW_ERR);
171
172 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1)).WillOnce(Return(0));
173
174 auto res = MoveCore::DoMove(src, dest, mode);
175 EXPECT_EQ(res.IsSuccess(), false);
176
177 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_004";
178 }
179
180 /**
181 * @tc.name: MoveCoreMockTest_DoMove_005
182 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
183 * @tc.size: MEDIUM
184 * @tc.type: FUNC
185 * @tc.level Level 1
186 */
187 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_005, testing::ext::TestSize.Level1)
188 {
189 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_005";
190
191 std::string src;
192 std::string dest;
193 optional<int> mode = std::make_optional<int>(MODE_THROW_ERR);
194
195 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1)).WillOnce(Return(-1));
196
197 auto res = MoveCore::DoMove(src, dest, mode);
198 EXPECT_EQ(res.IsSuccess(), false);
199
200 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_005";
201 }
202
203 /**
204 * @tc.name: MoveCoreMockTest_DoMove_006
205 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
206 * @tc.size: MEDIUM
207 * @tc.type: FUNC
208 * @tc.level Level 1
209 */
210 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_006, testing::ext::TestSize.Level1)
211 {
212 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_006";
213
214 std::string src;
215 std::string dest;
216 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
217
218 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1));
219 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
220
221 auto res = MoveCore::DoMove(src, dest, mode);
222 EXPECT_EQ(res.IsSuccess(), false);
223
224 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_006";
225 }
226
227 /**
228 * @tc.name: MoveCoreMockTest_DoMove_007
229 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
230 * @tc.size: MEDIUM
231 * @tc.type: FUNC
232 * @tc.level Level 1
233 */
234 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_007, testing::ext::TestSize.Level1)
235 {
236 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_007";
237
238 std::string src;
239 std::string dest;
240 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
241
242 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1));
243 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(1));
244
245 auto res = MoveCore::DoMove(src, dest, mode);
246 EXPECT_EQ(res.IsSuccess(), true);
247
248 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_007";
249 }
250
251 /**
252 * @tc.name: MoveCoreMockTest_DoMove_008
253 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
254 * @tc.size: MEDIUM
255 * @tc.type: FUNC
256 * @tc.level Level 1
257 */
258 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_008, testing::ext::TestSize.Level1)
259 {
260 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_008";
261
262 std::string src;
263 std::string dest;
264
265 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(0));
266 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(1));
267
268 auto res = MoveCore::DoMove(src, dest);
269 EXPECT_EQ(res.IsSuccess(), true);
270
271 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_008";
272 }
273
274 /**
275 * @tc.name: MoveCoreMockTest_DoMove_009
276 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
277 * @tc.size: MEDIUM
278 * @tc.type: FUNC
279 * @tc.level Level 1
280 */
281 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_009, testing::ext::TestSize.Level1)
282 {
283 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_009";
284
285 std::string src;
286 std::string dest;
287 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
288
289 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1));
290 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
291 EXPECT_CALL(*uvMock, uv_fs_stat(_, _, _, _)).WillOnce(Return(-1));
292
293 auto res = MoveCore::DoMove(src, dest, mode);
294 EXPECT_EQ(res.IsSuccess(), false);
295
296 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_009";
297 }
298
299 /**
300 * @tc.name: MoveCoreMockTest_DoMove_0010
301 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
302 * @tc.size: MEDIUM
303 * @tc.type: FUNC
304 * @tc.level Level 1
305 */
306 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_0010, testing::ext::TestSize.Level1)
307 {
308 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_0010";
309
310 std::string src;
311 std::string dest = "file.txt";
312 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
313
314 int fd = open(dest.c_str(), O_RDWR | O_CREAT, 0666);
315 ASSERT_NE(fd, -1);
316
317 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1));
318 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
319 EXPECT_CALL(*uvMock, uv_fs_stat(_, _, _, _)).WillOnce(Return(1));
320
321 auto res = MoveCore::DoMove(src, dest, mode);
322 EXPECT_EQ(res.IsSuccess(), false);
323 close(fd);
324
325 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_0010";
326 }
327
328 /**
329 * @tc.name: MoveCoreMockTest_DoMove_0011
330 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
331 * @tc.size: MEDIUM
332 * @tc.type: FUNC
333 * @tc.level Level 1
334 */
335 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_0011, testing::ext::TestSize.Level1)
336 {
337 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_0011";
338
339 std::string src;
340 std::string dest;
341 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
342
343 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1));
344 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
345 EXPECT_CALL(*uvMock, uv_fs_stat(_, _, _, _)).WillOnce(Return(1));
346
347 auto res = MoveCore::DoMove(src, dest, mode);
348 EXPECT_EQ(res.IsSuccess(), false);
349
350 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_0011";
351 }
352
353 /**
354 * @tc.name: MoveCoreMockTest_DoMove_0012
355 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
356 * @tc.size: MEDIUM
357 * @tc.type: FUNC
358 * @tc.level Level 1
359 */
360 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_0012, testing::ext::TestSize.Level1)
361 {
362 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_0012";
363
364 std::string src = "file.txt";
365 std::string dest = "dest.txt";
366 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
367
368 int fd = open(src.c_str(), O_RDWR | O_CREAT, 0666);
369 ASSERT_NE(fd, -1);
370
371 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1));
372 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
373 EXPECT_CALL(*uvMock, uv_fs_stat(_, _, _, _)).WillOnce(Return(1));
374 EXPECT_CALL(*uvMock, uv_fs_unlink(_, _, _, _)).WillOnce(Return(-1)).WillOnce(Return(-1));
375
376 auto res = MoveCore::DoMove(src, dest, mode);
377 EXPECT_EQ(res.IsSuccess(), false);
378
379 ASSERT_EQ(unlink(src.c_str()), 0);
380 close(fd);
381
382 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_0012";
383 }
384
385 /**
386 * @tc.name: MoveCoreMockTest_DoMove_0013
387 * @tc.desc: Test function of MoveCore::DoMove interface for FALSE.
388 * @tc.size: MEDIUM
389 * @tc.type: FUNC
390 * @tc.level Level 1
391 */
392 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_0013, testing::ext::TestSize.Level1)
393 {
394 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_0013";
395
396 std::string src = "file.txt";
397 std::string dest = "dest.txt";
398 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
399
400 int fd = open(src.c_str(), O_RDWR | O_CREAT, 0666);
401 ASSERT_NE(fd, -1);
402
403 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1));
404 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
405 EXPECT_CALL(*uvMock, uv_fs_stat(_, _, _, _)).WillOnce(Return(1));
406 EXPECT_CALL(*uvMock, uv_fs_unlink(_, _, _, _)).WillOnce(Return(-1)).WillOnce(Return(1));
407
408 auto res = MoveCore::DoMove(src, dest, mode);
409 EXPECT_EQ(res.IsSuccess(), false);
410
411 ASSERT_EQ(unlink(src.c_str()), 0);
412 close(fd);
413
414 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_0013";
415 }
416
417 /**
418 * @tc.name: MoveCoreMockTest_DoMove_0014
419 * @tc.desc: Test function of MoveCore::DoMove interface for SUCCESS.
420 * @tc.size: MEDIUM
421 * @tc.type: FUNC
422 * @tc.level Level 1
423 */
424 HWTEST_F(MoveCoreMockTest, MoveCoreMockTest_DoMove_0014, testing::ext::TestSize.Level1)
425 {
426 GTEST_LOG_(INFO) << "MoveCoreMockTest-begin MoveCoreMockTest_DoMove_0013";
427
428 std::string src = "file.txt";
429 std::string dest = "dest.txt";
430 optional<int> mode = std::make_optional<int>(MODE_FORCE_MOVE);
431
432 int fd = open(src.c_str(), O_RDWR | O_CREAT, 0666);
433 ASSERT_NE(fd, -1);
434
435 EXPECT_CALL(*uvMock, uv_fs_access(_, _, _, _, _)).WillOnce(Return(1));
436 EXPECT_CALL(*uvMock, uv_fs_rename(_, _, _, _, _)).WillOnce(Return(-1));
437 EXPECT_CALL(*uvMock, uv_fs_stat(_, _, _, _)).WillOnce(Return(1));
438 EXPECT_CALL(*uvMock, uv_fs_unlink(_, _, _, _)).WillOnce(Return(1));
439
440 auto res = MoveCore::DoMove(src, dest, mode);
441 EXPECT_EQ(res.IsSuccess(), true);
442
443 ASSERT_EQ(unlink(src.c_str()), 0);
444 close(fd);
445
446 GTEST_LOG_(INFO) << "MoveCoreMockTest-end MoveCoreMockTest_DoMove_0013";
447 }
448
449
450 } // namespace OHOS::FileManagement::ModuleFileIO::Test