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 2018/08/26 21:45:39 UTC
[maven-wagon] 01/01: [WAGON-528] Extend and unify compression
capabilities in HTTP (Lightweight) Wagon
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch WAGON-528
in repository https://gitbox.apache.org/repos/asf/maven-wagon.git
commit 8809d22af072cf566b7905bb1565cfd4b54a26ae
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Sun Aug 26 23:44:23 2018 +0200
[WAGON-528] Extend and unify compression capabilities in HTTP (Lightweight) Wagon
---
.../apache/maven/wagon/http/HttpWagonTestCase.java | 80 ++++++++++++++++++++--
.../wagon/providers/http/LightweightHttpWagon.java | 8 ++-
.../wagon/shared/http/AbstractHttpClientWagon.java | 1 -
.../wagon/providers/http/HttpClientWagonTest.java | 10 +--
.../providers/webdav/HttpClientWagonTest.java | 11 +--
5 files changed, 83 insertions(+), 27 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 ee30271..b71ac55 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
@@ -74,6 +74,7 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream;
/**
@@ -583,7 +584,7 @@ public abstract class HttpWagonTestCase
sourceFile.deleteOnExit();
String resName = "gzip-res.txt";
- String sourceContent = writeTestFileGzip( sourceFile, resName );
+ String sourceContent = writeTestFile( sourceFile, resName, "gzip" );
wagon.connect( testRepository );
@@ -605,6 +606,56 @@ public abstract class HttpWagonTestCase
}
}
+ /* This test cannot be enabled because we cannot tell GzipFilter to compress with deflate only
+ public void testDeflateGet()
+ throws Exception
+ {
+ Server server = new Server( );
+
+ String localRepositoryPath = FileTestUtils.getTestOutputDir().toString();
+ ServletContextHandler root = new ServletContextHandler( ServletContextHandler.SESSIONS );
+ root.setResourceBase( localRepositoryPath );
+ ServletHolder servletHolder = new ServletHolder( new DefaultServlet() );
+ root.addServlet( servletHolder, "/*" );
+ FilterHolder filterHolder = new FilterHolder( new GzipFilter() );
+ root.addFilter( filterHolder, "/deflate/*", EnumSet.of( DispatcherType.REQUEST ) );
+ addConnector( server );
+ server.setHandler( root );
+ server.start();
+
+ try
+ {
+ Wagon wagon = getWagon();
+
+ Repository testRepository = new Repository( "id", getRepositoryUrl( server ) );
+
+ File sourceFile = new File( localRepositoryPath + "/deflate" );
+
+ sourceFile.deleteOnExit();
+
+ String resName = "deflate-res.txt";
+ String sourceContent = writeTestFile( sourceFile, resName, null );
+
+ wagon.connect( testRepository );
+
+ File destFile = FileTestUtils.createUniqueFile( getName(), getName() );
+
+ destFile.deleteOnExit();
+
+ wagon.get( "deflate/" + resName, destFile );
+
+ wagon.disconnect();
+
+ String destContent = FileUtils.fileRead( destFile );
+
+ assertEquals( sourceContent, destContent );
+ }
+ finally
+ {
+ server.stop();
+ }
+ }*/
+
public void testProxiedRequest()
throws Exception
{
@@ -1546,7 +1597,7 @@ public abstract class HttpWagonTestCase
}
- private String writeTestFileGzip( File parent, String child )
+ private String writeTestFile( File parent, String child, String compressionType )
throws IOException
{
File file = new File( parent, child );
@@ -1562,15 +1613,32 @@ public abstract class HttpWagonTestCase
out.close();
}
- file = new File( parent, child + ".gz" );
+ String ext = "";
+ if ( "gzip".equals( compressionType ) )
+ {
+ ext = ".gz";
+ }
+ if ( "deflate".equals( compressionType ) )
+ {
+ ext = ".deflate";
+ }
+
+ file = new File( parent, child + ext );
file.deleteOnExit();
String content;
out = new FileOutputStream( file );
- out = new GZIPOutputStream( out );
+ if ( "gzip".equals( compressionType ) )
+ {
+ out = new GZIPOutputStream( out );
+ }
+ if ( "deflate".equals( compressionType ) )
+ {
+ out = new DeflaterOutputStream( out );
+ }
try
{
- // write out different data than non-gz file, so we can
- // assert the gz version was returned
+ // write out different data than non-compressed file, so we can
+ // assert the compressed version was returned
content = file.getAbsolutePath();
out.write( content.getBytes() );
}
diff --git a/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java b/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java
index b22de62..50fc28a 100644
--- a/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java
+++ b/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java
@@ -50,6 +50,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.zip.DeflaterInputStream;
import java.util.zip.GZIPInputStream;
/**
@@ -119,7 +120,7 @@ public class LightweightHttpWagon
URL url = new URL( visitingUrl );
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection( this.proxy );
- urlConnection.setRequestProperty( "Accept-Encoding", "gzip" );
+ urlConnection.setRequestProperty( "Accept-Encoding", "gzip,deflate" );
if ( !useCache )
{
urlConnection.setRequestProperty( "Pragma", "no-cache" );
@@ -148,6 +149,11 @@ public class LightweightHttpWagon
{
is = new GZIPInputStream( is );
}
+ boolean isDeflated = contentEncoding != null && "deflate".equalsIgnoreCase( contentEncoding );
+ if ( isDeflated )
+ {
+ is = new DeflaterInputStream( is );
+ }
inputData.setInputStream( is );
resource.setLastModified( urlConnection.getLastModified() );
resource.setContentLength( urlConnection.getContentLength() );
diff --git a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
index 3146909..097167f 100755
--- a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
+++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
@@ -930,7 +930,6 @@ public abstract class AbstractHttpClientWagon
method.addHeader( "Cache-store", "no-store" );
method.addHeader( "Pragma", "no-cache" );
method.addHeader( "Expires", "0" );
- method.addHeader( "Accept-Encoding", "gzip" );
}
if ( httpHeaders != null )
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java
index 57552f4..bf15e67 100755
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java
@@ -71,7 +71,7 @@ public class HttpClientWagonTest
// method.addRequestHeader( "Cache-store", "no-store" );
// method.addRequestHeader( "Pragma", "no-cache" );
// method.addRequestHeader( "Expires", "0" );
- // method.addRequestHeader( "Accept-Encoding", "gzip" );
+ // "Accept-Encoding" is automatically set by HttpClient at runtime
Header header = method.getFirstHeader( "Cache-control" );
assertNotNull( header );
@@ -88,10 +88,6 @@ public class HttpClientWagonTest
header = method.getFirstHeader( "Expires" );
assertNotNull( header );
assertEquals( "0", header.getValue() );
-
- header = method.getFirstHeader( "Accept-Encoding" );
- assertNotNull( header );
- assertEquals( "gzip", header.getValue() );
}
public void testTurnOffDefaultHeaders()
@@ -110,7 +106,6 @@ public class HttpClientWagonTest
// method.addRequestHeader( "Cache-store", "no-store" );
// method.addRequestHeader( "Pragma", "no-cache" );
// method.addRequestHeader( "Expires", "0" );
- // method.addRequestHeader( "Accept-Encoding", "gzip" );
Header header = method.getFirstHeader( "Cache-control" );
assertNull( header );
@@ -123,9 +118,6 @@ public class HttpClientWagonTest
header = method.getFirstHeader( "Expires" );
assertNull( header );
-
- header = method.getFirstHeader( "Accept-Encoding" );
- assertNull( header );
}
private static final class TestWagon
diff --git a/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/HttpClientWagonTest.java b/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/HttpClientWagonTest.java
index 7b8583c..177774b 100644
--- a/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/HttpClientWagonTest.java
+++ b/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/HttpClientWagonTest.java
@@ -31,7 +31,6 @@ import org.apache.maven.wagon.authentication.AuthenticationException;
import org.apache.maven.wagon.authentication.AuthenticationInfo;
import org.apache.maven.wagon.proxy.ProxyInfo;
import org.apache.maven.wagon.repository.Repository;
-import org.apache.maven.wagon.shared.http.AbstractHttpClientWagon;
import org.apache.maven.wagon.shared.http.HttpConfiguration;
import org.apache.maven.wagon.shared.http.HttpMethodConfiguration;
import org.junit.Ignore;
@@ -97,7 +96,7 @@ public class HttpClientWagonTest
// method.addRequestHeader( "Cache-store", "no-store" );
// method.addRequestHeader( "Pragma", "no-cache" );
// method.addRequestHeader( "Expires", "0" );
- // method.addRequestHeader( "Accept-Encoding", "gzip" );
+ // "Accept-Encoding" is automatically set by HttpClient at runtime
Header header = method.getFirstHeader( "Cache-control" );
assertNotNull( header );
@@ -114,10 +113,6 @@ public class HttpClientWagonTest
header = method.getFirstHeader( "Expires" );
assertNotNull( header );
assertEquals( "0", header.getValue() );
-
- header = method.getFirstHeader( "Accept-Encoding" );
- assertNotNull( header );
- assertEquals( "gzip", header.getValue() );
}
public void testTurnOffDefaultHeaders()
@@ -136,7 +131,6 @@ public class HttpClientWagonTest
// method.addRequestHeader( "Cache-store", "no-store" );
// method.addRequestHeader( "Pragma", "no-cache" );
// method.addRequestHeader( "Expires", "0" );
- // method.addRequestHeader( "Accept-Encoding", "gzip" );
Header header = method.getFirstHeader( "Cache-control" );
assertNull( header );
@@ -149,9 +143,6 @@ public class HttpClientWagonTest
header = method.getFirstHeader( "Expires" );
assertNull( header );
-
- header = method.getFirstHeader( "Accept-Encoding" );
- assertNull( header );
}
@Ignore("not sure how to test this")