1 /*
2  * Copyright (c) 2024 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 <cstdio>
17 #include <thread>
18 #include <unistd.h>
19 
20 #include <gtest/gtest.h>
21 #include <nlohmann/json.hpp>
22 
23 #include "external_file_access_test.h"
24 #include "accesstoken_kit.h"
25 #include "context_impl.h"
26 #include "file_access_framework_errno.h"
27 #include "file_info_shared_memory.h"
28 #include "iservice_registry.h"
29 #include "nativetoken_kit.h"
30 #include "token_setproc.h"
31 
32 namespace OHOS::FileAccessFwk {
33 static int g_num = 0;
34 
35 /**
36  * @tc.number: user_file_service_external_file_access_Copy_0000
37  * @tc.name: external_file_access_Copy_0000
38  * @tc.desc: Test function of Copy interface, copy a file and argument of force is false
39  * @tc.size: MEDIUM
40  * @tc.type: FUNC
41  * @tc.level Level 1
42  * @tc.require: I7QXVD
43  */
44 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0000, testing::ext::TestSize.Level1)
45 {
46     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
47     EXPECT_NE(fileAccessHelper, nullptr);
48     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0000";
49     try {
50         vector<RootInfo> info;
51         int result = fileAccessHelper->GetRoots(info);
52         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
53 
54         for (size_t i = 0; i < info.size(); i++) {
55             Uri parentUri(info[i].uri);
56             Uri srcDir("");
57             result = fileAccessHelper->Mkdir(parentUri, "Copy_0000_src", srcDir);
58             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
59             Uri srcFile("");
60             result = fileAccessHelper->CreateFile(srcDir, "a.txt", srcFile);
61             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
62             int fd = -1;
63             result = fileAccessHelper->OpenFile(srcFile, WRITE_READ, fd);
64             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
65             char buff[] = "Copy test content for a.txt";
66             ssize_t srcFileSize = write(fd, buff, sizeof(buff));
67             EXPECT_EQ(srcFileSize, sizeof(buff));
68             close(fd);
69 
70             Uri destDir("");
71             result = fileAccessHelper->Mkdir(parentUri, "Copy_0000_dest", destDir);
72             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
73 
74             std::vector<Result> copyResult;
75             result = fileAccessHelper->Copy(srcFile, destDir, copyResult, false);
76             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
77             EXPECT_EQ(copyResult.size(), 0);
78 
79             Uri destFileUri(destDir.ToString() + "/" + "a.txt");
80             result = fileAccessHelper->OpenFile(destFileUri, WRITE_READ, fd);
81             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
82             ssize_t destFileSize = read(fd, buff, sizeof(buff));
83             EXPECT_EQ(srcFileSize, destFileSize);
84             close(fd);
85 
86             result = fileAccessHelper->Delete(srcDir);
87             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
88             result = fileAccessHelper->Delete(destDir);
89             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
90         }
91     } catch (...) {
92         GTEST_LOG_(ERROR) << "external_file_access_Copy_0000 occurs an exception.";
93     }
94     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0000";
95 }
96 
97 /**
98  * @tc.number: user_file_service_external_file_access_Copy_0001
99  * @tc.name: external_file_access_Copy_0001
100  * @tc.desc: Test function of Copy interface, copy a directory and argument of force is false
101  * @tc.size: MEDIUM
102  * @tc.type: FUNC
103  * @tc.level Level 1
104  * @tc.require: I7QXVD
105  */
106 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0001, testing::ext::TestSize.Level1)
107 {
108     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
109     EXPECT_NE(fileAccessHelper, nullptr);
110     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0001";
111     try {
112         vector<RootInfo> info;
113         int result = fileAccessHelper->GetRoots(info);
114         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
115         for (size_t i = 0; i < info.size(); i++) {
116             Uri parentUri(info[i].uri);
117             Uri srcDir("");
118             Uri destDir("");
119             result = fileAccessHelper->Mkdir(parentUri, "Copy_0001_src", srcDir);
120             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
121             Uri aFileUri("");
122             result = fileAccessHelper->CreateFile(srcDir, "a.txt", aFileUri);
123             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
124             int fd = -1;
125             result = fileAccessHelper->OpenFile(aFileUri, WRITE_READ, fd);
126             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
127             char buff[] = "Copy test content for a.txt";
128             ssize_t aFileSize = write(fd, buff, sizeof(buff));
129             EXPECT_EQ(aFileSize, sizeof(buff));
130             close(fd);
131             Uri bFileUri("");
132             result = fileAccessHelper->CreateFile(srcDir, "b.txt", bFileUri);
133             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
134             result = fileAccessHelper->Mkdir(parentUri, "Copy_0001_dest", destDir);
135             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
136 
137             std::vector<Result> copyResult;
138             result = fileAccessHelper->Copy(srcDir, destDir, copyResult, false);
139             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
140             EXPECT_EQ(copyResult.size(), 0);
141 
142             result = fileAccessHelper->Delete(srcDir);
143             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
144             result = fileAccessHelper->Delete(destDir);
145             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
146         }
147     } catch (...) {
148         GTEST_LOG_(ERROR) << "external_file_access_Copy_0001 occurs an exception.";
149     }
150     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0001";
151 }
152 
153 /**
154  * @tc.number: user_file_service_external_file_access_Copy_0002
155  * @tc.name: external_file_access_Copy_0002
156  * @tc.desc: Test function of Copy interface, copy a empty directory
157  * @tc.size: MEDIUM
158  * @tc.type: FUNC
159  * @tc.level Level 1
160  * @tc.require: I7QXVD
161  */
162 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0002, testing::ext::TestSize.Level1)
163 {
164     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
165     EXPECT_NE(fileAccessHelper, nullptr);
166     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0002";
167     try {
168         vector<RootInfo> info;
169         int result = fileAccessHelper->GetRoots(info);
170         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
171         for (size_t i = 0; i < info.size(); i++) {
172             Uri parentUri(info[i].uri);
173             Uri srcDir("");
174             result = fileAccessHelper->Mkdir(parentUri, "Copy_0002_src", srcDir);
175             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
176             Uri destDir("");
177             result = fileAccessHelper->Mkdir(parentUri, "Copy_0002_dest", destDir);
178             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
179 
180             std::vector<Result> copyResult;
181             result = fileAccessHelper->Copy(srcDir, destDir, copyResult, false);
182             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
183             EXPECT_EQ(copyResult.size(), 0);
184 
185             result = fileAccessHelper->Delete(srcDir);
186             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
187             result = fileAccessHelper->Delete(destDir);
188             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
189         }
190     } catch (...) {
191         GTEST_LOG_(ERROR) << "external_file_access_Copy_0002 occurs an exception.";
192     }
193     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0002";
194 }
195 
196 /**
197  * @tc.number: user_file_service_external_file_access_Copy_0003
198  * @tc.name: external_file_access_Copy_0003
199  * @tc.desc: Test function of Copy interface, copy a file with the same name and argument of force is true
200  * @tc.size: MEDIUM
201  * @tc.type: FUNC
202  * @tc.level Level 1
203  * @tc.require: I7QXVD
204  */
205 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0003, testing::ext::TestSize.Level1)
206 {
207     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
208     EXPECT_NE(fileAccessHelper, nullptr);
209     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0003";
210     try {
211         vector<RootInfo> info;
212         int result = fileAccessHelper->GetRoots(info);
213         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
214         for (size_t i = 0; i < info.size(); i++) {
215             Uri parentUri(info[i].uri);
216             Uri srcDir("");
217             result = fileAccessHelper->Mkdir(parentUri, "Copy_0003_src", srcDir);
218             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
219             Uri srcFile("");
220             result = fileAccessHelper->CreateFile(srcDir, "b.txt", srcFile);
221             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
222             int fd = -1;
223             result = fileAccessHelper->OpenFile(srcFile, WRITE_READ, fd);
224             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
225             char buff[] = "Copy test content for b.txt";
226             ssize_t srcFileSize = write(fd, buff, sizeof(buff));
227             EXPECT_EQ(srcFileSize, sizeof(buff));
228             close(fd);
229 
230             Uri destDir("");
231             result = fileAccessHelper->Mkdir(parentUri, "Copy_0003_dest", destDir);
232             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
233             Uri existFile("");
234             result = fileAccessHelper->CreateFile(destDir, "b.txt", existFile);
235             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
236 
237             std::vector<Result> copyResult;
238             result = fileAccessHelper->Copy(srcFile, destDir, copyResult, true);
239             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
240             EXPECT_EQ(copyResult.size(), 0);
241 
242             result = fileAccessHelper->OpenFile(existFile, WRITE_READ, fd);
243             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
244             ssize_t destFileSize = read(fd, buff, sizeof(buff));
245             EXPECT_EQ(srcFileSize, destFileSize);
246             close(fd);
247 
248             result = fileAccessHelper->Delete(srcDir);
249             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
250             result = fileAccessHelper->Delete(destDir);
251             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
252         }
253     } catch (...) {
254         GTEST_LOG_(ERROR) << "external_file_access_Copy_0003 occurs an exception.";
255     }
256     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0003";
257 }
258 
259 /**
260  * @tc.number: user_file_service_external_file_access_Copy_0004
261  * @tc.name: external_file_access_Copy_0004
262  * @tc.desc: Test function of Copy interface, copy a file with the same name and argument of force is false
263  * @tc.size: MEDIUM
264  * @tc.type: FUNC
265  * @tc.level Level 1
266  * @tc.require: I7QXVD
267  */
268 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0004, testing::ext::TestSize.Level1)
269 {
270     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
271     EXPECT_NE(fileAccessHelper, nullptr);
272     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0004";
273     try {
274         vector<RootInfo> info;
275         int result = fileAccessHelper->GetRoots(info);
276         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
277         for (size_t i = 0; i < info.size(); i++) {
278             Uri parentUri(info[i].uri);
279             Uri srcDir("");
280             result = fileAccessHelper->Mkdir(parentUri, "Copy_0004_src", srcDir);
281             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
282             Uri srcFile("");
283             result = fileAccessHelper->CreateFile(srcDir, "c.txt", srcFile);
284             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
285             int fd = -1;
286             result = fileAccessHelper->OpenFile(srcFile, WRITE_READ, fd);
287             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
288             char buff[] = "Copy test content for c.txt";
289             ssize_t srcFileSize = write(fd, buff, sizeof(buff));
290             EXPECT_EQ(srcFileSize, sizeof(buff));
291             close(fd);
292 
293             Uri destDir("");
294             result = fileAccessHelper->Mkdir(parentUri, "Copy_0004_dest", destDir);
295             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
296             Uri existFile("");
297             result = fileAccessHelper->CreateFile(destDir, "c.txt", existFile);
298             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
299 
300             std::vector<Result> copyResult;
301             result = fileAccessHelper->Copy(srcFile, destDir, copyResult, false);
302             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
303             EXPECT_EQ(copyResult.size(), 1);
304 
305             result = fileAccessHelper->OpenFile(existFile, WRITE_READ, fd);
306             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
307             ssize_t destFileSize = read(fd, buff, sizeof(buff));
308             EXPECT_EQ(destFileSize, 0);
309             close(fd);
310 
311             result = fileAccessHelper->Delete(srcDir);
312             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
313             result = fileAccessHelper->Delete(destDir);
314             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
315         }
316     } catch (...) {
317         GTEST_LOG_(ERROR) << "external_file_access_Copy_0004 occurs an exception.";
318     }
319     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0004";
320 }
321 
322 /**
323  * @tc.number: user_file_service_external_file_access_Copy_0005
324  * @tc.name: external_file_access_Copy_0005
325  * @tc.desc: Test function of Copy interface, copy a file with the same name and no force argument
326  * @tc.size: MEDIUM
327  * @tc.type: FUNC
328  * @tc.level Level 1
329  * @tc.require: I7QXVD
330  */
331 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0005, testing::ext::TestSize.Level1)
332 {
333     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
334     EXPECT_NE(fileAccessHelper, nullptr);
335     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0005";
336     try {
337         vector<RootInfo> info;
338         int result = fileAccessHelper->GetRoots(info);
339         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
340         for (size_t i = 0; i < info.size(); i++) {
341             Uri parentUri(info[i].uri);
342             Uri srcDir("");
343             result = fileAccessHelper->Mkdir(parentUri, "Copy_0005_src", srcDir);
344             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
345             Uri srcFile("");
346             result = fileAccessHelper->CreateFile(srcDir, "d.txt", srcFile);
347             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
348             int fd = -1;
349             result = fileAccessHelper->OpenFile(srcFile, WRITE_READ, fd);
350             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
351             char buff[] = "Copy test content for d.txt";
352             ssize_t srcFileSize = write(fd, buff, sizeof(buff));
353             EXPECT_EQ(srcFileSize, sizeof(buff));
354             close(fd);
355 
356             Uri destDir("");
357             result = fileAccessHelper->Mkdir(parentUri, "Copy_0005_dest", destDir);
358             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
359             Uri existFile("");
360             result = fileAccessHelper->CreateFile(destDir, "d.txt", existFile);
361             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
362 
363             std::vector<Result> copyResult;
364             result = fileAccessHelper->Copy(srcFile, destDir, copyResult);
365             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
366             EXPECT_GT(copyResult.size(), 0);
367 
368             result = fileAccessHelper->OpenFile(existFile, WRITE_READ, fd);
369             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
370             ssize_t destFileSize = read(fd, buff, sizeof(buff));
371             EXPECT_EQ(destFileSize, 0);
372             close(fd);
373 
374             result = fileAccessHelper->Delete(srcDir);
375             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
376             result = fileAccessHelper->Delete(destDir);
377             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
378         }
379     } catch (...) {
380         GTEST_LOG_(ERROR) << "external_file_access_Copy_0005 occurs an exception.";
381     }
382     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0005";
383 }
384 
ReadyToCopy06(Uri & parentUri,Uri & srcDir,const char * buff,int len,shared_ptr<FileAccessHelper> fileAccessHelper)385 static int ReadyToCopy06(Uri& parentUri, Uri& srcDir, const char* buff, int len,
386     shared_ptr<FileAccessHelper> fileAccessHelper)
387 {
388     int result = fileAccessHelper->Mkdir(parentUri, "Copy_0006_src", srcDir);
389     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
390     Uri aFileUri("");
391     result = fileAccessHelper->CreateFile(srcDir, "a.txt", aFileUri);
392     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
393     Uri bFileUri("");
394     result = fileAccessHelper->CreateFile(srcDir, "b.txt", bFileUri);
395     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
396     int fd = -1;
397     result = fileAccessHelper->OpenFile(bFileUri, WRITE_READ, fd);
398     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
399 
400     ssize_t srcFileSize = write(fd, buff, len);
401     EXPECT_EQ(srcFileSize, len);
402     close(fd);
403     return srcFileSize;
404 }
405 
406 /**
407  * @tc.number: user_file_service_external_file_access_Copy_0006
408  * @tc.name: external_file_access_Copy_0006
409  * @tc.desc: Test function of Copy interface, copy a directory with the same name and argument of force is true
410  * @tc.size: MEDIUM
411  * @tc.type: FUNC
412  * @tc.level Level 1
413  * @tc.require: I7QXVD
414  */
415 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0006, testing::ext::TestSize.Level1)
416 {
417     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
418     EXPECT_NE(fileAccessHelper, nullptr);
419     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0006";
420     try {
421         vector<RootInfo> info;
422         int result = fileAccessHelper->GetRoots(info);
423         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
424         char buff[] = "Copy test content for b.txt";
425         for (size_t i = 0; i < info.size(); i++) {
426             Uri srcDir("");
427             Uri parentUri(info[i].uri);
428             int srcFileSize = ReadyToCopy06(parentUri, srcDir, buff, sizeof(buff), fileAccessHelper);
429 
430             Uri bFileUri("");
431             Uri destDir("");
432             result = fileAccessHelper->Mkdir(parentUri, "Copy_0006_dest", destDir);
433             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
434             Uri destSrcDir("");
435             result = fileAccessHelper->Mkdir(destDir, "Copy_0006_src", destSrcDir);
436             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
437             result = fileAccessHelper->CreateFile(destSrcDir, "b.txt", bFileUri);
438             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
439 
440             std::vector<Result> copyResult;
441             result = fileAccessHelper->Copy(srcDir, destDir, copyResult, true);
442             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
443             EXPECT_EQ(copyResult.size(), 0);
444 
445             int fd = -1;
446             result = fileAccessHelper->OpenFile(bFileUri, WRITE_READ, fd);
447             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
448             ssize_t destFileSize = read(fd, buff, sizeof(buff));
449             EXPECT_EQ(destFileSize, srcFileSize);
450             close(fd);
451 
452             result = fileAccessHelper->Delete(srcDir);
453             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
454             result = fileAccessHelper->Delete(destDir);
455             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
456         }
457     } catch (...) {
458         GTEST_LOG_(ERROR) << "external_file_access_Copy_0006 occurs an exception.";
459     }
460     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0006";
461 }
462 
463 /**
464  * @tc.number: user_file_service_external_file_access_Copy_0007
465  * @tc.name: external_file_access_Copy_0007
466  * @tc.desc: Test function of Copy interface, copy a directory with the same name and argument of force is false
467  * @tc.size: MEDIUM
468  * @tc.type: FUNC
469  * @tc.level Level 1
470  * @tc.require: I7QXVD
471  */
472 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0007, testing::ext::TestSize.Level1)
473 {
474     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
475     EXPECT_NE(fileAccessHelper, nullptr);
476     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0007";
477     try {
478         vector<RootInfo> info;
479         int result = fileAccessHelper->GetRoots(info);
480         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
481         for (size_t i = 0; i < info.size(); i++) {
482             Uri parentUri(info[i].uri);
483             Uri srcDir("");
484             result = fileAccessHelper->Mkdir(parentUri, "Copy_0007_src", srcDir);
485             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
486             Uri bFileUri("");
487             result = fileAccessHelper->CreateFile(srcDir, "a.txt", bFileUri);
488             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
489             result = fileAccessHelper->CreateFile(srcDir, "b.txt", bFileUri);
490             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
491             int fd = -1;
492             result = fileAccessHelper->OpenFile(bFileUri, WRITE_READ, fd);
493             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
494             char buff[] = "Copy test content for b.txt";
495             ssize_t bFileSize = write(fd, buff, sizeof(buff));
496             EXPECT_EQ(bFileSize, sizeof(buff));
497             close(fd);
498 
499             Uri destDir("");
500             result = fileAccessHelper->Mkdir(parentUri, "Copy_0007_dest", destDir);
501             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
502             Uri destSrcDir("");
503             result = fileAccessHelper->Mkdir(destDir, "Copy_0007_src", destSrcDir);
504             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
505             Uri destFileUri("");
506             result = fileAccessHelper->CreateFile(destSrcDir, "b.txt", destFileUri);
507             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
508 
509             std::vector<Result> copyResult;
510             result = fileAccessHelper->Copy(srcDir, destDir, copyResult, false);
511             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
512             EXPECT_EQ(copyResult.size(), 1);
513             EXPECT_EQ(copyResult[0].sourceUri, bFileUri.ToString());
514             EXPECT_EQ(copyResult[0].destUri, destFileUri.ToString());
515 
516             result = fileAccessHelper->Delete(srcDir);
517             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
518             result = fileAccessHelper->Delete(destDir);
519             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
520         }
521     } catch (...) {
522         GTEST_LOG_(ERROR) << "external_file_access_Copy_0007 occurs an exception.";
523     }
524     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0007";
525 }
526 
527 /**
528  * @tc.number: user_file_service_external_file_access_Copy_0008
529  * @tc.name: external_file_access_Copy_0008
530  * @tc.desc: Test function of Copy interface, copy a directory with the same name and no force argument
531  * @tc.size: MEDIUM
532  * @tc.type: FUNC
533  * @tc.level Level 1
534  * @tc.require: I7QXVD
535  */
536 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0008, testing::ext::TestSize.Level1)
537 {
538     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
539     EXPECT_NE(fileAccessHelper, nullptr);
540     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0008";
541     try {
542         vector<RootInfo> info;
543         int result = fileAccessHelper->GetRoots(info);
544         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
545         for (size_t i = 0; i < info.size(); i++) {
546             Uri parentUri(info[i].uri);
547             Uri srcDir("");
548             result = fileAccessHelper->Mkdir(parentUri, "Copy_0008_src", srcDir);
549             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
550             Uri aFileUri("");
551             result = fileAccessHelper->CreateFile(srcDir, "a.txt", aFileUri);
552             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
553             Uri bFileUri("");
554             result = fileAccessHelper->CreateFile(srcDir, "b.txt", bFileUri);
555             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
556 
557             Uri destDir("");
558             result = fileAccessHelper->Mkdir(parentUri, "Copy_0008_dest", destDir);
559             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
560             Uri destSrcDir("");
561             result = fileAccessHelper->Mkdir(destDir, "Copy_0008_src", destSrcDir);
562             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
563             result = fileAccessHelper->CreateFile(destSrcDir, "b.txt", bFileUri);
564             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
565 
566             std::vector<Result> copyResult;
567             result = fileAccessHelper->Copy(srcDir, destDir, copyResult);
568             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
569             EXPECT_EQ(copyResult.size(), 1);
570 
571             result = fileAccessHelper->Delete(srcDir);
572             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
573             result = fileAccessHelper->Delete(destDir);
574             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
575         }
576     } catch (...) {
577         GTEST_LOG_(ERROR) << "external_file_access_Copy_0008 occurs an exception.";
578     }
579     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0008";
580 }
581 
ReadyToCopy09(Uri & parentUri,Uri & srcDir,const char * buff,int len,shared_ptr<FileAccessHelper> fileAccessHelper)582 static int ReadyToCopy09(Uri& parentUri, Uri& srcDir, const char* buff, int len,
583     shared_ptr<FileAccessHelper> fileAccessHelper)
584 {
585     int result = fileAccessHelper->Mkdir(parentUri, "Copy_0009_src", srcDir);
586     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
587     Uri aFileUri("");
588     result = fileAccessHelper->CreateFile(srcDir, "c.txt", aFileUri);
589     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
590     Uri bFileUri("");
591     result = fileAccessHelper->CreateFile(srcDir, "d.txt", bFileUri);
592     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
593     int fd = -1;
594     result = fileAccessHelper->OpenFile(bFileUri, WRITE_READ, fd);
595     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
596     ssize_t srcFileSize = write(fd, buff, len);
597     EXPECT_EQ(srcFileSize, len);
598     close(fd);
599 
600     return srcFileSize;
601 }
602 
603 /**
604  * @tc.number: user_file_service_external_file_access_Copy_0009
605  * @tc.name: external_file_access_Copy_0009
606  * @tc.desc: Test function of Copy interface, copy directory and file between different disks
607  * @tc.size: MEDIUM
608  * @tc.type: FUNC
609  * @tc.level Level 1
610  * @tc.require: I7QXVD
611  */
612 HWTEST_F(FileExtensionHelperTest, external_file_access_Copy_0009, testing::ext::TestSize.Level1)
613 {
614     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
615     EXPECT_NE(fileAccessHelper, nullptr);
616     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Copy_0009";
617     try {
618         vector<RootInfo> info;
619         int result = fileAccessHelper->GetRoots(info);
620         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
621         char buff[] = "Copy test content for b.txt";
622         for (size_t i = 0; i < info.size(); i++) {
623             Uri parentUri(info[i].uri);
624             Uri srcDir("");
625             int srcFileSize = ReadyToCopy09(parentUri, srcDir, buff, sizeof(buff), fileAccessHelper);
626 
627             for (size_t j = i + 1; j < info.size(); j++) {
628                 Uri targetUri(info[j].uri);
629                 Uri destDir("");
630                 Uri bFileUri("");
631                 result = fileAccessHelper->Mkdir(targetUri, "Copy_0009_dest", destDir);
632                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
633                 Uri destSrcDir("");
634                 result = fileAccessHelper->Mkdir(destDir, "Copy_0009_src", destSrcDir);
635                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
636                 result = fileAccessHelper->CreateFile(destSrcDir, "d.txt", bFileUri);
637                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
638 
639                 std::vector<Result> copyResult;
640                 result = fileAccessHelper->Copy(srcDir, destDir, copyResult, true);
641                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
642                 EXPECT_EQ(copyResult.size(), 0);
643 
644                 int fd = -1;
645                 result = fileAccessHelper->OpenFile(bFileUri, WRITE_READ, fd);
646                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
647                 ssize_t destFileSize = read(fd, buff, sizeof(buff));
648                 EXPECT_EQ(destFileSize, srcFileSize);
649                 close(fd);
650 
651                 result = fileAccessHelper->Delete(destDir);
652                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
653             }
654             result = fileAccessHelper->Delete(srcDir);
655             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
656         }
657     } catch (...) {
658         GTEST_LOG_(ERROR) << "external_file_access_Copy_0009 occurs an exception.";
659     }
660     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Copy_0009";
661 }
662 
663 /**
664  * @tc.number: user_file_service_external_file_access_Rename_0000
665  * @tc.name: external_file_access_Rename_0000
666  * @tc.desc: Test function of Rename interface for SUCCESS which rename file.
667  * @tc.size: MEDIUM
668  * @tc.type: FUNC
669  * @tc.level Level 1
670  * @tc.require: SR000H0387
671  */
672 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0000, testing::ext::TestSize.Level1)
673 {
674     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
675     EXPECT_NE(fileAccessHelper, nullptr);
676     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0000";
677     try {
678         vector<RootInfo> info;
679         int result = fileAccessHelper->GetRoots(info);
680         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
681         for (size_t i = 0; i < info.size(); i++) {
682             Uri parentUri(info[i].uri);
683             Uri newDirUriTest("");
684             result = fileAccessHelper->Mkdir(parentUri, "test7", newDirUriTest);
685             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
686             Uri testUri("");
687             result = fileAccessHelper->CreateFile(newDirUriTest, "test.txt", testUri);
688             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
689             Uri renameUri("");
690             result = fileAccessHelper->Rename(testUri, "test2.txt", renameUri);
691             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
692             GTEST_LOG_(INFO) << "Rename_0000 result:" << result;
693             result = fileAccessHelper->Delete(newDirUriTest);
694             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
695         }
696     } catch (...) {
697         GTEST_LOG_(ERROR) << "external_file_access_Rename_0000 occurs an exception.";
698     }
699     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0000";
700 }
701 
702 /**
703  * @tc.number: user_file_service_external_file_access_Rename_0001
704  * @tc.name: external_file_access_Rename_0001
705  * @tc.desc: Test function of Rename interface for SUCCESS which rename folder.
706  * @tc.size: MEDIUM
707  * @tc.type: FUNC
708  * @tc.level Level 1
709  * @tc.require: SR000H0387
710  */
711 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0001, testing::ext::TestSize.Level1)
712 {
713     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
714     EXPECT_NE(fileAccessHelper, nullptr);
715     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0001";
716     try {
717         vector<RootInfo> info;
718         int result = fileAccessHelper->GetRoots(info);
719         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
720         for (size_t i = 0; i < info.size(); i++) {
721             Uri parentUri(info[i].uri);
722             Uri newDirUriTest("");
723             result = fileAccessHelper->Mkdir(parentUri, "test8", newDirUriTest);
724             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
725             Uri renameUri("");
726             result = fileAccessHelper->Rename(newDirUriTest, "testRename", renameUri);
727             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
728             GTEST_LOG_(INFO) << "Rename_0001 result:" << result;
729             result = fileAccessHelper->Delete(renameUri);
730             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
731         }
732     } catch (...) {
733         GTEST_LOG_(ERROR) << "external_file_access_Rename_0001 occurs an exception.";
734     }
735     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0001";
736 }
737 
738 /**
739  * @tc.number: user_file_service_external_file_access_Rename_0002
740  * @tc.name: external_file_access_Rename_0002
741  * @tc.desc: Test function of Rename interface for ERROR which sourceFileUri is null.
742  * @tc.size: MEDIUM
743  * @tc.type: FUNC
744  * @tc.level Level 1
745  * @tc.require: SR000H0387
746  */
747 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0002, testing::ext::TestSize.Level1)
748 {
749     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
750     EXPECT_NE(fileAccessHelper, nullptr);
751     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0002";
752     try {
753         Uri renameUri("");
754         Uri sourceFileUri("");
755         int result = fileAccessHelper->Rename(sourceFileUri, "testRename.txt", renameUri);
756         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
757         GTEST_LOG_(INFO) << "Rename_0002 result:" << result;
758     } catch (...) {
759         GTEST_LOG_(ERROR) << "external_file_access_Rename_0002 occurs an exception.";
760     }
761     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0002";
762 }
763 
764 /**
765  * @tc.number: user_file_service_external_file_access_Rename_0003
766  * @tc.name: external_file_access_Rename_0003
767  * @tc.desc: Test function of Rename interface for ERROR which sourceFileUri is absolute path.
768  * @tc.size: MEDIUM
769  * @tc.type: FUNC
770  * @tc.level Level 1
771  * @tc.require: SR000H0387
772  */
773 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0003, testing::ext::TestSize.Level1)
774 {
775     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
776     EXPECT_NE(fileAccessHelper, nullptr);
777     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0003";
778     try {
779         vector<RootInfo> info;
780         int result = fileAccessHelper->GetRoots(info);
781         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
782         for (size_t i = 0; i < info.size(); i++) {
783             Uri parentUri(info[i].uri);
784             Uri newDirUriTest("");
785             result = fileAccessHelper->Mkdir(parentUri, "test9", newDirUriTest);
786             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
787             Uri testUri("");
788             result = fileAccessHelper->CreateFile(newDirUriTest, "test.txt", testUri);
789             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
790             Uri renameUri("");
791             Uri sourceFileUri("storage/media/100/local/files/Download/test9/test.txt");
792             result = fileAccessHelper->Rename(sourceFileUri, "testRename.txt", renameUri);
793             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
794             GTEST_LOG_(INFO) << "Rename_0003 result:" << result;
795             result = fileAccessHelper->Delete(newDirUriTest);
796             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
797         }
798     } catch (...) {
799         GTEST_LOG_(ERROR) << "external_file_access_Rename_0003 occurs an exception.";
800     }
801     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0003";
802 }
803 
804 /**
805  * @tc.number: user_file_service_external_file_access_Rename_0004
806  * @tc.name: external_file_access_Rename_0004
807  * @tc.desc: Test function of Rename interface for ERROR which sourceFileUri is special symbols.
808  * @tc.size: MEDIUM
809  * @tc.type: FUNC
810  * @tc.level Level 1
811  * @tc.require: SR000H0387
812  */
813 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0004, testing::ext::TestSize.Level1)
814 {
815     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
816     EXPECT_NE(fileAccessHelper, nullptr);
817     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0004";
818     try {
819         Uri renameUri("");
820         Uri sourceFileUri("~!@#$%^&*()_");
821         int result = fileAccessHelper->Rename(sourceFileUri, "testRename.txt", renameUri);
822         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
823         GTEST_LOG_(INFO) << "Rename_0004 result:" << result;
824     } catch (...) {
825         GTEST_LOG_(ERROR) << "external_file_access_Rename_0004 occurs an exception.";
826     }
827     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0004";
828 }
829 
830 /**
831  * @tc.number: user_file_service_external_file_access_Rename_0005
832  * @tc.name: external_file_access_Rename_0005
833  * @tc.desc: Test function of Rename interface for ERROR which displayName is null.
834  * @tc.size: MEDIUM
835  * @tc.type: FUNC
836  * @tc.level Level 1
837  * @tc.require: SR000H0387
838  */
839 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0005, testing::ext::TestSize.Level1)
840 {
841     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
842     EXPECT_NE(fileAccessHelper, nullptr);
843     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0005";
844     try {
845         vector<RootInfo> info;
846         int result = fileAccessHelper->GetRoots(info);
847         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
848         for (size_t i = 0; i < info.size(); i++) {
849             Uri parentUri(info[i].uri);
850             Uri newDirUriTest("");
851             result = fileAccessHelper->Mkdir(parentUri, "test10", newDirUriTest);
852             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
853             Uri testUri("");
854             result = fileAccessHelper->CreateFile(newDirUriTest, "test.txt", testUri);
855             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
856             Uri renameUri("");
857             result = fileAccessHelper->Rename(testUri, "", renameUri);
858             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
859             GTEST_LOG_(INFO) << "Rename_0005 result:" << result;
860             result = fileAccessHelper->Delete(newDirUriTest);
861             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
862         }
863     } catch (...) {
864         GTEST_LOG_(ERROR) << "external_file_access_Rename_0005 occurs an exception.";
865     }
866     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0005";
867 }
868 
RenameTdd(shared_ptr<FileAccessHelper> fahs,Uri sourceFile,std::string displayName,Uri newFile)869 static void RenameTdd(shared_ptr<FileAccessHelper> fahs, Uri sourceFile, std::string displayName, Uri newFile)
870 {
871     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
872     EXPECT_NE(fileAccessHelper, nullptr);
873     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_RenameTdd";
874     int ret = fahs->Rename(sourceFile, displayName, newFile);
875     if (ret != OHOS::FileAccessFwk::ERR_OK) {
876         GTEST_LOG_(ERROR) << "RenameTdd get result error, code:" << ret;
877         return;
878     }
879     EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK);
880     g_num++;
881     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_RenameTdd";
882 }
883 
884 /**
885  * @tc.number: user_file_service_external_file_access_Rename_0006
886  * @tc.name: external_file_access_Rename_0006
887  * @tc.desc: Test function of Rename interface for SUCCESS which Concurrent.
888  * @tc.size: MEDIUM
889  * @tc.type: FUNC
890  * @tc.level Level 1
891  * @tc.require: SR000H0386
892  */
893 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0006, testing::ext::TestSize.Level1)
894 {
895     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
896     EXPECT_NE(fileAccessHelper, nullptr);
897     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0006";
898     try {
899         vector<RootInfo> info;
900         int result = fileAccessHelper->GetRoots(info);
901         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
902         for (size_t i = 0; i < info.size(); i++) {
903             Uri parentUri(info[i].uri);
904             Uri newDirUriTest("");
905             result = fileAccessHelper->Mkdir(parentUri, "test11", newDirUriTest);
906             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
907             Uri testUri("");
908             std::string displayName1 = "test1.txt";
909             std::string displayName2 = "test2.txt";
910             Uri renameUri("");
911             result = fileAccessHelper->CreateFile(newDirUriTest, displayName1, testUri);
912             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
913             g_num = 0;
914             for (int j = 0; j < INIT_THREADS_NUMBER; j++) {
915                 std::thread execthread(RenameTdd, fileAccessHelper, testUri, displayName2, renameUri);
916                 execthread.join();
917             }
918             EXPECT_EQ(g_num, ACTUAL_SUCCESS_THREADS_NUMBER);
919             result = fileAccessHelper->Delete(newDirUriTest);
920             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
921         }
922     } catch (...) {
923         GTEST_LOG_(ERROR) << "external_file_access_Rename_0006 occurs an exception.";
924     }
925     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0006";
926 }
927 
928 /**
929  * @tc.number: user_file_service_external_file_access_Rename_0007
930  * @tc.name: external_file_access_Rename_0007
931  * @tc.desc: Test function of Rename interface for ERROR because of GetProxyByUri failed.
932  * @tc.size: MEDIUM
933  * @tc.type: FUNC
934  * @tc.level Level 1
935  * @tc.require: SR000H0387
936  */
937 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0007, testing::ext::TestSize.Level1)
938 {
939     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
940     EXPECT_NE(fileAccessHelper, nullptr);
941     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0007";
942     try {
943         vector<RootInfo> info;
944         int result = fileAccessHelper->GetRoots(info);
945         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
946         for (size_t i = 0; i < info.size(); i++) {
947             Uri parentUri(info[i].uri);
948             Uri newDirUriTest("");
949             result = fileAccessHelper->Mkdir(parentUri, "test12", newDirUriTest);
950             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
951 
952             std::string str = newDirUriTest.ToString();
953             if (ReplaceBundleName(str, "ohos.com.NotExistBundleName")) {
954                 Uri testUri(str);
955                 Uri renameUri("");
956                 result = fileAccessHelper->Rename(testUri, "test.txt", renameUri);
957                 EXPECT_EQ(result, OHOS::FileAccessFwk::E_IPCS);
958                 GTEST_LOG_(INFO) << "Rename_0007 result:" << result;
959                 result = fileAccessHelper->Delete(newDirUriTest);
960                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
961             } else {
962                 EXPECT_TRUE(false);
963             }
964         }
965     } catch (...) {
966         GTEST_LOG_(ERROR) << "external_file_access_Rename_0007 occurs an exception.";
967     }
968     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0007";
969 }
970 
971 /**
972  * @tc.number: user_file_service_external_file_access_Rename_0008
973  * @tc.name: external_file_access_Rename_0008
974  * @tc.desc: Test function of Rename interface for SUCCESS which rename file, the display name is chinese.
975  * @tc.size: MEDIUM
976  * @tc.type: FUNC
977  * @tc.level Level 1
978  * @tc.require: I70SX9
979  */
980 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0008, testing::ext::TestSize.Level1)
981 {
982     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
983     EXPECT_NE(fileAccessHelper, nullptr);
984     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0008";
985     try {
986         vector<RootInfo> info;
987         int result = fileAccessHelper->GetRoots(info);
988         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
989         for (size_t i = 0; i < info.size(); i++) {
990             Uri parentUri(info[i].uri);
991             Uri newDirUriTest("");
992             result = fileAccessHelper->Mkdir(parentUri, "测试目录2", newDirUriTest);
993             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
994             EXPECT_EQ(newDirUriTest.ToString().find("测试目录2"), std::string::npos);
995             Uri testUri("");
996             result = fileAccessHelper->CreateFile(newDirUriTest, "test.txt", testUri);
997             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
998             Uri renameUri("");
999             result = fileAccessHelper->Rename(testUri, "测试文件.txt", renameUri);
1000             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1001             EXPECT_EQ(renameUri.ToString().find("测试文件.txt"), std::string::npos);
1002             GTEST_LOG_(INFO) << "Rename_0008 result:" << result;
1003             result = fileAccessHelper->Delete(newDirUriTest);
1004             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1005         }
1006     } catch (...) {
1007         GTEST_LOG_(ERROR) << "external_file_access_Rename_0008 occurs an exception.";
1008     }
1009     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0008";
1010 }
1011 
1012 /**
1013  * @tc.number: user_file_service_external_file_access_Rename_0009
1014  * @tc.name: external_file_access_Rename_0009
1015  * @tc.desc: Test function of Rename interface for SUCCESS which rename folder, the display name is chinese.
1016  * @tc.size: MEDIUM
1017  * @tc.type: FUNC
1018  * @tc.level Level 1
1019  * @tc.require: I70SX9
1020  */
1021 HWTEST_F(FileExtensionHelperTest, external_file_access_Rename_0009, testing::ext::TestSize.Level1)
1022 {
1023     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1024     EXPECT_NE(fileAccessHelper, nullptr);
1025     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Rename_0009";
1026     try {
1027         vector<RootInfo> info;
1028         int result = fileAccessHelper->GetRoots(info);
1029         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1030         for (size_t i = 0; i < info.size(); i++) {
1031             Uri parentUri(info[i].uri);
1032             Uri newDirUriTest("");
1033             result = fileAccessHelper->Mkdir(parentUri, "test13", newDirUriTest);
1034             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1035             Uri testUri("");
1036             result = fileAccessHelper->CreateFile(newDirUriTest, "test.txt", testUri);
1037             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1038             Uri renameUri("");
1039             result = fileAccessHelper->Rename(newDirUriTest, "重命名目录", renameUri);
1040             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1041             EXPECT_EQ(renameUri.ToString().find("重命名目录"), std::string::npos);
1042             GTEST_LOG_(INFO) << "Rename_0009 result:" << result;
1043             result = fileAccessHelper->Delete(renameUri);
1044             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1045         }
1046     } catch (...) {
1047         GTEST_LOG_(ERROR) << "external_file_access_Rename_0009 occurs an exception.";
1048     }
1049     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Rename_0009";
1050 }
1051 
1052 /**
1053  * @tc.number: user_file_service_external_file_access_ListFile_0000
1054  * @tc.name: external_file_access_ListFile_0000
1055  * @tc.desc: Test function of ListFile interface for SUCCESS.
1056  * @tc.size: MEDIUM
1057  * @tc.type: FUNC
1058  * @tc.level Level 1
1059  * @tc.require: SR000H0387
1060  */
1061 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0000, testing::ext::TestSize.Level1)
1062 {
1063     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1064     EXPECT_NE(fileAccessHelper, nullptr);
1065     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0000";
1066     try {
1067         vector<RootInfo> info;
1068         int result = fileAccessHelper->GetRoots(info);
1069         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1070         for (size_t i = 0; i < info.size(); i++) {
1071             Uri parentUri(info[i].uri);
1072             Uri newDirUriTest("");
1073             result = fileAccessHelper->Mkdir(parentUri, "test14", newDirUriTest);
1074             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1075             Uri testUri("");
1076             result = fileAccessHelper->CreateFile(newDirUriTest, "external_file_access_ListFile_0000.txt", testUri);
1077             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1078             FileInfo fileInfo;
1079             fileInfo.uri = newDirUriTest.ToString();
1080             int64_t offset = 0;
1081             FileFilter filter;
1082             SharedMemoryInfo memInfo;
1083             result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1084                 memInfo);
1085             result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1086             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1087             EXPECT_GT(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK);
1088             result = fileAccessHelper->Delete(newDirUriTest);
1089             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1090             FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1091         }
1092     } catch (...) {
1093         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0000 occurs an exception.";
1094     }
1095     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0000";
1096 }
1097 
1098 /**
1099  * @tc.number: user_file_service_external_file_access_ListFile_0001
1100  * @tc.name: external_file_access_ListFile_0001
1101  * @tc.desc: Test function of ListFile interface for ERROR which Uri is nullptr.
1102  * @tc.size: MEDIUM
1103  * @tc.type: FUNC
1104  * @tc.level Level 1
1105  * @tc.require: SR000H0387
1106  */
1107 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0001, testing::ext::TestSize.Level1)
1108 {
1109     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1110     EXPECT_NE(fileAccessHelper, nullptr);
1111     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0001";
1112     try {
1113         Uri sourceFileUri("");
1114         FileInfo fileInfo;
1115         fileInfo.uri = sourceFileUri.ToString();
1116         int64_t offset = 0;
1117         FileFilter filter;
1118         SharedMemoryInfo memInfo;
1119         int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1120                 memInfo);
1121         result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1122         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
1123         EXPECT_EQ(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK);
1124         FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1125     } catch (...) {
1126         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0001 occurs an exception.";
1127     }
1128     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0001";
1129 }
1130 
1131 /**
1132  * @tc.number: user_file_service_external_file_access_ListFile_0002
1133  * @tc.name: external_file_access_ListFile_0002
1134  * @tc.desc: Test function of ListFile interface for ERROR which sourceFileUri is absolute path.
1135  * @tc.size: MEDIUM
1136  * @tc.type: FUNC
1137  * @tc.level Level 1
1138  * @tc.require: SR000H0387
1139  */
1140 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0002, testing::ext::TestSize.Level1)
1141 {
1142     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1143     EXPECT_NE(fileAccessHelper, nullptr);
1144     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0002";
1145     try {
1146         vector<RootInfo> info;
1147         int result = fileAccessHelper->GetRoots(info);
1148         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1149         for (size_t i = 0; i < info.size(); i++) {
1150             Uri parentUri(info[i].uri);
1151             Uri newDirUriTest("");
1152             result = fileAccessHelper->Mkdir(parentUri, "test15", newDirUriTest);
1153             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1154             Uri testUri("");
1155             result = fileAccessHelper->CreateFile(newDirUriTest, "test.txt", testUri);
1156             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1157             Uri sourceFileUri("storage/media/100/local/files/Download/test15/test.txt");
1158             FileInfo fileInfo;
1159             fileInfo.uri = sourceFileUri.ToString();
1160             Uri sourceFile(fileInfo.uri);
1161             int64_t offset = 0;
1162             FileFilter filter;
1163             SharedMemoryInfo memInfo;
1164             int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List",
1165                 DEFAULT_CAPACITY_200KB, memInfo);
1166             result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1167             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
1168             EXPECT_EQ(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK);
1169             result = fileAccessHelper->Delete(newDirUriTest);
1170             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1171             FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1172         }
1173     } catch (...) {
1174         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0002 occurs an exception.";
1175     }
1176     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0002";
1177 }
1178 
1179 /**
1180  * @tc.number: user_file_service_external_file_access_ListFile_0003
1181  * @tc.name: external_file_access_ListFile_0003
1182  * @tc.desc: Test function of ListFile interface for ERROR which sourceFileUri is special symbols.
1183  * @tc.size: MEDIUM
1184  * @tc.type: FUNC
1185  * @tc.level Level 1
1186  * @tc.require: SR000H0387
1187  */
1188 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0003, testing::ext::TestSize.Level1)
1189 {
1190     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1191     EXPECT_NE(fileAccessHelper, nullptr);
1192     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0003";
1193     try {
1194         Uri sourceFileUri("~!@#$%^&*()_");
1195         FileInfo fileInfo;
1196         fileInfo.uri = sourceFileUri.ToString();
1197         Uri sourceFile(fileInfo.uri);
1198         int64_t offset = 0;
1199         FileFilter filter;
1200         SharedMemoryInfo memInfo;
1201         int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1202             memInfo);
1203         result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1204         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
1205         EXPECT_EQ(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK);
1206         FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1207     } catch (...) {
1208         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0003 occurs an exception.";
1209     }
1210     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0003";
1211 }
1212 
ListFileTdd(FileInfo fileInfo,int offset,FileFilter filter,SharedMemoryInfo & memInfo)1213 static void ListFileTdd(FileInfo fileInfo, int offset, FileFilter filter,
1214     SharedMemoryInfo &memInfo)
1215 {
1216     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1217     EXPECT_NE(fileAccessHelper, nullptr);
1218     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFileTdd";
1219     int ret = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1220     if (ret != OHOS::FileAccessFwk::ERR_OK) {
1221         GTEST_LOG_(ERROR) << "ListFile get result error, code:" << ret;
1222         return;
1223     }
1224     EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK);
1225     g_num++;
1226     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFileTdd";
1227 }
1228 
1229 /**
1230  * @tc.number: user_file_service_external_file_access_ListFile_0004
1231  * @tc.name: external_file_access_ListFile_0004
1232  * @tc.desc: Test function of ListFile interface for SUCCESS which Concurrent.
1233  * @tc.size: MEDIUM
1234  * @tc.type: FUNC
1235  * @tc.level Level 1
1236  * @tc.require: SR000H0386
1237  */
1238 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0004, testing::ext::TestSize.Level1)
1239 {
1240     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1241     EXPECT_NE(fileAccessHelper, nullptr);
1242     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0004";
1243     try {
1244         vector<RootInfo> info;
1245         int result = fileAccessHelper->GetRoots(info);
1246         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1247         for (size_t i = 0; i < info.size(); i++) {
1248             Uri parentUri(info[i].uri);
1249             Uri newDirUriTest("");
1250             result = fileAccessHelper->Mkdir(parentUri, "test16", newDirUriTest);
1251             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1252             Uri testUri("");
1253             result = fileAccessHelper->CreateFile(newDirUriTest, "external_file_access_ListFile_0004.txt", testUri);
1254             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1255             FileInfo fileInfo;
1256             fileInfo.uri = newDirUriTest.ToString();
1257             int offset = 0;
1258             FileFilter filter;
1259             g_num = 0;
1260             SharedMemoryInfo memInfo;
1261             result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1262                 memInfo);
1263             for (int j = 0; j < INIT_THREADS_NUMBER; j++) {
1264                 std::thread execthread(ListFileTdd, fileInfo, offset, filter, std::ref(memInfo));
1265                 execthread.join();
1266             }
1267             EXPECT_EQ(g_num, INIT_THREADS_NUMBER);
1268             result = fileAccessHelper->Delete(newDirUriTest);
1269             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1270             FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1271         }
1272     } catch (...) {
1273         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0004 occurs an exception.";
1274     }
1275     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0004";
1276 }
1277 
1278 /**
1279  * @tc.number: user_file_service_external_file_access_ListFile_0005
1280  * @tc.name: external_file_access_ListFile_0005
1281  * @tc.desc: Test function of ListFile interface for ERROR because of GetProxyByUri failed.
1282  * @tc.size: MEDIUM
1283  * @tc.type: FUNC
1284  * @tc.level Level 1
1285  * @tc.require: SR000H0387
1286  */
1287 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0005, testing::ext::TestSize.Level1)
1288 {
1289     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1290     EXPECT_NE(fileAccessHelper, nullptr);
1291     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0005";
1292     try {
1293         vector<RootInfo> info;
1294         int result = fileAccessHelper->GetRoots(info);
1295         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1296         for (size_t i = 0; i < info.size(); i++) {
1297             Uri parentUri(info[i].uri);
1298             Uri newDirUriTest("");
1299             result = fileAccessHelper->Mkdir(parentUri, "test17", newDirUriTest);
1300             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1301             Uri testUri("");
1302             result = fileAccessHelper->CreateFile(newDirUriTest, "test.txt", testUri);
1303             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1304 
1305             std::string str = testUri.ToString();
1306             if (ReplaceBundleName(str, "ohos.com.NotExistBundleName")) {
1307                 FileInfo fileInfo;
1308                 fileInfo.uri = str;
1309                 int64_t offset = 0;
1310                 FileFilter filter;
1311                 SharedMemoryInfo memInfo;
1312                 int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List",
1313                     DEFAULT_CAPACITY_200KB, memInfo);
1314                 result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1315                 EXPECT_EQ(result, OHOS::FileAccessFwk::E_IPCS);
1316                 result = fileAccessHelper->Delete(newDirUriTest);
1317                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1318                 FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1319             } else {
1320                 EXPECT_TRUE(false);
1321             }
1322         }
1323     } catch (...) {
1324         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0005 occurs an exception.";
1325     }
1326     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0005";
1327 }
1328 
1329 /**
1330  * @tc.number: user_file_service_external_file_access_ListFile_0006
1331  * @tc.name: external_file_access_ListFile_0006
1332  * @tc.desc: Test function of ListFile interface for SUCCESS, the folder and file name is chinese.
1333  * @tc.size: MEDIUM
1334  * @tc.type: FUNC
1335  * @tc.level Level 1
1336  * @tc.require: I70SX9
1337  */
1338 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::ext::TestSize.Level1)
1339 {
1340     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1341     EXPECT_NE(fileAccessHelper, nullptr);
1342     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0006";
1343     try {
1344         vector<RootInfo> info;
1345         int result = fileAccessHelper->GetRoots(info);
1346         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1347         for (size_t i = 0; i < info.size(); i++) {
1348             Uri parentUri(info[i].uri);
1349             Uri newDirUriTest("");
1350             result = fileAccessHelper->Mkdir(parentUri, "测试目录0006", newDirUriTest);
1351             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1352             EXPECT_EQ(newDirUriTest.ToString().find("测试目录0006"), std::string::npos);
1353             Uri testUri("");
1354             result = fileAccessHelper->CreateFile(newDirUriTest, "测试文件.txt", testUri);
1355             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1356             EXPECT_EQ(testUri.ToString().find("测试文件.txt"), std::string::npos);
1357             FileInfo fileInfo;
1358             fileInfo.uri = newDirUriTest.ToString();
1359             int64_t offset = 0;
1360             FileFilter filter;
1361             SharedMemoryInfo memInfo;
1362             result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List",
1363                 DEFAULT_CAPACITY_200KB, memInfo);
1364             result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1365             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1366             EXPECT_GT(memInfo.Size(), OHOS::FileAccessFwk::ERR_OK);
1367             result = fileAccessHelper->Delete(newDirUriTest);
1368             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1369             FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1370         }
1371     } catch (...) {
1372         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0006 occurs an exception.";
1373     }
1374     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0006";
1375 }
1376 
WriteData(Uri & uri,shared_ptr<FileAccessHelper> fileAccessHelper)1377 static void WriteData(Uri &uri, shared_ptr<FileAccessHelper> fileAccessHelper)
1378 {
1379     int fd = -1;
1380     std::string buff = "extenal_file_access_test";
1381     int result = fileAccessHelper->OpenFile(uri, WRITE_READ, fd);
1382     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1383     ssize_t fileSize = write(fd, buff.c_str(), buff.size());
1384     close(fd);
1385     EXPECT_EQ(fileSize, buff.size());
1386 }
1387 
GetTime()1388 static double GetTime()
1389 {
1390     struct timespec t{};
1391     t.tv_sec = 0;
1392     t.tv_nsec = 0;
1393     clock_gettime(CLOCK_REALTIME, &t);
1394     return static_cast<double>(t.tv_sec);
1395 }
1396 
InitListFile(Uri newDirUriTest,const std::string & caseNumber,shared_ptr<FileAccessHelper> fileAccessHelper,const bool & needSleep=false)1397 static double InitListFile(Uri newDirUriTest, const std::string &caseNumber,
1398     shared_ptr<FileAccessHelper> fileAccessHelper, const bool &needSleep = false)
1399 {
1400     Uri testUri1("");
1401     int result = fileAccessHelper->CreateFile(newDirUriTest,
1402         "external_file_access_ListFile_" + caseNumber + ".txt", testUri1);
1403     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1404     Uri testUri2("");
1405     result = fileAccessHelper->CreateFile(newDirUriTest,
1406         "external_file_access_ListFile_" + caseNumber + ".docx", testUri2);
1407     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1408     Uri testUri3("");
1409     double time = GetTime();
1410     if (needSleep) {
1411         sleep(SLEEP_TIME);
1412     }
1413     result = fileAccessHelper->CreateFile(newDirUriTest,
1414         "external_file_access_ListFile_01_" + caseNumber + ".txt", testUri3);
1415     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1416     Uri testUri4("");
1417     result = fileAccessHelper->CreateFile(newDirUriTest,
1418         "external_file_access_ListFile_01_" + caseNumber +  ".docx", testUri4);
1419     WriteData(testUri4, fileAccessHelper);
1420     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1421     Uri testUri5("");
1422     result = fileAccessHelper->CreateFile(newDirUriTest,
1423         "external_file_access_ListFile_01_" + caseNumber + "_01.docx", testUri5);
1424     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1425     return time;
1426 }
1427 
ListFileFilter7(Uri newDirUriTest,shared_ptr<FileAccessHelper> fileAccessHelper)1428 static void ListFileFilter7(Uri newDirUriTest, shared_ptr<FileAccessHelper> fileAccessHelper)
1429 {
1430     FileInfo fileInfo;
1431     fileInfo.uri = newDirUriTest.ToString();
1432     int64_t offset = 4;
1433     SharedMemoryInfo memInfo;
1434     FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true);
1435     int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1436         memInfo);
1437     result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1438     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1439     EXPECT_EQ(memInfo.Size(), FILE_COUNT_1);
1440     FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1441 }
1442 
1443 /**
1444  * @tc.number: user_file_service_external_file_access_ListFile_0007
1445  * @tc.name: external_file_access_ListFile_0007
1446  * @tc.desc: Test function of ListFile for Success, filter is File Extensions.
1447  * @tc.size: MEDIUM
1448  * @tc.type: FUNC
1449  * @tc.level Level 1
1450  * @tc.require: I79CSX
1451  */
1452 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::ext::TestSize.Level1)
1453 {
1454     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1455     EXPECT_NE(fileAccessHelper, nullptr);
1456     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0007";
1457     try {
1458         vector<RootInfo> info;
1459         int result = fileAccessHelper->GetRoots(info);
1460         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1461         for (size_t i = 0; i < info.size(); i++) {
1462             Uri parentUri(info[i].uri);
1463             Uri newDirUriTest("");
1464             result = fileAccessHelper->Mkdir(parentUri, "listfile007", newDirUriTest);
1465             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1466             InitListFile(newDirUriTest, "0007", fileAccessHelper);
1467             ListFileFilter7(newDirUriTest, fileAccessHelper);
1468             result = fileAccessHelper->Delete(newDirUriTest);
1469             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1470         }
1471     } catch (...) {
1472         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0007 occurs an exception.";
1473     }
1474     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0007";
1475 }
1476 
InitListFileFolder(Uri newDirUriTest,const std::string & caseNumber,shared_ptr<FileAccessHelper> fileAccessHelper,const bool & needSleep=false)1477 static double InitListFileFolder(Uri newDirUriTest, const std::string &caseNumber,
1478     shared_ptr<FileAccessHelper> fileAccessHelper, const bool &needSleep = false)
1479 {
1480     double time = InitListFile(newDirUriTest, caseNumber, fileAccessHelper, needSleep);
1481     Uri folderUri("");
1482     int result = fileAccessHelper->Mkdir(newDirUriTest, "test" + caseNumber, folderUri);
1483     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1484     Uri testUri6("");
1485     result = fileAccessHelper->CreateFile(folderUri,
1486         "external_file_access_ListFile_01_" + caseNumber + "_02.docx", testUri6);
1487     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1488     return time;
1489 }
1490 
ShowInfo(SharedMemoryInfo & memInfo,const std::string & caseNumber)1491 static void ShowInfo(SharedMemoryInfo &memInfo, const std::string &caseNumber)
1492 {
1493     FileAccessFwk::FileInfo fileInfo;
1494     for (size_t i = 0; i < memInfo.Size(); i++) {
1495         FileAccessFwk::SharedMemoryOperation::ReadFileInfo(fileInfo, memInfo);
1496         GTEST_LOG_(INFO) << caseNumber << ", uri:" << fileInfo.uri << endl;
1497     }
1498 }
1499 
ListFileFilter8(Uri newDirUriTest,shared_ptr<FileAccessHelper> fileAccessHelper)1500 static void ListFileFilter8(Uri newDirUriTest, shared_ptr<FileAccessHelper> fileAccessHelper)
1501 {
1502     FileInfo fileInfo;
1503     fileInfo.uri = newDirUriTest.ToString();
1504     int64_t offset = 0;
1505     SharedMemoryInfo memInfo;
1506     FileFilter filter({}, {}, {}, -1, 0, false, true);
1507     int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1508         memInfo);
1509     result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1510     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1511     EXPECT_EQ(memInfo.Size(), FILE_COUNT_6);
1512     ShowInfo(memInfo, "external_file_access_ListFile_0008");
1513     FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1514 }
1515 
1516 /**
1517  * @tc.number: user_file_service_external_file_access_ListFile_0008
1518  * @tc.name: external_file_access_ListFile_0008
1519  * @tc.desc: Test function of ListFile for Success, filter is filesize >= 0
1520  * @tc.size: MEDIUM
1521  * @tc.type: FUNC
1522  * @tc.level Level 1
1523  * @tc.require: I79CSX
1524  */
1525 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0008, testing::ext::TestSize.Level1)
1526 {
1527     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1528     EXPECT_NE(fileAccessHelper, nullptr);
1529     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0008";
1530     try {
1531         vector<RootInfo> info;
1532         int result = fileAccessHelper->GetRoots(info);
1533         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1534         for (size_t i = 0; i < info.size(); i++) {
1535             Uri parentUri(info[i].uri);
1536             Uri newDirUriTest("");
1537             result = fileAccessHelper->Mkdir(parentUri, "listfile008", newDirUriTest);
1538             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1539             InitListFileFolder(newDirUriTest, "0008", fileAccessHelper);
1540             ListFileFilter8(newDirUriTest, fileAccessHelper);
1541             result = fileAccessHelper->Delete(newDirUriTest);
1542             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1543         }
1544     } catch (...) {
1545         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0008 occurs an exception.";
1546     }
1547     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0008";
1548 }
1549 
ListFileFilter9(Uri newDirUriTest,shared_ptr<FileAccessHelper> fileAccessHelper)1550 static void ListFileFilter9(Uri newDirUriTest, shared_ptr<FileAccessHelper> fileAccessHelper)
1551 {
1552     FileInfo fileInfo;
1553     fileInfo.uri = newDirUriTest.ToString();
1554     int64_t offset = 0;
1555     SharedMemoryInfo memInfo;
1556     FileFilter filter;
1557     int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1558         memInfo);
1559     result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1560     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1561     EXPECT_EQ(memInfo.Size(), FILE_COUNT_6);
1562     FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1563 }
1564 
1565 /**
1566  * @tc.number: user_file_service_external_file_access_ListFile_0009
1567  * @tc.name: external_file_access_ListFile_0009
1568  * @tc.desc: Test function of ListFile for Success, filter is offset from 0 and maxCount is 1000
1569  * @tc.size: MEDIUM
1570  * @tc.type: FUNC
1571  * @tc.level Level 1
1572  * @tc.require: I79CSX
1573  */
1574 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0009, testing::ext::TestSize.Level1)
1575 {
1576     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1577     EXPECT_NE(fileAccessHelper, nullptr);
1578     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0008";
1579     try {
1580         vector<RootInfo> info;
1581         int result = fileAccessHelper->GetRoots(info);
1582         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1583         for (size_t i = 0; i < info.size(); i++) {
1584             Uri parentUri(info[i].uri);
1585             Uri newDirUriTest("");
1586             result = fileAccessHelper->Mkdir(parentUri, "listfile009", newDirUriTest);
1587             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1588             InitListFileFolder(newDirUriTest, "0009", fileAccessHelper);
1589             ListFileFilter9(newDirUriTest, fileAccessHelper);
1590             result = fileAccessHelper->Delete(newDirUriTest);
1591             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1592         }
1593     } catch (...) {
1594         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0009 occurs an exception.";
1595     }
1596     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0009";
1597 }
1598 
ListFileFilter10(Uri newDirUriTest,const double & time,shared_ptr<FileAccessHelper> fileAccessHelper)1599 static void ListFileFilter10(Uri newDirUriTest, const double &time, shared_ptr<FileAccessHelper> fileAccessHelper)
1600 {
1601     FileInfo fileInfo;
1602     fileInfo.uri = newDirUriTest.ToString();
1603     int64_t offset = 0;
1604     SharedMemoryInfo memInfo;
1605     FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true);
1606     int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1607         memInfo);
1608     result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1609     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1610     EXPECT_EQ(memInfo.Size(), FILE_COUNT_5);
1611 
1612     FileFilter filter1({".txt", ".docx"}, {"0010.txt", "0010.docx"}, {}, -1, -1, false, true);
1613     result = fileAccessHelper->ListFile(fileInfo, offset, filter1, memInfo);
1614     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1615     EXPECT_EQ(memInfo.Size(), FILE_COUNT_4);
1616 
1617     FileFilter filter2({".txt", ".docx"}, {"0010.txt", "0010.docx"}, {}, 0, 0, false, true);
1618     result = fileAccessHelper->ListFile(fileInfo, offset, filter2, memInfo);
1619     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1620     EXPECT_EQ(memInfo.Size(), FILE_COUNT_1);
1621 
1622     FileFilter filter3({".txt", ".docx"}, {"0010.txt", "0010.docx"}, {}, -1, time, false, true);
1623     result = fileAccessHelper->ListFile(fileInfo, offset, filter3, memInfo);
1624     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1625     EXPECT_EQ(memInfo.Size(), FILE_COUNT_2);
1626 
1627     double nowTime = GetTime();
1628     FileFilter filter4({".txt", ".docx"}, {"0010.txt", "0010.docx"}, {}, -1, nowTime, false, true);
1629     result = fileAccessHelper->ListFile(fileInfo, offset, filter4, memInfo);
1630     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1631     EXPECT_EQ(memInfo.Size(), 0);
1632     FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1633 }
1634 
1635 /**
1636  * @tc.number: user_file_service_external_file_access_ListFile_0010
1637  * @tc.name: external_file_access_ListFile_0010
1638  * @tc.desc: Test function of ListFile interface for SUCCESS, filter is filename, extension, file size, modify time
1639  * @tc.size: MEDIUM
1640  * @tc.type: FUNC
1641  * @tc.level Level 1
1642  * @tc.require: I79CSX
1643  */
1644 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0010, testing::ext::TestSize.Level1)
1645 {
1646     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1647     EXPECT_NE(fileAccessHelper, nullptr);
1648     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0010";
1649     try {
1650         vector<RootInfo> info;
1651         int result = fileAccessHelper->GetRoots(info);
1652         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1653         for (size_t i = 0; i < info.size(); i++) {
1654             Uri parentUri(info[i].uri);
1655             Uri newDirUriTest("");
1656             result = fileAccessHelper->Mkdir(parentUri, "listfile0010", newDirUriTest);
1657             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1658             double time = InitListFile(newDirUriTest, "0010", fileAccessHelper, true);
1659             ListFileFilter10(newDirUriTest, time, fileAccessHelper);
1660             result = fileAccessHelper->Delete(newDirUriTest);
1661             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1662         }
1663     } catch (...) {
1664         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0010 occurs an exception.";
1665     }
1666     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0010";
1667 }
1668 
ListFileFilter11(Uri newDirUriTest,const double & time,shared_ptr<FileAccessHelper> fileAccessHelper)1669 static void ListFileFilter11(Uri newDirUriTest, const double &time, shared_ptr<FileAccessHelper> fileAccessHelper)
1670 {
1671     FileInfo fileInfo;
1672     fileInfo.uri = newDirUriTest.ToString();
1673     int64_t offset = 0;
1674     SharedMemoryInfo memInfo;
1675     int result = FileAccessFwk::SharedMemoryOperation::CreateSharedMemory("FileInfo List", DEFAULT_CAPACITY_200KB,
1676         memInfo);
1677     FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true);
1678     result = fileAccessHelper->ListFile(fileInfo, offset, filter, memInfo);
1679     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1680     EXPECT_EQ(memInfo.Size(), FILE_COUNT_6);
1681 
1682     FileFilter filter1({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, -1, false, true);
1683     result = fileAccessHelper->ListFile(fileInfo, offset, filter1, memInfo);
1684     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1685     EXPECT_EQ(memInfo.Size(), FILE_COUNT_4);
1686 
1687     FileFilter filter2({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, 0, 0, false, true);
1688     result = fileAccessHelper->ListFile(fileInfo, offset, filter2, memInfo);
1689     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1690     EXPECT_EQ(memInfo.Size(), FILE_COUNT_1);
1691 
1692     FileFilter filter3({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, time, false, true);
1693     result = fileAccessHelper->ListFile(fileInfo, offset, filter3, memInfo);
1694     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1695     EXPECT_EQ(memInfo.Size(), FILE_COUNT_2);
1696 
1697     double nowTime = GetTime();
1698     FileFilter filter4({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, nowTime, false, true);
1699     result = fileAccessHelper->ListFile(fileInfo, offset, filter4, memInfo);
1700     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1701     EXPECT_EQ(memInfo.Size(), 0);
1702     FileAccessFwk::SharedMemoryOperation::DestroySharedMemory(memInfo);
1703 }
1704 
1705 /**
1706  * @tc.number: user_file_service_external_file_access_ListFile_0011
1707  * @tc.name: external_file_access_ListFile_0011
1708  * @tc.desc: Test function of ListFile interface for SUCCESS, for filename is Chinese
1709  * @tc.size: MEDIUM
1710  * @tc.type: FUNC
1711  * @tc.level Level 1
1712  * @tc.require: I79CSX
1713  */
1714 HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0011, testing::ext::TestSize.Level1)
1715 {
1716     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1717     EXPECT_NE(fileAccessHelper, nullptr);
1718     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0011";
1719     try {
1720         vector<RootInfo> info;
1721         int result = fileAccessHelper->GetRoots(info);
1722         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1723         for (size_t i = 0; i < info.size(); i++) {
1724             Uri parentUri(info[i].uri);
1725             Uri newDirUriTest("");
1726             result = fileAccessHelper->Mkdir(parentUri, "listfile测试", newDirUriTest);
1727             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1728             double time = InitListFileFolder(newDirUriTest, "测试", fileAccessHelper, true);
1729             ListFileFilter11(newDirUriTest, time, fileAccessHelper);
1730             result = fileAccessHelper->Delete(newDirUriTest);
1731             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1732         }
1733     } catch (...) {
1734         GTEST_LOG_(ERROR) << "external_file_access_ListFile_0011 occurs an exception.";
1735     }
1736     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0011";
1737 }
1738 
InitScanFile(Uri newDirUriTest,const std::string & caseNumber,shared_ptr<FileAccessHelper> fileAccessHelper,const bool & needSleep=false)1739 static double InitScanFile(Uri newDirUriTest, const std::string &caseNumber,
1740     shared_ptr<FileAccessHelper> fileAccessHelper, const bool &needSleep = false)
1741 {
1742     Uri forlderUriTest("");
1743     int result = fileAccessHelper->Mkdir(newDirUriTest, "test" + caseNumber, forlderUriTest);
1744     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1745 
1746     Uri testUri1("");
1747     result = fileAccessHelper->CreateFile(newDirUriTest,
1748         "external_file_access_ScanFile_" + caseNumber + ".txt", testUri1);
1749     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1750     Uri testUri2("");
1751     result = fileAccessHelper->CreateFile(newDirUriTest,
1752         "external_file_access_ScanFile_" + caseNumber + ".docx", testUri2);
1753     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1754     double time = GetTime();
1755     if (needSleep) {
1756         sleep(SLEEP_TIME);
1757     }
1758     Uri testUri3("");
1759     result = fileAccessHelper->CreateFile(forlderUriTest,
1760         "external_file_access_ScanFile_01_" + caseNumber + ".txt", testUri3);
1761     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1762     Uri testUri4("");
1763     result = fileAccessHelper->CreateFile(forlderUriTest,
1764         "external_file_access_ScanFile_01_" + caseNumber + ".docx", testUri4);
1765     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1766     WriteData(testUri4, fileAccessHelper);
1767     Uri testUri5("");
1768     result = fileAccessHelper->CreateFile(forlderUriTest,
1769         "external_file_access_ScanFile_01_" + caseNumber + "_01.docx", testUri5);
1770     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1771     return time;
1772 }
1773 
ScanFileFilter0(Uri newDirUriTest,const double & time,shared_ptr<FileAccessHelper> fileAccessHelper)1774 static void ScanFileFilter0(Uri newDirUriTest, const double &time, shared_ptr<FileAccessHelper> fileAccessHelper)
1775 {
1776     FileInfo fileInfo;
1777     fileInfo.uri = newDirUriTest.ToString();
1778     int64_t offset = 0;
1779     int64_t maxCount = 1000;
1780     std::vector<FileInfo> fileInfoVec;
1781     FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true);
1782     int result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec);
1783     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1784     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5);
1785 
1786     FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true);
1787     result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec);
1788     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1789     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4);
1790 
1791     FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 0, 0, false, true);
1792     result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec);
1793     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1794     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_1);
1795 
1796     FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true);
1797     result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec);
1798     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1799     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2);
1800 
1801     double nowTime = GetTime();
1802     FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, nowTime, false, true);
1803     result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter4, fileInfoVec);
1804     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1805     EXPECT_EQ(fileInfoVec.size(), 0);
1806 }
1807 
1808 /**
1809  * @tc.number: user_file_service_external_file_access_ScanFile_0000
1810  * @tc.name: external_file_access_ScanFile_0000
1811  * @tc.desc: Test function of ScanFile interface for SUCCESS, filter is filename, extension, file size, modify time
1812  * @tc.size: MEDIUM
1813  * @tc.type: FUNC
1814  * @tc.level Level 1
1815  * @tc.require: I79CSX
1816  */
1817 HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::ext::TestSize.Level1)
1818 {
1819     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1820     EXPECT_NE(fileAccessHelper, nullptr);
1821     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0000";
1822     try {
1823         vector<RootInfo> info;
1824         int result = fileAccessHelper->GetRoots(info);
1825         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1826         for (size_t i = 0; i < info.size(); i++) {
1827             Uri parentUri(info[i].uri);
1828             Uri newDirUriTest("");
1829             result = fileAccessHelper->Mkdir(parentUri, "scanfile0000", newDirUriTest);
1830             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1831             double time = InitScanFile(newDirUriTest, "0000", fileAccessHelper, true);
1832             ScanFileFilter0(newDirUriTest, time, fileAccessHelper);
1833             result = fileAccessHelper->Delete(newDirUriTest);
1834             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1835         }
1836     } catch (...) {
1837         GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0000 occurs an exception.";
1838     }
1839     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0000";
1840 }
1841 
ScanFileFilter1(Uri newDirUriTest,shared_ptr<FileAccessHelper> fileAccessHelper)1842 static void ScanFileFilter1(Uri newDirUriTest, shared_ptr<FileAccessHelper> fileAccessHelper)
1843 {
1844     FileInfo fileInfo;
1845     fileInfo.uri = newDirUriTest.ToString();
1846     int64_t offset = 0;
1847     int64_t maxCount = 1000;
1848     std::vector<FileInfo> fileInfoVec;
1849     FileFilter filter;
1850     int result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec);
1851     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1852     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5);
1853 }
1854 
1855 /**
1856  * @tc.number: user_file_service_external_file_access_ScanFile_0001
1857  * @tc.name: external_file_access_ScanFile_0001
1858  * @tc.desc: Test function of ScanFile interface for SUCCESS, the filter is offset from 0 to maxcount
1859  * @tc.size: MEDIUM
1860  * @tc.type: FUNC
1861  * @tc.level Level 1
1862  * @tc.require: I79CSX
1863  */
1864 HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::ext::TestSize.Level1)
1865 {
1866     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1867     EXPECT_NE(fileAccessHelper, nullptr);
1868     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0001";
1869     try {
1870         vector<RootInfo> info;
1871         int result = fileAccessHelper->GetRoots(info);
1872         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1873         for (size_t i = 0; i < info.size(); i++) {
1874             Uri parentUri(info[i].uri);
1875             Uri newDirUriTest("");
1876             result = fileAccessHelper->Mkdir(parentUri, "scanfile0001", newDirUriTest);
1877             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1878             InitScanFile(newDirUriTest, "0001", fileAccessHelper);
1879             ScanFileFilter1(newDirUriTest, fileAccessHelper);
1880             result = fileAccessHelper->Delete(newDirUriTest);
1881             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1882         }
1883     } catch (...) {
1884         GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0001 occurs an exception.";
1885     }
1886     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0001";
1887 }
1888 
ScanFileFilter2(Uri newDirUriTest,shared_ptr<FileAccessHelper> fileAccessHelper)1889 static void ScanFileFilter2(Uri newDirUriTest, shared_ptr<FileAccessHelper> fileAccessHelper)
1890 {
1891     FileInfo fileInfo;
1892     fileInfo.uri = newDirUriTest.ToString();
1893     int64_t offset = 3;
1894     int64_t maxCount = 3;
1895     std::vector<FileInfo> fileInfoVec;
1896     FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true);
1897     int result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec);
1898     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1899     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2);
1900 }
1901 
1902 /**
1903  * @tc.number: user_file_service_external_file_access_ScanFile_0002
1904  * @tc.name: external_file_access_ScanFile_0002
1905  * @tc.desc: Test function of ScanFile interface for SUCCESS, the filter is extenstion offset maxCount
1906  * @tc.size: MEDIUM
1907  * @tc.type: FUNC
1908  * @tc.level Level 1
1909  * @tc.require: I79CSX
1910  */
1911 HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0002, testing::ext::TestSize.Level1)
1912 {
1913     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1914     EXPECT_NE(fileAccessHelper, nullptr);
1915     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0002";
1916     try {
1917         vector<RootInfo> info;
1918         int result = fileAccessHelper->GetRoots(info);
1919         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1920         for (size_t i = 0; i < info.size(); i++) {
1921             Uri parentUri(info[i].uri);
1922             Uri newDirUriTest("");
1923             result = fileAccessHelper->Mkdir(parentUri, "scanfile0002", newDirUriTest);
1924             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1925             InitScanFile(newDirUriTest, "0002", fileAccessHelper);
1926             ScanFileFilter2(newDirUriTest, fileAccessHelper);
1927             result = fileAccessHelper->Delete(newDirUriTest);
1928             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1929         }
1930     } catch (...) {
1931         GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0002 occurs an exception.";
1932     }
1933     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0002";
1934 }
1935 
ScanFileFilter3(Uri newDirUriTest,const double & time,shared_ptr<FileAccessHelper> fileAccessHelper)1936 static void ScanFileFilter3(Uri newDirUriTest, const double &time, shared_ptr<FileAccessHelper> fileAccessHelper)
1937 {
1938     FileInfo fileInfo;
1939     fileInfo.uri = newDirUriTest.ToString();
1940     int64_t offset = 0;
1941     int64_t maxCount = 1000;
1942     std::vector<FileInfo> fileInfoVec;
1943     FileFilter filter({}, {}, {}, -1, time, false, true);
1944     int result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec);
1945     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1946     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_3);
1947 }
1948 
1949 /**
1950  * @tc.number: user_file_service_external_file_access_ScanFile_0003
1951  * @tc.name: external_file_access_ScanFile_0003
1952  * @tc.desc: Test function of ScanFile interface for SUCCESS, the filter is modify time
1953  * @tc.size: MEDIUM
1954  * @tc.type: FUNC
1955  * @tc.level Level 1
1956  * @tc.require: I79CSX
1957  */
1958 HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0003, testing::ext::TestSize.Level1)
1959 {
1960     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1961     EXPECT_NE(fileAccessHelper, nullptr);
1962     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0003";
1963     try {
1964         vector<RootInfo> info;
1965         int result = fileAccessHelper->GetRoots(info);
1966         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1967         for (size_t i = 0; i < info.size(); i++) {
1968             Uri parentUri(info[i].uri);
1969             Uri newDirUriTest("");
1970             result = fileAccessHelper->Mkdir(parentUri, "scanfile0003", newDirUriTest);
1971             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1972             double time = InitScanFile(newDirUriTest, "0003", fileAccessHelper, true);
1973             ScanFileFilter3(newDirUriTest, time, fileAccessHelper);
1974             result = fileAccessHelper->Delete(newDirUriTest);
1975             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1976         }
1977     } catch (...) {
1978         GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0003 occurs an exception.";
1979     }
1980     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0003";
1981 }
1982 
ScanFileFilter4(Uri newDirUriTest,shared_ptr<FileAccessHelper> fileAccessHelper)1983 static void ScanFileFilter4(Uri newDirUriTest, shared_ptr<FileAccessHelper> fileAccessHelper)
1984 {
1985     FileInfo fileInfo;
1986     fileInfo.uri = newDirUriTest.ToString();
1987     int64_t offset = 0;
1988     int64_t maxCount = 1000;
1989     std::vector<FileInfo> fileInfoVec;
1990     FileFilter filter;
1991     int result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec);
1992     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1993     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5);
1994 }
1995 
1996 /**
1997  * @tc.number: user_file_service_external_file_access_ScanFile_0004
1998  * @tc.name: external_file_access_ScanFile_0004
1999  * @tc.desc: Test function of ScanFile interface for SUCCESS, the filter is offset from 0 to maxCount
2000  * @tc.size: MEDIUM
2001  * @tc.type: FUNC
2002  * @tc.level Level 1
2003  * @tc.require: I79CSX
2004  */
2005 HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0004, testing::ext::TestSize.Level1)
2006 {
2007     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
2008     EXPECT_NE(fileAccessHelper, nullptr);
2009     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin user_file_service_external_file_access_ScanFile_0004";
2010     try {
2011         vector<RootInfo> info;
2012         int result = fileAccessHelper->GetRoots(info);
2013         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
2014         for (size_t i = 0; i < info.size(); i++) {
2015             Uri parentUri(info[i].uri);
2016             Uri newDirUriTest("");
2017             result = fileAccessHelper->Mkdir(parentUri, "scanfile0004", newDirUriTest);
2018             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
2019             InitScanFile(newDirUriTest, "0004", fileAccessHelper);
2020             ScanFileFilter4(newDirUriTest, fileAccessHelper);
2021             result = fileAccessHelper->Delete(newDirUriTest);
2022             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
2023         }
2024     } catch (...) {
2025         GTEST_LOG_(ERROR) << "user_file_service_external_file_access_ScanFile_0004 occurs an exception.";
2026     }
2027     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end user_file_service_external_file_access_ScanFile_0004";
2028 }
2029 
ScanFileFilter5(Uri newDirUriTest,shared_ptr<FileAccessHelper> fileAccessHelper)2030 static void ScanFileFilter5(Uri newDirUriTest, shared_ptr<FileAccessHelper> fileAccessHelper)
2031 {
2032     FileInfo fileInfo;
2033     fileInfo.uri = newDirUriTest.ToString();
2034     int64_t offset = 0;
2035     int64_t maxCount = 1000;
2036     std::vector<FileInfo> fileInfoVec;
2037     FileFilter filter({".txt", ".docx"}, {"测试.txt", "测试.docx"}, {}, -1, -1, false, true);
2038     int result = fileAccessHelper->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec);
2039     EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
2040     EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4);
2041 }
2042 
2043 /**
2044  * @tc.number: user_file_service_external_file_access_ScanFile_0005
2045  * @tc.name: external_file_access_ScanFile_0005
2046  * @tc.desc: Test function of ScanFile interface for SUCCESS, the filter is Chinese filename
2047  * @tc.size: MEDIUM
2048  * @tc.type: FUNC
2049  * @tc.level Level 1
2050  * @tc.require: I79CSX
2051  */
2052 HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0005, testing::ext::TestSize.Level1)
2053 {
2054     shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
2055     EXPECT_NE(fileAccessHelper, nullptr);
2056     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin user_file_service_external_file_access_ScanFile_0005";
2057     try {
2058         vector<RootInfo> info;
2059         int result = fileAccessHelper->GetRoots(info);
2060         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
2061         for (size_t i = 0; i < info.size(); i++) {
2062             Uri parentUri(info[i].uri);
2063             Uri newDirUriTest("");
2064             result = fileAccessHelper->Mkdir(parentUri, "scanfile测试", newDirUriTest);
2065             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
2066             InitScanFile(newDirUriTest, "测试", fileAccessHelper);
2067             ScanFileFilter5(newDirUriTest, fileAccessHelper);
2068             result = fileAccessHelper->Delete(newDirUriTest);
2069             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
2070         }
2071     } catch (...) {
2072         GTEST_LOG_(ERROR) << "user_file_service_external_file_access_ScanFile_0005 occurs an exception.";
2073     }
2074     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end user_file_service_external_file_access_ScanFile_0005";
2075 }
2076 } // namespace
2077