You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2011/09/20 00:52:18 UTC

svn commit: r1172877 - in /maven/wagon/trunk: ./ wagon-provider-test/src/main/java/org/apache/maven/wagon/http/ wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/ wagon-providers/wagon-http/ wagon-providers/wago...

Author: olamy
Date: Mon Sep 19 22:52:18 2011
New Revision: 1172877

URL: http://svn.apache.org/viewvc?rev=1172877&view=rev
Log:
[WAGON-347] Support preemtive authentication : add unit for that

Modified:
    maven/wagon/trunk/pom.xml
    maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
    maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java
    maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonWithPreemptiveAuthenticationTest.java
    maven/wagon/trunk/wagon-providers/wagon-http/pom.xml
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java

Modified: maven/wagon/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/pom.xml?rev=1172877&r1=1172876&r2=1172877&view=diff
==============================================================================
--- maven/wagon/trunk/pom.xml (original)
+++ maven/wagon/trunk/pom.xml Mon Sep 19 22:52:18 2011
@@ -316,6 +316,16 @@ under the License.
             <stagingSiteURL>scp://people.apache.org/www/maven.apache.org/wagon-${project.version}</stagingSiteURL>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>2.9</version>
+          <configuration>
+            <systemPropertyVariables>
+              <java.io.tmpdir>${project.build.outputDirectory}</java.io.tmpdir>
+            </systemPropertyVariables>
+          </configuration>
+        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>
@@ -340,11 +350,7 @@ under the License.
           </execution>
         </executions>
       </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <version>2.9</version>
-      </plugin>
+
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>animal-sniffer-maven-plugin</artifactId>

Modified: maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java?rev=1172877&r1=1172876&r2=1172877&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java (original)
+++ maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java Mon Sep 19 22:52:18 2011
@@ -36,6 +36,7 @@ import org.codehaus.plexus.util.StringOu
 import org.mortbay.jetty.Handler;
 import org.mortbay.jetty.HttpConnection;
 import org.mortbay.jetty.Request;
+import org.mortbay.jetty.Response;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.AbstractHandler;
 import org.mortbay.jetty.handler.HandlerCollection;
@@ -57,9 +58,11 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.lang.reflect.Method;
 import java.net.URLDecoder;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.zip.GZIPOutputStream;
@@ -662,25 +665,6 @@ public abstract class HttpWagonTestCase
         return server;
     }
 
-    protected SecurityHandler createSecurityHandler()
-    {
-        Constraint constraint = new Constraint();
-        constraint.setName( Constraint.__BASIC_AUTH );
-        constraint.setRoles( new String[]{ "admin" } );
-        constraint.setAuthenticate( true );
-
-        ConstraintMapping cm = new ConstraintMapping();
-        cm.setConstraint( constraint );
-        cm.setPathSpec( "/*" );
-
-        SecurityHandler sh = new SecurityHandler();
-        HashUserRealm hashUserRealm = new HashUserRealm( "MyRealm" );
-        hashUserRealm.put( "user", "secret" );
-        hashUserRealm.addUserToRole( "user", "admin" );
-        sh.setUserRealm( hashUserRealm );
-        sh.setConstraintMappings( new ConstraintMapping[]{ cm } );
-        return sh;
-    }
 
     private String writeTestFileGzip( File parent, String child )
         throws IOException
@@ -836,52 +820,81 @@ public abstract class HttpWagonTestCase
     public void runTestSecuredPut( AuthenticationInfo authInfo )
         throws Exception
     {
+        runTestSecuredPut( authInfo, 1 );
+    }
+
+    public void runTestSecuredPut( AuthenticationInfo authInfo, int putNumber )
+        throws Exception
+    {
         String localRepositoryPath = FileTestUtils.getTestOutputDir().toString();
         Server server = new Server( 0 );
 
-        SecurityHandler sh = createSecurityHandler();
+        TestSecurityHandler sh = createSecurityHandler();
 
-        PutHandler handler = new PutHandler( new File( localRepositoryPath ) );
+        PutHandler putHandler = new PutHandler( new File( localRepositoryPath ) );
 
         HandlerCollection handlers = new HandlerCollection();
-        handlers.setHandlers( new Handler[]{ sh, handler } );
+        handlers.setHandlers( new Handler[]{ sh, putHandler } );
 
         server.setHandler( handlers );
         addConnectors( server );
         server.start();
 
+        StreamingWagon wagon = (StreamingWagon) getWagon();
+        Repository testRepository = new Repository( "id", getRepositoryUrl( server ) );
+        wagon.connect( testRepository, authInfo );
         try
         {
-            StreamingWagon wagon = (StreamingWagon) getWagon();
-
-            Repository testRepository = new Repository( "id", getRepositoryUrl( server ) );
-
-            wagon.connect( testRepository, authInfo );
-
-            File sourceFile = new File( localRepositoryPath, "test-secured-put-resource" );
-            sourceFile.delete();
-            assertFalse( sourceFile.exists() );
-
-            File tempFile = File.createTempFile( "wagon", "tmp" );
-            tempFile.deleteOnExit();
-            FileUtils.fileWrite( tempFile.getAbsolutePath(), "put top secret" );
-
-            try
-            {
-                wagon.put( tempFile, "test-secured-put-resource" );
-            }
-            finally
+            for ( int i = 0; i < putNumber; i++ )
             {
-                wagon.disconnect();
-                tempFile.delete();
-            }
+                File sourceFile = new File( localRepositoryPath, "test-secured-put-resource" );
+                sourceFile.delete();
+                assertFalse( sourceFile.exists() );
+
+                File tempFile = File.createTempFile( "wagon", "tmp" );
+                tempFile.deleteOnExit();
+                FileUtils.fileWrite( tempFile.getAbsolutePath(), "put top secret" );
+
+                try
+                {
+                    wagon.put( tempFile, "test-secured-put-resource" );
+                }
+                finally
+                {
+                    tempFile.delete();
+                }
 
-            assertEquals( "put top secret", FileUtils.fileRead( sourceFile.getAbsolutePath() ) );
+                assertEquals( "put top secret", FileUtils.fileRead( sourceFile.getAbsolutePath() ) );
+            }
         }
         finally
         {
+            wagon.disconnect();
             server.stop();
         }
+        assertEquals( putNumber, putHandler.putCallNumber );
+        testPreemptiveAuthentication( sh );
+    }
+
+    protected abstract boolean supportPreemptiveAuthentication();
+
+    protected void testPreemptiveAuthentication( TestSecurityHandler sh )
+    {
+
+        if ( supportPreemptiveAuthentication() )
+        {
+            assertEquals( "not 1 security handler use " + sh.securityHandlerRequestReponses, 1,
+                          sh.securityHandlerRequestReponses.size() );
+            assertEquals( 200, sh.securityHandlerRequestReponses.get( 0 ).responseCode );
+        }
+        else
+        {
+            assertEquals( "not 2 security handler use " + sh.securityHandlerRequestReponses, 2,
+                          sh.securityHandlerRequestReponses.size() );
+            assertEquals( 401, sh.securityHandlerRequestReponses.get( 0 ).responseCode );
+            assertEquals( 200, sh.securityHandlerRequestReponses.get( 1 ).responseCode );
+
+        }
     }
 
     static class StatusHandler
@@ -910,6 +923,8 @@ public abstract class HttpWagonTestCase
     {
         private final File resourceBase;
 
+        public int putCallNumber = 0;
+
         public PutHandler( File repositoryDirectory )
         {
             this.resourceBase = repositoryDirectory;
@@ -941,7 +956,8 @@ public abstract class HttpWagonTestCase
                 in.close();
                 out.close();
             }
-
+            System.out.println( "put file " + request.getPathInfo() );
+            putCallNumber++;
             response.setStatus( HttpServletResponse.SC_CREATED );
         }
     }
@@ -993,4 +1009,69 @@ public abstract class HttpWagonTestCase
         }
 
     }
+
+    protected TestSecurityHandler createSecurityHandler()
+    {
+        Constraint constraint = new Constraint();
+        constraint.setName( Constraint.__BASIC_AUTH );
+        constraint.setRoles( new String[]{ "admin" } );
+        constraint.setAuthenticate( true );
+
+        ConstraintMapping cm = new ConstraintMapping();
+        cm.setConstraint( constraint );
+        cm.setPathSpec( "/*" );
+
+        TestSecurityHandler sh = new TestSecurityHandler();
+        HashUserRealm hashUserRealm = new HashUserRealm( "MyRealm" );
+        hashUserRealm.put( "user", "secret" );
+        hashUserRealm.addUserToRole( "user", "admin" );
+        sh.setUserRealm( hashUserRealm );
+        sh.setConstraintMappings( new ConstraintMapping[]{ cm } );
+        return sh;
+    }
+
+    public static class TestSecurityHandler
+        extends SecurityHandler
+    {
+
+        public List<SecurityHandlerRequestReponse> securityHandlerRequestReponses =
+            new ArrayList<SecurityHandlerRequestReponse>();
+
+        @Override
+        public void handle( String target, HttpServletRequest request, HttpServletResponse response, int dispatch )
+            throws IOException, ServletException
+        {
+            String method = request.getMethod();
+            super.handle( target, request, response, dispatch );
+            System.out.println( "method in SecurityHandler: " + method );
+
+            securityHandlerRequestReponses.add(
+                new SecurityHandlerRequestReponse( method, ( (Response) response ).getStatus() ) );
+        }
+
+    }
+
+    public static class SecurityHandlerRequestReponse
+    {
+        public String method;
+
+        public int responseCode;
+
+        private SecurityHandlerRequestReponse( String method, int responseCode )
+        {
+            this.method = method;
+            this.responseCode = responseCode;
+        }
+
+        @Override
+        public String toString()
+        {
+            final StringBuilder sb = new StringBuilder();
+            sb.append( "SecurityHandlerRequestReponse" );
+            sb.append( "{method='" ).append( method ).append( '\'' );
+            sb.append( ", responseCode=" ).append( responseCode );
+            sb.append( '}' );
+            return sb.toString();
+        }
+    }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java?rev=1172877&r1=1172876&r2=1172877&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java Mon Sep 19 22:52:18 2011
@@ -50,4 +50,9 @@ public class LightweightHttpWagonTest
         ( (LightweightHttpWagon) wagon ).setHttpHeaders( properties );
     }
 
+    @Override
+    protected boolean supportPreemptiveAuthentication()
+    {
+        return false;
+    }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonWithPreemptiveAuthenticationTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonWithPreemptiveAuthenticationTest.java?rev=1172877&r1=1172876&r2=1172877&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonWithPreemptiveAuthenticationTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonWithPreemptiveAuthenticationTest.java Mon Sep 19 22:52:18 2011
@@ -29,9 +29,17 @@ public class LightweightHttpWagonWithPre
     extends LightweightHttpWagonTest
 {
     @Override
-    protected Wagon getWagon() throws Exception {
+    protected Wagon getWagon()
+        throws Exception
+    {
         LightweightHttpWagon wagon = (LightweightHttpWagon) super.getWagon();
         wagon.setPreemptiveAuthentication( true );
         return wagon;
     }
+
+    @Override
+    protected boolean supportPreemptiveAuthentication()
+    {
+        return true;
+    }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-http/pom.xml
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/pom.xml?rev=1172877&r1=1172876&r2=1172877&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/pom.xml (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/pom.xml Mon Sep 19 22:52:18 2011
@@ -33,11 +33,6 @@ under the License.
     Wagon that gets and puts artifacts through http using Apache httpclient-4.x.
   </description>
 
-  <properties>
-    <!-- http pooled connection -->
-    <http.pool>true</http.pool>
-  </properties>
-
 
   <dependencies>
     <dependency>
@@ -109,15 +104,6 @@ under the License.
           </execution>
         </executions>
       </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-surefire-plugin</artifactId>
-        <configuration>
-          <systemPropertyVariables>
-            <maven.wagon.http.pool>${http.pool}</maven.wagon.http.pool>
-          </systemPropertyVariables>
-        </configuration>
-      </plugin>
     </plugins>
   </build>
 </project>

Modified: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java?rev=1172877&r1=1172876&r2=1172877&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java Mon Sep 19 22:52:18 2011
@@ -62,4 +62,10 @@ public class HttpWagonTest
         assertTrue( wagon.getConnectionManager() instanceof ThreadSafeClientConnManager );
 
     }
+
+    @Override
+    protected boolean supportPreemptiveAuthentication()
+    {
+        return true;
+    }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java?rev=1172877&r1=1172876&r2=1172877&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java Mon Sep 19 22:52:18 2011
@@ -45,4 +45,5 @@ public class HttpsWagonTest
         connector.setTrustPassword( "wagonhttp" );
         server.setConnectors( new Connector[] { connector } );
     }
+
 }