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