Author: ecki
Date: Mon Sep 28 18:25:02 2015
New Revision: 1705741

URL: http://svn.apache.org/viewvc?rev=1705741&view=rev
Log:
[VFS-583] Avoid layered filesystem leak when options are used. Added tests.

Modified:
    
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractLayeredFileProvider.java
    
commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTarTestCase.java
    
commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlTests.java

Modified: 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractLayeredFileProvider.java
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractLayeredFileProvider.java?rev=1705741&r1=1705740&r2=1705741&view=diff
==============================================================================
--- 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractLayeredFileProvider.java
 (original)
+++ 
commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/provider/AbstractLayeredFileProvider.java
 Mon Sep 28 18:25:02 2015
@@ -80,7 +80,7 @@ public abstract class AbstractLayeredFil
     {
         // Check if cached
         final FileName rootName = file.getName();
-        FileSystem fs = findFileSystem(rootName, null);
+        FileSystem fs = findFileSystem(rootName, fileSystemOptions); // TODO
         if (fs == null)
         {
             // Create the file system

Modified: 
commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTarTestCase.java
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTarTestCase.java?rev=1705741&r1=1705740&r2=1705741&view=diff
==============================================================================
--- 
commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTarTestCase.java
 (original)
+++ 
commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/provider/tar/test/NestedTarTestCase.java
 Mon Sep 28 18:25:02 2015
@@ -20,7 +20,11 @@ import junit.framework.Test;
 
 import org.apache.commons.AbstractVfsTestCase;
 import org.apache.commons.vfs2.FileObject;
+import org.apache.commons.vfs2.FileSystemConfigBuilder;
 import org.apache.commons.vfs2.FileSystemManager;
+import org.apache.commons.vfs2.FileSystemOptions;
+import org.apache.commons.vfs2.auth.StaticUserAuthenticator;
+import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;
 import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
 import org.apache.commons.vfs2.provider.tar.TarFileProvider;
 import org.apache.commons.vfs2.test.AbstractProviderTestConfig;
@@ -60,12 +64,16 @@ public class NestedTarTestCase
     @Override
     public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception
     {
+        // We test with non-empty FS options to make sure they are propagated
+        final FileSystemOptions opts = new FileSystemOptions();
+        
DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, new 
StaticUserAuthenticator("domain",  null,  null));
+
         // Locate the base Tar file
         final String tarFilePath = 
AbstractVfsTestCase.getTestResource("nested.tar").getAbsolutePath();
-        final String uri = "tar:file:" + tarFilePath + "!/test.tar";
-        final FileObject tarFile = manager.resolveFile(uri);
 
         // Now build the nested file system
+        final String uri = "tar:file:" + tarFilePath + "!/test.tar";
+        final FileObject tarFile = manager.resolveFile(uri, opts);
         final FileObject nestedFS = manager.createFileSystem(tarFile);
         return nestedFS.resolveFile("/");
     }

Modified: 
commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlTests.java
URL: 
http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlTests.java?rev=1705741&r1=1705740&r2=1705741&view=diff
==============================================================================
--- 
commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlTests.java
 (original)
+++ 
commons/proper/vfs/trunk/core/src/test/java/org/apache/commons/vfs2/test/UrlTests.java
 Mon Sep 28 18:25:02 2015
@@ -23,6 +23,7 @@ import java.net.URLConnection;
 
 import org.apache.commons.vfs2.Capability;
 import org.apache.commons.vfs2.FileObject;
+import org.apache.commons.vfs2.FileSystemOptions;
 
 /**
  * URL test cases for providers.
@@ -88,6 +89,25 @@ public class UrlTests
     }
 
     /**
+     * Tests content.
+     */
+    public void testURLContentProvider() throws Exception
+    {
+        // Test non-empty file
+        FileObject file = getReadFolder().resolveFile("file1.txt");
+        assertTrue(file.exists());
+
+        String uri = file.getURL().toExternalForm();
+        FileSystemOptions options = 
getReadFolder().getFileSystem().getFileSystemOptions();
+
+        FileObject f1 = getManager().resolveFile(uri, options);
+        FileObject f2 = getManager().resolveFile(uri, options);
+
+        assertEquals("Two files resolved by URI must be equals on " + uri,  
f1, f2);
+        assertSame("Resolving two times should not produce new filesystem on " 
+ uri, f1.getFileSystem(), f2.getFileSystem());
+    }
+
+    /**
      * Tests that unknown files have no content.
      */
     public void testUnknownURL() throws Exception


Reply via email to