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/18 18:07:57 UTC
[maven-wagon] branch master updated: [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 master
in repository https://gitbox.apache.org/repos/asf/maven-wagon.git
The following commit(s) were added to refs/heads/master by this push:
new e84e56d [WAGON-568] Fail to deploy on Sonatype OSS since Maven 3.5.4
e84e56d is described below
commit e84e56d96c6b040536b931c98cb83ce0b2b95c9e
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 verify a TransferFailedException for this case.
See also WAGON-570, WAGON-581 (HTTPCLIENT-2052).
---
.../apache/maven/wagon/http/HttpWagonTestCase.java | 80 ++++++++++++++++++++--
.../providers/http/LightweightHttpWagonTest.java | 4 +-
.../wagon/shared/http/WagonRedirectStrategy.java | 4 ++
.../maven/wagon/providers/http/HttpWagonTest.java | 5 +-
.../wagon/providers/webdav/WebDavWagonTest.java | 10 ++-
5 files changed, 91 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-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
index efd324f..5488f80 100644
--- a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
+++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
@@ -51,6 +51,10 @@ public class WagonRedirectStrategy extends DefaultRedirectStrategy
HttpGet.METHOD_NAME,
HttpHead.METHOD_NAME,
HttpPut.METHOD_NAME,
+ /**
+ * This covers the most basic case where the redirection relocates to another
+ * collection which has an existing parent collection.
+ */
"MKCOL" } );
}
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..e6a355d 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,15 @@ public class WebDavWagonTest
}
}
- protected void setHttpHeaders( StreamingWagon wagon, Properties properties )
+ protected void setHttpConfiguration( StreamingWagon wagon, Properties headers, Properties params )
{
- ( (WebDavWagon) wagon ).setHttpHeaders( properties );
+ HttpConfiguration config = new HttpConfiguration();
+
+ HttpMethodConfiguration methodConfiguration = new HttpMethodConfiguration();
+ methodConfiguration.setHeaders( headers );
+ methodConfiguration.setParams( params );
+ config.setAll( methodConfiguration );
+ ( (WebDavWagon) wagon ).setHttpConfiguration( config );
}
/**