You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2019/08/21 18:01:45 UTC

[maven-wagon] branch stabilize updated: Ask ftp/http server for its port instead of trying to assign an available port

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

rfscholte pushed a commit to branch stabilize
in repository https://gitbox.apache.org/repos/asf/maven-wagon.git


The following commit(s) were added to refs/heads/stabilize by this push:
     new 34bc00b  Ask ftp/http server for its port instead of trying to assign an available port
34bc00b is described below

commit 34bc00b2870ea9a82f8415cd12f2efd735b03bec
Author: rfscholte <rf...@apache.org>
AuthorDate: Wed Aug 21 20:01:37 2019 +0200

    Ask ftp/http server for its port instead of trying to assign an available port
---
 .../java/org/apache/maven/wagon/WagonTestCase.java | 27 ------------------
 .../maven/wagon/providers/ftp/FtpWagonTest.java    | 32 ++++++----------------
 .../wagon/providers/http/HttpWagonErrorTest.java   |  8 +++---
 .../http/HttpWagonHttpServerTestCase.java          | 28 ++++++-------------
 .../wagon/providers/http/HttpWagonTimeoutTest.java |  8 +++---
 5 files changed, 25 insertions(+), 78 deletions(-)

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 78931be..d505a4e 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,14 +42,12 @@ import org.slf4j.LoggerFactory;
 
 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;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Random;
 
 /**
  * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
@@ -137,31 +135,6 @@ public abstract class WagonTestCase
      */
     protected abstract String getProtocol();
 
-    public static ServerSocket newServerSocket( int... ports )
-    {
-        // there can be a timing issue while handing over the port to the actual server, so start at random index
-        final int offset = new Random().nextInt( ports.length );
-
-        for ( int index = 0 ; index < ports.length; index++ )
-        {
-            try
-            {
-                ServerSocket serverSocket = new ServerSocket( ports[( offset + index ) % ports.length] );
-                
-                if ( serverSocket.getLocalPort() != -1 )
-                {
-                    return serverSocket;
-                }
-            }
-            catch ( IOException ex )
-            {
-                continue;
-            }
-        }
-
-        throw new RuntimeException( "no port available" );
-    }
-
     // ----------------------------------------------------------------------
     // 1. Create a local file repository which mimic a users local file
     // Repository.
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..ce6884a 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 @@ package org.apache.maven.wagon.providers.ftp;
  */
 
 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.FtpServer;
 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 @@ import org.apache.maven.wagon.resource.Resource;
 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,7 +70,7 @@ public class FtpWagonTest
             ftpHomeDir.mkdirs();
         }
 
-        if (server == null)
+        if ( server == null )
         {
             FtpServerFactory serverFactory = new FtpServerFactory();
 
@@ -96,7 +80,8 @@ public class FtpWagonTest
             factory.setPort(getTestRepositoryPort());
             
             // 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 @@ public class FtpWagonTest
             // start the server
             server.start();
 
+            testRepositoryPort = defaultListener.getPort();
         }
     }
 
@@ -207,10 +193,10 @@ public class FtpWagonTest
     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 @@ public class HttpWagonErrorTest
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -87,7 +87,7 @@ public class HttpWagonErrorTest
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -122,7 +122,7 @@ public class HttpWagonErrorTest
             Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -156,7 +156,7 @@ public class HttpWagonErrorTest
             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 java.net.ServerSocket;
  */
 
 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 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
 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 @@ public abstract class HttpWagonHttpServerTestCase
     {
         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 @@ public class HttpWagonTimeoutTest
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -91,7 +91,7 @@ public class HttpWagonTimeoutTest
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -123,7 +123,7 @@ public class HttpWagonTimeoutTest
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );
 
@@ -155,7 +155,7 @@ public class HttpWagonTimeoutTest
             wagon.setReadTimeout( 1000 );
 
             Repository testRepository = new Repository();
-            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            testRepository.setUrl( "http://localhost:" + getPort() );
 
             wagon.connect( testRepository );