You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2015/04/17 16:14:14 UTC
maven-wagon git commit: make sure User-Agent header is sent exactly
once
Repository: maven-wagon
Updated Branches:
refs/heads/master 70474a05d -> 824adca8d
make sure User-Agent header is sent exactly once
- remove unnecessary explicit default User-Agent (all 3 HTTP wagon
providers [http, lightweight, webdav] send a User-Agent by default
already)
- when adding headers, use setHeader() instead of addHeader().
this will avoid sending the same header key multiple times
- adapt header listener in tests so it will detect header keys
sent multiple times
- add tests to make sure default User-Agent is always present and
User-Agent is present only once even if set multiple times
using different methods
Signed-off-by: Jan Sievers <ja...@sap.com>
Signed-off-by: Jason van Zyl <jv...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/maven-wagon/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-wagon/commit/824adca8
Tree: http://git-wip-us.apache.org/repos/asf/maven-wagon/tree/824adca8
Diff: http://git-wip-us.apache.org/repos/asf/maven-wagon/diff/824adca8
Branch: refs/heads/master
Commit: 824adca8df1e36bc8b8cc9267f5e3a3a93cdef44
Parents: 70474a0
Author: Jan Sievers <ja...@sap.com>
Authored: Fri Apr 17 14:31:46 2015 +0200
Committer: Jason van Zyl <jv...@apache.org>
Committed: Fri Apr 17 10:02:24 2015 -0400
----------------------------------------------------------------------
.../maven/wagon/http/HttpWagonTestCase.java | 65 +++++++++++++++++++-
.../providers/http/AbstractHttpClientWagon.java | 34 +---------
2 files changed, 66 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/824adca8/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
----------------------------------------------------------------------
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 8657020..acdab16 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
@@ -207,6 +207,56 @@ public abstract class HttpWagonTestCase
assertEquals( "Maven-Wagon/1.0", handler.headers.get( "User-Agent" ) );
}
+ public void testUserAgentHeaderIsPresentByDefault()
+ throws Exception
+ {
+ StreamingWagon wagon = (StreamingWagon) getWagon();
+ Server server = new Server( 0 );
+ TestHeaderHandler handler = new TestHeaderHandler();
+ server.setHandler( handler );
+ addConnectors( server );
+ server.start();
+ wagon.connect( new Repository( "id", getProtocol() + "://localhost:"
+ + server.getConnectors()[0].getLocalPort() ) );
+ wagon.getToStream( "resource", new ByteArrayOutputStream() );
+ wagon.disconnect();
+ server.stop();
+
+ assertNotNull( "default User-Agent header of wagon provider should be present",
+ handler.headers.get( "User-Agent" ) );
+ }
+
+ public void testUserAgentHeaderIsPresentOnlyOnceIfSetMultipleTimes()
+ throws Exception
+ {
+ StreamingWagon wagon = (StreamingWagon) getWagon();
+
+ // 1. set User-Agent header via HttpConfiguration
+ Properties headers1 = new Properties();
+ headers1.setProperty( "User-Agent", "test-user-agent" );
+ setHttpHeaders( wagon, headers1 );
+
+ // 2. redundantly set User-Agent header via setHttpHeaders()
+ Properties headers2 = new Properties();
+ headers2.setProperty( "User-Agent", "test-user-agent" );
+ Method setHttpHeaders = wagon.getClass().getMethod( "setHttpHeaders", Properties.class );
+ setHttpHeaders.invoke( wagon, headers2 );
+
+ Server server = new Server( 0 );
+ TestHeaderHandler handler = new TestHeaderHandler();
+ server.setHandler( handler );
+ addConnectors( server );
+ server.start();
+ wagon.connect( new Repository( "id", getProtocol() + "://localhost:"
+ + server.getConnectors()[0].getLocalPort() ) );
+ wagon.getToStream( "resource", new ByteArrayOutputStream() );
+ wagon.disconnect();
+ server.stop();
+
+ assertEquals( "test-user-agent", handler.headers.get( "User-Agent" ) );
+
+ }
+
protected abstract void setHttpHeaders( StreamingWagon wagon, Properties properties );
protected void addConnectors( Server server )
@@ -2011,7 +2061,20 @@ public abstract class HttpWagonTestCase
for ( Enumeration<String> e = request.getHeaderNames(); e.hasMoreElements(); )
{
String name = e.nextElement();
- headers.put( name, request.getHeader( name ) );
+ Enumeration headerValues = request.getHeaders( name );
+ // as per HTTP spec http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html
+ // multiple values for the same header key are concatenated separated by comma
+ // otherwise we wouldn't notice headers with same key added multiple times
+ StringBuffer combinedHeaderValue = new StringBuffer();
+ for ( int i = 0; headerValues.hasMoreElements(); i++ )
+ {
+ if ( i > 0 )
+ {
+ combinedHeaderValue.append( "," );
+ }
+ combinedHeaderValue.append( headerValues.nextElement() );
+ }
+ headers.put( name, combinedHeaderValue.toString() );
}
response.setContentType( "text/plain" );
http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/824adca8/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java
----------------------------------------------------------------------
diff --git a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java
index e270c20..f47e5ae 100755
--- a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java
+++ b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java
@@ -375,35 +375,6 @@ public abstract class AbstractHttpClientWagon
.build();
}
- private static final String DEFAULT_USER_AGENT = getDefaultUserAgent();
-
- private static String getDefaultUserAgent()
- {
- Properties props = new Properties();
-
- InputStream is = AbstractHttpClientWagon.class.getResourceAsStream(
- "/META-INF/maven/org.apache.maven.wagon/wagon-http/pom.properties" );
- if ( is != null )
- {
- try
- {
- props.load( is );
- }
- catch ( IOException ignore )
- {
- // ignore
- }
- finally
- {
- IOUtil.close( is );
- }
- }
-
- String ver = props.getProperty( "version", "unknown-version" );
- return "Apache-Maven-Wagon/" + ver + " (Java " + System.getProperty( "java.version" ) + "; ";
- }
-
-
private CredentialsProvider credentialsProvider;
private AuthCache authCache;
@@ -873,14 +844,13 @@ public abstract class AbstractHttpClientWagon
method.addHeader( "Pragma", "no-cache" );
method.addHeader( "Expires", "0" );
method.addHeader( "Accept-Encoding", "gzip" );
- method.addHeader( "User-Agent", DEFAULT_USER_AGENT );
}
if ( httpHeaders != null )
{
for ( Map.Entry<Object, Object> entry : httpHeaders.entrySet() )
{
- method.addHeader( (String) entry.getKey(), (String) entry.getValue() );
+ method.setHeader( (String) entry.getKey(), (String) entry.getValue() );
}
}
@@ -889,7 +859,7 @@ public abstract class AbstractHttpClientWagon
{
for ( Header header : headers )
{
- method.addHeader( header );
+ method.setHeader( header );
}
}
}