1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs2.impl;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertNotNull;
22 import static org.junit.jupiter.api.Assertions.assertNull;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25 import static org.junit.jupiter.api.Assertions.fail;
26
27 import java.io.File;
28 import java.nio.file.Path;
29 import java.nio.file.Paths;
30
31 import org.apache.commons.vfs2.CacheStrategy;
32 import org.apache.commons.vfs2.FileName;
33 import org.apache.commons.vfs2.FileObject;
34 import org.apache.commons.vfs2.FileSystemException;
35 import org.apache.commons.vfs2.FileSystemManager;
36 import org.apache.commons.vfs2.FileType;
37 import org.apache.commons.vfs2.FilesCache;
38 import org.apache.commons.vfs2.VFS;
39 import org.apache.commons.vfs2.cache.NullFilesCache;
40 import org.apache.commons.vfs2.provider.GenericURLFileName;
41 import org.apache.commons.vfs2.provider.bzip2.Bzip2FileObject;
42 import org.apache.commons.vfs2.provider.gzip.GzipFileObject;
43 import org.apache.commons.vfs2.provider.jar.JarFileObject;
44 import org.apache.commons.vfs2.provider.ram.RamFileProvider;
45 import org.apache.commons.vfs2.provider.zip.ZipFileObject;
46 import org.junit.jupiter.api.Disabled;
47 import org.junit.jupiter.api.Test;
48 import org.mockito.Mockito;
49
50
51
52
53 public class DefaultFileSystemManagerTest {
54
55 @Test
56 public void testAddAndRemoveProvider() throws FileSystemException {
57 try (DefaultFileSystemManager fileSystemManager = new DefaultFileSystemManager()) {
58 fileSystemManager.setFilesCache(new NullFilesCache());
59 fileSystemManager.setCacheStrategy(CacheStrategy.MANUAL);
60
61 final RamFileProvider provider = Mockito.spy(new RamFileProvider());
62 fileSystemManager.addProvider("ram1", provider);
63 fileSystemManager.addProvider("ram2", provider);
64 assertNotNull(fileSystemManager.resolveFile("ram1:///"));
65 assertNotNull(fileSystemManager.resolveFile("ram2:///"));
66
67 fileSystemManager.removeProvider("ram1");
68 Mockito.verify(provider, Mockito.never()).close();
69 assertThrows(FileSystemException.class, () -> fileSystemManager.resolveFile("ram1:///"));
70 assertNotNull(fileSystemManager.resolveFile("ram2:///"));
71
72 fileSystemManager.removeProvider("ram2");
73 Mockito.verify(provider).close();
74 assertThrows(FileSystemException.class, () -> fileSystemManager.resolveFile("ram2:///"));
75 }
76 }
77
78
79
80
81
82
83 @Test
84 public void testClose() throws FileSystemException {
85 try (FileSystemManager fileSystemManager = new DefaultFileSystemManager()) {
86 VFS.setManager(fileSystemManager);
87 VFS.setManager(null);
88 }
89 assertNotNull(VFS.getManager());
90 final Path path = Paths.get("DoesNotExist.not");
91 assertFalse(VFS.getManager().resolveFile(path.toUri()).exists());
92 assertFalse(VFS.getManager().toFileObject(path.toFile()).exists());
93 assertFalse(VFS.getManager().toFileObject(path).exists());
94 }
95
96 @Test
97 public void testCreateBz2FileSystem() throws FileSystemException {
98 testCreateFileSystem("src/test/resources/test-data/bla.txt.bz2", Bzip2FileObject.class);
99 }
100
101 private void testCreateFileSystem(final String fileStr, final Class<?> clazz) throws FileSystemException {
102 final FileSystemManager manager = VFS.getManager();
103 final Path path = Paths.get(fileStr);
104 try (FileObject localFileObject = manager.toFileObject(path);
105 FileObject fileObject = manager.createFileSystem(localFileObject)) {
106 assertEquals(clazz, fileObject.getClass());
107 }
108 try (FileObject localFileObject = manager.toFileObject(path.toFile());
109 FileObject fileObject = manager.createFileSystem(localFileObject)) {
110 assertEquals(clazz, fileObject.getClass());
111 }
112 try (FileObject localFileObject = manager.resolveFile(new File(fileStr).getAbsolutePath());
113 FileObject fileObject = manager.createFileSystem(localFileObject)) {
114 assertEquals(clazz, fileObject.getClass());
115 }
116 }
117
118 @Test
119 @Disabled
120 public void testCreateGzipFileSystem() throws FileSystemException {
121 testCreateFileSystem("src/test/resources/test-data/好.txt.gz", GzipFileObject.class);
122 }
123
124 @Test
125 public void testCreateJarFileSystem() throws FileSystemException {
126 testCreateFileSystem("src/test/resources/test-data/nested.jar", JarFileObject.class);
127 }
128
129 @Test
130 public void testCreateZipFileSystem() throws FileSystemException {
131 testCreateFileSystem("src/test/resources/test-data/nested.zip", ZipFileObject.class);
132 }
133
134 @Test
135 public void testFileCacheEmptyAfterManagerClose() throws FileSystemException {
136 final FileSystemManager manager = VFS.getManager();
137 assertNotNull(manager);
138 try (FileObject fileObject = manager.resolveFile(Paths.get("src/test/resources/test-data/read-tests/file1.txt").toUri())) {
139 assertTrue(fileObject.exists());
140 final FilesCache filesCache = manager.getFilesCache();
141 final FileName name = fileObject.getName();
142
143 assertNotNull(filesCache.getFile(fileObject.getFileSystem(), name));
144 manager.close();
145
146 assertNull(filesCache.getFile(fileObject.getFileSystem(), name));
147 } finally {
148
149 VFS.close();
150 }
151 }
152
153 @Test
154 public void testFileCacheEmptyAfterVFSClose() throws FileSystemException {
155 final FileSystemManager manager = VFS.getManager();
156 assertNotNull(manager);
157 try (FileObject fileObject = manager.resolveFile(Paths.get("src/test/resources/test-data/read-tests/file1.txt").toUri())) {
158 assertTrue(fileObject.exists());
159 final FilesCache filesCache = manager.getFilesCache();
160 final FileName name = fileObject.getName();
161
162 assertNotNull(filesCache.getFile(fileObject.getFileSystem(), name));
163 VFS.close();
164
165 assertNull(filesCache.getFile(fileObject.getFileSystem(), name));
166 }
167 }
168
169
170
171
172
173
174 @Test
175 public void testResolveFileAbsoluteThrows() {
176 final String absolute = new File("/").getAbsoluteFile().toURI().toString();
177 assertThrows(NullPointerException.class, () -> VFS.getManager().resolveFile((File) null, absolute));
178 }
179
180
181
182
183
184
185 @Test
186 public void testResolveFileNameNull() {
187 assertThrows(FileSystemException.class, () -> VFS.getManager().resolveName((FileName) null, "../"));
188 }
189
190
191
192
193
194 @Test
195 public void testResolveFileNameType() {
196 try (DefaultFileSystemManager fileSystemManager = new DefaultFileSystemManager()) {
197
198 final FileName baseNameFolder = new GenericURLFileName(
199 "sftp",
200 "localhost",
201 22,
202 22,
203 "user",
204 "password",
205 "basePath",
206 FileType.FOLDER,
207 "query=test");
208
209
210 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "").getType());
211 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "/").getType());
212 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, ".").getType());
213 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "..").getType());
214 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "./").getType());
215 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "../").getType());
216 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "./Sub Folder/").getType());
217 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "../Descendant Folder/").getType());
218 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "./Sub Folder/.").getType());
219 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "../Descendant Folder/..").getType());
220 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "./Sub Folder/./").getType());
221 assertEquals(FileType.FOLDER, fileSystemManager.resolveName(baseNameFolder, "../Descendant Folder/../").getType());
222
223 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "File.txt").getType());
224 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "/File.txt").getType());
225 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "./File.txt").getType());
226 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "../File.txt").getType());
227 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "./Sub Folder/File.txt").getType());
228 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "../Descendant Folder/File.txt").getType());
229 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "./Sub Folder/./File.txt").getType());
230 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "../Descendant Folder/../File.txt").getType());
231 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "../Descendant Folder/../File.").getType());
232 assertEquals(FileType.FILE, fileSystemManager.resolveName(baseNameFolder, "../Descendant Folder/../File..").getType());
233
234 } catch (final FileSystemException e) {
235 fail(e);
236 }
237 }
238
239 @Test
240 public void testResolveFileObjectNullAbsolute() throws FileSystemException {
241 final String absolute = new File("/").getAbsoluteFile().toURI().toString();
242 VFS.getManager().resolveFile((FileObject) null, absolute);
243 }
244
245 @Test
246 public void testResolveFileObjectRelativeThrows() {
247 assertThrows(FileSystemException.class, () -> VFS.getManager().resolveFile((FileObject) null, "relativePath"));
248 }
249
250 @Test
251 public void testResolveFileRelativeThrows() {
252 assertThrows(NullPointerException.class, () -> VFS.getManager().resolveFile((File) null, "relativePath"));
253 }
254
255 }