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_OpenFile_0000
37  * @tc.name: external_file_access_OpenFile_0000
38  * @tc.desc: Test function of OpenFile interface for SUCCESS.
39  * @tc.size: MEDIUM
40  * @tc.type: FUNC
41  * @tc.level Level 1
42  * @tc.require: SR000H0386
43  */
44 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0000, testing::ext::TestSize.Level1)
45 {
46     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0000";
47     try {
48         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
49         vector<RootInfo> info;
50         EXPECT_NE(fileAccessHelper, nullptr);
51         int result = fileAccessHelper->GetRoots(info);
52         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
53         for (size_t i = 0; i < info.size(); i++) {
54             Uri parentUri(info[i].uri);
55             GTEST_LOG_(INFO) << parentUri.ToString();
56             Uri newDirUriTest1("");
57             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
58             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
59             Uri newFileUri("");
60             result = fileAccessHelper->CreateFile(newDirUriTest1, "external_file_access_OpenFile_0000.txt", newFileUri);
61             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
62             int fd;
63             result = fileAccessHelper->OpenFile(newFileUri, WRITE_READ, fd);
64             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
65             GTEST_LOG_(INFO) << "OpenFile_0000 result:" << result;
66             close(fd);
67             result = fileAccessHelper->Delete(newDirUriTest1);
68             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
69         }
70     } catch (...) {
71         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0000 occurs an exception.";
72     }
73     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0000";
74 }
75 
76 /**
77  * @tc.number: user_file_service_external_file_access_OpenFile_0001
78  * @tc.name: external_file_access_OpenFile_0001
79  * @tc.desc: Test function of OpenFile interface for ERROR which Uri is null.
80  * @tc.size: MEDIUM
81  * @tc.type: FUNC
82  * @tc.level Level 1
83  * @tc.require: SR000H0386
84  */
85 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0001, testing::ext::TestSize.Level1)
86 {
87     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0001";
88     try {
89         Uri uri("");
90         int fd;
91         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
92         EXPECT_NE(fileAccessHelper, nullptr);
93         int result = fileAccessHelper->OpenFile(uri, WRITE_READ, fd);
94         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
95         GTEST_LOG_(INFO) << "OpenFile_0001 result:" << result;
96     } catch (...) {
97         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0001 occurs an exception.";
98     }
99     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0001";
100 }
101 
102 /**
103  * @tc.number: user_file_service_external_file_access_OpenFile_0002
104  * @tc.name: external_file_access_OpenFile_0002
105  * @tc.desc: Test function of OpenFile interface for ERROR which Uri is absolute path.
106  * @tc.size: MEDIUM
107  * @tc.type: FUNC
108  * @tc.level Level 1
109  * @tc.require: SR000H0386
110  */
111 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0002, testing::ext::TestSize.Level1)
112 {
113     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0002";
114     try {
115         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
116         vector<RootInfo> info;
117         EXPECT_NE(fileAccessHelper, nullptr);
118         int result = fileAccessHelper->GetRoots(info);
119         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
120         for (size_t i = 0; i < info.size(); i++) {
121             Uri parentUri(info[i].uri);
122             Uri newFileUri("");
123             result = fileAccessHelper->CreateFile(parentUri, "external_file_access_OpenFile_0002.txt", newFileUri);
124             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
125             Uri uri("storage/media/100/local/files/Download/external_file_access_OpenFile_0002.txt");
126             int fd;
127             result = fileAccessHelper->OpenFile(uri, WRITE_READ, fd);
128             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
129             GTEST_LOG_(INFO) << "OpenFile_0002 result:" << result;
130             result = fileAccessHelper->Delete(newFileUri);
131             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
132         }
133     } catch (...) {
134         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0002 occurs an exception.";
135     }
136     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0002";
137 }
138 
139 /**
140  * @tc.number: user_file_service_external_file_access_OpenFile_0003
141  * @tc.name: external_file_access_OpenFile_0003
142  * @tc.desc: Test function of OpenFile interface for ERROR which Uri is special symbols.
143  * @tc.size: MEDIUM
144  * @tc.type: FUNC
145  * @tc.level Level 1
146  * @tc.require: SR000H0386
147  */
148 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0003, testing::ext::TestSize.Level1)
149 {
150     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0003";
151     try {
152         Uri uri("~!@#$%^&*()_");
153         int fd;
154         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
155         EXPECT_NE(fileAccessHelper, nullptr);
156         int result = fileAccessHelper->OpenFile(uri, WRITE_READ, fd);
157         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
158         GTEST_LOG_(INFO) << "OpenFile_0003 result:" << result;
159     } catch (...) {
160         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0003 occurs an exception.";
161     }
162     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0003";
163 }
164 
165 /**
166  * @tc.number: user_file_service_external_file_access_OpenFile_0004
167  * @tc.name: external_file_access_OpenFile_0004
168  * @tc.desc: Test function of OpenFile interface for ERROR which flag is -1.
169  * @tc.size: MEDIUM
170  * @tc.type: FUNC
171  * @tc.level Level 1
172  * @tc.require: SR000H0386
173  */
174 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0004, testing::ext::TestSize.Level1)
175 {
176     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0004";
177     try {
178         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
179         EXPECT_NE(fileAccessHelper, nullptr);
180         vector<RootInfo> info;
181         int result = fileAccessHelper->GetRoots(info);
182         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
183         for (size_t i = 0; i < info.size(); i++) {
184             Uri parentUri(info[i].uri);
185             Uri newFileUri("");
186             result = fileAccessHelper->CreateFile(parentUri, "external_file_access_OpenFile_0004.txt", newFileUri);
187             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
188             int fd;
189             int flag = -1;
190             result = fileAccessHelper->OpenFile(newFileUri, flag, fd);
191             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
192             GTEST_LOG_(INFO) << "OpenFile_0004 result:" << result;
193             result = fileAccessHelper->Delete(newFileUri);
194             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
195         }
196     } catch (...) {
197         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0004 occurs an exception.";
198     }
199     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0004";
200 }
201 
202 /**
203  * @tc.number: user_file_service_external_file_access_OpenFile_0005
204  * @tc.name: external_file_access_OpenFile_0005
205  * @tc.desc: Test function of OpenFile interface for SUCCESS which flag is 0.
206  * @tc.size: MEDIUM
207  * @tc.type: FUNC
208  * @tc.level Level 1
209  * @tc.require: SR000H0386
210  */
211 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0005, testing::ext::TestSize.Level1)
212 {
213     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0005";
214     try {
215         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
216         EXPECT_NE(fileAccessHelper, nullptr);
217         vector<RootInfo> info;
218         int result = fileAccessHelper->GetRoots(info);
219         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
220         for (size_t i = 0; i < info.size(); i++) {
221             Uri parentUri(info[i].uri);
222             Uri newFileUri("");
223             result = fileAccessHelper->CreateFile(parentUri, "external_file_access_OpenFile_0005.txt", newFileUri);
224             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
225             int fd;
226             result = fileAccessHelper->OpenFile(newFileUri, READ, fd);
227             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
228             GTEST_LOG_(INFO) << "OpenFile_0005 result:" << result;
229             close(fd);
230             result = fileAccessHelper->Delete(newFileUri);
231             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
232         }
233     } catch (...) {
234         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0005 occurs an exception.";
235     }
236     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0005";
237 }
238 
239 /**
240  * @tc.number: user_file_service_external_file_access_OpenFile_0006
241  * @tc.name: external_file_access_OpenFile_0006
242  * @tc.desc: Test function of OpenFile interface for SUCCESS which flag is 1.
243  * @tc.size: MEDIUM
244  * @tc.type: FUNC
245  * @tc.level Level 1
246  * @tc.require: SR000H0386
247  */
248 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0006, testing::ext::TestSize.Level1)
249 {
250     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0006";
251     try {
252         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
253         EXPECT_NE(fileAccessHelper, nullptr);
254         vector<RootInfo> info;
255         int result = fileAccessHelper->GetRoots(info);
256         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
257         for (size_t i = 0; i < info.size(); i++) {
258             Uri parentUri(info[i].uri);
259             Uri newFileUri("");
260             result = fileAccessHelper->CreateFile(parentUri, "external_file_access_OpenFile_0006.txt", newFileUri);
261             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
262             int fd;
263             result = fileAccessHelper->OpenFile(newFileUri, WRITE, fd);
264             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
265             GTEST_LOG_(INFO) << "OpenFile_0006 result:" << result;
266             close(fd);
267             result = fileAccessHelper->Delete(newFileUri);
268             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
269         }
270     } catch (...) {
271         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0006 occurs an exception.";
272     }
273     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0006";
274 }
275 
276 /**
277  * @tc.number: user_file_service_external_file_access_OpenFile_0007
278  * @tc.name: external_file_access_OpenFile_0007
279  * @tc.desc: Test function of OpenFile interface for SUCCESS which flag is 2.
280  * @tc.size: MEDIUM
281  * @tc.type: FUNC
282  * @tc.level Level 1
283  * @tc.require: SR000H0386
284  */
285 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0007, testing::ext::TestSize.Level1)
286 {
287     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0007";
288     try {
289         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
290         EXPECT_NE(fileAccessHelper, nullptr);
291         vector<RootInfo> info;
292         int result = fileAccessHelper->GetRoots(info);
293         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
294         for (size_t i = 0; i < info.size(); i++) {
295             Uri parentUri(info[i].uri);
296             Uri newFileUri("");
297             result = fileAccessHelper->CreateFile(parentUri, "external_file_access_OpenFile_0007.txt", newFileUri);
298             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
299             int fd;
300             result = fileAccessHelper->OpenFile(newFileUri, WRITE_READ, fd);
301             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
302             GTEST_LOG_(INFO) << "OpenFile_0007 result:" << result;
303             close(fd);
304             result = fileAccessHelper->Delete(newFileUri);
305             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
306         }
307     } catch (...) {
308         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0007 occurs an exception.";
309     }
310     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0007";
311 }
312 
OpenFileTdd(shared_ptr<FileAccessHelper> fahs,Uri uri,int flag,int fd)313 static void OpenFileTdd(shared_ptr<FileAccessHelper> fahs, Uri uri, int flag, int fd)
314 {
315     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFileTdd";
316     int ret = fahs->OpenFile(uri, flag, fd);
317     if (ret != OHOS::FileAccessFwk::ERR_OK) {
318         GTEST_LOG_(ERROR) << "OpenFile get result error, code:" << ret;
319         return;
320     }
321     EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK);
322     EXPECT_GE(fd, OHOS::FileAccessFwk::ERR_OK);
323     g_num++;
324     close(fd);
325     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFileTdd";
326 }
327 
328 /**
329  * @tc.number: user_file_service_external_file_access_OpenFile_0008
330  * @tc.name: external_file_access_OpenFile_0008
331  * @tc.desc: Test function of OpenFile interface for SUCCESS which Concurrent.
332  * @tc.size: MEDIUM
333  * @tc.type: FUNC
334  * @tc.level Level 1
335  * @tc.require: SR000H0386
336  */
337 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0008, testing::ext::TestSize.Level1)
338 {
339     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0008";
340     try {
341         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
342         EXPECT_NE(fileAccessHelper, nullptr);
343         vector<RootInfo> info;
344         int result = fileAccessHelper->GetRoots(info);
345         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
346         for (size_t i = 0; i < info.size(); i++) {
347             Uri parentUri(info[i].uri);
348             Uri newFileUri("");
349             int fd;
350             std::string displayName = "test1.txt";
351             g_num = 0;
352             result = fileAccessHelper->CreateFile(parentUri, displayName, newFileUri);
353             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
354             for (size_t j = 0; j < INIT_THREADS_NUMBER; j++) {
355                 std::thread execthread(OpenFileTdd, fileAccessHelper, newFileUri, WRITE_READ, fd);
356                 execthread.join();
357             }
358             EXPECT_EQ(g_num, INIT_THREADS_NUMBER);
359             result = fileAccessHelper->Delete(newFileUri);
360             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
361         }
362     } catch (...) {
363         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0008 occurs an exception.";
364     }
365     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0008";
366 }
367 
368 /**
369  * @tc.number: user_file_service_external_file_access_OpenFile_0009
370  * @tc.name: external_file_access_OpenFile_0009
371  * @tc.desc: Test function of OpenFile interface for FAILED because of GetProxyByUri failed.
372  * @tc.size: MEDIUM
373  * @tc.type: FUNC
374  * @tc.level Level 1
375  * @tc.require: SR000H0386
376  */
377 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0009, testing::ext::TestSize.Level1)
378 {
379     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0009";
380     try {
381         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
382         EXPECT_NE(fileAccessHelper, nullptr);
383         vector<RootInfo> info;
384         int result = fileAccessHelper->GetRoots(info);
385         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
386         for (size_t i = 0; i < info.size(); i++) {
387             std::string str = info[i].uri;
388             if (ReplaceBundleName(str, "ohos.com.NotExistBundleName")) {
389                 int fd;
390                 Uri newFileUri(str + "/NotExistFile.txt");
391                 result = fileAccessHelper->OpenFile(newFileUri, WRITE_READ, fd);
392                 EXPECT_EQ(result, OHOS::FileAccessFwk::E_IPCS);
393                 GTEST_LOG_(INFO) << "OpenFile_0009 result:" << result;
394             } else {
395                 EXPECT_TRUE(false);
396             }
397         }
398     } catch (...) {
399         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0009 occurs an exception.";
400     }
401     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0009";
402 }
403 
404 /**
405  * @tc.number: user_file_service_external_file_access_OpenFile_0010
406  * @tc.name: external_file_access_OpenFile_0010
407  * @tc.desc: Test function of OpenFile interface for SUCCESS, the file name is chinese.
408  * @tc.size: MEDIUM
409  * @tc.type: FUNC
410  * @tc.level Level 1
411  * @tc.require: I70SX9
412  */
413 HWTEST_F(FileExtensionHelperTest, external_file_access_OpenFile_0010, testing::ext::TestSize.Level1)
414 {
415     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_OpenFile_0010";
416     try {
417         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
418         EXPECT_NE(fileAccessHelper, nullptr);
419         vector<RootInfo> info;
420         int result = fileAccessHelper->GetRoots(info);
421         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
422         for (size_t i = 0; i < info.size(); i++) {
423             Uri parentUri(info[i].uri);
424             GTEST_LOG_(INFO) << parentUri.ToString();
425             Uri newDirUriTest1("");
426             result = fileAccessHelper->Mkdir(parentUri, "测试目录", newDirUriTest1);
427             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
428             EXPECT_EQ(newDirUriTest1.ToString().find("测试目录"), std::string::npos);
429             Uri newFileUri("");
430             result = fileAccessHelper->CreateFile(newDirUriTest1, "打开文件.txt", newFileUri);
431             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
432             EXPECT_EQ(newFileUri.ToString().find("打开文件.txt"), std::string::npos);
433             int fd;
434             result = fileAccessHelper->OpenFile(newFileUri, WRITE_READ, fd);
435             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
436             GTEST_LOG_(INFO) << "OpenFile_0010 result:" << result;
437             close(fd);
438             result = fileAccessHelper->Delete(newDirUriTest1);
439             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
440         }
441     } catch (...) {
442         GTEST_LOG_(ERROR) << "external_file_access_OpenFile_0010 occurs an exception.";
443     }
444     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_OpenFile_0010";
445 }
446 
447 /**
448  * @tc.number: user_file_service_external_file_access_Delete_0000
449  * @tc.name: external_file_access_Delete_0000
450  * @tc.desc: Test function of Delete interface for SUCCESS which delete file.
451  * @tc.size: MEDIUM
452  * @tc.type: FUNC
453  * @tc.level Level 1
454  * @tc.require: SR000H0386
455  */
456 HWTEST_F(FileExtensionHelperTest, external_file_access_Delete_0000, testing::ext::TestSize.Level1)
457 {
458     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Delete_0000";
459     try {
460         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
461         EXPECT_NE(fileAccessHelper, nullptr);
462         vector<RootInfo> info;
463         int result = fileAccessHelper->GetRoots(info);
464         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
465         for (size_t i = 0; i < info.size(); i++) {
466             Uri parentUri(info[i].uri);
467             Uri newDirUriTest("");
468             result = fileAccessHelper->Mkdir(parentUri, "test", newDirUriTest);
469             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
470             Uri newFileUri("");
471             result = fileAccessHelper->CreateFile(newDirUriTest, "external_file_access_Delete_0000.txt", newFileUri);
472             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
473             result = fileAccessHelper->Delete(newFileUri);
474             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
475             GTEST_LOG_(INFO) << "Delete_0000 result:" << result;
476             result = fileAccessHelper->Delete(newDirUriTest);
477             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
478         }
479     } catch (...) {
480         GTEST_LOG_(ERROR) << "external_file_access_Delete_0000 occurs an exception.";
481     }
482     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Delete_0000";
483 }
484 
485 /**
486  * @tc.number: user_file_service_external_file_access_Delete_0001
487  * @tc.name: external_file_access_Delete_0001
488  * @tc.desc: Test function of Delete interface for SUCCESS which delete folder.
489  * @tc.size: MEDIUM
490  * @tc.type: FUNC
491  * @tc.level Level 1
492  * @tc.require: SR000H0386
493  */
494 HWTEST_F(FileExtensionHelperTest, external_file_access_Delete_0001, testing::ext::TestSize.Level1)
495 {
496     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Delete_0001";
497     try {
498         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
499         EXPECT_NE(fileAccessHelper, nullptr);
500         vector<RootInfo> info;
501         int result = fileAccessHelper->GetRoots(info);
502         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
503         for (size_t i = 0; i < info.size(); i++) {
504             Uri parentUri(info[i].uri);
505             Uri newDirUriTest("");
506             result = fileAccessHelper->Mkdir(parentUri, "test", newDirUriTest);
507             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
508             result = fileAccessHelper->Delete(newDirUriTest);
509             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
510             GTEST_LOG_(INFO) << "Delete_0001 result:" << result;
511         }
512     } catch (...) {
513         GTEST_LOG_(ERROR) << "external_file_access_Delete_0001 occurs an exception.";
514     }
515     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Delete_0001";
516 }
517 
518 /**
519  * @tc.number: user_file_service_external_file_access_Delete_0002
520  * @tc.name: external_file_access_Delete_0002
521  * @tc.desc: Test function of Delete interface for ERROR which selectFileUri is null.
522  * @tc.size: MEDIUM
523  * @tc.type: FUNC
524  * @tc.level Level 1
525  * @tc.require: SR000H0386
526  */
527 HWTEST_F(FileExtensionHelperTest, external_file_access_Delete_0002, testing::ext::TestSize.Level1)
528 {
529     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Delete_0002";
530     try {
531         Uri selectFileUri("");
532         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
533         EXPECT_NE(fileAccessHelper, nullptr);
534         int result = fileAccessHelper->Delete(selectFileUri);
535         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
536         GTEST_LOG_(INFO) << "Delete_0002 result:" << result;
537     } catch (...) {
538         GTEST_LOG_(ERROR) << "external_file_access_Delete_0002 occurs an exception.";
539     }
540     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Delete_0002";
541 }
542 
543 /**
544  * @tc.number: user_file_service_external_file_access_Delete_0003
545  * @tc.name: external_file_access_Delete_0003
546  * @tc.desc: Test function of Delete interface for ERROR which selectFileUri is absolute path.
547  * @tc.size: MEDIUM
548  * @tc.type: FUNC
549  * @tc.level Level 1
550  * @tc.require: SR000H0386
551  */
552 HWTEST_F(FileExtensionHelperTest, external_file_access_Delete_0003, testing::ext::TestSize.Level1)
553 {
554     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Delete_0003";
555     try {
556         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
557         EXPECT_NE(fileAccessHelper, nullptr);
558         vector<RootInfo> info;
559         int result = fileAccessHelper->GetRoots(info);
560         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
561         for (size_t i = 0; i < info.size(); i++) {
562             Uri parentUri(info[i].uri);
563             Uri newDirUriTest("");
564             result = fileAccessHelper->Mkdir(parentUri, "test", newDirUriTest);
565             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
566             Uri selectFileUri("storage/media/100/local/files/Download/test");
567             result = fileAccessHelper->Delete(selectFileUri);
568             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
569             result = fileAccessHelper->Delete(newDirUriTest);
570             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
571             GTEST_LOG_(INFO) << "Delete_0003 result:" << result;
572         }
573     } catch (...) {
574         GTEST_LOG_(ERROR) << "external_file_access_Delete_0003 occurs an exception.";
575     }
576     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Delete_0003";
577 }
578 
579 /**
580  * @tc.number: user_file_service_external_file_access_Delete_0004
581  * @tc.name: external_file_access_Delete_0004
582  * @tc.desc: Test function of Delete interface for ERROR which selectFileUri is special symbols.
583  * @tc.size: MEDIUM
584  * @tc.type: FUNC
585  * @tc.level Level 1
586  * @tc.require: SR000H0386
587  */
588 HWTEST_F(FileExtensionHelperTest, external_file_access_Delete_0004, testing::ext::TestSize.Level1)
589 {
590     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Delete_0004";
591     try {
592         Uri selectFileUri("!@#$%^&*()");
593         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
594         EXPECT_NE(fileAccessHelper, nullptr);
595         int result = fileAccessHelper->Delete(selectFileUri);
596         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
597         GTEST_LOG_(INFO) << "Delete_0004 result:" << result;
598     } catch (...) {
599         GTEST_LOG_(ERROR) << "external_file_access_Delete_0004 occurs an exception.";
600     }
601     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Delete_0004";
602 }
603 
DeleteTdd(shared_ptr<FileAccessHelper> fahs,Uri selectFile)604 static void DeleteTdd(shared_ptr<FileAccessHelper> fahs, Uri selectFile)
605 {
606     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_DeleteTdd";
607     int ret = fahs->Delete(selectFile);
608     if (ret != OHOS::FileAccessFwk::ERR_OK) {
609         GTEST_LOG_(ERROR) << "DeleteTdd get result error, code:" << ret;
610         return;
611     }
612     EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK);
613     g_num++;
614     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_DeleteTdd";
615 }
616 
617 /**
618  * @tc.number: user_file_service_external_file_access_Delete_0005
619  * @tc.name: external_file_access_Delete_0005
620  * @tc.desc: Test function of Delete interface for SUCCESS which Concurrent.
621  * @tc.size: MEDIUM
622  * @tc.type: FUNC
623  * @tc.level Level 1
624  * @tc.require: SR000H0386
625  */
626 HWTEST_F(FileExtensionHelperTest, external_file_access_Delete_0005, testing::ext::TestSize.Level1)
627 {
628     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Delete_0005";
629     try {
630         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
631         EXPECT_NE(fileAccessHelper, nullptr);
632         vector<RootInfo> info;
633         int result = fileAccessHelper->GetRoots(info);
634         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
635         for (size_t i = 0; i < info.size(); i++) {
636             Uri parentUri(info[i].uri);
637             Uri newDirUriTest("");
638             result = fileAccessHelper->Mkdir(parentUri, "test", newDirUriTest);
639             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
640             Uri newFileUri("");
641             std::string displayName = "test1.txt";
642             result = fileAccessHelper->CreateFile(newDirUriTest, displayName, newFileUri);
643             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
644             g_num = 0;
645             for (int j = 0; j < INIT_THREADS_NUMBER; j++) {
646                 std::thread execthread(DeleteTdd, fileAccessHelper, newFileUri);
647                 execthread.join();
648             }
649             EXPECT_EQ(g_num, ACTUAL_SUCCESS_THREADS_NUMBER);
650             result = fileAccessHelper->Delete(newDirUriTest);
651             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
652         }
653     } catch (...) {
654         GTEST_LOG_(ERROR) << "external_file_access_Delete_0005 occurs an exception.";
655     }
656     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Delete_0005";
657 }
658 
659 /**
660  * @tc.number: user_file_service_external_file_access_Delete_0006
661  * @tc.name: external_file_access_Delete_0006
662  * @tc.desc: Test function of Delete interface for ERROR because of GetProxyByUri failed.
663  * @tc.size: MEDIUM
664  * @tc.type: FUNC
665  * @tc.level Level 1
666  * @tc.require: SR000H0386
667  */
668 HWTEST_F(FileExtensionHelperTest, external_file_access_Delete_0006, testing::ext::TestSize.Level1)
669 {
670     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Delete_0006";
671     try {
672         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
673         EXPECT_NE(fileAccessHelper, nullptr);
674         vector<RootInfo> info;
675         int result = fileAccessHelper->GetRoots(info);
676         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
677         for (size_t i = 0; i < info.size(); i++) {
678             std::string str = info[i].uri;
679             if (ReplaceBundleName(str, "ohos.com.NotExistBundleName")) {
680                 Uri selectFileUri(str);
681                 int result = fileAccessHelper->Delete(selectFileUri);
682                 EXPECT_EQ(result, OHOS::FileAccessFwk::E_IPCS);
683                 GTEST_LOG_(INFO) << "Delete_0006 result:" << result;
684             } else {
685                 EXPECT_TRUE(false);
686             }
687         }
688     } catch (...) {
689         GTEST_LOG_(ERROR) << "external_file_access_Delete_0006 occurs an exception.";
690     }
691     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Delete_0006";
692 }
693 
694 /**
695  * @tc.number: user_file_service_external_file_access_Delete_0007
696  * @tc.name: external_file_access_Delete_0007
697  * @tc.desc: Test function of Delete interface for SUCCESS which delete file, the file name is chinese.
698  * @tc.size: MEDIUM
699  * @tc.type: FUNC
700  * @tc.level Level 1
701  * @tc.require: I70SX9
702  */
703 HWTEST_F(FileExtensionHelperTest, external_file_access_Delete_0007, testing::ext::TestSize.Level1)
704 {
705     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Delete_0007";
706     try {
707         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
708         EXPECT_NE(fileAccessHelper, nullptr);
709         vector<RootInfo> info;
710         int result = fileAccessHelper->GetRoots(info);
711         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
712         for (size_t i = 0; i < info.size(); i++) {
713             Uri parentUri(info[i].uri);
714             Uri newDirUriTest("");
715             result = fileAccessHelper->Mkdir(parentUri, "测试目录", newDirUriTest);
716             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
717             EXPECT_EQ(newDirUriTest.ToString().find("测试目录"), std::string::npos);
718             Uri newFileUri("");
719             result = fileAccessHelper->CreateFile(newDirUriTest, "删除文件.txt", newFileUri);
720             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
721             EXPECT_EQ(newFileUri.ToString().find("删除文件.txt"), std::string::npos);
722             result = fileAccessHelper->Delete(newFileUri);
723             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
724             GTEST_LOG_(INFO) << "Delete_0007 result:" << result;
725             result = fileAccessHelper->Delete(newDirUriTest);
726             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
727         }
728     } catch (...) {
729         GTEST_LOG_(ERROR) << "external_file_access_Delete_0007 occurs an exception.";
730     }
731     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Delete_0007";
732 }
733 
734 /**
735  * @tc.number: user_file_service_external_file_access_Move_0000
736  * @tc.name: external_file_access_Move_0000
737  * @tc.desc: Test function of Move interface for SUCCESS which move file.
738  * @tc.size: MEDIUM
739  * @tc.type: FUNC
740  * @tc.level Level 1
741  * @tc.require: SR000H0387
742  */
743 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0000, testing::ext::TestSize.Level1)
744 {
745     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0000";
746     try {
747         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
748         EXPECT_NE(fileAccessHelper, nullptr);
749         vector<RootInfo> info;
750         int result = fileAccessHelper->GetRoots(info);
751         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
752         for (size_t i = 0; i < info.size(); i++) {
753             Uri parentUri(info[i].uri);
754             Uri newDirUriTest1("");
755             Uri newDirUriTest2("");
756             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
757             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
758             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
759             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
760             Uri testUri("");
761             result = fileAccessHelper->CreateFile(newDirUriTest1, "test.txt", testUri);
762             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
763             Uri testUri2("");
764             result = fileAccessHelper->Move(testUri, newDirUriTest2, testUri2);
765             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
766             GTEST_LOG_(INFO) << "Move_0000 result:" << result;
767             result = fileAccessHelper->Delete(newDirUriTest1);
768             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
769             result = fileAccessHelper->Delete(newDirUriTest2);
770             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
771         }
772     } catch (...) {
773         GTEST_LOG_(ERROR) << "external_file_access_Move_0000 occurs an exception.";
774     }
775     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0000";
776 }
777 
778 /**
779  * @tc.number: user_file_service_external_file_access_Move_0001
780  * @tc.name: external_file_access_Move_0001
781  * @tc.desc: Test function of Move interface for SUCCESS which move folder.
782  * @tc.size: MEDIUM
783  * @tc.type: FUNC
784  * @tc.level Level 1
785  * @tc.require: SR000H0387
786  */
787 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0001, testing::ext::TestSize.Level1)
788 {
789     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0001";
790     try {
791         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
792         EXPECT_NE(fileAccessHelper, nullptr);
793         vector<RootInfo> info;
794         int result = fileAccessHelper->GetRoots(info);
795         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
796         for (size_t i = 0; i < info.size(); i++) {
797             Uri parentUri(info[i].uri);
798             Uri newDirUriTest1("");
799             Uri newDirUriTest2("");
800             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
801             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
802             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
803             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
804             Uri testUri("");
805             result = fileAccessHelper->CreateFile(newDirUriTest1, "test.txt", testUri);
806             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
807             Uri testUri2("");
808             result = fileAccessHelper->Move(newDirUriTest1, newDirUriTest2, testUri2);
809             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
810             GTEST_LOG_(INFO) << "Move_0001 result:" << result;
811             result = fileAccessHelper->Delete(newDirUriTest2);
812             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
813         }
814     } catch (...) {
815         GTEST_LOG_(ERROR) << "external_file_access_Move_0001 occurs an exception.";
816     }
817     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0001";
818 }
819 
820 /**
821  * @tc.number: user_file_service_external_file_access_Move_0002
822  * @tc.name: external_file_access_Move_0002
823  * @tc.desc: Test function of Move interface for ERROR which sourceFileUri is null.
824  * @tc.size: MEDIUM
825  * @tc.type: FUNC
826  * @tc.level Level 1
827  * @tc.require: SR000H0387
828  */
829 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0002, testing::ext::TestSize.Level1)
830 {
831     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0002";
832     try {
833         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
834         EXPECT_NE(fileAccessHelper, nullptr);
835         vector<RootInfo> info;
836         int result = fileAccessHelper->GetRoots(info);
837         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
838         for (size_t i = 0; i < info.size(); i++) {
839             Uri parentUri(info[i].uri);
840             Uri newDirUriTest("");
841             result = fileAccessHelper->Mkdir(parentUri, "test", newDirUriTest);
842             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
843             Uri testUri("");
844             Uri sourceFileUri("");
845             result = fileAccessHelper->Move(sourceFileUri, newDirUriTest, testUri);
846             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
847             GTEST_LOG_(INFO) << "Move_0002 result:" << result;
848             result = fileAccessHelper->Delete(newDirUriTest);
849             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
850         }
851     } catch (...) {
852         GTEST_LOG_(ERROR) << "external_file_access_Move_0002 occurs an exception.";
853     }
854     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0002";
855 }
856 
857 /**
858  * @tc.number: user_file_service_external_file_access_Move_0003
859  * @tc.name: external_file_access_Move_0003
860  * @tc.desc: Test function of Move interface for ERROR which sourceFileUri is absolute path.
861  * @tc.size: MEDIUM
862  * @tc.type: FUNC
863  * @tc.level Level 1
864  * @tc.require: SR000H0386
865  */
866 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0003, testing::ext::TestSize.Level1)
867 {
868     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0003";
869     try {
870         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
871         EXPECT_NE(fileAccessHelper, nullptr);
872         vector<RootInfo> info;
873         int result = fileAccessHelper->GetRoots(info);
874         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
875         for (size_t i = 0; i < info.size(); i++) {
876             Uri parentUri(info[i].uri);
877             Uri newDirUriTest1("");
878             Uri newDirUriTest2("");
879             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
880             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
881             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
882             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
883             Uri testUri("");
884             result = fileAccessHelper->CreateFile(newDirUriTest1, "test.txt", testUri);
885             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
886             Uri testUri2("");
887             Uri sourceFileUri("storage/media/100/local/files/Download/test1/test.txt");
888             result = fileAccessHelper->Move(sourceFileUri, newDirUriTest2, testUri2);
889             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
890             GTEST_LOG_(INFO) << "Move_0003 result:" << result;
891             result = fileAccessHelper->Delete(newDirUriTest1);
892             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
893             result = fileAccessHelper->Delete(newDirUriTest2);
894             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
895         }
896     } catch (...) {
897         GTEST_LOG_(ERROR) << "external_file_access_Move_0003 occurs an exception.";
898     }
899     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0003";
900 }
901 
902 /**
903  * @tc.number: user_file_service_external_file_access_Move_0004
904  * @tc.name: external_file_access_Move_0004
905  * @tc.desc: Test function of Move interface for ERROR which sourceFileUri is special symbols.
906  * @tc.size: MEDIUM
907  * @tc.type: FUNC
908  * @tc.level Level 1
909  * @tc.require: SR000H0387
910  */
911 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0004, testing::ext::TestSize.Level1)
912 {
913     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0004";
914     try {
915         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
916         EXPECT_NE(fileAccessHelper, nullptr);
917         vector<RootInfo> info;
918         int result = fileAccessHelper->GetRoots(info);
919         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
920         for (size_t i = 0; i < info.size(); i++) {
921             Uri parentUri(info[i].uri);
922             Uri newDirUriTest("");
923             result = fileAccessHelper->Mkdir(parentUri, "test", newDirUriTest);
924             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
925             Uri testUri("");
926             Uri sourceFileUri("~!@#$%^&*()_");
927             result = fileAccessHelper->Move(sourceFileUri, newDirUriTest, testUri);
928             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
929             GTEST_LOG_(INFO) << "Move_0004 result:" << result;
930             result = fileAccessHelper->Delete(newDirUriTest);
931             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
932         }
933     } catch (...) {
934         GTEST_LOG_(ERROR) << "external_file_access_Move_0004 occurs an exception.";
935     }
936     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0004";
937 }
938 
939 /**
940  * @tc.number: user_file_service_external_file_access_Move_0005
941  * @tc.name: external_file_access_Move_0005
942  * @tc.desc: Test function of Move interface for ERROR which targetParentUri is null.
943  * @tc.size: MEDIUM
944  * @tc.type: FUNC
945  * @tc.level Level 1
946  * @tc.require: SR000H0387
947  */
948 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0005, testing::ext::TestSize.Level1)
949 {
950     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0005";
951     try {
952         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
953         EXPECT_NE(fileAccessHelper, nullptr);
954         vector<RootInfo> info;
955         int result = fileAccessHelper->GetRoots(info);
956         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
957         for (size_t i = 0; i < info.size(); i++) {
958             Uri parentUri(info[i].uri);
959             Uri newDirUriTest("");
960             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest);
961             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
962             Uri testUri("");
963             result = fileAccessHelper->CreateFile(newDirUriTest, "test.txt", testUri);
964             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
965             Uri testUri2("");
966             Uri targetParentUri("");
967             result = fileAccessHelper->Move(testUri, targetParentUri, testUri2);
968             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
969             GTEST_LOG_(INFO) << "Move_0005 result:" << result;
970             result = fileAccessHelper->Delete(newDirUriTest);
971             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
972         }
973     } catch (...) {
974         GTEST_LOG_(ERROR) << "external_file_access_Move_0005 occurs an exception.";
975     }
976     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0005";
977 }
978 
979 /**
980  * @tc.number: user_file_service_external_file_access_Move_0006
981  * @tc.name: external_file_access_Move_0006
982  * @tc.desc: Test function of Move interface for ERROR which targetParentUri is absolute path.
983  * @tc.size: MEDIUM
984  * @tc.type: FUNC
985  * @tc.level Level 1
986  * @tc.require: SR000H0387
987  */
988 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0006, testing::ext::TestSize.Level1)
989 {
990     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0006";
991     try {
992         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
993         EXPECT_NE(fileAccessHelper, nullptr);
994         vector<RootInfo> info;
995         int result = fileAccessHelper->GetRoots(info);
996         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
997         for (size_t i = 0; i < info.size(); i++) {
998             Uri parentUri(info[i].uri);
999             Uri newDirUriTest1("");
1000             Uri newDirUriTest2("");
1001             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1002             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1003             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
1004             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1005             Uri testUri("");
1006             result = fileAccessHelper->CreateFile(newDirUriTest1, "test.txt", testUri);
1007             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1008             Uri testUri2("");
1009             Uri targetParentUri("storage/media/100/local/files/Download/test2");
1010             result = fileAccessHelper->Move(testUri, targetParentUri, testUri2);
1011             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
1012             GTEST_LOG_(INFO) << "Move_0006 result:" << result;
1013             result = fileAccessHelper->Delete(newDirUriTest1);
1014             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1015             result = fileAccessHelper->Delete(newDirUriTest2);
1016             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1017         }
1018     } catch (...) {
1019         GTEST_LOG_(ERROR) << "external_file_access_Move_0006 occurs an exception.";
1020     }
1021     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0006";
1022 }
1023 
1024 /**
1025  * @tc.number: user_file_service_external_file_access_Move_0007
1026  * @tc.name: external_file_access_Move_0007
1027  * @tc.desc: Test function of Move interface for ERROR which targetParentUri is special symbols.
1028  * @tc.size: MEDIUM
1029  * @tc.type: FUNC
1030  * @tc.level Level 1
1031  * @tc.require: SR000H0387
1032  */
1033 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0007, testing::ext::TestSize.Level1)
1034 {
1035     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0007";
1036     try {
1037         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1038         EXPECT_NE(fileAccessHelper, nullptr);
1039         vector<RootInfo> info;
1040         int result = fileAccessHelper->GetRoots(info);
1041         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1042         for (size_t i = 0; i < info.size(); i++) {
1043             Uri parentUri(info[i].uri);
1044             Uri newDirUriTest1("");
1045             Uri newDirUriTest2("");
1046             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1047             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1048             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
1049             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1050             Uri testUri("");
1051             result = fileAccessHelper->CreateFile(newDirUriTest1, "test.txt", testUri);
1052             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1053             Uri testUri2("");
1054             Uri targetParentUri("~!@#$^%&*()_");
1055             result = fileAccessHelper->Move(testUri, targetParentUri, testUri2);
1056             EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
1057             GTEST_LOG_(INFO) << "Move_0007 result:" << result;
1058             result = fileAccessHelper->Delete(newDirUriTest1);
1059             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1060             result = fileAccessHelper->Delete(newDirUriTest2);
1061             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1062         }
1063     } catch (...) {
1064         GTEST_LOG_(ERROR) << "external_file_access_Move_0007 occurs an exception.";
1065     }
1066     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0007";
1067 }
1068 
1069 /**
1070  * @tc.number: user_file_service_external_file_access_Move_0008
1071  * @tc.name: external_file_access_Move_0008
1072  * @tc.desc: Test function of Move interface for SUCCESS which move empty folder.
1073  * @tc.size: MEDIUM
1074  * @tc.type: FUNC
1075  * @tc.level Level 1
1076  * @tc.require: SR000H0387
1077  */
1078 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0008, testing::ext::TestSize.Level1)
1079 {
1080     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0008";
1081     try {
1082         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1083         EXPECT_NE(fileAccessHelper, nullptr);
1084         vector<RootInfo> info;
1085         int result = fileAccessHelper->GetRoots(info);
1086         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1087         for (size_t i = 0; i < info.size(); i++) {
1088             Uri parentUri(info[i].uri);
1089             Uri newDirUriTest1("");
1090             Uri newDirUriTest2("");
1091             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1092             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1093             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
1094             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1095             Uri testUri("");
1096             result = fileAccessHelper->Move(newDirUriTest1, newDirUriTest2, testUri);
1097             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1098             GTEST_LOG_(INFO) << "Move_0008 result:" << result;
1099             result = fileAccessHelper->Delete(newDirUriTest2);
1100             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1101         }
1102     } catch (...) {
1103         GTEST_LOG_(ERROR) << "external_file_access_Move_0008 occurs an exception.";
1104     }
1105     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0008";
1106 }
1107 
1108 /**
1109  * @tc.number: user_file_service_external_file_access_Move_0009
1110  * @tc.name: external_file_access_Move_0009
1111  * @tc.desc: Test function of Move interface for SUCCESS which move more file in folder.
1112  * @tc.size: MEDIUM
1113  * @tc.type: FUNC
1114  * @tc.level Level 1
1115  * @tc.require: SR000H0387
1116  */
1117 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0009, testing::ext::TestSize.Level1)
1118 {
1119     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0009";
1120     try {
1121         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1122         EXPECT_NE(fileAccessHelper, nullptr);
1123         vector<RootInfo> info;
1124         int result = fileAccessHelper->GetRoots(info);
1125         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1126         for (size_t i = 0; i < info.size(); i++) {
1127             Uri parentUri(info[i].uri);
1128             Uri newDirUriTest1("");
1129             Uri newDirUriTest2("");
1130             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1131             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1132             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
1133             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1134             Uri testUri("");
1135             size_t fileNumbers = 2000;
1136             for (size_t j = 0; j < fileNumbers; j++) {
1137                 string fileName = "test" + ToString(j) + ".txt";
1138                 result = fileAccessHelper->CreateFile(newDirUriTest1, fileName, testUri);
1139                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1140             }
1141             Uri testUri2("");
1142             result = fileAccessHelper->Move(newDirUriTest1, newDirUriTest2, testUri2);
1143             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1144             GTEST_LOG_(INFO) << "Move_0009 result:" << result;
1145             result = fileAccessHelper->Delete(newDirUriTest2);
1146             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1147         }
1148     } catch (...) {
1149         GTEST_LOG_(ERROR) << "external_file_access_Move_0009 occurs an exception.";
1150     }
1151     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0009";
1152 }
1153 
1154 /**
1155  * @tc.number: user_file_service_external_file_access_Move_0010
1156  * @tc.name: external_file_access_Move_0010
1157  * @tc.desc: Test function of Move interface for SUCCESS which move Multilevel directory folder.
1158  * @tc.size: MEDIUM
1159  * @tc.type: FUNC
1160  * @tc.level Level 1
1161  * @tc.require: SR000H0387
1162  */
1163 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0010, testing::ext::TestSize.Level1)
1164 {
1165     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0010";
1166     try {
1167         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1168         EXPECT_NE(fileAccessHelper, nullptr);
1169         vector<RootInfo> info;
1170         int result = fileAccessHelper->GetRoots(info);
1171         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1172         for (size_t i = 0; i < info.size(); i++) {
1173             Uri parentUri(info[i].uri);
1174             Uri newDirUriTest1("");
1175             Uri newDirUriTest2("");
1176             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1177             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1178             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
1179             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1180             Uri testUri("");
1181             result = fileAccessHelper->Mkdir(newDirUriTest1, "test", testUri);
1182             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1183             size_t directoryNumbers = 64;
1184             for (size_t j = 0; j < directoryNumbers; j++) {
1185                 result = fileAccessHelper->Mkdir(testUri, "test", testUri);
1186                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1187             }
1188             Uri testUri2("");
1189             result = fileAccessHelper->Move(newDirUriTest1, newDirUriTest2, testUri2);
1190             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1191             GTEST_LOG_(INFO) << "Move_0010 result:" << result;
1192             result = fileAccessHelper->Delete(newDirUriTest2);
1193             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1194         }
1195     } catch (...) {
1196         GTEST_LOG_(ERROR) << "external_file_access_Move_0010 occurs an exception.";
1197     }
1198     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0010";
1199 }
1200 
1201 /**
1202  * @tc.number: user_file_service_external_file_access_Move_0011
1203  * @tc.name: external_file_access_Move_0011
1204  * @tc.desc: Test function of Move interface for SUCCESS which move other equipment file.
1205  * @tc.size: MEDIUM
1206  * @tc.type: FUNC
1207  * @tc.level Level 1
1208  * @tc.require: SR000H0387
1209  */
1210 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0011, testing::ext::TestSize.Level1)
1211 {
1212     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0011";
1213     try {
1214         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1215         EXPECT_NE(fileAccessHelper, nullptr);
1216         vector<RootInfo> info;
1217         int result = fileAccessHelper->GetRoots(info);
1218         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1219         for (size_t i = 0; i < info.size(); i++) {
1220             Uri parentUri(info[i].uri);
1221             Uri newDirUriTest1("");
1222             Uri newDirUriTest2("");
1223             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1224             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1225             Uri testUri("");
1226             result = fileAccessHelper->CreateFile(newDirUriTest1, "test.txt", testUri);
1227             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1228             for (size_t j = i + 1; j < info.size(); j++) {
1229                 Uri otherUri(info[j].uri);
1230                 result = fileAccessHelper->Mkdir(otherUri, "test2", newDirUriTest2);
1231                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1232                 result = fileAccessHelper->Move(testUri, newDirUriTest2, testUri);
1233                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1234                 result = fileAccessHelper->Move(testUri, newDirUriTest1, testUri);
1235                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1236                 GTEST_LOG_(INFO) << "Move_0011 result:" << result;
1237                 result = fileAccessHelper->Delete(newDirUriTest2);
1238                 EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1239             }
1240             result = fileAccessHelper->Delete(newDirUriTest1);
1241             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1242         }
1243     } catch (...) {
1244         GTEST_LOG_(ERROR) << "external_file_access_Move_0011 occurs an exception.";
1245     }
1246     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0011";
1247 }
1248 
MoveTdd(shared_ptr<FileAccessHelper> fahs,Uri sourceFile,Uri targetParent,Uri newFile)1249 static void MoveTdd(shared_ptr<FileAccessHelper> fahs, Uri sourceFile, Uri targetParent, Uri newFile)
1250 {
1251     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_MoveTdd";
1252     int ret = fahs->Move(sourceFile, targetParent, newFile);
1253     if (ret != OHOS::FileAccessFwk::ERR_OK) {
1254         GTEST_LOG_(ERROR) << "MoveTdd get result error, code:" << ret;
1255         return;
1256     }
1257     EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK);
1258     g_num++;
1259     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_MoveTdd";
1260 }
1261 
1262 /**
1263  * @tc.number: user_file_service_external_file_access_Move_0012
1264  * @tc.name: external_file_access_Move_0012
1265  * @tc.desc: Test function of Move interface for SUCCESS which Concurrent.
1266  * @tc.size: MEDIUM
1267  * @tc.type: FUNC
1268  * @tc.level Level 1
1269  * @tc.require: SR000H0386
1270  */
1271 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0012, testing::ext::TestSize.Level1)
1272 {
1273     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0012";
1274     try {
1275         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1276         EXPECT_NE(fileAccessHelper, nullptr);
1277         vector<RootInfo> info;
1278         int result = fileAccessHelper->GetRoots(info);
1279         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1280         for (size_t i = 0; i < info.size(); i++) {
1281             Uri parentUri(info[i].uri);
1282             Uri newDirUriTest1("");
1283             Uri newDirUriTest2("");
1284             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1285             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1286             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
1287             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1288             Uri testUri("");
1289             std::string displayName = "test3.txt";
1290             result = fileAccessHelper->CreateFile(newDirUriTest1, displayName, testUri);
1291             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1292             Uri testUri2("");
1293             g_num = 0;
1294             for (int j = 0; j < INIT_THREADS_NUMBER; j++) {
1295                 std::thread execthread(MoveTdd, fileAccessHelper, testUri, newDirUriTest2, testUri2);
1296                 execthread.join();
1297             }
1298             EXPECT_EQ(g_num, ACTUAL_SUCCESS_THREADS_NUMBER);
1299             result = fileAccessHelper->Delete(newDirUriTest1);
1300             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1301             result = fileAccessHelper->Delete(newDirUriTest2);
1302             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1303         }
1304     } catch (...) {
1305         GTEST_LOG_(ERROR) << "external_file_access_Move_0012 occurs an exception.";
1306     }
1307     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0012";
1308 }
1309 
1310 /**
1311  * @tc.number: user_file_service_external_file_access_Move_0013
1312  * @tc.name: external_file_access_Move_0013
1313  * @tc.desc: Test function of Move interface for FAILED because of GetProxyByUri failed.
1314  * @tc.size: MEDIUM
1315  * @tc.type: FUNC
1316  * @tc.level Level 1
1317  * @tc.require: SR000H0387
1318  */
1319 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0013, testing::ext::TestSize.Level1)
1320 {
1321     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0013";
1322     try {
1323         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1324         EXPECT_NE(fileAccessHelper, nullptr);
1325         vector<RootInfo> info;
1326         int result = fileAccessHelper->GetRoots(info);
1327         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1328         Uri parentUri(info[0].uri);
1329         Uri newDirUriTest1("");
1330         Uri newDirUriTest2("");
1331         result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1332         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1333         result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
1334         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1335         Uri testUri("");
1336         result = fileAccessHelper->Mkdir(newDirUriTest1, "test", testUri);
1337         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1338         std::string str = newDirUriTest1.ToString();
1339         if (!ReplaceBundleNameFromPath(str, "ohos.com.NotExistBundleName")) {
1340             GTEST_LOG_(ERROR) << "replace BundleName failed.";
1341             EXPECT_TRUE(false);
1342         }
1343         Uri uri(str);
1344         Uri testUri2("");
1345         result = fileAccessHelper->Move(uri, newDirUriTest2, testUri2);
1346         EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK);
1347         GTEST_LOG_(INFO) << "Move_0013 result:" << result;
1348         result = fileAccessHelper->Delete(newDirUriTest1);
1349         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1350         result = fileAccessHelper->Delete(newDirUriTest2);
1351         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1352     } catch (...) {
1353         GTEST_LOG_(ERROR) << "external_file_access_Move_0013 occurs an exception.";
1354     }
1355     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0013";
1356 }
1357 
1358 /**
1359  * @tc.number: user_file_service_external_file_access_Move_0014
1360  * @tc.name: external_file_access_Move_0014
1361  * @tc.desc: Test function of Move interface for SUCCESS which move file, the file name is chinese.
1362  * @tc.size: MEDIUM
1363  * @tc.type: FUNC
1364  * @tc.level Level 1
1365  * @tc.require: I70SX9
1366  */
1367 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0014, testing::ext::TestSize.Level1)
1368 {
1369     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0014";
1370     try {
1371         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1372         EXPECT_NE(fileAccessHelper, nullptr);
1373         vector<RootInfo> info;
1374         int result = fileAccessHelper->GetRoots(info);
1375         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1376         for (size_t i = 0; i < info.size(); i++) {
1377             Uri parentUri(info[i].uri);
1378             Uri newDirUriTest1("");
1379             Uri newDirUriTest2("");
1380             result = fileAccessHelper->Mkdir(parentUri, "测试目录1", newDirUriTest1);
1381             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1382             EXPECT_EQ(newDirUriTest1.ToString().find("测试目录1"), std::string::npos);
1383             result = fileAccessHelper->Mkdir(parentUri, "测试目录2", newDirUriTest2);
1384             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1385             EXPECT_EQ(newDirUriTest2.ToString().find("测试目录2"), std::string::npos);
1386             Uri testUri("");
1387             result = fileAccessHelper->CreateFile(newDirUriTest1, "移动文件.txt", testUri);
1388             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1389             EXPECT_EQ(testUri.ToString().find("移动文件.txt"), std::string::npos);
1390             Uri testUri2("");
1391             result = fileAccessHelper->Move(testUri, newDirUriTest2, testUri2);
1392             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1393             GTEST_LOG_(INFO) << "Move_0014 result:" << result;
1394             result = fileAccessHelper->Delete(newDirUriTest1);
1395             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1396             result = fileAccessHelper->Delete(newDirUriTest2);
1397             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1398         }
1399     } catch (...) {
1400         GTEST_LOG_(ERROR) << "external_file_access_Move_0014 occurs an exception.";
1401     }
1402     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0014";
1403 }
1404 
1405 /**
1406  * @tc.number: user_file_service_external_file_access_Move_0015
1407  * @tc.name: external_file_access_Move_0015
1408  * @tc.desc: Test function of Move interface for SUCCESS which move Multilevel directory folder,
1409  *           the folder name is chinese.
1410  * @tc.size: MEDIUM
1411  * @tc.type: FUNC
1412  * @tc.level Level 1
1413  * @tc.require: I70SX9
1414  */
1415 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0015, testing::ext::TestSize.Level1)
1416 {
1417     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0015";
1418     try {
1419         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1420         EXPECT_NE(fileAccessHelper, nullptr);
1421         vector<RootInfo> info;
1422         int result = fileAccessHelper->GetRoots(info);
1423         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1424         for (size_t i = 0; i < info.size(); i++) {
1425             Uri parentUri(info[i].uri);
1426             Uri newDirUriTest1("");
1427             Uri newDirUriTest2("");
1428             result = fileAccessHelper->Mkdir(parentUri, "移动目录", newDirUriTest1);
1429             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1430             EXPECT_EQ(newDirUriTest1.ToString().find("移动目录"), std::string::npos);
1431             result = fileAccessHelper->Mkdir(parentUri, "test2", newDirUriTest2);
1432             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1433             Uri testUri2("");
1434             result = fileAccessHelper->Move(newDirUriTest1, newDirUriTest2, testUri2);
1435             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1436             GTEST_LOG_(INFO) << "Move_0015 result:" << result;
1437             result = fileAccessHelper->Delete(newDirUriTest2);
1438             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1439         }
1440     } catch (...) {
1441         GTEST_LOG_(ERROR) << "external_file_access_Move_0015 occurs an exception.";
1442     }
1443     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0015";
1444 }
1445 
1446 /**
1447  * @tc.number: user_file_service_external_file_access_Move_0016
1448  * @tc.name: external_file_access_Move_0016
1449  * @tc.desc: Test function of Move interface for SUCCESS which move Multilevel directory folder,
1450  *           the folder name is chinese.
1451  * @tc.size: MEDIUM
1452  * @tc.type: FUNC
1453  * @tc.level Level 1
1454  * @tc.require: I70SX9
1455  */
1456 HWTEST_F(FileExtensionHelperTest, external_file_access_Move_0016, testing::ext::TestSize.Level1)
1457 {
1458     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_Move_0016";
1459     try {
1460         shared_ptr<FileAccessHelper> fileAccessHelper = FileExtensionHelperTest::GetFileAccessHelper();
1461         EXPECT_NE(fileAccessHelper, nullptr);
1462         vector<RootInfo> info;
1463         int result = fileAccessHelper->GetRoots(info);
1464         EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1465         for (size_t i = 0; i < info.size(); i++) {
1466             Uri parentUri(info[i].uri);
1467             Uri newDirUriTest1("");
1468             Uri newDirUriTest2("");
1469             result = fileAccessHelper->Mkdir(parentUri, "test1", newDirUriTest1);
1470             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1471             result = fileAccessHelper->Mkdir(parentUri, "移动目录", newDirUriTest2);
1472             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1473             Uri testUri2("");
1474             result = fileAccessHelper->Move(newDirUriTest1, newDirUriTest2, testUri2);
1475             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1476             GTEST_LOG_(INFO) << "Move_0016 result:" << result;
1477             result = fileAccessHelper->Delete(newDirUriTest2);
1478             EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK);
1479         }
1480     } catch (...) {
1481         GTEST_LOG_(ERROR) << "external_file_access_Move_0016 occurs an exception.";
1482     }
1483     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_Move_0016";
1484 }
1485 
1486 /**
1487  * @tc.number: user_file_service_external_file_access_creator_0000
1488  * @tc.name: external_file_access_creator_0000
1489  * @tc.desc: Test function of creator interface.
1490  * @tc.desc: create file access helper for SUCCESS.
1491  * @tc.size: MEDIUM
1492  * @tc.type: FUNC
1493  * @tc.level Level 1
1494  * @tc.require: SR000H0386
1495  */
1496 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0000, testing::ext::TestSize.Level1)
1497 {
1498     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0000";
1499     try {
1500         setuid(UID_TRANSFORM_TMP);
1501         std::pair<shared_ptr<FileAccessHelper>, int> helper =
1502             FileAccessHelper::Creator(FileExtensionHelperTest::GetContext());
1503         setuid(UID_DEFAULT);
1504         ASSERT_TRUE(helper.first != nullptr);
1505         bool succ = helper.first->Release();
1506         EXPECT_TRUE(succ);
1507     } catch (...) {
1508         GTEST_LOG_(ERROR) << "external_file_access_creator_0000 occurs an exception.";
1509     }
1510     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0000";
1511 }
1512 
1513 /**
1514  * @tc.number: user_file_service_external_file_access_creator_0001
1515  * @tc.name: external_file_access_creator_0001
1516  * @tc.desc: Test function of creator interface.
1517  * @tc.desc: create file access helper for SUCCESS.
1518  * @tc.size: MEDIUM
1519  * @tc.type: FUNC
1520  * @tc.level Level 1
1521  * @tc.require: SR000H0386
1522  */
1523 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0001, testing::ext::TestSize.Level1)
1524 {
1525     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0001";
1526     try {
1527         AAFwk::Want want;
1528         vector<AAFwk::Want> wantVec;
1529         setuid(UID_TRANSFORM_TMP);
1530         int ret = FileAccessHelper::GetRegisteredFileAccessExtAbilityInfo(wantVec);
1531         EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK);
1532         bool sus = false;
1533         for (size_t i = 0; i < wantVec.size(); i++) {
1534             auto element = wantVec[i].GetElement();
1535             if (element.GetBundleName() == "com.ohos.UserFile.ExternalFileManager" &&
1536                 element.GetAbilityName() == "FileExtensionAbility") {
1537                 want = wantVec[i];
1538                 sus = true;
1539                 break;
1540             }
1541         }
1542         EXPECT_TRUE(sus);
1543         vector<AAFwk::Want> wants{want};
1544         std::pair<shared_ptr<FileAccessHelper>, int> helper =
1545             FileAccessHelper::Creator(FileExtensionHelperTest::GetContext(), wants);
1546         setuid(UID_DEFAULT);
1547         ASSERT_TRUE(helper.first != nullptr);
1548         bool succ = helper.first->Release();
1549         EXPECT_TRUE(succ);
1550     } catch (...) {
1551         GTEST_LOG_(ERROR) << "external_file_access_creator_0001 occurs an exception.";
1552     }
1553     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0001";
1554 }
1555 
1556 /**
1557  * @tc.number: user_file_service_external_file_access_creator_0002
1558  * @tc.name: external_file_access_creator_0002
1559  * @tc.desc: Test function of creator interface.
1560  * @tc.desc: create file access helper for FAILED.
1561  * @tc.size: MEDIUM
1562  * @tc.type: FUNC
1563  * @tc.level Level 1
1564  * @tc.require: SR000H0386
1565  */
1566 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0002, testing::ext::TestSize.Level1)
1567 {
1568     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0002";
1569     try {
1570         std::shared_ptr<OHOS::AbilityRuntime::Context> context = nullptr;
1571         std::pair<shared_ptr<FileAccessHelper>, int> helper = FileAccessHelper::Creator(context);
1572         ASSERT_TRUE(helper.first == nullptr);
1573     } catch (...) {
1574         GTEST_LOG_(ERROR) << "external_file_access_creator_0002 occurs an exception.";
1575     }
1576     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0002";
1577 }
1578 
1579 /**
1580  * @tc.number: user_file_service_external_file_access_creator_0003
1581  * @tc.name: external_file_access_creator_0003
1582  * @tc.desc: Test function of creator interface.
1583  * @tc.desc: create file access helper for FAILED.
1584  * @tc.size: MEDIUM
1585  * @tc.type: FUNC
1586  * @tc.level Level 1
1587  * @tc.require: SR000H0386
1588  */
1589 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0003, testing::ext::TestSize.Level1)
1590 {
1591     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0003";
1592     try {
1593         std::vector<AAFwk::Want> wants;
1594         std::shared_ptr<OHOS::AbilityRuntime::Context> context = nullptr;
1595         std::pair<shared_ptr<FileAccessHelper>, int> helper = FileAccessHelper::Creator(context, wants);
1596         ASSERT_TRUE(helper.first == nullptr);
1597     } catch (...) {
1598         GTEST_LOG_(ERROR) << "external_file_access_creator_0003 occurs an exception.";
1599     }
1600     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0003";
1601 }
1602 
1603 /**
1604  * @tc.number: user_file_service_external_file_access_creator_0004
1605  * @tc.name: external_file_access_creator_0004
1606  * @tc.desc: Test function of creator interface.
1607  * @tc.desc: create file access helper for FAILED.
1608  * @tc.size: MEDIUM
1609  * @tc.type: FUNC
1610  * @tc.level Level 1
1611  * @tc.require: SR000H0386
1612  */
1613 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0004, testing::ext::TestSize.Level1)
1614 {
1615     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0004";
1616     try {
1617         std::vector<AAFwk::Want> wants;
1618         std::pair<shared_ptr<FileAccessHelper>, int> helper =
1619             FileAccessHelper::Creator(FileExtensionHelperTest::GetContext(), wants);
1620         ASSERT_TRUE(helper.first == nullptr);
1621     } catch (...) {
1622         GTEST_LOG_(ERROR) << "external_file_access_creator_0004 occurs an exception.";
1623     }
1624     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0004";
1625 }
1626 
1627 /**
1628  * @tc.number: user_file_service_external_file_access_creator_0005
1629  * @tc.name: external_file_access_creator_0005
1630  * @tc.desc: Test function of creator interface.
1631  * @tc.desc: create file access helper for FAILED.
1632  * @tc.size: MEDIUM
1633  * @tc.type: FUNC
1634  * @tc.level Level 1
1635  * @tc.require: SR000H0386
1636  */
1637 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0005, testing::ext::TestSize.Level1)
1638 {
1639     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0005";
1640     try {
1641         AAFwk::Want want;
1642         want.SetElementName("NotExistBundleName", "NotExistAbilityName");
1643         std::vector<AAFwk::Want> wants{want};
1644         std::pair<shared_ptr<FileAccessHelper>, int> helper =
1645             FileAccessHelper::Creator(FileExtensionHelperTest::GetContext(), wants);
1646         ASSERT_TRUE(helper.first == nullptr);
1647     } catch (...) {
1648         GTEST_LOG_(ERROR) << "external_file_access_creator_0005 occurs an exception.";
1649     }
1650     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0005";
1651 }
1652 
1653 /**
1654  * @tc.number: user_file_service_external_file_access_creator_0006
1655  * @tc.name: external_file_access_creator_0006
1656  * @tc.desc: Test function of creator interface.
1657  * @tc.desc: create file access helper for FAILED.
1658  * @tc.size: MEDIUM
1659  * @tc.type: FUNC
1660  * @tc.level Level 1
1661  * @tc.require: SR000H0386
1662  */
1663 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0006, testing::ext::TestSize.Level1)
1664 {
1665     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0006";
1666     try {
1667         std::vector<AAFwk::Want> wants;
1668         std::shared_ptr<OHOS::AbilityRuntime::Context> context = nullptr;
1669         std::pair<shared_ptr<FileAccessHelper>, int> helper = FileAccessHelper::Creator(context, wants);
1670         ASSERT_TRUE(helper.first == nullptr);
1671     } catch (...) {
1672         GTEST_LOG_(ERROR) << "external_file_access_creator_0006 occurs an exception.";
1673     }
1674     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0006";
1675 }
1676 
1677 /**
1678  * @tc.number: user_file_service_external_file_access_creator_0007
1679  * @tc.name: external_file_access_creator_0007
1680  * @tc.desc: Test function of creator interface.
1681  * @tc.desc: create file access helper for FAILED.
1682  * @tc.size: MEDIUM
1683  * @tc.type: FUNC
1684  * @tc.level Level 1
1685  * @tc.require: SR000H0386
1686  */
1687 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0007, testing::ext::TestSize.Level1)
1688 {
1689     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0007";
1690     try {
1691         std::vector<AAFwk::Want> wants;
1692         shared_ptr<FileAccessHelper> helper =
1693             FileAccessHelper::Creator(FileExtensionHelperTest::GetContext()->GetToken(), wants);
1694         ASSERT_TRUE(helper == nullptr);
1695     } catch (...) {
1696         GTEST_LOG_(ERROR) << "external_file_access_creator_0007 occurs an exception.";
1697     }
1698     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0007";
1699 }
1700 
1701 /**
1702  * @tc.number: user_file_service_external_file_access_creator_0008
1703  * @tc.name: external_file_access_creator_0008
1704  * @tc.desc: Test function of creator interface.
1705  * @tc.desc: create file access helper for FAILED.
1706  * @tc.size: MEDIUM
1707  * @tc.type: FUNC
1708  * @tc.level Level 1
1709  * @tc.require: SR000H0386
1710  */
1711 HWTEST_F(FileExtensionHelperTest, external_file_access_creator_0008, testing::ext::TestSize.Level1)
1712 {
1713     GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_creator_0008";
1714     try {
1715         AAFwk::Want want;
1716         want.SetElementName("NotExistBundleName", "NotExistAbilityName");
1717         std::vector<AAFwk::Want> wants{want};
1718         shared_ptr<FileAccessHelper> helper =
1719             FileAccessHelper::Creator(FileExtensionHelperTest::GetContext()->GetToken(), wants);
1720         ASSERT_TRUE(helper == nullptr);
1721     } catch (...) {
1722         GTEST_LOG_(ERROR) << "external_file_access_creator_0008 occurs an exception.";
1723     }
1724     GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_creator_0008";
1725 }
1726 }
1727