This is an automated email from the ASF dual-hosted git repository.

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-vfs.git

commit 0383e8216620172434fc5eb6546cc1f961d7762d
Author: Gary Gregory <[email protected]>
AuthorDate: Wed Jul 15 10:05:20 2026 -0400

    Sort members
---
 .../commons/vfs2/provider/AbstractFileObject.java  |  38 ++--
 .../commons/vfs2/provider/AbstractFileSystem.java  |  36 ++--
 .../commons/vfs2/provider/ftp/FtpClient.java       |  22 +--
 .../commons/vfs2/AbstractProviderTestCase.java     |  60 +++---
 .../commons/vfs2/AbstractProviderTestSuite.java    | 206 ++++++++++-----------
 .../commons/vfs2/IPv6LocalConnectionTests.java     |  20 +-
 .../commons/vfs2/filter/SizeFileFilterTest.java    |  10 +-
 .../commons/vfs2/provider/UriParserBenchmark.java  |  14 +-
 .../commons/vfs2/provider/UriParserTest.java       |  24 +--
 .../ftp/FtpGetChildrenListCommandTest.java         |  18 +-
 .../vfs2/provider/ftp/FtpProviderIPv6Test.java     |  62 +++----
 .../vfs2/provider/ftp/FtpProviderMdtmOffTest.java  | 160 ++++++++--------
 .../provider/ftp/FtpProviderMdtmOnRefreshTest.java | 130 ++++++-------
 .../vfs2/provider/ftp/FtpProviderMdtmOnTest.java   | 130 ++++++-------
 .../commons/vfs2/provider/ftp/FtpProviderTest.java | 146 +++++++--------
 .../vfs2/provider/ftp/FtpProviderUserDirTest.java  |  78 ++++----
 .../vfs2/provider/ftps/FtpsProviderTest.java       |  40 ++--
 .../vfs2/provider/http/HttpProviderTest.java       |  92 ++++-----
 .../vfs2/provider/http4/Http4ProviderTest.java     |  86 ++++-----
 .../vfs2/provider/http5/Http5ProviderTest.java     | 114 ++++++------
 .../commons/vfs2/provider/jar/JarProviderTest.java |  24 +--
 .../commons/vfs2/provider/jar/NestedJarTest.java   |   8 +-
 .../vfs2/provider/local/LocalProviderTest.java     |  20 +-
 .../commons/vfs2/provider/local/UrlTests.java      |  56 +++---
 .../commons/vfs2/provider/ram/RamProviderTest.java | 126 ++++++-------
 .../vfs2/provider/res/ResourceProviderTest.java    |   8 +-
 .../commons/vfs2/provider/res/Vfs444Test.java      |  48 ++---
 .../provider/sftp/SftpPermissionExceptionTest.java |  48 ++---
 .../sftp/SftpProviderClosedExecChannelTest.java    |  36 ++--
 .../vfs2/provider/sftp/SftpProviderIPv6Test.java   |  94 +++++-----
 .../sftp/SftpProviderStreamProxyModeTest.java      |  30 +--
 .../vfs2/provider/sftp/SftpProviderTest.java       |  46 ++---
 .../vfs2/provider/sftp/SftpPutChannelTest.java     |  46 ++---
 .../commons/vfs2/provider/tar/NestedTarTest.java   |   8 +-
 .../commons/vfs2/provider/tar/NestedTbz2Test.java  |   8 +-
 .../commons/vfs2/provider/tar/NestedTgzTest.java   |   8 +-
 .../commons/vfs2/provider/tar/TarProviderTest.java |   8 +-
 .../vfs2/provider/tar/Tbz2ProviderTest.java        |   8 +-
 .../commons/vfs2/provider/tar/TgzProviderTest.java |   8 +-
 .../vfs2/provider/temp/TemporaryProviderTest.java  |   8 +-
 .../vfs2/provider/test/VirtualProviderTest.java    |  20 +-
 .../vfs2/provider/url/UrlHttpProviderTest.java     |   8 +-
 .../vfs2/provider/url/UrlProviderHttpTest.java     |  70 +++----
 .../commons/vfs2/provider/url/UrlProviderTest.java |   8 +-
 .../commons/vfs2/provider/zip/NestedZipTest.java   |   8 +-
 .../commons/vfs2/provider/zip/ZipProviderTest.java |   8 +-
 .../zip/ZipProviderWithCharsetNullTest.java        |   8 +-
 .../provider/zip/ZipProviderWithCharsetTest.java   |   8 +-
 48 files changed, 1135 insertions(+), 1135 deletions(-)

diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileObject.java
 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileObject.java
index e3ca63d58..71058fc11 100644
--- 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileObject.java
+++ 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileObject.java
@@ -1808,25 +1808,6 @@ public abstract class AbstractFileObject<AFS extends 
AbstractFileSystem> impleme
         return resolveFileInternal(child);
     }
 
-    /**
-     * Resolves a file by name for internal navigation, skipping the
-     * {@link org.apache.commons.vfs2.CacheStrategy#ON_RESOLVE} refresh. Cache 
policy should only
-     * apply to external API calls, not internal VFS plumbing like
-     * {@link #getParent()}, {@link #getChildren()}, or symlink resolution.
-     * <p>
-     * Subclasses should use this instead of {@code 
getFileSystem().resolveFile()}
-     * when navigating to related files (parent, children, link targets).
-     * </p>
-     *
-     * @param name The FileName to resolve.
-     * @return The resolved FileObject.
-     * @throws FileSystemException if an error occurs.
-     * @since 2.11.0
-     */
-    protected FileObject resolveFileInternal(final FileName name) throws 
FileSystemException {
-        return fileSystem.resolveFileInternal(name);
-    }
-
     /**
      * Finds a file, relative to this file.
      *
@@ -1855,6 +1836,25 @@ public abstract class AbstractFileObject<AFS extends 
AbstractFileSystem> impleme
         return 
fileSystem.resolveFile(fileSystem.getFileSystemManager().resolveName(fileName, 
name, scope));
     }
 
+    /**
+     * Resolves a file by name for internal navigation, skipping the
+     * {@link org.apache.commons.vfs2.CacheStrategy#ON_RESOLVE} refresh. Cache 
policy should only
+     * apply to external API calls, not internal VFS plumbing like
+     * {@link #getParent()}, {@link #getChildren()}, or symlink resolution.
+     * <p>
+     * Subclasses should use this instead of {@code 
getFileSystem().resolveFile()}
+     * when navigating to related files (parent, children, link targets).
+     * </p>
+     *
+     * @param name The FileName to resolve.
+     * @return The resolved FileObject.
+     * @throws FileSystemException if an error occurs.
+     * @since 2.11.0
+     */
+    protected FileObject resolveFileInternal(final FileName name) throws 
FileSystemException {
+        return fileSystem.resolveFileInternal(name);
+    }
+
     private FileObject[] resolveFiles(final FileName[] children) throws 
FileSystemException {
         if (children == null) {
             return null;
diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
index 61d8ed0c8..75e7c26e1 100644
--- 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
+++ 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/AbstractFileSystem.java
@@ -528,24 +528,6 @@ public abstract class AbstractFileSystem extends 
AbstractVfsComponent implements
         return resolveFile(name, true, true);
     }
 
-    /**
-     * Resolves a file by name for internal navigation (e.g. {@code 
getParent()},
-     * {@code resolveFiles()} in {@code getChildren()}). Skips the
-     * {@link CacheStrategy#ON_RESOLVE} refresh, since cache policy should only
-     * apply to external API calls, not internal VFS plumbing. Without this,
-     * {@code ON_RESOLVE} triggers a refresh cascade where each child's
-     * {@code getParent()} refreshes the parent, clearing its cached state and
-     * causing O(N) redundant operations.
-     *
-     * @param name The FileName to resolve.
-     * @return The resolved FileObject.
-     * @throws FileSystemException if an error occurs.
-     * @since 2.11.0
-     */
-    synchronized FileObject resolveFileInternal(final FileName name) throws 
FileSystemException {
-        return resolveFile(name, true, false);
-    }
-
     /**
      * Resolves a file by name.
      *
@@ -609,6 +591,24 @@ public abstract class AbstractFileSystem extends 
AbstractVfsComponent implements
         return resolveFile(getFileSystemManager().resolveName(rootName, 
nameStr));
     }
 
+    /**
+     * Resolves a file by name for internal navigation (e.g. {@code 
getParent()},
+     * {@code resolveFiles()} in {@code getChildren()}). Skips the
+     * {@link CacheStrategy#ON_RESOLVE} refresh, since cache policy should only
+     * apply to external API calls, not internal VFS plumbing. Without this,
+     * {@code ON_RESOLVE} triggers a refresh cascade where each child's
+     * {@code getParent()} refreshes the parent, clearing its cached state and
+     * causing O(N) redundant operations.
+     *
+     * @param name The FileName to resolve.
+     * @return The resolved FileObject.
+     * @throws FileSystemException if an error occurs.
+     * @since 2.11.0
+     */
+    synchronized FileObject resolveFileInternal(final FileName name) throws 
FileSystemException {
+        return resolveFile(name, true, false);
+    }
+
     /**
      * Sets the attribute with the specified name. The default implementation 
simply throws an exception.
      *
diff --git 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClient.java
 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClient.java
index 2f6026d49..e722f0770 100644
--- 
a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClient.java
+++ 
b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/ftp/FtpClient.java
@@ -47,17 +47,6 @@ public interface FtpClient {
      */
     OutputStream appendFileStream(String relPath) throws IOException;
 
-    /**
-     * There are a few FTPClient methods that do not complete the entire 
sequence of FTP commands to complete a transaction.
-     * These commands require some action by the programmer after the 
reception of a positive intermediate command. After
-     * the programmer's code completes its actions, it must call this method 
to receive the completion reply from the server
-     * and verify the success of the entire transaction.
-     *
-     * @return true if successfully completed, false if not.
-     * @throws IOException If an I/O error occurs.
-     */
-    boolean completePendingCommand() throws IOException;
-
     /**
      * Changes the current working directory of the FTP session.
      *
@@ -70,6 +59,17 @@ public interface FtpClient {
         return false;
     }
 
+    /**
+     * There are a few FTPClient methods that do not complete the entire 
sequence of FTP commands to complete a transaction.
+     * These commands require some action by the programmer after the 
reception of a positive intermediate command. After
+     * the programmer's code completes its actions, it must call this method 
to receive the completion reply from the server
+     * and verify the success of the entire transaction.
+     *
+     * @return true if successfully completed, false if not.
+     * @throws IOException If an I/O error occurs.
+     */
+    boolean completePendingCommand() throws IOException;
+
     /**
      * Deletes a file on the FTP server.
      *
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractProviderTestCase.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractProviderTestCase.java
index 7459d79d7..96b0d03de 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractProviderTestCase.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractProviderTestCase.java
@@ -162,6 +162,36 @@ public abstract class AbstractProviderTestCase {
         return base;
     }
 
+    /**
+     * JUnit 5 lifecycle method to check capabilities before each test.
+     * Uses Assumptions to skip tests when capabilities are not met.
+     */
+    @BeforeEach
+    public void checkCapabilitiesJunit5() throws FileSystemException {
+        if (readFolder == null) {
+            return;
+        }
+
+        final Capability[] caps = getRequiredCapabilities();
+        if (caps != null) {
+            for (final Capability cap : caps) {
+                final FileSystem fs = getFileSystem();
+                Assumptions.assumeTrue(fs.hasCapability(cap),
+                    () -> "Skipping test because file system does not have 
capability: " + cap);
+            }
+        }
+    }
+
+    /**
+     * JUnit 5 lifecycle method to verify file system is properly closed after 
each test.
+     */
+    @AfterEach
+    public void checkFileSystemClosedJunit5() throws FileSystemException {
+        if (readFolder != null && ((AbstractFileSystem) 
readFolder.getFileSystem()).isOpen()) {
+            throw new IllegalStateException(getClass().getName() + ": 
filesystem has open streams after test");
+        }
+    }
+
     /**
      * creates a new uninitialized file system manager
      *
@@ -236,36 +266,6 @@ public abstract class AbstractProviderTestCase {
         return writeFolder;
     }
 
-    /**
-     * JUnit 5 lifecycle method to check capabilities before each test.
-     * Uses Assumptions to skip tests when capabilities are not met.
-     */
-    @BeforeEach
-    public void checkCapabilitiesJunit5() throws FileSystemException {
-        if (readFolder == null) {
-            return;
-        }
-
-        final Capability[] caps = getRequiredCapabilities();
-        if (caps != null) {
-            for (final Capability cap : caps) {
-                final FileSystem fs = getFileSystem();
-                Assumptions.assumeTrue(fs.hasCapability(cap),
-                    () -> "Skipping test because file system does not have 
capability: " + cap);
-            }
-        }
-    }
-
-    /**
-     * JUnit 5 lifecycle method to verify file system is properly closed after 
each test.
-     */
-    @AfterEach
-    public void checkFileSystemClosedJunit5() throws FileSystemException {
-        if (readFolder != null && ((AbstractFileSystem) 
readFolder.getFileSystem()).isOpen()) {
-            throw new IllegalStateException(getClass().getName() + ": 
filesystem has open streams after test");
-        }
-    }
-
     /**
      * Configures this test.
      */
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractProviderTestSuite.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractProviderTestSuite.java
index 5160e1715..8e2778eab 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractProviderTestSuite.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/AbstractProviderTestSuite.java
@@ -80,24 +80,6 @@ public abstract class AbstractProviderTestSuite {
         this.addEmptyDir = addEmptyDir;
     }
 
-    protected DefaultFileSystemManager getManager() {
-        return manager;
-    }
-
-    /**
-     * Gets the read test folder.
-     */
-    protected FileObject getReadFolder() {
-        return readFolder;
-    }
-
-    /**
-     * Gets the write test folder.
-     */
-    protected FileObject getWriteFolder() {
-        return writeFolder;
-    }
-
     /**
      * Adds base tests - excludes the nested test cases.
      * Subclasses should override this method to add test classes via {@link 
#addTests(Class)}.
@@ -125,6 +107,109 @@ public abstract class AbstractProviderTestSuite {
         }
     }
 
+    /**
+     * Creates dynamic tests for a single test class.
+     */
+    private Stream<DynamicTest> createTestsForClass(final Class<?> testClass) 
throws Exception {
+        final List<DynamicTest> tests = new ArrayList<>();
+
+        // Locate the test methods
+        final Method[] methods = testClass.getMethods();
+        for (final Method method : methods) {
+            if (!method.getName().startsWith("test") || 
Modifier.isStatic(method.getModifiers())
+                || method.getReturnType() != Void.TYPE || 
method.getParameterTypes().length != 0) {
+                continue;
+            }
+
+            // Create a dynamic test for this method
+            final String testName = prefix + method.getName();
+            tests.add(DynamicTest.dynamicTest(testName, () -> {
+                // Create test instance
+                final AbstractProviderTestCase testCase = 
(AbstractProviderTestCase) testClass.getConstructor().newInstance();
+                testCase.addEmptyDir(addEmptyDir);
+                testCase.setConfig(manager, providerConfig, baseFolder, 
readFolder, writeFolder);
+
+                // Check capabilities before running the test
+                final Capability[] caps = testCase.getRequiredCapabilities();
+                if (caps != null) {
+                    final FileSystem fs = testCase.getFileSystem();
+                    for (final Capability cap : caps) {
+                        if (!fs.hasCapability(cap)) {
+                            // Skip test if capability is not supported
+                            assumeTrue(false, "Skipping test because file 
system does not have capability: " + cap);
+                        }
+                    }
+                }
+
+                // Run the test method
+                try {
+                    method.invoke(testCase);
+                } catch (final java.lang.reflect.InvocationTargetException e) {
+                    throw e.getTargetException();
+                }
+
+                // Check that file system is properly closed
+                if (readFolder != null && 
((org.apache.commons.vfs2.provider.AbstractFileSystem) 
readFolder.getFileSystem()).isOpen()) {
+                    throw new IllegalStateException(testClass.getName() + ": 
filesystem has open streams after: " + method.getName());
+                }
+            }));
+        }
+
+        return tests.stream();
+    }
+
+    protected DefaultFileSystemManager getManager() {
+        return manager;
+    }
+
+    /**
+     * Gets the read test folder.
+     */
+    protected FileObject getReadFolder() {
+        return readFolder;
+    }
+
+    /**
+     * Gets the write test folder.
+     */
+    protected FileObject getWriteFolder() {
+        return writeFolder;
+    }
+
+    /**
+     * Creates dynamic tests for all test classes added via {@link 
#addTests(Class)}.
+     */
+    @TestFactory
+    Stream<DynamicTest> providerTests() throws Exception {
+        // Ensure setUp() has been called
+        // Note: @TestFactory is evaluated before @BeforeAll in some JUnit 5 
versions
+        setUp();
+
+        // Add test classes if not already added
+        if (testClasses.isEmpty()) {
+            addBaseTests();
+        }
+
+        // If no test classes were added and baseFolder is null, return empty 
stream
+        // This allows tests with only @Test methods (no base tests) to run
+        if (testClasses.isEmpty() && baseFolder == null) {
+            return Stream.empty();
+        }
+
+        if (testClasses.isEmpty()) {
+            fail("No test classes added");
+        }
+
+        return testClasses.stream()
+            .flatMap(testClass -> {
+                try {
+                    return createTestsForClass(testClass);
+                } catch (final Exception e) {
+                    throw new RuntimeException("Failed to create tests for " + 
testClass.getName(), e);
+                }
+            });
+    }
+
     @BeforeAll
     protected void setUp() throws Exception {
         if (isSetUp) {
@@ -203,90 +288,5 @@ public abstract class AbstractProviderTestSuite {
         checkTempDir("Temp dir not empty after test");
         VFS.close();
     }
-
-    /**
-     * Creates dynamic tests for all test classes added via {@link 
#addTests(Class)}.
-     */
-    @TestFactory
-    Stream<DynamicTest> providerTests() throws Exception {
-        // Ensure setUp() has been called
-        // Note: @TestFactory is evaluated before @BeforeAll in some JUnit 5 
versions
-        setUp();
-
-        // Add test classes if not already added
-        if (testClasses.isEmpty()) {
-            addBaseTests();
-        }
-
-        // If no test classes were added and baseFolder is null, return empty 
stream
-        // This allows tests with only @Test methods (no base tests) to run
-        if (testClasses.isEmpty() && baseFolder == null) {
-            return Stream.empty();
-        }
-
-        if (testClasses.isEmpty()) {
-            fail("No test classes added");
-        }
-
-        return testClasses.stream()
-            .flatMap(testClass -> {
-                try {
-                    return createTestsForClass(testClass);
-                } catch (final Exception e) {
-                    throw new RuntimeException("Failed to create tests for " + 
testClass.getName(), e);
-                }
-            });
-    }
-
-    /**
-     * Creates dynamic tests for a single test class.
-     */
-    private Stream<DynamicTest> createTestsForClass(final Class<?> testClass) 
throws Exception {
-        final List<DynamicTest> tests = new ArrayList<>();
-
-        // Locate the test methods
-        final Method[] methods = testClass.getMethods();
-        for (final Method method : methods) {
-            if (!method.getName().startsWith("test") || 
Modifier.isStatic(method.getModifiers())
-                || method.getReturnType() != Void.TYPE || 
method.getParameterTypes().length != 0) {
-                continue;
-            }
-
-            // Create a dynamic test for this method
-            final String testName = prefix + method.getName();
-            tests.add(DynamicTest.dynamicTest(testName, () -> {
-                // Create test instance
-                final AbstractProviderTestCase testCase = 
(AbstractProviderTestCase) testClass.getConstructor().newInstance();
-                testCase.addEmptyDir(addEmptyDir);
-                testCase.setConfig(manager, providerConfig, baseFolder, 
readFolder, writeFolder);
-
-                // Check capabilities before running the test
-                final Capability[] caps = testCase.getRequiredCapabilities();
-                if (caps != null) {
-                    final FileSystem fs = testCase.getFileSystem();
-                    for (final Capability cap : caps) {
-                        if (!fs.hasCapability(cap)) {
-                            // Skip test if capability is not supported
-                            assumeTrue(false, "Skipping test because file 
system does not have capability: " + cap);
-                        }
-                    }
-                }
-
-                // Run the test method
-                try {
-                    method.invoke(testCase);
-                } catch (final java.lang.reflect.InvocationTargetException e) {
-                    throw e.getTargetException();
-                }
-
-                // Check that file system is properly closed
-                if (readFolder != null && 
((org.apache.commons.vfs2.provider.AbstractFileSystem) 
readFolder.getFileSystem()).isOpen()) {
-                    throw new IllegalStateException(testClass.getName() + ": 
filesystem has open streams after: " + method.getName());
-                }
-            }));
-        }
-
-        return tests.stream();
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/IPv6LocalConnectionTests.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/IPv6LocalConnectionTests.java
index 2b79db245..29a78afb1 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/IPv6LocalConnectionTests.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/IPv6LocalConnectionTests.java
@@ -66,16 +66,6 @@ public class IPv6LocalConnectionTests extends 
AbstractProviderTestCase {
         return new Capability[] { Capability.URI, Capability.READ_CONTENT };
     }
 
-    @Test
-    public void testIPv6Connection() throws Throwable {
-        final List<String> localIPv6Addresses = getLocalIPv6Addresses();
-        if (localIPv6Addresses.isEmpty()) {
-            log.info("Local machine must have IPv6 address to run this test");
-            return;
-        }
-        // Test the IPv6 connection - actual test is in testConnectIPv6UrlLocal
-    }
-
     private FileSystemOptions setupConnectionTimeoutHints(final FileSystem 
fileSystem) {
         // Unfortunately there is no common way to set up timeouts for every 
protocol
         // So, we use this hacky approach to make this class generic and 
formally independent of protocols implementations
@@ -118,4 +108,14 @@ public class IPv6LocalConnectionTests extends 
AbstractProviderTestCase {
         assertTrue(connected, "None of the discovered local IPv6 network 
addresses has responded for connection: " + localIPv6Addresses);
     }
 
+    @Test
+    public void testIPv6Connection() throws Throwable {
+        final List<String> localIPv6Addresses = getLocalIPv6Addresses();
+        if (localIPv6Addresses.isEmpty()) {
+            log.info("Local machine must have IPv6 address to run this test");
+            return;
+        }
+        // Test the IPv6 connection - actual test is in testConnectIPv6UrlLocal
+    }
+
 }
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/filter/SizeFileFilterTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/filter/SizeFileFilterTest.java
index 43f34aa37..f3edb93bd 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/filter/SizeFileFilterTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/filter/SizeFileFilterTest.java
@@ -103,11 +103,6 @@ public class SizeFileFilterTest extends BaseFilterTest {
         zipFileObj = getZipFileObject(zipFile);
     }
 
-    @Test
-    public void testSizeFilterSizeNegative(){
-        assertThrows(IllegalArgumentException.class, () -> new 
SizeFileFilter(-1));
-    }
-
     @Test
     public void testSizeFileFilterLong() throws FileSystemException {
 
@@ -168,6 +163,11 @@ public class SizeFileFilterTest extends BaseFilterTest {
         assertEquals(1, files.length);
     }
 
+    @Test
+    public void testSizeFilterSizeNegative(){
+        assertThrows(IllegalArgumentException.class, () -> new 
SizeFileFilter(-1));
+    }
+
     @Test
     public void testSizeRangeFileFilter() throws FileSystemException {
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java
index a17d596e8..b6e5b8eaa 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java
@@ -33,11 +33,8 @@ public class UriParserBenchmark {
     private static final String PATH_TO_ENCODE = 
"file:///this/is/path/to/encode/for/testing/encode.perf";
     private static final char[] ENCODE_RESERVED = new char[] {' ', '#'};
 
-    @Benchmark
-    public void normalisePath() throws FileSystemException {
-        final StringBuilder path = new StringBuilder(PATH_TO_NORMALIZE);
-        UriParser.fixSeparators(path);
-        UriParser.normalisePath(path);
+    public void encode() throws FileSystemException {
+        UriParser.encode(PATH_TO_ENCODE, ENCODE_RESERVED);
     }
 
     @Benchmark
@@ -45,7 +42,10 @@ public class UriParserBenchmark {
         UriParser.extractScheme(SCHEMES, PATH_TO_NORMALIZE);
     }
 
-    public void encode() throws FileSystemException {
-        UriParser.encode(PATH_TO_ENCODE, ENCODE_RESERVED);
+    @Benchmark
+    public void normalisePath() throws FileSystemException {
+        final StringBuilder path = new StringBuilder(PATH_TO_NORMALIZE);
+        UriParser.fixSeparators(path);
+        UriParser.normalisePath(path);
     }
 }
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserTest.java
index 0bc4f88cf..5c72a3b10 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserTest.java
@@ -56,8 +56,13 @@ public class UriParserTest {
     }
 
     @Test
-    public void testIPv6CheckUriEncoding() throws FileSystemException {
-        
UriParser.checkUriEncoding("http://[fe80::14b5:1204:5410:64ca%en1]:8080";);
+    public void testDecodePercentInsideBracketsAfterDoubleSlashInPath() throws 
FileSystemException {
+        assertEquals("file:/a//[inside%text]",
+                UriParser.decode("file:/a//[inside%25text]"));
+        assertEquals("/a//outside%text[inside%text]tail",
+                UriParser.decode("/a//outside%25text[inside%25text]tail"));
+        assertEquals("ftp://host/redirect=http://other/[inside%text]";,
+                
UriParser.decode("ftp://host/redirect=http://other/[inside%25text]";));
     }
 
     @Test
@@ -70,16 +75,6 @@ public class UriParserTest {
                 
UriParser.decode("ftp://host/outside%25text[inside%25text]tail";));
     }
 
-    @Test
-    public void testDecodePercentInsideBracketsAfterDoubleSlashInPath() throws 
FileSystemException {
-        assertEquals("file:/a//[inside%text]",
-                UriParser.decode("file:/a//[inside%25text]"));
-        assertEquals("/a//outside%text[inside%text]tail",
-                UriParser.decode("/a//outside%25text[inside%25text]tail"));
-        assertEquals("ftp://host/redirect=http://other/[inside%text]";,
-                
UriParser.decode("ftp://host/redirect=http://other/[inside%25text]";));
-    }
-
     @Test
     public void testDecodePreservesPercentInsideIPv6Host() throws 
FileSystemException {
         assertEquals("ftp://[fe80::1%25eth0]/path";,
@@ -90,6 +85,11 @@ public class UriParserTest {
                 UriParser.decode("ftp://[fe80::1%25eth0]/[dir%25name]";));
     }
 
+    @Test
+    public void testIPv6CheckUriEncoding() throws FileSystemException {
+        
UriParser.checkUriEncoding("http://[fe80::14b5:1204:5410:64ca%en1]:8080";);
+    }
+
     @Test
     public void testNormalScheme() {
         assertEquals("ftp", UriParser.extractScheme(schemes, 
"ftp://user:pass@host/some/path/some:file";));
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpGetChildrenListCommandTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpGetChildrenListCommandTest.java
index a84d325e1..f5a1556b0 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpGetChildrenListCommandTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpGetChildrenListCommandTest.java
@@ -63,6 +63,15 @@ public class FtpGetChildrenListCommandTest {
     private static final AtomicInteger listCommandCount = new AtomicInteger();
     private static final LIST defaultListCommand = new LIST();
 
+    private static FileSystemOptions createOptions() {
+        final FileSystemOptions options = new FileSystemOptions();
+        final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
+        builder.setUserDirIsRoot(options, true);
+        builder.setPassiveMode(options, true);
+        builder.setConnectTimeout(options, Duration.ofSeconds(10));
+        return options;
+    }
+
     private File[] testFiles;
 
     @BeforeEach
@@ -99,15 +108,6 @@ public class FtpGetChildrenListCommandTest {
         }
     }
 
-    private static FileSystemOptions createOptions() {
-        final FileSystemOptions options = new FileSystemOptions();
-        final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
-        builder.setUserDirIsRoot(options, true);
-        builder.setPassiveMode(options, true);
-        builder.setConnectTimeout(options, Duration.ofSeconds(10));
-        return options;
-    }
-
     /**
      * Verifies that {@code findFiles()} on a directory with {@code N} children
      * issues exactly 1 LIST command. {@code findFiles()} internally calls
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderIPv6Test.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderIPv6Test.java
index 3d7613235..0925e56d5 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderIPv6Test.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderIPv6Test.java
@@ -41,37 +41,6 @@ import org.junit.jupiter.api.Test;
  */
 public class FtpProviderIPv6Test extends ProviderTestSuiteJunit5 {
 
-    public FtpProviderIPv6Test() throws Exception {
-        super(new FtpProviderIPv6TestConfig(), "", false);
-    }
-
-    @Override
-    protected void addBaseTests() throws Exception {
-        // Only add base tests if we have a real FTP server configured
-        if (getSystemTestUriOverride() != null) {
-            addTests(IPv6LocalConnectionTests.class);
-        }
-        // Otherwise, only the @Test methods in this class will run 
(testResolveIPv6Url)
-    }
-
-    /**
-     * Tests resolving an IPv6 URL.
-     */
-    @Test
-    public void testResolveIPv6Url() throws FileSystemException {
-        final String ipv6Url = "ftp://[fe80::1c42:dae:8370:aea6%en1]/file.txt";;
-        final FtpFileObject fileObject = (FtpFileObject) 
getManager().resolveFile(ipv6Url, new FileSystemOptions());
-        assertEquals("ftp://[fe80::1c42:dae:8370:aea6%en1]/";, 
fileObject.getFileSystem().getRootURI());
-        assertEquals("file.txt", fileObject.getRelPath());
-    }
-
-    /**
-     * Gets the system test URI override.
-     */
-    private static String getSystemTestUriOverride() {
-        return System.getProperty("test.ftp.uri");
-    }
-
     /**
      * Configuration for FTP IPv6 tests.
      */
@@ -98,5 +67,36 @@ public class FtpProviderIPv6Test extends 
ProviderTestSuiteJunit5 {
             return new FtpFileSystem(rootName, mock(FtpClient.class), 
fileSystemOptions);
         }
     }
+
+    /**
+     * Gets the system test URI override.
+     */
+    private static String getSystemTestUriOverride() {
+        return System.getProperty("test.ftp.uri");
+    }
+
+    public FtpProviderIPv6Test() throws Exception {
+        super(new FtpProviderIPv6TestConfig(), "", false);
+    }
+
+    @Override
+    protected void addBaseTests() throws Exception {
+        // Only add base tests if we have a real FTP server configured
+        if (getSystemTestUriOverride() != null) {
+            addTests(IPv6LocalConnectionTests.class);
+        }
+        // Otherwise, only the @Test methods in this class will run 
(testResolveIPv6Url)
+    }
+
+    /**
+     * Tests resolving an IPv6 URL.
+     */
+    @Test
+    public void testResolveIPv6Url() throws FileSystemException {
+        final String ipv6Url = "ftp://[fe80::1c42:dae:8370:aea6%en1]/file.txt";;
+        final FtpFileObject fileObject = (FtpFileObject) 
getManager().resolveFile(ipv6Url, new FileSystemOptions());
+        assertEquals("ftp://[fe80::1c42:dae:8370:aea6%en1]/";, 
fileObject.getFileSystem().getRootURI());
+        assertEquals("file.txt", fileObject.getRelPath());
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOffTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOffTest.java
index 465da4619..bf2895555 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOffTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOffTest.java
@@ -56,39 +56,72 @@ import org.junit.jupiter.api.AfterAll;
  */
 public class FtpProviderMdtmOffTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for FTP provider tests with MDTM disabled.
+     */
+    private static class FtpProviderMdtmOffTestConfig extends 
AbstractProviderTestConfig {
+
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            final FileSystemOptions options = new FileSystemOptions();
+            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
+            init(builder, options);
+            final FileObject remoteFolder = manager.resolveFile(uri, options);
+            final FtpFileObject ftpFileObject = remoteFolder instanceof 
DecoratedFileObject
+                    ? (FtpFileObject) ((DecoratedFileObject) 
remoteFolder).getDecoratedFileObject()
+                    : (FtpFileObject) remoteFolder;
+            final FtpFileSystem ftpFileSystem = (FtpFileSystem) 
ftpFileObject.getFileSystem();
+            final FTPClientWrapper client = (FTPClientWrapper) 
ftpFileSystem.getClient();
+            return remoteFolder;
+        }
+
+        protected void init(final FtpFileSystemConfigBuilder builder, final 
FileSystemOptions options) {
+            builder.setUserDirIsRoot(options, false);
+            builder.setPassiveMode(options, true);
+            builder.setFileType(options, FtpFileType.BINARY);
+            builder.setConnectTimeout(options, Duration.ofSeconds(10));
+            final Charset charset = StandardCharsets.UTF_8;
+            final String charsetName = charset.name();
+            builder.setControlEncoding(options, charsetName);
+            builder.setControlEncoding(options, charset);
+            builder.setControlKeepAliveReplyTimeout(options, 
Duration.ofSeconds(35));
+            builder.setControlKeepAliveTimeout(options, 
Duration.ofSeconds(30));
+            builder.setMdtmLastModifiedTime(options, false);
+        }
+
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("ftp", new FtpFileProvider());
+        }
+    }
     private static FtpServer server;
     private static int socketPort;
     private static String connectionUri;
     private static final String TEST_URI = "test.ftp.uri";
-    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
-
-    public FtpProviderMdtmOffTest() throws Exception {
-        super(new FtpProviderMdtmOffTestConfig(), "", false);
-    }
 
-    @Override
-    protected void addBaseTests() throws Exception {
-        addTests(FtpMdtmOffLastModifiedTests.class);
-    }
+    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
 
-    protected static String getSystemTestUriOverride() {
-        return System.getProperty(TEST_URI);
-    }
+    /**
+     * Returns a custom command factory that removes MDTM from FEAT response.
+     */
+    protected static CommandFactory getCommandFactory() {
+        final CommandFactoryFactory factory = new CommandFactoryFactory();
+        final String commandName = "FEAT";
+        factory.addCommand(commandName, (session, context, request) -> {
+            session.resetState();
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            setUpClass(getTestDirectory(), null, getCommandFactory());
-        }
-        super.setUp();
-    }
+            final String replyMsg = 
FtpReplyTranslator.translateMessage(session, request, context,
+                FtpReply.REPLY_211_SYSTEM_STATUS_REPLY, commandName, null);
+            final LocalizedFtpReply reply = new 
LocalizedFtpReply(FtpReply.REPLY_211_SYSTEM_STATUS_REPLY,
+                replyMsg.replaceFirst(" MDTM\\n", ""));
 
-    @AfterAll
-    public static void tearDownClass() {
-        if (server != null) {
-            server.stop();
-            server = null;
-        }
+            session.write(reply);
+        });
+        return factory.createCommandFactory();
     }
 
     public static String getConnectionUri() {
@@ -99,6 +132,10 @@ public class FtpProviderMdtmOffTest extends 
ProviderTestSuiteJunit5 {
         return socketPort;
     }
 
+    protected static String getSystemTestUriOverride() {
+        return System.getProperty(TEST_URI);
+    }
+
     /**
      * Creates and starts an embedded Apache FTP Server (MINA).
      */
@@ -140,66 +177,29 @@ public class FtpProviderMdtmOffTest extends 
ProviderTestSuiteJunit5 {
         connectionUri = "ftp://test:test@localhost:"; + socketPort;
     }
 
-    /**
-     * Returns a custom command factory that removes MDTM from FEAT response.
-     */
-    protected static CommandFactory getCommandFactory() {
-        final CommandFactoryFactory factory = new CommandFactoryFactory();
-        final String commandName = "FEAT";
-        factory.addCommand(commandName, (session, context, request) -> {
-            session.resetState();
-
-            final String replyMsg = 
FtpReplyTranslator.translateMessage(session, request, context,
-                FtpReply.REPLY_211_SYSTEM_STATUS_REPLY, commandName, null);
-            final LocalizedFtpReply reply = new 
LocalizedFtpReply(FtpReply.REPLY_211_SYSTEM_STATUS_REPLY,
-                replyMsg.replaceFirst(" MDTM\\n", ""));
-
-            session.write(reply);
-        });
-        return factory.createCommandFactory();
+    @AfterAll
+    public static void tearDownClass() {
+        if (server != null) {
+            server.stop();
+            server = null;
+        }
     }
 
-    /**
-     * Configuration for FTP provider tests with MDTM disabled.
-     */
-    private static class FtpProviderMdtmOffTestConfig extends 
AbstractProviderTestConfig {
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            final FileSystemOptions options = new FileSystemOptions();
-            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
-            init(builder, options);
-            final FileObject remoteFolder = manager.resolveFile(uri, options);
-            final FtpFileObject ftpFileObject = remoteFolder instanceof 
DecoratedFileObject
-                    ? (FtpFileObject) ((DecoratedFileObject) 
remoteFolder).getDecoratedFileObject()
-                    : (FtpFileObject) remoteFolder;
-            final FtpFileSystem ftpFileSystem = (FtpFileSystem) 
ftpFileObject.getFileSystem();
-            final FTPClientWrapper client = (FTPClientWrapper) 
ftpFileSystem.getClient();
-            return remoteFolder;
-        }
+    public FtpProviderMdtmOffTest() throws Exception {
+        super(new FtpProviderMdtmOffTestConfig(), "", false);
+    }
 
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("ftp", new FtpFileProvider());
-        }
+    @Override
+    protected void addBaseTests() throws Exception {
+        addTests(FtpMdtmOffLastModifiedTests.class);
+    }
 
-        protected void init(final FtpFileSystemConfigBuilder builder, final 
FileSystemOptions options) {
-            builder.setUserDirIsRoot(options, false);
-            builder.setPassiveMode(options, true);
-            builder.setFileType(options, FtpFileType.BINARY);
-            builder.setConnectTimeout(options, Duration.ofSeconds(10));
-            final Charset charset = StandardCharsets.UTF_8;
-            final String charsetName = charset.name();
-            builder.setControlEncoding(options, charsetName);
-            builder.setControlEncoding(options, charset);
-            builder.setControlKeepAliveReplyTimeout(options, 
Duration.ofSeconds(35));
-            builder.setControlKeepAliveTimeout(options, 
Duration.ofSeconds(30));
-            builder.setMdtmLastModifiedTime(options, false);
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            setUpClass(getTestDirectory(), null, getCommandFactory());
         }
+        super.setUp();
     }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOnRefreshTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOnRefreshTest.java
index 8fa6d2207..07101b134 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOnRefreshTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOnRefreshTest.java
@@ -51,40 +51,54 @@ import org.junit.jupiter.api.AfterAll;
  */
 public class FtpProviderMdtmOnRefreshTest extends ProviderTestSuiteJunit5 {
 
-    private static FtpServer server;
-    private static int socketPort;
-    private static String connectionUri;
-    private static final String TEST_URI = "test.ftp.uri";
-    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
-
-    public FtpProviderMdtmOnRefreshTest() throws Exception {
-        super(new FtpProviderMdtmOnRefreshTestConfig(), "", false);
-    }
-
-    @Override
-    protected void addBaseTests() throws Exception {
-        addTests(FtpMdtmOnRefreshLastModifiedTests.class);
-    }
+    /**
+     * Configuration for FTP provider tests with MDTM enabled and refresh 
behavior.
+     */
+    private static class FtpProviderMdtmOnRefreshTestConfig extends 
AbstractProviderTestConfig {
 
-    protected static String getSystemTestUriOverride() {
-        return System.getProperty(TEST_URI);
-    }
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            final FileSystemOptions options = new FileSystemOptions();
+            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
+            init(builder, options);
+            final FileObject remoteFolder = manager.resolveFile(uri, options);
+            final FtpFileObject ftpFileObject = remoteFolder instanceof 
DecoratedFileObject
+                    ? (FtpFileObject) ((DecoratedFileObject) 
remoteFolder).getDecoratedFileObject()
+                    : (FtpFileObject) remoteFolder;
+            final FtpFileSystem ftpFileSystem = (FtpFileSystem) 
ftpFileObject.getFileSystem();
+            final FTPClientWrapper client = (FTPClientWrapper) 
ftpFileSystem.getClient();
+            return remoteFolder;
+        }
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            setUpClass(getTestDirectory(), null, null);
+        protected void init(final FtpFileSystemConfigBuilder builder, final 
FileSystemOptions options) {
+            builder.setUserDirIsRoot(options, false);
+            builder.setPassiveMode(options, true);
+            builder.setFileType(options, FtpFileType.BINARY);
+            builder.setConnectTimeout(options, Duration.ofSeconds(10));
+            final Charset charset = StandardCharsets.UTF_8;
+            final String charsetName = charset.name();
+            builder.setControlEncoding(options, charsetName);
+            builder.setControlEncoding(options, charset);
+            builder.setControlKeepAliveReplyTimeout(options, 
Duration.ofSeconds(35));
+            builder.setControlKeepAliveTimeout(options, 
Duration.ofSeconds(30));
+            builder.setMdtmLastModifiedTime(options, true);
         }
-        super.setUp();
-    }
 
-    @AfterAll
-    public static void tearDownClass() {
-        if (server != null) {
-            server.stop();
-            server = null;
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("ftp", new FtpFileProvider());
         }
     }
+    private static FtpServer server;
+    private static int socketPort;
+    private static String connectionUri;
+    private static final String TEST_URI = "test.ftp.uri";
+
+    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
 
     public static String getConnectionUri() {
         return connectionUri;
@@ -94,6 +108,10 @@ public class FtpProviderMdtmOnRefreshTest extends 
ProviderTestSuiteJunit5 {
         return socketPort;
     }
 
+    protected static String getSystemTestUriOverride() {
+        return System.getProperty(TEST_URI);
+    }
+
     /**
      * Creates and starts an embedded Apache FTP Server (MINA).
      */
@@ -135,47 +153,29 @@ public class FtpProviderMdtmOnRefreshTest extends 
ProviderTestSuiteJunit5 {
         connectionUri = "ftp://test:test@localhost:"; + socketPort;
     }
 
-    /**
-     * Configuration for FTP provider tests with MDTM enabled and refresh 
behavior.
-     */
-    private static class FtpProviderMdtmOnRefreshTestConfig extends 
AbstractProviderTestConfig {
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            final FileSystemOptions options = new FileSystemOptions();
-            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
-            init(builder, options);
-            final FileObject remoteFolder = manager.resolveFile(uri, options);
-            final FtpFileObject ftpFileObject = remoteFolder instanceof 
DecoratedFileObject
-                    ? (FtpFileObject) ((DecoratedFileObject) 
remoteFolder).getDecoratedFileObject()
-                    : (FtpFileObject) remoteFolder;
-            final FtpFileSystem ftpFileSystem = (FtpFileSystem) 
ftpFileObject.getFileSystem();
-            final FTPClientWrapper client = (FTPClientWrapper) 
ftpFileSystem.getClient();
-            return remoteFolder;
+    @AfterAll
+    public static void tearDownClass() {
+        if (server != null) {
+            server.stop();
+            server = null;
         }
+    }
 
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("ftp", new FtpFileProvider());
-        }
+    public FtpProviderMdtmOnRefreshTest() throws Exception {
+        super(new FtpProviderMdtmOnRefreshTestConfig(), "", false);
+    }
 
-        protected void init(final FtpFileSystemConfigBuilder builder, final 
FileSystemOptions options) {
-            builder.setUserDirIsRoot(options, false);
-            builder.setPassiveMode(options, true);
-            builder.setFileType(options, FtpFileType.BINARY);
-            builder.setConnectTimeout(options, Duration.ofSeconds(10));
-            final Charset charset = StandardCharsets.UTF_8;
-            final String charsetName = charset.name();
-            builder.setControlEncoding(options, charsetName);
-            builder.setControlEncoding(options, charset);
-            builder.setControlKeepAliveReplyTimeout(options, 
Duration.ofSeconds(35));
-            builder.setControlKeepAliveTimeout(options, 
Duration.ofSeconds(30));
-            builder.setMdtmLastModifiedTime(options, true);
+    @Override
+    protected void addBaseTests() throws Exception {
+        addTests(FtpMdtmOnRefreshLastModifiedTests.class);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            setUpClass(getTestDirectory(), null, null);
         }
+        super.setUp();
     }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOnTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOnTest.java
index 7a12d3f7f..0ecd45d8f 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOnTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderMdtmOnTest.java
@@ -51,40 +51,54 @@ import org.junit.jupiter.api.AfterAll;
  */
 public class FtpProviderMdtmOnTest extends ProviderTestSuiteJunit5 {
 
-    private static FtpServer server;
-    private static int socketPort;
-    private static String connectionUri;
-    private static final String TEST_URI = "test.ftp.uri";
-    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
-
-    public FtpProviderMdtmOnTest() throws Exception {
-        super(new FtpProviderMdtmOnTestConfig(), "", false);
-    }
-
-    @Override
-    protected void addBaseTests() throws Exception {
-        addTests(FtpMdtmOnLastModifiedTests.class);
-    }
+    /**
+     * Configuration for FTP provider tests with MDTM enabled.
+     */
+    private static class FtpProviderMdtmOnTestConfig extends 
AbstractProviderTestConfig {
 
-    protected static String getSystemTestUriOverride() {
-        return System.getProperty(TEST_URI);
-    }
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            final FileSystemOptions options = new FileSystemOptions();
+            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
+            init(builder, options);
+            final FileObject remoteFolder = manager.resolveFile(uri, options);
+            final FtpFileObject ftpFileObject = remoteFolder instanceof 
DecoratedFileObject
+                    ? (FtpFileObject) ((DecoratedFileObject) 
remoteFolder).getDecoratedFileObject()
+                    : (FtpFileObject) remoteFolder;
+            final FtpFileSystem ftpFileSystem = (FtpFileSystem) 
ftpFileObject.getFileSystem();
+            final FTPClientWrapper client = (FTPClientWrapper) 
ftpFileSystem.getClient();
+            return remoteFolder;
+        }
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            setUpClass(getTestDirectory(), null, null);
+        protected void init(final FtpFileSystemConfigBuilder builder, final 
FileSystemOptions options) {
+            builder.setUserDirIsRoot(options, false);
+            builder.setPassiveMode(options, true);
+            builder.setFileType(options, FtpFileType.BINARY);
+            builder.setConnectTimeout(options, Duration.ofSeconds(10));
+            final Charset charset = StandardCharsets.UTF_8;
+            final String charsetName = charset.name();
+            builder.setControlEncoding(options, charsetName);
+            builder.setControlEncoding(options, charset);
+            builder.setControlKeepAliveReplyTimeout(options, 
Duration.ofSeconds(35));
+            builder.setControlKeepAliveTimeout(options, 
Duration.ofSeconds(30));
+            builder.setMdtmLastModifiedTime(options, true);
         }
-        super.setUp();
-    }
 
-    @AfterAll
-    public static void tearDownClass() {
-        if (server != null) {
-            server.stop();
-            server = null;
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("ftp", new FtpFileProvider());
         }
     }
+    private static FtpServer server;
+    private static int socketPort;
+    private static String connectionUri;
+    private static final String TEST_URI = "test.ftp.uri";
+
+    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
 
     public static String getConnectionUri() {
         return connectionUri;
@@ -94,6 +108,10 @@ public class FtpProviderMdtmOnTest extends 
ProviderTestSuiteJunit5 {
         return socketPort;
     }
 
+    protected static String getSystemTestUriOverride() {
+        return System.getProperty(TEST_URI);
+    }
+
     /**
      * Creates and starts an embedded Apache FTP Server (MINA).
      */
@@ -135,47 +153,29 @@ public class FtpProviderMdtmOnTest extends 
ProviderTestSuiteJunit5 {
         connectionUri = "ftp://test:test@localhost:"; + socketPort;
     }
 
-    /**
-     * Configuration for FTP provider tests with MDTM enabled.
-     */
-    private static class FtpProviderMdtmOnTestConfig extends 
AbstractProviderTestConfig {
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            final FileSystemOptions options = new FileSystemOptions();
-            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
-            init(builder, options);
-            final FileObject remoteFolder = manager.resolveFile(uri, options);
-            final FtpFileObject ftpFileObject = remoteFolder instanceof 
DecoratedFileObject
-                    ? (FtpFileObject) ((DecoratedFileObject) 
remoteFolder).getDecoratedFileObject()
-                    : (FtpFileObject) remoteFolder;
-            final FtpFileSystem ftpFileSystem = (FtpFileSystem) 
ftpFileObject.getFileSystem();
-            final FTPClientWrapper client = (FTPClientWrapper) 
ftpFileSystem.getClient();
-            return remoteFolder;
+    @AfterAll
+    public static void tearDownClass() {
+        if (server != null) {
+            server.stop();
+            server = null;
         }
+    }
 
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("ftp", new FtpFileProvider());
-        }
+    public FtpProviderMdtmOnTest() throws Exception {
+        super(new FtpProviderMdtmOnTestConfig(), "", false);
+    }
 
-        protected void init(final FtpFileSystemConfigBuilder builder, final 
FileSystemOptions options) {
-            builder.setUserDirIsRoot(options, false);
-            builder.setPassiveMode(options, true);
-            builder.setFileType(options, FtpFileType.BINARY);
-            builder.setConnectTimeout(options, Duration.ofSeconds(10));
-            final Charset charset = StandardCharsets.UTF_8;
-            final String charsetName = charset.name();
-            builder.setControlEncoding(options, charsetName);
-            builder.setControlEncoding(options, charset);
-            builder.setControlKeepAliveReplyTimeout(options, 
Duration.ofSeconds(35));
-            builder.setControlKeepAliveTimeout(options, 
Duration.ofSeconds(30));
-            builder.setMdtmLastModifiedTime(options, true);
+    @Override
+    protected void addBaseTests() throws Exception {
+        addTests(FtpMdtmOnLastModifiedTests.class);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            setUpClass(getTestDirectory(), null, null);
         }
+        super.setUp();
     }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderTest.java
index cca3f4709..ec4637092 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderTest.java
@@ -52,37 +52,60 @@ import org.junit.jupiter.api.AfterAll;
  */
 public class FtpProviderTest extends ProviderTestSuiteJunit5 {
 
-    private static FtpServer server;
-    private static int socketPort;
-    private static String connectionUri;
-    private static final String TEST_URI = "test.ftp.uri";
-    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
+    /**
+     * Configuration for FTP provider tests.
+     */
+    private static class FtpProviderTestConfig extends 
AbstractProviderTestConfig {
 
-    private final boolean mdtmLastModifiedTime = false;
+        private final boolean mdtmLastModifiedTime;
 
-    public FtpProviderTest() throws Exception {
-        super(new FtpProviderTestConfig(false), "", false);
-    }
+        FtpProviderTestConfig(final boolean mdtmLastModifiedTime) {
+            this.mdtmLastModifiedTime = mdtmLastModifiedTime;
+        }
 
-    protected static String getSystemTestUriOverride() {
-        return System.getProperty(TEST_URI);
-    }
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            final FileSystemOptions options = new FileSystemOptions();
+            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
+            init(builder, options);
+            final FileObject remoteFolder = manager.resolveFile(uri, options);
+            final FtpFileObject ftpFileObject = remoteFolder instanceof 
DecoratedFileObject
+                    ? (FtpFileObject) ((DecoratedFileObject) 
remoteFolder).getDecoratedFileObject()
+                    : (FtpFileObject) remoteFolder;
+            final FtpFileSystem ftpFileSystem = (FtpFileSystem) 
ftpFileObject.getFileSystem();
+            final FTPClientWrapper client = (FTPClientWrapper) 
ftpFileSystem.getClient();
+            return remoteFolder;
+        }
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            setUpClass(getFtpRootDir(), getFtpFileSystem(), 
getCommandFactory());
+        protected void init(final FtpFileSystemConfigBuilder builder, final 
FileSystemOptions options) {
+            builder.setUserDirIsRoot(options, false);
+            builder.setPassiveMode(options, true);
+            builder.setFileType(options, FtpFileType.BINARY);
+            builder.setConnectTimeout(options, Duration.ofSeconds(10));
+            final Charset charset = StandardCharsets.UTF_8;
+            final String charsetName = charset.name();
+            builder.setControlEncoding(options, charsetName);
+            builder.setControlEncoding(options, charset);
+            builder.setControlKeepAliveReplyTimeout(options, 
Duration.ofSeconds(35));
+            builder.setControlKeepAliveTimeout(options, 
Duration.ofSeconds(30));
+            builder.setMdtmLastModifiedTime(options, mdtmLastModifiedTime);
         }
-        super.setUp();
-    }
 
-    @AfterAll
-    public static void tearDownClass() {
-        if (server != null) {
-            server.stop();
-            server = null;
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("ftp", new FtpFileProvider());
         }
     }
+    private static FtpServer server;
+    private static int socketPort;
+    private static String connectionUri;
+    private static final String TEST_URI = "test.ftp.uri";
+
+    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
 
     public static String getConnectionUri() {
         return connectionUri;
@@ -92,6 +115,10 @@ public class FtpProviderTest extends 
ProviderTestSuiteJunit5 {
         return socketPort;
     }
 
+    protected static String getSystemTestUriOverride() {
+        return System.getProperty(TEST_URI);
+    }
+
     /**
      * Creates and starts an embedded Apache FTP Server (MINA).
      */
@@ -126,69 +153,42 @@ public class FtpProviderTest extends 
ProviderTestSuiteJunit5 {
         connectionUri = "ftp://test:test@localhost:"; + socketPort;
     }
 
-    protected String getFtpRootDir() {
-        return getTestDirectory();
+    @AfterAll
+    public static void tearDownClass() {
+        if (server != null) {
+            server.stop();
+            server = null;
+        }
     }
 
-    protected FileSystemFactory getFtpFileSystem() throws IOException {
-        return null;
+    private final boolean mdtmLastModifiedTime = false;
+
+    public FtpProviderTest() throws Exception {
+        super(new FtpProviderTestConfig(false), "", false);
     }
 
     protected CommandFactory getCommandFactory() {
         return null;
     }
 
-    protected boolean getUserDirIsRoot() {
-        return false;
+    protected FileSystemFactory getFtpFileSystem() throws IOException {
+        return null;
     }
 
-    /**
-     * Configuration for FTP provider tests.
-     */
-    private static class FtpProviderTestConfig extends 
AbstractProviderTestConfig {
-
-        private final boolean mdtmLastModifiedTime;
-
-        FtpProviderTestConfig(final boolean mdtmLastModifiedTime) {
-            this.mdtmLastModifiedTime = mdtmLastModifiedTime;
-        }
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            final FileSystemOptions options = new FileSystemOptions();
-            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
-            init(builder, options);
-            final FileObject remoteFolder = manager.resolveFile(uri, options);
-            final FtpFileObject ftpFileObject = remoteFolder instanceof 
DecoratedFileObject
-                    ? (FtpFileObject) ((DecoratedFileObject) 
remoteFolder).getDecoratedFileObject()
-                    : (FtpFileObject) remoteFolder;
-            final FtpFileSystem ftpFileSystem = (FtpFileSystem) 
ftpFileObject.getFileSystem();
-            final FTPClientWrapper client = (FTPClientWrapper) 
ftpFileSystem.getClient();
-            return remoteFolder;
-        }
+    protected String getFtpRootDir() {
+        return getTestDirectory();
+    }
 
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("ftp", new FtpFileProvider());
-        }
+    protected boolean getUserDirIsRoot() {
+        return false;
+    }
 
-        protected void init(final FtpFileSystemConfigBuilder builder, final 
FileSystemOptions options) {
-            builder.setUserDirIsRoot(options, false);
-            builder.setPassiveMode(options, true);
-            builder.setFileType(options, FtpFileType.BINARY);
-            builder.setConnectTimeout(options, Duration.ofSeconds(10));
-            final Charset charset = StandardCharsets.UTF_8;
-            final String charsetName = charset.name();
-            builder.setControlEncoding(options, charsetName);
-            builder.setControlEncoding(options, charset);
-            builder.setControlKeepAliveReplyTimeout(options, 
Duration.ofSeconds(35));
-            builder.setControlKeepAliveTimeout(options, 
Duration.ofSeconds(30));
-            builder.setMdtmLastModifiedTime(options, mdtmLastModifiedTime);
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            setUpClass(getFtpRootDir(), getFtpFileSystem(), 
getCommandFactory());
         }
+        super.setUp();
     }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderUserDirTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderUserDirTest.java
index c78dafab8..f2932f99f 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderUserDirTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftp/FtpProviderUserDirTest.java
@@ -51,37 +51,40 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class FtpProviderUserDirTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for FTP provider tests with homeDirIsRoot=true.
+     */
+    private static class FtpProviderUserDirTestConfig extends 
AbstractProviderTestConfig {
+
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            final FileSystemOptions options = new FileSystemOptions();
+            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
+            builder.setUserDirIsRoot(options, true);
+            final FileObject remoteFolder = manager.resolveFile(uri, options);
+            return remoteFolder;
+        }
+
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("ftp", new FtpFileProvider());
+        }
+    }
     private static FtpServer server;
     private static int socketPort;
     private static String connectionUri;
     private static final String TEST_URI = "test.ftp.uri";
-    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
 
-    public FtpProviderUserDirTest() throws Exception {
-        super(new FtpProviderUserDirTestConfig(), "", false);
-    }
+    private static final String USER_PROPS_RES = 
"org.apache.ftpserver/users.properties";
 
     protected static String getSystemTestUriOverride() {
         return System.getProperty(TEST_URI);
     }
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            setUpClass();
-        }
-        super.setUp();
-    }
-
-    @AfterAll
-    protected void tearDown() throws Exception {
-        try {
-            super.tearDown();
-        } finally {
-            tearDownClass();
-        }
-    }
-
     /**
      * Starts the embedded Apache FTP Server (MINA).
      */
@@ -152,27 +155,24 @@ public class FtpProviderUserDirTest extends 
ProviderTestSuiteJunit5 {
         }
     }
 
-    /**
-     * Configuration for FTP provider tests with homeDirIsRoot=true.
-     */
-    private static class FtpProviderUserDirTestConfig extends 
AbstractProviderTestConfig {
+    public FtpProviderUserDirTest() throws Exception {
+        super(new FtpProviderUserDirTestConfig(), "", false);
+    }
 
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            final FileSystemOptions options = new FileSystemOptions();
-            final FtpFileSystemConfigBuilder builder = 
FtpFileSystemConfigBuilder.getInstance();
-            builder.setUserDirIsRoot(options, true);
-            final FileObject remoteFolder = manager.resolveFile(uri, options);
-            return remoteFolder;
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            setUpClass();
         }
+        super.setUp();
+    }
 
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("ftp", new FtpFileProvider());
+    @AfterAll
+    protected void tearDown() throws Exception {
+        try {
+            super.tearDown();
+        } finally {
+            tearDownClass();
         }
     }
 }
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftps/FtpsProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftps/FtpsProviderTest.java
index c69870ff5..ca60254e5 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftps/FtpsProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ftps/FtpsProviderTest.java
@@ -45,6 +45,16 @@ public class FtpsProviderTest {
             super(new FtpsProviderExplicitTestCase(), "", false);
         }
 
+        @Override
+        protected void setUp() throws Exception {
+            try {
+                super.setUp();
+            } catch (final FileSystemException e) {
+                // Could not connect to FTP server - abort test
+                throw new TestAbortedException("Could not connect to FTP 
server: " + e.getMessage(), e);
+            }
+        }
+
         @BeforeAll
         void setUpServer() throws Exception {
             if (FtpsProviderExplicitTestCase.getSystemTestUriOverride() == 
null) {
@@ -57,16 +67,6 @@ public class FtpsProviderTest {
             }
         }
 
-        @Override
-        protected void setUp() throws Exception {
-            try {
-                super.setUp();
-            } catch (final FileSystemException e) {
-                // Could not connect to FTP server - abort test
-                throw new TestAbortedException("Could not connect to FTP 
server: " + e.getMessage(), e);
-            }
-        }
-
         @AfterAll
         void tearDownServer() throws Exception {
             try {
@@ -93,6 +93,16 @@ public class FtpsProviderTest {
             super(new FtpsProviderImplicitTestCase(), "", false);
         }
 
+        @Override
+        protected void setUp() throws Exception {
+            try {
+                super.setUp();
+            } catch (final FileSystemException e) {
+                // Could not connect to FTP server - abort test
+                throw new TestAbortedException("Could not connect to FTP 
server: " + e.getMessage(), e);
+            }
+        }
+
         @BeforeAll
         void setUpServer() throws Exception {
             if (FtpsProviderImplicitTestCase.getSystemTestUriOverride() == 
null) {
@@ -105,16 +115,6 @@ public class FtpsProviderTest {
             }
         }
 
-        @Override
-        protected void setUp() throws Exception {
-            try {
-                super.setUp();
-            } catch (final FileSystemException e) {
-                // Could not connect to FTP server - abort test
-                throw new TestAbortedException("Could not connect to FTP 
server: " + e.getMessage(), e);
-            }
-        }
-
         @AfterAll
         void tearDownServer() throws Exception {
             try {
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http/HttpProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http/HttpProviderTest.java
index 7302c6473..0639b4fe9 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http/HttpProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http/HttpProviderTest.java
@@ -52,6 +52,32 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class HttpProviderTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for HTTP provider tests.
+     */
+    private static class HttpProviderTestConfig extends 
AbstractProviderTestConfig {
+
+        /**
+         * Returns the base folder for tests.
+         */
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            return manager.resolveFile(uri);
+        }
+
+        /**
+         * Prepares the file system manager.
+         */
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("http", new HttpFileProvider());
+        }
+    }
+
     private static final Duration ONE_MINUTE = Duration.ofMinutes(1);
 
     private static NHttpFileServer server;
@@ -71,24 +97,6 @@ public class HttpProviderTest extends 
ProviderTestSuiteJunit5 {
         super(new HttpProviderTestConfig(), "", false);
     }
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            server = NHttpFileServer.start(0, new File(getTestDirectory()), 
5000);
-            connectionUri = 
AbstractProviderTestConfig.getLocalHostUriString("http", server.getPort());
-        }
-        super.setUp();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        if (server != null) {
-            server.close();
-            server = null;
-        }
-        super.tearDown();
-    }
-
     @Override
     protected void addBaseTests() throws Exception {
         // Add standard provider tests
@@ -106,13 +114,31 @@ public class HttpProviderTest extends 
ProviderTestSuiteJunit5 {
         // }
     }
 
-    // ==================== HTTP-Specific Tests ====================
-
     private void checkReadTestsFolder(final FileObject file) throws 
FileSystemException {
         assertNotNull(file.getChildren());
         assertTrue(file.getChildren().length > 0);
     }
 
+    // ==================== HTTP-Specific Tests ====================
+
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            server = NHttpFileServer.start(0, new File(getTestDirectory()), 
5000);
+            connectionUri = 
AbstractProviderTestConfig.getLocalHostUriString("http", server.getPort());
+        }
+        super.setUp();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        if (server != null) {
+            server.close();
+            server = null;
+        }
+        super.tearDown();
+    }
+
     /** Ensure VFS-453 options are present. */
     @Test
     public void testHttpTimeoutConfig() {
@@ -191,31 +217,5 @@ public class HttpProviderTest extends 
ProviderTestSuiteJunit5 {
         assertEquals("http://[fe80::1c42:dae:8370:aea6%en1]/";, 
fileObject.getFileSystem().getRootURI());
         assertEquals("http://[fe80::1c42:dae:8370:aea6%en1]/file.txt";, 
fileObject.getName().getURI());
     }
-
-    /**
-     * Configuration for HTTP provider tests.
-     */
-    private static class HttpProviderTestConfig extends 
AbstractProviderTestConfig {
-
-        /**
-         * Returns the base folder for tests.
-         */
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            return manager.resolveFile(uri);
-        }
-
-        /**
-         * Prepares the file system manager.
-         */
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("http", new HttpFileProvider());
-        }
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http4/Http4ProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http4/Http4ProviderTest.java
index b3f2d6351..57adf371a 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http4/Http4ProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http4/Http4ProviderTest.java
@@ -46,28 +46,45 @@ import org.junit.jupiter.api.Test;
  */
 public class Http4ProviderTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for HTTP4 provider tests.
+     */
+    private static class Http4ProviderTestConfig extends 
AbstractProviderTestConfig {
+
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            return manager.resolveFile(uri, getFileSystemOptions());
+        }
+
+        private FileSystemOptions getFileSystemOptions() {
+            final FileSystemOptions opts = new FileSystemOptions();
+            final Http4FileSystemConfigBuilder builder = 
Http4FileSystemConfigBuilder.getInstance();
+            builder.setMaxTotalConnections(opts, 200);
+            builder.setMaxConnectionsPerHost(opts, 200);
+            return opts;
+        }
+
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            if (!manager.hasProvider("http4")) {
+                manager.addProvider("http4", new Http4FileProvider());
+            }
+        }
+    }
     private static final Duration ONE_MINUTE = Duration.ofMinutes(1);
     private static NHttpFileServer server;
     private static final String TEST_URI = "test.http.uri";
-    private static String connectionUri;
 
-    public Http4ProviderTest() throws Exception {
-        super(new Http4ProviderTestConfig(), "", false);
-    }
+    private static String connectionUri;
 
     private static String getSystemTestUriOverride() {
         return System.getProperty(TEST_URI);
     }
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            server = NHttpFileServer.start(0, new File(getTestDirectory()), 
5000);
-            connectionUri = 
AbstractProviderTestConfig.getLocalHostUriString("http4", server.getPort());
-        }
-        super.setUp();
-    }
-
     @AfterAll
     public static void tearDownClass() throws InterruptedException {
         if (server != null) {
@@ -75,6 +92,10 @@ public class Http4ProviderTest extends 
ProviderTestSuiteJunit5 {
         }
     }
 
+    public Http4ProviderTest() throws Exception {
+        super(new Http4ProviderTestConfig(), "", false);
+    }
+
     @Override
     protected void addBaseTests() throws Exception {
         super.addBaseTests();
@@ -88,6 +109,15 @@ public class Http4ProviderTest extends 
ProviderTestSuiteJunit5 {
         assertTrue(file.getChildren().length > 0);
     }
 
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            server = NHttpFileServer.start(0, new File(getTestDirectory()), 
5000);
+            connectionUri = 
AbstractProviderTestConfig.getLocalHostUriString("http4", server.getPort());
+        }
+        super.setUp();
+    }
+
     @SuppressWarnings("deprecation")
     @Test
     public void testHttpTimeoutConfig() {
@@ -165,35 +195,5 @@ public class Http4ProviderTest extends 
ProviderTestSuiteJunit5 {
         assertEquals("http4://[fe80::1c42:dae:8370:aea6%en1]/", 
fileObject.getFileSystem().getRootURI());
         assertEquals("http4://[fe80::1c42:dae:8370:aea6%en1]/", 
fileObject.getName().getURI());
     }
-
-    /**
-     * Configuration for HTTP4 provider tests.
-     */
-    private static class Http4ProviderTestConfig extends 
AbstractProviderTestConfig {
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            return manager.resolveFile(uri, getFileSystemOptions());
-        }
-
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            if (!manager.hasProvider("http4")) {
-                manager.addProvider("http4", new Http4FileProvider());
-            }
-        }
-
-        private FileSystemOptions getFileSystemOptions() {
-            final FileSystemOptions opts = new FileSystemOptions();
-            final Http4FileSystemConfigBuilder builder = 
Http4FileSystemConfigBuilder.getInstance();
-            builder.setMaxTotalConnections(opts, 200);
-            builder.setMaxConnectionsPerHost(opts, 200);
-            return opts;
-        }
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http5/Http5ProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http5/Http5ProviderTest.java
index 19efd7f17..378a6b1db 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http5/Http5ProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/http5/Http5ProviderTest.java
@@ -47,28 +47,45 @@ import org.junit.jupiter.api.Test;
  */
 public class Http5ProviderTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for HTTP5 provider tests.
+     */
+    private static class Http5ProviderTestConfig extends 
AbstractProviderTestConfig {
+
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            return manager.resolveFile(uri, getFileSystemOptions());
+        }
+
+        private FileSystemOptions getFileSystemOptions() {
+            final FileSystemOptions opts = new FileSystemOptions();
+            final Http5FileSystemConfigBuilder builder = 
Http5FileSystemConfigBuilder.getInstance();
+            builder.setMaxTotalConnections(opts, 200);
+            builder.setMaxConnectionsPerHost(opts, 200);
+            return opts;
+        }
+
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            if (!manager.hasProvider("http5")) {
+                manager.addProvider("http5", new Http5FileProvider());
+            }
+        }
+    }
     private static final Duration ONE_MINUTE = Duration.ofMinutes(1);
     private static NHttpFileServer server;
     private static final String TEST_URI = "test.http.uri";
-    private static String connectionUri;
 
-    public Http5ProviderTest() throws Exception {
-        super(new Http5ProviderTestConfig(), "", false);
-    }
+    private static String connectionUri;
 
     private static String getSystemTestUriOverride() {
         return System.getProperty(TEST_URI);
     }
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            server = NHttpFileServer.start(0, new File(getTestDirectory()), 
5000);
-            connectionUri = 
AbstractProviderTestConfig.getLocalHostUriString("http5", server.getPort());
-        }
-        super.setUp();
-    }
-
     @AfterAll
     public static void tearDownClass() throws InterruptedException {
         if (server != null) {
@@ -76,6 +93,10 @@ public class Http5ProviderTest extends 
ProviderTestSuiteJunit5 {
         }
     }
 
+    public Http5ProviderTest() throws Exception {
+        super(new Http5ProviderTestConfig(), "", false);
+    }
+
     @Override
     protected void addBaseTests() throws Exception {
         super.addBaseTests();
@@ -89,6 +110,15 @@ public class Http5ProviderTest extends 
ProviderTestSuiteJunit5 {
         assertTrue(file.getChildren().length > 0);
     }
 
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            server = NHttpFileServer.start(0, new File(getTestDirectory()), 
5000);
+            connectionUri = 
AbstractProviderTestConfig.getLocalHostUriString("http5", server.getPort());
+        }
+        super.setUp();
+    }
+
     @SuppressWarnings("deprecation")
     @Test
     public void testHttpTimeoutConfig() {
@@ -124,6 +154,20 @@ public class Http5ProviderTest extends 
ProviderTestSuiteJunit5 {
         assertEquals("foo/bar", builder.getUserAgent(opts));
     }
 
+    @Test
+    public void testReadFileOperations() throws Exception {
+        try (DefaultFileSystemManager manager = new DefaultFileSystemManager();
+                Http5FileProvider provider = new Http5FileProvider();
+                SoftRefFilesCache filesCache = new SoftRefFilesCache();) {
+            manager.setFilesCache(filesCache);
+            manager.addProvider("http5", provider);
+            manager.init();
+            try (FileObject fo = manager.resolveFile(connectionUri + 
"/read-tests/file1.txt")) {
+                assertNotNull(fo.getContent().getInputStream());
+            }
+        }
+    }
+
     private void testResolveFolderSlash(final String uri, final boolean 
followRedirect) throws FileSystemException {
         VFS.getManager().getFilesCache().close();
         final FileSystemOptions opts = new FileSystemOptions();
@@ -166,49 +210,5 @@ public class Http5ProviderTest extends 
ProviderTestSuiteJunit5 {
         assertEquals("http5://[fe80::1c42:dae:8370:aea6%en1]/", 
fileObject.getFileSystem().getRootURI());
         assertEquals("http5://[fe80::1c42:dae:8370:aea6%en1]/", 
fileObject.getName().getURI());
     }
-
-    @Test
-    public void testReadFileOperations() throws Exception {
-        try (DefaultFileSystemManager manager = new DefaultFileSystemManager();
-                Http5FileProvider provider = new Http5FileProvider();
-                SoftRefFilesCache filesCache = new SoftRefFilesCache();) {
-            manager.setFilesCache(filesCache);
-            manager.addProvider("http5", provider);
-            manager.init();
-            try (FileObject fo = manager.resolveFile(connectionUri + 
"/read-tests/file1.txt")) {
-                assertNotNull(fo.getContent().getInputStream());
-            }
-        }
-    }
-
-    /**
-     * Configuration for HTTP5 provider tests.
-     */
-    private static class Http5ProviderTestConfig extends 
AbstractProviderTestConfig {
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            return manager.resolveFile(uri, getFileSystemOptions());
-        }
-
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            if (!manager.hasProvider("http5")) {
-                manager.addProvider("http5", new Http5FileProvider());
-            }
-        }
-
-        private FileSystemOptions getFileSystemOptions() {
-            final FileSystemOptions opts = new FileSystemOptions();
-            final Http5FileSystemConfigBuilder builder = 
Http5FileSystemConfigBuilder.getInstance();
-            builder.setMaxTotalConnections(opts, 200);
-            builder.setMaxConnectionsPerHost(opts, 200);
-            return opts;
-        }
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/jar/JarProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/jar/JarProviderTest.java
index 60900aed8..8ce9f4eb4 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/jar/JarProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/jar/JarProviderTest.java
@@ -34,18 +34,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class JarProviderTest extends ProviderTestSuiteJunit5 {
 
-    public JarProviderTest() throws Exception {
-        super(new JarProviderTestConfig(), "", true);
-    }
-
-    /**
-     * Returns a JAR file from the test resources.
-     */
-    public static FileObject getTestJar(final FileSystemManager manager, final 
String name) throws Exception {
-        final File jarFile = getTestResource(name);
-        return manager.resolveFile("jar:file:" + jarFile.getAbsolutePath() + 
"!/");
-    }
-
     /**
      * Configuration for JAR provider tests.
      */
@@ -67,5 +55,17 @@ public class JarProviderTest extends ProviderTestSuiteJunit5 
{
             manager.addProvider("jar", new JarFileProvider());
         }
     }
+
+    /**
+     * Returns a JAR file from the test resources.
+     */
+    public static FileObject getTestJar(final FileSystemManager manager, final 
String name) throws Exception {
+        final File jarFile = getTestResource(name);
+        return manager.resolveFile("jar:file:" + jarFile.getAbsolutePath() + 
"!/");
+    }
+
+    public JarProviderTest() throws Exception {
+        super(new JarProviderTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/jar/NestedJarTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/jar/NestedJarTest.java
index 66894d5d7..f2d4c80cd 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/jar/NestedJarTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/jar/NestedJarTest.java
@@ -29,10 +29,6 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class NestedJarTest extends ProviderTestSuiteJunit5 {
 
-    public NestedJarTest() throws Exception {
-        super(new NestedJarTestConfig(), "", true);
-    }
-
     /**
      * Configuration for nested JAR provider tests.
      */
@@ -51,5 +47,9 @@ public class NestedJarTest extends ProviderTestSuiteJunit5 {
             manager.addProvider("jar", new JarFileProvider());
         }
     }
+
+    public NestedJarTest() throws Exception {
+        super(new NestedJarTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/LocalProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/LocalProviderTest.java
index 474763816..b18d1d885 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/LocalProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/LocalProviderTest.java
@@ -39,6 +39,16 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class LocalProviderTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for local file system tests.
+     */
+    private static class LocalProviderTestConfig extends 
AbstractProviderTestConfig {
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            return manager.toFileObject(getTestDirectoryFile());
+        }
+    }
+
     public LocalProviderTest() throws Exception {
         super(new LocalProviderTestConfig(), "", false);
     }
@@ -57,15 +67,5 @@ public class LocalProviderTest extends 
ProviderTestSuiteJunit5 {
             addTests(WindowsFileNameTests.class);
         }
     }
-
-    /**
-     * Configuration for local file system tests.
-     */
-    private static class LocalProviderTestConfig extends 
AbstractProviderTestConfig {
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            return manager.toFileObject(getTestDirectoryFile());
-        }
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/UrlTests.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/UrlTests.java
index 841ebbb5c..f6b7ab9bb 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/UrlTests.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/local/UrlTests.java
@@ -38,6 +38,34 @@ import org.junit.jupiter.api.Test;
  */
 public class UrlTests extends AbstractProviderTestCase {
 
+    /**
+     * Tests that getURL() round-trips correctly when a directory name 
contains brackets.
+     */
+    @Test
+    public void testGetUrlRoundTripWithBracketsInPath() throws Exception {
+        final Path tmp = Files.createTempDirectory("vfs-roundtrip");
+        try {
+            final Path child = tmp.resolve("outside%text[inside%text]tail");
+            Files.createDirectories(child);
+
+            final FileSystemManager mgr = VFS.getManager();
+            final FileObject a = mgr.resolveFile(child.toUri().toString());
+            final FileObject b = mgr.resolveFile(a.getURL().toString());
+
+            assertEquals(a.getName().getPath(), b.getName().getPath());
+        } finally {
+            try (Stream<Path> walk = Files.walk(tmp)) {
+                walk.sorted(Comparator.reverseOrder())
+                        .forEach(p -> {
+                            try {
+                                Files.delete(p);
+                            } catch (final IOException ignore) { // NOPMD
+                            }
+                        });
+            }
+        }
+    }
+
     /**
      * Tests FindFiles with a file name that has a hash sign in it.
      */
@@ -71,32 +99,4 @@ public class UrlTests extends AbstractProviderTestCase {
         assertEquals(file.toString(), 
UriParser.decode(file.getURL().toString()));
     }
 
-    /**
-     * Tests that getURL() round-trips correctly when a directory name 
contains brackets.
-     */
-    @Test
-    public void testGetUrlRoundTripWithBracketsInPath() throws Exception {
-        final Path tmp = Files.createTempDirectory("vfs-roundtrip");
-        try {
-            final Path child = tmp.resolve("outside%text[inside%text]tail");
-            Files.createDirectories(child);
-
-            final FileSystemManager mgr = VFS.getManager();
-            final FileObject a = mgr.resolveFile(child.toUri().toString());
-            final FileObject b = mgr.resolveFile(a.getURL().toString());
-
-            assertEquals(a.getName().getPath(), b.getName().getPath());
-        } finally {
-            try (Stream<Path> walk = Files.walk(tmp)) {
-                walk.sorted(Comparator.reverseOrder())
-                        .forEach(p -> {
-                            try {
-                                Files.delete(p);
-                            } catch (final IOException ignore) { // NOPMD
-                            }
-                        });
-            }
-        }
-    }
-
 }
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ram/RamProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ram/RamProviderTest.java
index 65453413d..85369ed74 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ram/RamProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/ram/RamProviderTest.java
@@ -41,25 +41,6 @@ import 
org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
  */
 public class RamProviderTest extends ProviderTestSuiteJunit5 {
 
-    /** Logger */
-    private static final Log log = LogFactory.getLog(RamProviderTest.class);
-
-    private static final RamProviderTestConfig config = new 
RamProviderTestConfig();
-
-    public RamProviderTest() throws Exception {
-        super(config, "", false);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        try {
-            super.tearDown();
-        } finally {
-            // Cleanup the temporary test data directory
-            config.cleanupTempTestDir();
-        }
-    }
-
     /**
      * Configuration for RAM provider tests.
      */
@@ -69,41 +50,19 @@ public class RamProviderTest extends 
ProviderTestSuiteJunit5 {
         private File tempTestDir;
 
         /**
-         * Returns the base folder for tests.
+         * Cleans up the temporary test data directory.
          */
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            if (!inited) {
-                // Create a temporary isolated copy of the test data directory
-                // to avoid race conditions with other tests (like 
LocalProviderTest)
-                // that modify files in the shared 
target/test-classes/test-data directory
-                tempTestDir = createTempTestDataCopy();
-
-                // Import the test tree from our isolated copy
-                final FileObject fo = manager.resolveFile("ram:/");
-                final RamFileSystem fs = (RamFileSystem) fo.getFileSystem();
-                fs.importTree(tempTestDir);
-                fo.close();
-
-                inited = true;
+        private void cleanupTempTestDir() {
+            if (tempTestDir != null && tempTestDir.exists()) {
+                try {
+                    Files.walk(tempTestDir.toPath())
+                        .sorted(Comparator.reverseOrder())
+                        .map(Path::toFile)
+                        .forEach(File::delete);
+                } catch (final IOException e) {
+                    log.warn("Failed to cleanup temp test directory: " + 
tempTestDir + " - " + e.getMessage());
+                }
             }
-
-            final String uri = "ram:/";
-            return manager.resolveFile(uri);
-        }
-
-        /**
-         * Creates a temporary copy of the test data directory.
-         * This ensures test isolation and prevents race conditions with other 
tests.
-         */
-        private File createTempTestDataCopy() throws IOException {
-            final File sourceDir = getTestDirectoryFile();
-            final Path tempDir = Files.createTempDirectory("vfs-ram-test-");
-
-            // Copy the entire test data directory to the temp location
-            copyDirectory(sourceDir.toPath(), tempDir);
-
-            return tempDir.toFile();
         }
 
         /**
@@ -128,19 +87,41 @@ public class RamProviderTest extends 
ProviderTestSuiteJunit5 {
         }
 
         /**
-         * Cleans up the temporary test data directory.
+         * Creates a temporary copy of the test data directory.
+         * This ensures test isolation and prevents race conditions with other 
tests.
          */
-        private void cleanupTempTestDir() {
-            if (tempTestDir != null && tempTestDir.exists()) {
-                try {
-                    Files.walk(tempTestDir.toPath())
-                        .sorted(Comparator.reverseOrder())
-                        .map(Path::toFile)
-                        .forEach(File::delete);
-                } catch (final IOException e) {
-                    log.warn("Failed to cleanup temp test directory: " + 
tempTestDir + " - " + e.getMessage());
-                }
+        private File createTempTestDataCopy() throws IOException {
+            final File sourceDir = getTestDirectoryFile();
+            final Path tempDir = Files.createTempDirectory("vfs-ram-test-");
+
+            // Copy the entire test data directory to the temp location
+            copyDirectory(sourceDir.toPath(), tempDir);
+
+            return tempDir.toFile();
+        }
+
+        /**
+         * Returns the base folder for tests.
+         */
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            if (!inited) {
+                // Create a temporary isolated copy of the test data directory
+                // to avoid race conditions with other tests (like 
LocalProviderTest)
+                // that modify files in the shared 
target/test-classes/test-data directory
+                tempTestDir = createTempTestDataCopy();
+
+                // Import the test tree from our isolated copy
+                final FileObject fo = manager.resolveFile("ram:/");
+                final RamFileSystem fs = (RamFileSystem) fo.getFileSystem();
+                fs.importTree(tempTestDir);
+                fo.close();
+
+                inited = true;
             }
+
+            final String uri = "ram:/";
+            return manager.resolveFile(uri);
         }
 
         /**
@@ -161,5 +142,24 @@ public class RamProviderTest extends 
ProviderTestSuiteJunit5 {
             }
         }
     }
+
+    /** Logger */
+    private static final Log log = LogFactory.getLog(RamProviderTest.class);
+
+    private static final RamProviderTestConfig config = new 
RamProviderTestConfig();
+
+    public RamProviderTest() throws Exception {
+        super(config, "", false);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        try {
+            super.tearDown();
+        } finally {
+            // Cleanup the temporary test data directory
+            config.cleanupTempTestDir();
+        }
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/res/ResourceProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/res/ResourceProviderTest.java
index 0e4bdc76e..bd79906c6 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/res/ResourceProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/res/ResourceProviderTest.java
@@ -34,10 +34,6 @@ import org.apache.commons.vfs2.provider.url.UrlFileProvider;
  */
 public class ResourceProviderTest extends ProviderTestSuiteJunit5 {
 
-    public ResourceProviderTest() throws Exception {
-        super(new ResourceProviderTestConfig(), "", false);
-    }
-
     /**
      * Configuration for resource provider tests.
      */
@@ -62,5 +58,9 @@ public class ResourceProviderTest extends 
ProviderTestSuiteJunit5 {
             manager.addProvider("jar", new JarFileProvider());
         }
     }
+
+    public ResourceProviderTest() throws Exception {
+        super(new ResourceProviderTestConfig(), "", false);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/res/Vfs444Test.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/res/Vfs444Test.java
index 865d579cf..386bbd99b 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/res/Vfs444Test.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/res/Vfs444Test.java
@@ -38,6 +38,30 @@ import org.junit.jupiter.api.Test;
  */
 public class Vfs444Test extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for VFS-444 tests.
+     */
+    private static class Vfs444TestConfig extends AbstractProviderTestConfig {
+
+        /**
+         * Returns the base folder for tests.
+         */
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            final String baseDir = getResourceTestDirectory();
+            return manager.resolveFile("zip:res:" + baseDir + "/test.zip");
+        }
+
+        /**
+         * Prepares the file system manager.
+         */
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("res", new ResourceFileProvider());
+            manager.addProvider("zip", new ZipFileProvider());
+        }
+    }
+
     public Vfs444Test() throws Exception {
         super(new Vfs444TestConfig(), "", true);
     }
@@ -93,29 +117,5 @@ public class Vfs444Test extends ProviderTestSuiteJunit5 {
         assertNotNull(result);
         assertTrue(result.exists());
     }
-
-    /**
-     * Configuration for VFS-444 tests.
-     */
-    private static class Vfs444TestConfig extends AbstractProviderTestConfig {
-
-        /**
-         * Returns the base folder for tests.
-         */
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            final String baseDir = getResourceTestDirectory();
-            return manager.resolveFile("zip:res:" + baseDir + "/test.zip");
-        }
-
-        /**
-         * Prepares the file system manager.
-         */
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("res", new ResourceFileProvider());
-            manager.addProvider("zip", new ZipFileProvider());
-        }
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpPermissionExceptionTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpPermissionExceptionTest.java
index 2e5007a90..051b5d2c1 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpPermissionExceptionTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpPermissionExceptionTest.java
@@ -39,6 +39,30 @@ import org.junit.jupiter.api.Test;
  */
 public class SftpPermissionExceptionTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for SFTP permission exception tests.
+     */
+    private static class SftpPermissionExceptionTestConfig extends 
AbstractProviderTestConfig {
+
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            final String uri = System.getProperty("test.sftp.uri");
+            if (uri == null) {
+                return null;
+            }
+            final FileSystemOptions fileSystemOptions = new 
FileSystemOptions();
+            final SftpFileSystemConfigBuilder builder = 
SftpFileSystemConfigBuilder.getInstance();
+            builder.setStrictHostKeyChecking(fileSystemOptions, "no");
+            builder.setUserInfo(fileSystemOptions, new 
TrustEveryoneUserInfo());
+            return manager.resolveFile(uri, fileSystemOptions);
+        }
+
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("sftp", new SftpFileProvider());
+        }
+    }
+
     public SftpPermissionExceptionTest() throws Exception {
         super(new SftpPermissionExceptionTestConfig(), "", false);
     }
@@ -77,29 +101,5 @@ public class SftpPermissionExceptionTest extends 
ProviderTestSuiteJunit5 {
         readOnlyFile.setWritable(true, false);
         readOnlyFile.delete();
     }
-
-    /**
-     * Configuration for SFTP permission exception tests.
-     */
-    private static class SftpPermissionExceptionTestConfig extends 
AbstractProviderTestConfig {
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            final String uri = System.getProperty("test.sftp.uri");
-            if (uri == null) {
-                return null;
-            }
-            final FileSystemOptions fileSystemOptions = new 
FileSystemOptions();
-            final SftpFileSystemConfigBuilder builder = 
SftpFileSystemConfigBuilder.getInstance();
-            builder.setStrictHostKeyChecking(fileSystemOptions, "no");
-            builder.setUserInfo(fileSystemOptions, new 
TrustEveryoneUserInfo());
-            return manager.resolveFile(uri, fileSystemOptions);
-        }
-
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("sftp", new SftpFileProvider());
-        }
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderClosedExecChannelTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderClosedExecChannelTest.java
index 011704c32..8b8975534 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderClosedExecChannelTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderClosedExecChannelTest.java
@@ -37,24 +37,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class SftpProviderClosedExecChannelTest extends ProviderTestSuiteJunit5 
{
 
-    public SftpProviderClosedExecChannelTest() throws Exception {
-        super(new SftpProviderClosedExecChannelTestConfig(), "", false);
-    }
-
-    @Override
-    protected void addBaseTests() throws Exception {
-        // Only add base tests if we have a real SFTP server configured
-        if (System.getProperty("test.sftp.uri") != null) {
-            addTests(ProviderReadTests.class);
-            addTests(ProviderWriteTests.class);
-            addTests(ProviderDeleteTests.class);
-            addTests(ProviderRenameTests.class);
-            addTests(NamingTests.class);
-            // VFS-405: set/get permissions
-            addTests(PermissionsTests.class);
-        }
-    }
-
     /**
      * Configuration for SFTP closed exec channel tests.
      */
@@ -78,5 +60,23 @@ public class SftpProviderClosedExecChannelTest extends 
ProviderTestSuiteJunit5 {
             manager.addProvider("sftp", new SftpFileProvider());
         }
     }
+
+    public SftpProviderClosedExecChannelTest() throws Exception {
+        super(new SftpProviderClosedExecChannelTestConfig(), "", false);
+    }
+
+    @Override
+    protected void addBaseTests() throws Exception {
+        // Only add base tests if we have a real SFTP server configured
+        if (System.getProperty("test.sftp.uri") != null) {
+            addTests(ProviderReadTests.class);
+            addTests(ProviderWriteTests.class);
+            addTests(ProviderDeleteTests.class);
+            addTests(ProviderRenameTests.class);
+            addTests(NamingTests.class);
+            // VFS-405: set/get permissions
+            addTests(PermissionsTests.class);
+        }
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderIPv6Test.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderIPv6Test.java
index 5cf10d83d..30d7fec91 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderIPv6Test.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderIPv6Test.java
@@ -48,6 +48,53 @@ import com.jcraft.jsch.JSchException;
  */
 public class SftpProviderIPv6Test extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Mocked SFTP file provider for testing IPv6 without actual network 
connection.
+     */
+    private static class MockedClientSftpFileProvider extends SftpFileProvider 
{
+        @Override
+        protected FileSystem doCreateFileSystem(final FileName name, final 
FileSystemOptions fileSystemOptions) {
+            final GenericFileName rootName = (GenericFileName) name;
+
+            final com.jcraft.jsch.Session sessionMock = 
mock(com.jcraft.jsch.Session.class);
+            final ChannelExec channelExecMock = mock(ChannelExec.class);
+
+            when(sessionMock.isConnected()).thenReturn(true);
+
+            try {
+                
when(sessionMock.openChannel(anyString())).thenReturn(channelExecMock);
+            } catch (final JSchException e) {
+                throw new AssertionError("Should never happen", e);
+            }
+
+            when(channelExecMock.isClosed()).thenReturn(true);
+
+            try {
+                when(channelExecMock.getInputStream()).thenReturn(new 
NullInputStream());
+            } catch (final IOException e) {
+                throw new AssertionError("Should never happen", e);
+            }
+
+            return new SftpFileSystem(rootName, sessionMock, 
fileSystemOptions);
+        }
+    }
+
+    /**
+     * Configuration for SFTP IPv6 tests.
+     */
+    private static class SftpProviderIPv6TestConfig extends 
AbstractProviderTestConfig {
+
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            final String uri = System.getProperty("test.sftp.uri");
+            return uri != null ? manager.resolveFile(uri) : null;
+        }
+
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("sftp", new SftpFileProvider());
+        }
+    }
+
     public SftpProviderIPv6Test() throws Exception {
         super(new SftpProviderIPv6TestConfig(), "", false);
     }
@@ -80,52 +127,5 @@ public class SftpProviderIPv6Test extends 
ProviderTestSuiteJunit5 {
             getManager().addProvider("sftp", new SftpFileProvider());
         }
     }
-
-    /**
-     * Configuration for SFTP IPv6 tests.
-     */
-    private static class SftpProviderIPv6TestConfig extends 
AbstractProviderTestConfig {
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            final String uri = System.getProperty("test.sftp.uri");
-            return uri != null ? manager.resolveFile(uri) : null;
-        }
-
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("sftp", new SftpFileProvider());
-        }
-    }
-
-    /**
-     * Mocked SFTP file provider for testing IPv6 without actual network 
connection.
-     */
-    private static class MockedClientSftpFileProvider extends SftpFileProvider 
{
-        @Override
-        protected FileSystem doCreateFileSystem(final FileName name, final 
FileSystemOptions fileSystemOptions) {
-            final GenericFileName rootName = (GenericFileName) name;
-
-            final com.jcraft.jsch.Session sessionMock = 
mock(com.jcraft.jsch.Session.class);
-            final ChannelExec channelExecMock = mock(ChannelExec.class);
-
-            when(sessionMock.isConnected()).thenReturn(true);
-
-            try {
-                
when(sessionMock.openChannel(anyString())).thenReturn(channelExecMock);
-            } catch (final JSchException e) {
-                throw new AssertionError("Should never happen", e);
-            }
-
-            when(channelExecMock.isClosed()).thenReturn(true);
-
-            try {
-                when(channelExecMock.getInputStream()).thenReturn(new 
NullInputStream());
-            } catch (final IOException e) {
-                throw new AssertionError("Should never happen", e);
-            }
-
-            return new SftpFileSystem(rootName, sessionMock, 
fileSystemOptions);
-        }
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderStreamProxyModeTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderStreamProxyModeTest.java
index 733f96867..6687c474d 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderStreamProxyModeTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderStreamProxyModeTest.java
@@ -42,21 +42,6 @@ import com.jcraft.jsch.TestIdentityRepositoryFactory;
  */
 public class SftpProviderStreamProxyModeTest extends ProviderTestSuiteJunit5 {
 
-    public SftpProviderStreamProxyModeTest() throws Exception {
-        super(new SftpProviderStreamProxyModeTestConfig(), "", false);
-    }
-
-    @Override
-    protected void addBaseTests() throws Exception {
-        // Only add base tests if we have a real SFTP server configured
-        if (System.getProperty("test.sftp.uri") != null) {
-            // Just tries to read
-            addTests(ProviderReadTests.class);
-            // VFS-405: set/get permissions
-            addTests(PermissionsTests.class);
-        }
-    }
-
     /**
      * Configuration for SFTP stream proxy mode tests.
      */
@@ -110,5 +95,20 @@ public class SftpProviderStreamProxyModeTest extends 
ProviderTestSuiteJunit5 {
             manager.addProvider("sftp", new SftpFileProvider());
         }
     }
+
+    public SftpProviderStreamProxyModeTest() throws Exception {
+        super(new SftpProviderStreamProxyModeTestConfig(), "", false);
+    }
+
+    @Override
+    protected void addBaseTests() throws Exception {
+        // Only add base tests if we have a real SFTP server configured
+        if (System.getProperty("test.sftp.uri") != null) {
+            // Just tries to read
+            addTests(ProviderReadTests.class);
+            // VFS-405: set/get permissions
+            addTests(PermissionsTests.class);
+        }
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderTest.java
index 2978966ba..24e04f347 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpProviderTest.java
@@ -38,29 +38,6 @@ import com.jcraft.jsch.TestIdentityRepositoryFactory;
  */
 public class SftpProviderTest extends ProviderTestSuiteJunit5 {
 
-    public SftpProviderTest() throws Exception {
-        super(new SftpProviderTestConfig(), "", false);
-    }
-
-    @Override
-    protected void addBaseTests() throws Exception {
-        super.addBaseTests();
-        // VFS-405: set/get permissions
-        addTests(PermissionsTests.class);
-        addTests(SftpMultiThreadWriteTests.class);
-    }
-
-    /**
-     * Stops the embedded SFTP server after all tests.
-     */
-    @AfterAll
-    public static void stopSftpServer() throws InterruptedException {
-        // Only stop if we started it (not using external server)
-        if (System.getProperty("test.sftp.uri") == null) {
-            SftpTestServerHelper.stopServer();
-        }
-    }
-
     /**
      * Configuration for SFTP provider tests.
      */
@@ -98,5 +75,28 @@ public class SftpProviderTest extends 
ProviderTestSuiteJunit5 {
             manager.addProvider("sftp", new SftpFileProvider());
         }
     }
+
+    /**
+     * Stops the embedded SFTP server after all tests.
+     */
+    @AfterAll
+    public static void stopSftpServer() throws InterruptedException {
+        // Only stop if we started it (not using external server)
+        if (System.getProperty("test.sftp.uri") == null) {
+            SftpTestServerHelper.stopServer();
+        }
+    }
+
+    public SftpProviderTest() throws Exception {
+        super(new SftpProviderTestConfig(), "", false);
+    }
+
+    @Override
+    protected void addBaseTests() throws Exception {
+        super.addBaseTests();
+        // VFS-405: set/get permissions
+        addTests(PermissionsTests.class);
+        addTests(SftpMultiThreadWriteTests.class);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpPutChannelTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpPutChannelTest.java
index 6d625be20..eefdd7427 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpPutChannelTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/sftp/SftpPutChannelTest.java
@@ -41,6 +41,29 @@ import org.junit.jupiter.api.Test;
  */
 public class SftpPutChannelTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for SFTP put channel tests.
+     */
+    private static class SftpPutChannelTestConfig extends 
AbstractProviderTestConfig {
+
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            final String uri = System.getProperty("test.sftp.uri");
+            if (uri == null) {
+                return null;
+            }
+            final FileSystemOptions fileSystemOptions = new 
FileSystemOptions();
+            final SftpFileSystemConfigBuilder builder = 
SftpFileSystemConfigBuilder.getInstance();
+            builder.setStrictHostKeyChecking(fileSystemOptions, "no");
+            builder.setUserInfo(fileSystemOptions, new 
TrustEveryoneUserInfo());
+            return manager.resolveFile(uri, fileSystemOptions);
+        }
+
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("sftp", new SftpFileProvider());
+        }
+    }
+
     public SftpPutChannelTest() throws Exception {
         super(new SftpPutChannelTestConfig(), "", false);
     }
@@ -84,28 +107,5 @@ public class SftpPutChannelTest extends 
ProviderTestSuiteJunit5 {
         // However, accessing server internals is not easily possible in the 
new architecture,
         // so we focus on verifying the exception is thrown.
     }
-
-    /**
-     * Configuration for SFTP put channel tests.
-     */
-    private static class SftpPutChannelTestConfig extends 
AbstractProviderTestConfig {
-
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            final String uri = System.getProperty("test.sftp.uri");
-            if (uri == null) {
-                return null;
-            }
-            final FileSystemOptions fileSystemOptions = new 
FileSystemOptions();
-            final SftpFileSystemConfigBuilder builder = 
SftpFileSystemConfigBuilder.getInstance();
-            builder.setStrictHostKeyChecking(fileSystemOptions, "no");
-            builder.setUserInfo(fileSystemOptions, new 
TrustEveryoneUserInfo());
-            return manager.resolveFile(uri, fileSystemOptions);
-        }
-
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("sftp", new SftpFileProvider());
-        }
-    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTarTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTarTest.java
index 75184067d..c7f2ac1b2 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTarTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTarTest.java
@@ -33,10 +33,6 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class NestedTarTest extends ProviderTestSuiteJunit5 {
 
-    public NestedTarTest() throws Exception {
-        super(new NestedTarTestConfig(), "", true);
-    }
-
     /**
      * Configuration for nested TAR provider tests.
      */
@@ -57,5 +53,9 @@ public class NestedTarTest extends ProviderTestSuiteJunit5 {
             manager.addProvider("tar", new TarFileProvider());
         }
     }
+
+    public NestedTarTest() throws Exception {
+        super(new NestedTarTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTbz2Test.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTbz2Test.java
index dacb5204b..db20eabf8 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTbz2Test.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTbz2Test.java
@@ -34,10 +34,6 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class NestedTbz2Test extends ProviderTestSuiteJunit5 {
 
-    public NestedTbz2Test() throws Exception {
-        super(new NestedTbz2TestConfig(), "", true);
-    }
-
     /**
      * Configuration for nested TBZ2 provider tests.
      */
@@ -60,5 +56,9 @@ public class NestedTbz2Test extends ProviderTestSuiteJunit5 {
             manager.addProvider("bz2", new Bzip2FileProvider());
         }
     }
+
+    public NestedTbz2Test() throws Exception {
+        super(new NestedTbz2TestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTgzTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTgzTest.java
index 9cc88e9aa..15f9e129e 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTgzTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/NestedTgzTest.java
@@ -34,10 +34,6 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class NestedTgzTest extends ProviderTestSuiteJunit5 {
 
-    public NestedTgzTest() throws Exception {
-        super(new NestedTgzTestConfig(), "", true);
-    }
-
     /**
      * Configuration for nested TGZ provider tests.
      */
@@ -60,5 +56,9 @@ public class NestedTgzTest extends ProviderTestSuiteJunit5 {
             manager.addProvider("gz", new GzipFileProvider());
         }
     }
+
+    public NestedTgzTest() throws Exception {
+        super(new NestedTgzTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/TarProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/TarProviderTest.java
index 953f38648..cb26cd72b 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/TarProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/TarProviderTest.java
@@ -34,10 +34,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class TarProviderTest extends ProviderTestSuiteJunit5 {
 
-    public TarProviderTest() throws Exception {
-        super(new TarProviderTestConfig(), "", true);
-    }
-
     /**
      * Configuration for TAR provider tests.
      */
@@ -62,5 +58,9 @@ public class TarProviderTest extends ProviderTestSuiteJunit5 {
             manager.addMimeTypeMap(MIME_TYPE_APPLICATION_X_TAR, "tar");
         }
     }
+
+    public TarProviderTest() throws Exception {
+        super(new TarProviderTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/Tbz2ProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/Tbz2ProviderTest.java
index a7458178e..380680b97 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/Tbz2ProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/Tbz2ProviderTest.java
@@ -34,10 +34,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class Tbz2ProviderTest extends ProviderTestSuiteJunit5 {
 
-    public Tbz2ProviderTest() throws Exception {
-        super(new Tbz2ProviderTestConfig(), "", true);
-    }
-
     /**
      * Configuration for TBZ2 provider tests.
      */
@@ -62,5 +58,9 @@ public class Tbz2ProviderTest extends ProviderTestSuiteJunit5 
{
             manager.addProvider("tar", new TarFileProvider());
         }
     }
+
+    public Tbz2ProviderTest() throws Exception {
+        super(new Tbz2ProviderTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/TgzProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/TgzProviderTest.java
index fcbe44c14..b44ce46de 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/TgzProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/tar/TgzProviderTest.java
@@ -34,10 +34,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class TgzProviderTest extends ProviderTestSuiteJunit5 {
 
-    public TgzProviderTest() throws Exception {
-        super(new TgzProviderTestConfig(), "", true);
-    }
-
     /**
      * Configuration for TGZ provider tests.
      */
@@ -62,5 +58,9 @@ public class TgzProviderTest extends ProviderTestSuiteJunit5 {
             manager.addProvider("tar", new TarFileProvider());
         }
     }
+
+    public TgzProviderTest() throws Exception {
+        super(new TgzProviderTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/temp/TemporaryProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/temp/TemporaryProviderTest.java
index 3444f7075..f2351ee7c 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/temp/TemporaryProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/temp/TemporaryProviderTest.java
@@ -34,10 +34,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class TemporaryProviderTest extends ProviderTestSuiteJunit5 {
 
-    public TemporaryProviderTest() throws Exception {
-        super(new TemporaryProviderTestConfig(), "", false);
-    }
-
     /**
      * Configuration for temporary provider tests.
      */
@@ -60,5 +56,9 @@ public class TemporaryProviderTest extends 
ProviderTestSuiteJunit5 {
             manager.addProvider("tmp", new TemporaryFileProvider(baseDir));
         }
     }
+
+    public TemporaryProviderTest() throws Exception {
+        super(new TemporaryProviderTestConfig(), "", false);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/test/VirtualProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/test/VirtualProviderTest.java
index 0efbeff6f..c3fbac8e9 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/test/VirtualProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/test/VirtualProviderTest.java
@@ -33,16 +33,6 @@ import org.apache.commons.vfs2.ProviderTestSuiteJunit5;
  */
 public class VirtualProviderTest extends ProviderTestSuiteJunit5 {
 
-    public VirtualProviderTest() throws Exception {
-        super(new VirtualProviderTestConfig(), "", false);
-    }
-
-    @Override
-    protected void addBaseTests() throws Exception {
-        super.addBaseTests();
-        addTests(JunctionTests.class);
-    }
-
     /**
      * Configuration for virtual provider tests.
      */
@@ -58,5 +48,15 @@ public class VirtualProviderTest extends 
ProviderTestSuiteJunit5 {
             return manager.createVirtualFileSystem(baseFile);
         }
     }
+
+    public VirtualProviderTest() throws Exception {
+        super(new VirtualProviderTestConfig(), "", false);
+    }
+
+    @Override
+    protected void addBaseTests() throws Exception {
+        super.addBaseTests();
+        addTests(JunctionTests.class);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlHttpProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlHttpProviderTest.java
index a9ff420da..0283d3756 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlHttpProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlHttpProviderTest.java
@@ -34,10 +34,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class UrlHttpProviderTest extends ProviderTestSuiteJunit5 {
 
-    public UrlHttpProviderTest() throws Exception {
-        super(new UrlHttpProviderTestConfig(), "", false);
-    }
-
     /**
      * Configuration for URL HTTP provider tests.
      */
@@ -60,5 +56,9 @@ public class UrlHttpProviderTest extends 
ProviderTestSuiteJunit5 {
             manager.addProvider("http", new UrlFileProvider());
         }
     }
+
+    public UrlHttpProviderTest() throws Exception {
+        super(new UrlHttpProviderTestConfig(), "", false);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlProviderHttpTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlProviderHttpTest.java
index 35245bba3..b4724effd 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlProviderHttpTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlProviderHttpTest.java
@@ -36,35 +36,34 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class UrlProviderHttpTest extends ProviderTestSuiteJunit5 {
 
+    /**
+     * Configuration for URL provider HTTP tests.
+     */
+    private static class UrlProviderHttpTestConfig extends 
AbstractProviderTestConfig {
+
+        @Override
+        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
+            String uri = getSystemTestUriOverride();
+            if (uri == null) {
+                uri = connectionUri;
+            }
+            return manager.resolveFile(uri);
+        }
+
+        @Override
+        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
+            manager.addProvider("http", new UrlFileProvider());
+        }
+    }
     private static NHttpFileServer server;
     private static String connectionUri;
-    private static final String TEST_URI = "test.http.uri";
 
-    public UrlProviderHttpTest() throws Exception {
-        super(new UrlProviderHttpTestConfig(), "", false);
-    }
+    private static final String TEST_URI = "test.http.uri";
 
     protected static String getSystemTestUriOverride() {
         return System.getProperty(TEST_URI);
     }
 
-    @Override
-    protected void setUp() throws Exception {
-        if (getSystemTestUriOverride() == null) {
-            setUpClass();
-        }
-        super.setUp();
-    }
-
-    @AfterAll
-    protected void tearDown() throws Exception {
-        try {
-            super.tearDown();
-        } finally {
-            tearDownClass();
-        }
-    }
-
     /**
      * Starts the embedded Apache HTTP Server.
      */
@@ -83,23 +82,24 @@ public class UrlProviderHttpTest extends 
ProviderTestSuiteJunit5 {
         }
     }
 
-    /**
-     * Configuration for URL provider HTTP tests.
-     */
-    private static class UrlProviderHttpTestConfig extends 
AbstractProviderTestConfig {
+    public UrlProviderHttpTest() throws Exception {
+        super(new UrlProviderHttpTestConfig(), "", false);
+    }
 
-        @Override
-        public FileObject getBaseTestFolder(final FileSystemManager manager) 
throws Exception {
-            String uri = getSystemTestUriOverride();
-            if (uri == null) {
-                uri = connectionUri;
-            }
-            return manager.resolveFile(uri);
+    @Override
+    protected void setUp() throws Exception {
+        if (getSystemTestUriOverride() == null) {
+            setUpClass();
         }
+        super.setUp();
+    }
 
-        @Override
-        public void prepare(final DefaultFileSystemManager manager) throws 
Exception {
-            manager.addProvider("http", new UrlFileProvider());
+    @AfterAll
+    protected void tearDown() throws Exception {
+        try {
+            super.tearDown();
+        } finally {
+            tearDownClass();
         }
     }
 }
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlProviderTest.java
index 684346881..9598412b2 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/url/UrlProviderTest.java
@@ -34,10 +34,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class UrlProviderTest extends ProviderTestSuiteJunit5 {
 
-    public UrlProviderTest() throws Exception {
-        super(new UrlProviderTestConfig(), "", false);
-    }
-
     /**
      * Configuration for URL provider tests.
      */
@@ -60,5 +56,9 @@ public class UrlProviderTest extends ProviderTestSuiteJunit5 {
             manager.addProvider("file", new UrlFileProvider());
         }
     }
+
+    public UrlProviderTest() throws Exception {
+        super(new UrlProviderTestConfig(), "", false);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/NestedZipTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/NestedZipTest.java
index fcbfeb72c..e0c7c0bde 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/NestedZipTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/NestedZipTest.java
@@ -33,10 +33,6 @@ import org.junit.jupiter.api.TestInstance;
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 public class NestedZipTest extends ProviderTestSuiteJunit5 {
 
-    public NestedZipTest() throws Exception {
-        super(new NestedZipTestConfig(), "", true);
-    }
-
     /**
      * Configuration for nested ZIP provider tests.
      */
@@ -57,5 +53,9 @@ public class NestedZipTest extends ProviderTestSuiteJunit5 {
             manager.addProvider("zip", new ZipFileProvider());
         }
     }
+
+    public NestedZipTest() throws Exception {
+        super(new NestedZipTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderTest.java
index 58117bf16..16867698b 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderTest.java
@@ -34,10 +34,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class ZipProviderTest extends ProviderTestSuiteJunit5 {
 
-    public ZipProviderTest() throws Exception {
-        super(new ZipProviderTestConfig(), "", true);
-    }
-
     /**
      * Configuration for ZIP provider tests.
      */
@@ -63,5 +59,9 @@ public class ZipProviderTest extends ProviderTestSuiteJunit5 {
             manager.addMimeTypeMap(MIME_TYPE_APPLICATION_ZIP, "zip");
         }
     }
+
+    public ZipProviderTest() throws Exception {
+        super(new ZipProviderTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetNullTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetNullTest.java
index e9495d87c..ae6e1c2e1 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetNullTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetNullTest.java
@@ -39,10 +39,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class ZipProviderWithCharsetNullTest extends ProviderTestSuiteJunit5 {
 
-    public ZipProviderWithCharsetNullTest() throws Exception {
-        super(new ZipProviderWithCharsetNullTestConfig(), "", true);
-    }
-
     /**
      * Configuration for ZIP provider tests with null charset.
      */
@@ -72,5 +68,9 @@ public class ZipProviderWithCharsetNullTest extends 
ProviderTestSuiteJunit5 {
             manager.addMimeTypeMap(MIME_TYPE_APPLICATION_ZIP, "zip");
         }
     }
+
+    public ZipProviderWithCharsetNullTest() throws Exception {
+        super(new ZipProviderWithCharsetNullTestConfig(), "", true);
+    }
 }
 
diff --git 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetTest.java
 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetTest.java
index 8d5c76be0..b1751adfc 100644
--- 
a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetTest.java
+++ 
b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/zip/ZipProviderWithCharsetTest.java
@@ -39,10 +39,6 @@ import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
  */
 public class ZipProviderWithCharsetTest extends ProviderTestSuiteJunit5 {
 
-    public ZipProviderWithCharsetTest() throws Exception {
-        super(new ZipProviderWithCharsetTestConfig(), "", true);
-    }
-
     /**
      * Configuration for ZIP provider tests with charset.
      */
@@ -72,5 +68,9 @@ public class ZipProviderWithCharsetTest extends 
ProviderTestSuiteJunit5 {
             manager.addMimeTypeMap(MIME_TYPE_APPLICATION_ZIP, "zip");
         }
     }
+
+    public ZipProviderWithCharsetTest() throws Exception {
+        super(new ZipProviderWithCharsetTestConfig(), "", true);
+    }
 }
 


Reply via email to