Ask ftp/http server for its assigned port instead of trying to assign an available port
diff --git a/wagon-provider-test/src/main/java/org/apache/maven/wagon/StreamingWagonTestCase.java b/wagon-provider-test/src/main/java/org/apache/maven/wagon/StreamingWagonTestCase.java
index c2a4782..d06da32 100644
--- a/wagon-provider-test/src/main/java/org/apache/maven/wagon/StreamingWagonTestCase.java
+++ b/wagon-provider-test/src/main/java/org/apache/maven/wagon/StreamingWagonTestCase.java
@@ -42,10 +42,10 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
-
             setupWagonTestingFixtures();
 
+            setupRepositories();
+
             streamRoundTripTesting();
 
             tearDownWagonTestingFixtures();
@@ -55,10 +55,10 @@
     public void testFailedGetToStream()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         message( "Getting test artifact from test repository " + testRepository );
 
         StreamingWagon wagon = (StreamingWagon) getWagon();
@@ -103,8 +103,9 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
+
             int expectedSize = putFile();
             // CHECKSTYLE_OFF: MagicNumber
             getIfNewerToStream( getExpectedLastModifiedOnGet( testRepository, new Resource( resource ) ) + 30000, false,
@@ -118,8 +119,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             getIfNewerToStream( new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2006-01-01" ).getTime(), true,
                                 expectedSize );
@@ -131,8 +132,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             getIfNewerToStream( getExpectedLastModifiedOnGet( testRepository, new Resource( resource ) ), false,
                                 expectedSize );
@@ -172,8 +173,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             message( "Getting test artifact from test repository " + testRepository );
             StreamingWagon wagon = (StreamingWagon) getWagon();
             wagon.addTransferListener( checksumObserver );
diff --git a/wagon-provider-test/src/main/java/org/apache/maven/wagon/WagonTestCase.java b/wagon-provider-test/src/main/java/org/apache/maven/wagon/WagonTestCase.java
index cdcdc67..a1b9a45 100644
--- a/wagon-provider-test/src/main/java/org/apache/maven/wagon/WagonTestCase.java
+++ b/wagon-provider-test/src/main/java/org/apache/maven/wagon/WagonTestCase.java
@@ -42,7 +42,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.net.ServerSocket;
 import java.nio.charset.StandardCharsets;
 import java.security.NoSuchAlgorithmException;
 import java.text.SimpleDateFormat;
@@ -136,23 +135,6 @@
      */
     protected abstract String getProtocol();
 
-    public static ServerSocket newServerSocket( int... ports )
-    {
-        for ( int port : ports )
-        {
-            try
-            {
-                return new ServerSocket( port );
-            }
-            catch ( IOException ex )
-            {
-                continue;
-            }
-        }
-
-        throw new RuntimeException( "no port available" );
-    }
-
     // ----------------------------------------------------------------------
     // 1. Create a local file repository which mimic a users local file
     // Repository.
@@ -270,10 +252,10 @@
     public void testWagon()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         fileRoundTripTesting();
 
         tearDownWagonTestingFixtures();
@@ -284,8 +266,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             // CHECKSTYLE_OFF: MagicNumber
             getIfNewer( getExpectedLastModifiedOnGet( testRepository, new Resource( resource ) ) + 30000, false,
@@ -315,8 +297,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             getIfNewer( getExpectedLastModifiedOnGet( testRepository, new Resource( resource ) ), false, expectedSize );
         }
@@ -327,8 +309,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             int expectedSize = putFile();
             getIfNewer( new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2006-01-01" ).getTime(), true, expectedSize );
         }
@@ -431,10 +413,10 @@
     public void testWagonPutDirectory()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
@@ -479,10 +461,10 @@
     public void testWagonPutDirectoryDeepDestination()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
@@ -533,10 +515,10 @@
 
         final String[] resources = { "a/test-resource-2.txt", "a/b/test-resource-3.txt", "c/test-resource-4.txt" };
 
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
@@ -585,10 +567,10 @@
 
         final String[] resources = { "a/test-resource-2.txt", "a/b/test-resource-3.txt", "c/test-resource-4.txt" };
 
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
@@ -688,10 +670,10 @@
     public void testFailedGet()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         message( "Getting test artifact from test repository " + testRepository );
 
         Wagon wagon = getWagon();
@@ -729,8 +711,8 @@
     {
         if ( supportsGetIfNewer() )
         {
-            setupRepositories();
             setupWagonTestingFixtures();
+            setupRepositories();
             message( "Getting test artifact from test repository " + testRepository );
             Wagon wagon = getWagon();
             wagon.addTransferListener( checksumObserver );
@@ -767,10 +749,10 @@
     public void testWagonGetFileList()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         String dirName = "file-list";
 
         String filenames[] =
@@ -821,10 +803,10 @@
     public void testWagonGetFileListWhenDirectoryDoesNotExist()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         String dirName = "file-list-unexisting";
 
         Wagon wagon = getWagon();
@@ -857,10 +839,10 @@
     public void testWagonResourceExists()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         putFile();
@@ -883,10 +865,10 @@
     public void testWagonResourceNotExists()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         wagon.connect( testRepository, getAuthInfo() );
diff --git a/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java b/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
index 16a777c..463431a 100644
--- a/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
+++ b/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
@@ -123,8 +123,6 @@
         server.setHandler( handlers );
 
         server.start();
-
-        testRepository.setUrl( getTestRepositoryUrl() );
     }
 
     protected final int getTestRepositoryPort()
diff --git a/wagon-providers/wagon-ftp/src/test/java/org/apache/maven/wagon/providers/ftp/FtpWagonTest.java b/wagon-providers/wagon-ftp/src/test/java/org/apache/maven/wagon/providers/ftp/FtpWagonTest.java
index d5f74b9..6f20f99 100644
--- a/wagon-providers/wagon-ftp/src/test/java/org/apache/maven/wagon/providers/ftp/FtpWagonTest.java
+++ b/wagon-providers/wagon-ftp/src/test/java/org/apache/maven/wagon/providers/ftp/FtpWagonTest.java
@@ -20,8 +20,6 @@
  */
 
 import java.io.File;
-import java.io.IOException;
-import java.net.ServerSocket;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -30,6 +28,7 @@
 import org.apache.ftpserver.FtpServerFactory;
 import org.apache.ftpserver.ftplet.Authority;
 import org.apache.ftpserver.ftplet.UserManager;
+import org.apache.ftpserver.listener.Listener;
 import org.apache.ftpserver.listener.ListenerFactory;
 import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
 import org.apache.ftpserver.usermanager.impl.BaseUser;
@@ -49,30 +48,15 @@
 public class FtpWagonTest
     extends StreamingWagonTestCase
 {
-    static private FtpServer server;
+    private FtpServer server;
     
-//    private static final int testRepositoryPort = 10023 + new Random().nextInt( 16 );
-    
-    private static int testRepositoryPort;
+    private int testRepositoryPort;
     
     protected String getProtocol()
     {
         return "ftp";
     }
     
-    static
-    {
-        // claim number, release it again so it can be reclaimed by ftp server
-        try (ServerSocket socket = newServerSocket( 10023, 10024, 10025, 10026 ))
-        {
-            testRepositoryPort = socket.getLocalPort();
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-        }
-    }
-
     protected int getTestRepositoryPort() {
         return testRepositoryPort;
     }
@@ -86,17 +70,18 @@
             ftpHomeDir.mkdirs();
         }
 
-        if (server == null)
+        if ( server == null )
         {
             FtpServerFactory serverFactory = new FtpServerFactory();
 
             ListenerFactory factory = new ListenerFactory();
 
             // set the port of the listener
-            factory.setPort(getTestRepositoryPort());
+            factory.setPort( 0 );
             
             // replace the default listener
-            serverFactory.addListener("default", factory.createListener());
+            Listener defaultListener = factory.createListener();
+            serverFactory.addListener("default", defaultListener );
 
             PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
             UserManager um = userManagerFactory.createUserManager();
@@ -122,6 +107,7 @@
             // start the server
             server.start();
 
+            testRepositoryPort = defaultListener.getPort();
         }
     }
 
@@ -207,10 +193,10 @@
     public void testPutDirectoryCreation()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         Wagon wagon = getWagon();
 
         if ( wagon.supportsDirectoryCopy() )
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonErrorTest.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonErrorTest.java
index b48ee12..85df40d 100644
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonErrorTest.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonErrorTest.java
@@ -53,7 +53,7 @@
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -87,7 +87,7 @@
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -122,7 +122,7 @@
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -156,7 +156,7 @@
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
index b257659..38cd7e1 100644
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
@@ -1,8 +1,5 @@
 package org.apache.maven.wagon.providers.http;
 
-import java.io.IOException;
-import java.net.ServerSocket;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -23,9 +20,9 @@
  */
 
 import org.apache.maven.wagon.Wagon;
-import org.apache.maven.wagon.WagonTestCase;
 import org.codehaus.plexus.PlexusTestCase;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.handler.ResourceHandler;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 
@@ -35,32 +32,17 @@
 public abstract class HttpWagonHttpServerTestCase
     extends PlexusTestCase
 {
-    protected static int httpServerPort;
-
     private Server server;
 
     protected ResourceHandler resourceHandler;
 
     protected ServletContextHandler context;
 
-    static
-    {
-        // claim number, release it again so it can be reclaimed by ftp server
-        try ( ServerSocket socket = WagonTestCase.newServerSocket( 10008, 10009, 10010, 10011 ) )
-        {
-            httpServerPort = socket.getLocalPort();
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-        }
-    }
-    
     protected void setUp()
         throws Exception
     {
         super.setUp();
-        server = new Server( httpServerPort );
+        server = new Server( 0 );
 
         context = new ServletContextHandler( ServletContextHandler.SESSIONS );
         resourceHandler = new ResourceHandler();
@@ -85,4 +67,10 @@
     {
         server.stop();
     }
+    
+    protected final int getPort()
+    {
+        return ((ServerConnector) server.getConnectors()[0]).getLocalPort();
+    }
+    
 }
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
index ee1d0ec..553576f 100644
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
@@ -56,7 +56,7 @@
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -91,7 +91,7 @@
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -123,7 +123,7 @@
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -155,7 +155,7 @@
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
diff --git a/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java b/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java
index cf9fbdd..c8a3692 100644
--- a/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java
+++ b/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java
@@ -160,10 +160,10 @@
     public void testMkdirs()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         WebDavWagon wagon = (WebDavWagon) getWagon();
         wagon.connect( testRepository, getAuthInfo() );
 
@@ -210,10 +210,10 @@
         throws Exception
     {
         // WAGON-244
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         // reconstruct with no basedir
         testRepository.setUrl(
             testRepository.getProtocol() + "://" + testRepository.getHost() + ":" + testRepository.getPort() );
@@ -255,10 +255,10 @@
     public void testWagonWebDavGetFileList()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         String dirName = "file-list";
 
         String filenames[] =
@@ -325,10 +325,10 @@
     public void testWagonFailsOnPutFailureByDefault()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         File testFile = getTempFile();
 
         System.clearProperty( WebDavWagon.CONTINUE_ON_FAILURE_PROPERTY );
@@ -388,10 +388,10 @@
     public void testWagonContinuesOnPutFailureIfPropertySet()
         throws Exception
     {
-        setupRepositories();
-
         setupWagonTestingFixtures();
 
+        setupRepositories();
+
         File testFile = getTempFile();
 
         String continueOnFailureProperty = WebDavWagon.CONTINUE_ON_FAILURE_PROPERTY;