You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2020/03/10 21:23:47 UTC

[maven-wagon] 01/01: [WAGON-568] Fail to deploy on Sonatype OSS since maven 3.5.4

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

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

commit ae49128d201312e39433279df93c12cb5370bb2a
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Tue Mar 10 22:05:38 2020 +0100

    [WAGON-568] Fail to deploy on Sonatype OSS since maven 3.5.4
    
    Previously we assumed with manual relocation that a request can always
    be replayed (repeated). This caused stream-based resources with a
    provided content length the peer to block for advertised bytes until a
    REQUEST_TIMEOUT (408) is issued.
    
    Now we properly detect non-repeatable streams and abort any redirect in
    such a case. A new test will very a TransferFailedException for this.
    
    See also WAGON-570, WAGON-581 (HTTPCLIENT-2052).
---
 .../apache/maven/wagon/http/HttpWagonTestCase.java | 80 ++++++++++++++++++++--
 .../providers/http/LightweightHttpWagonTest.java   |  4 +-
 .../maven/wagon/providers/http/HttpWagonTest.java  |  5 +-
 .../wagon/providers/webdav/WebDavWagonTest.java    |  4 +-
 4 files changed, 81 insertions(+), 12 deletions(-)

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 4680416..b747768 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
@@ -59,6 +59,7 @@ import org.eclipse.jetty.util.security.Password;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -167,12 +168,12 @@ public abstract class HttpWagonTestCase
     public void testHttpHeaders()
         throws Exception
     {
-        Properties properties = new Properties();
-        properties.setProperty( "User-Agent", "Maven-Wagon/1.0" );
+        Properties headers = new Properties();
+        headers.setProperty( "User-Agent", "Maven-Wagon/1.0" );
 
         StreamingWagon wagon = (StreamingWagon) getWagon();
 
-        setHttpHeaders( wagon, properties );
+        setHttpConfiguration( wagon, headers, new Properties() );
 
         Server server = new Server(  );
         TestHeaderHandler handler = new TestHeaderHandler();
@@ -251,7 +252,7 @@ public abstract class HttpWagonTestCase
         // 1. set User-Agent header via HttpConfiguration
         Properties headers1 = new Properties();
         headers1.setProperty( "User-Agent", "test-user-agent" );
-        setHttpHeaders( wagon, headers1 );
+        setHttpConfiguration( wagon, headers1, new Properties() );
 
         // 2. redundantly set User-Agent header via setHttpHeaders()
         Properties headers2 = new Properties();
@@ -273,7 +274,7 @@ public abstract class HttpWagonTestCase
 
     }
 
-    protected abstract void setHttpHeaders( StreamingWagon wagon, Properties properties );
+    protected abstract void setHttpConfiguration( StreamingWagon wagon, Properties headers, Properties params );
 
     protected ServerConnector addConnector( Server server )
     {
@@ -348,7 +349,7 @@ public abstract class HttpWagonTestCase
             };
 
             server.setHandler( handler );
-            ServerConnector serverConnector = addConnector( server );
+            addConnector( server );
             server.start();
 
             wagon.connect( new Repository( "id", getRepositoryUrl( server ) ) );
@@ -1167,6 +1168,73 @@ public abstract class HttpWagonTestCase
         }
     }
 
+    public void testRedirectPutFailureNonRepeatableStream()
+            throws Exception
+        {
+            File repositoryDirectory = getRepositoryDirectory();
+            FileUtils.deleteDirectory( repositoryDirectory );
+            repositoryDirectory.mkdirs();
+
+            Server redirectServer = new Server( );
+
+            addConnector( redirectServer );
+
+            RedirectHandler redirectHandler =
+                new RedirectHandler( "See Other", HttpServletResponse.SC_SEE_OTHER, "/redirectRequest/foo",
+                                     null );
+
+            redirectServer.setHandler( redirectHandler );
+
+            redirectServer.start();
+
+            try
+            {
+                StreamingWagon wagon = (StreamingWagon) getWagon();
+
+                Properties params = new Properties();
+                params.put( "http.protocol.expect-continue", "%b,false" );
+                setHttpConfiguration( wagon, new Properties(), params );
+                Repository repository = new Repository( "foo", getRepositoryUrl( redirectServer ) );
+                wagon.connect( repository );
+
+                File sourceFile = new File( repositoryDirectory, "/redirectRequest/foo/test-secured-put-resource" );
+                sourceFile.delete();
+                assertFalse( sourceFile.exists() );
+
+                File tempFile = File.createTempFile( "wagon", "tmp" );
+                tempFile.deleteOnExit();
+                String content = "put top secret";
+                FileUtils.fileWrite( tempFile.getAbsolutePath(), content );
+
+                try ( FileInputStream fileInputStream = new FileInputStream( tempFile ) )
+                {
+                    wagon.putFromStream( fileInputStream, "test-secured-put-resource", content.length(), -1 );
+                    // This does not behave as expected because LightweightWagon does buffering by default
+                    if ( wagon.getClass().getName().contains( "Lightweight" ) )
+                    {
+                        assertTrue( true );
+                    }
+                    else
+                    {
+                        fail();
+                    }
+                }
+                catch ( TransferFailedException e )
+                {
+                    assertTrue( true );
+                }
+                finally
+                {
+                    wagon.disconnect();
+                    tempFile.delete();
+                }
+
+            }
+            finally
+            {
+                redirectServer.stop();
+            }
+        }
 
     /**
      *
diff --git a/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java b/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java
index 5d2eb57..1db8454 100644
--- a/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java
+++ b/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java
@@ -49,9 +49,9 @@ public class LightweightHttpWagonTest
         return getProtocol() + "://localhost:" + getTestRepositoryPort() + "/";
     }
 
-    protected void setHttpHeaders( StreamingWagon wagon, Properties properties )
+    protected void setHttpConfiguration( StreamingWagon wagon, Properties headers, Properties params )
     {
-        ( (LightweightHttpWagon) wagon ).setHttpHeaders( properties );
+        ( (LightweightHttpWagon) wagon ).setHttpHeaders( headers );
     }
 
     @Override
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
index f872147..2aeb3a0 100755
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
@@ -42,12 +42,13 @@ public class HttpWagonTest
         return getProtocol() + "://localhost:" + getTestRepositoryPort();
     }
 
-    protected void setHttpHeaders( StreamingWagon wagon, Properties properties )
+    protected void setHttpConfiguration( StreamingWagon wagon, Properties headers, Properties params )
     {
         HttpConfiguration config = new HttpConfiguration();
 
         HttpMethodConfiguration methodConfiguration = new HttpMethodConfiguration();
-        methodConfiguration.setHeaders( properties );
+        methodConfiguration.setHeaders( headers );
+        methodConfiguration.setParams( params );
         config.setAll( methodConfiguration );
         ( (HttpWagon) wagon ).setHttpConfiguration( config );
     }
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 e1150e3..697d2dd 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
@@ -242,9 +242,9 @@ public class WebDavWagonTest
         }
     }
 
-    protected void setHttpHeaders( StreamingWagon wagon, Properties properties )
+    protected void setHttpConfiguration( StreamingWagon wagon, Properties headers, Properties params )
     {
-        ( (WebDavWagon) wagon ).setHttpHeaders( properties );
+        ( (WebDavWagon) wagon ).setHttpHeaders( headers );
     }
 
     /**