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 );
             }
         }
     }