You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/03/12 01:51:02 UTC

svn commit: r922090 - in /maven/core-integration-testing/trunk/core-it-suite/src/test: java/org/apache/maven/it/MavenITmng4448FollowHttpRedirectTest.java resources/mng-4448/keystore resources/mng-4448/settings-template.xml

Author: bentmann
Date: Fri Mar 12 00:51:02 2010
New Revision: 922090

URL: http://svn.apache.org/viewvc?rev=922090&view=rev
Log:
[MNG-4428] Permament move (error 301) not handled properly by Maven

o Strengthened IT

Added:
    maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/keystore   (with props)
Modified:
    maven/core-integration-testing/trunk/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4448FollowHttpRedirectTest.java
    maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/settings-template.xml

Modified: maven/core-integration-testing/trunk/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4448FollowHttpRedirectTest.java
URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4448FollowHttpRedirectTest.java?rev=922090&r1=922089&r2=922090&view=diff
==============================================================================
--- maven/core-integration-testing/trunk/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4448FollowHttpRedirectTest.java (original)
+++ maven/core-integration-testing/trunk/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4448FollowHttpRedirectTest.java Fri Mar 12 00:51:02 2010
@@ -28,14 +28,15 @@ import java.io.PrintWriter;
 import java.util.List;
 import java.util.Properties;
 
-import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.mortbay.jetty.Connector;
 import org.mortbay.jetty.Handler;
 import org.mortbay.jetty.Request;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.AbstractHandler;
+import org.mortbay.jetty.security.SslSocketConnector;
 
 /**
  * This is a test set for <a href="http://jira.codehaus.org/browse/MNG-4448">MNG-4448</a>.
@@ -53,69 +54,79 @@ public class MavenITmng4448FollowHttpRed
     }
 
     /**
-     * Verify that HTTP redirects are getting followed.
+     * Verify that redirects from HTTP to HTTP are getting followed.
      */
-    public void testit()
+    public void testitHttpToHttp()
         throws Exception
     {
-        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4448" );
+        testit( true, true );
+    }
 
-        Verifier verifier = new Verifier( testDir.getAbsolutePath() );
+    /**
+     * Verify that redirects from HTTPS to HTTPS are getting followed.
+     */
+    public void testitHttpsToHttps()
+        throws Exception
+    {
+        testit( false, false );
+    }
 
-        Handler repoHandler = new AbstractHandler()
-        {
-            public void handle( String target, HttpServletRequest request, HttpServletResponse response, int dispatch )
-                throws IOException, ServletException
-            {
-                System.out.println( "Handling " + request.getMethod() + " " + request.getRequestURL() );
+    /**
+     * Verify that redirects from HTTP to HTTPS are getting followed.
+     */
+    public void testitHttpToHttps()
+        throws Exception
+    {
+        requiresMavenVersion( "2.2.0" );
 
-                PrintWriter writer = response.getWriter();
+        testit( true, false );
+    }
 
-                response.setStatus( HttpServletResponse.SC_OK );
+    /**
+     * Verify that redirects from HTTPS to HTTP are getting followed.
+     */
+    public void testitHttpsToHttp()
+        throws Exception
+    {
+        requiresMavenVersion( "2.2.0" );
 
-                if ( request.getRequestURI().startsWith( "/repo/" ) )
-                {
-                    response.setStatus( HttpServletResponse.SC_MOVED_PERMANENTLY );
-                    response.setHeader( "Location", "/redirected/" + request.getRequestURI().substring( 6 ) );
-                }
-                else if ( request.getRequestURI().endsWith( ".pom" ) )
-                {
-                    writer.println( "<project>" );
-                    writer.println( "  <modelVersion>4.0.0</modelVersion>" );
-                    writer.println( "  <groupId>org.apache.maven.its.mng4448</groupId>" );
-                    writer.println( "  <artifactId>dep</artifactId>" );
-                    writer.println( "  <version>0.1</version>" );
-                    writer.println( "</project>" );
-                }
-                else if ( request.getRequestURI().endsWith( ".jar" ) )
-                {
-                    writer.println( "empty" );
-                }
-                else if ( request.getRequestURI().endsWith( ".md5" ) || request.getRequestURI().endsWith( ".sha1" ) )
-                {
-                    response.setStatus( HttpServletResponse.SC_NOT_FOUND );
-                }
+        testit( false, true );
+    }
 
-                ( (Request) request ).setHandled( true );
-            }
-        };
+    private void testit( boolean fromHttp, boolean toHttp )
+        throws Exception
+    {
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-4448" );
+
+        Verifier verifier = new Verifier( testDir.getAbsolutePath() );
+
+        // keytool -genkey -alias localhost -keypass key-passwd -keystore keystore -storepass store-passwd \
+        //   -validity 4096 -dname "cn=localhost, ou=None, L=Seattle, ST=Washington, o=ExampleOrg, c=US" -keyalg RSA
+        String storePath = new File( testDir, "keystore" ).getAbsolutePath();
+        String storePwd = "store-passwd";
+        String keyPwd = "key-passwd";
 
         Server server = new Server( 0 );
-        server.setHandler( repoHandler );
+        server.addConnector( newHttpsConnector( storePath, storePwd, keyPwd ) );
+        Connector from = server.getConnectors()[ fromHttp ? 0 : 1 ];
+        Connector to = server.getConnectors()[ toHttp ? 0 : 1 ];
+        server.setHandler( new RedirectHandler( toHttp ? "http" : "https", to ) );
         server.start();
 
         try
         {
-            int port = server.getConnectors()[0].getLocalPort();
-
             verifier.setAutoclean( false );
             verifier.deleteArtifacts( "org.apache.maven.its.mng4448" );
             verifier.deleteDirectory( "target" );
             Properties filterProps = verifier.newDefaultFilterProperties();
-            filterProps.setProperty( "@port@", Integer.toString( port ) );
+            filterProps.setProperty( "@protocol@", fromHttp ? "http" : "https" );
+            filterProps.setProperty( "@port@", Integer.toString( from.getLocalPort() ) );
             verifier.filterFile( "settings-template.xml", "settings.xml", "UTF-8", filterProps );
-            verifier.getCliOptions().add( "--settings" );
+            verifier.getCliOptions().add( "-X --settings" );
             verifier.getCliOptions().add( "settings.xml" );
+            verifier.setSystemProperty( "javax.net.ssl.trustStore", storePath );
+            verifier.setSystemProperty( "javax.net.ssl.trustStorePassword", storePwd );
+            verifier.setLogFileName( "log-" + getName().substring( 6 ) + ".txt" );
             verifier.executeGoal( "validate" );
             verifier.verifyErrorFreeLog();
             verifier.resetStreams();
@@ -129,4 +140,74 @@ public class MavenITmng4448FollowHttpRed
         assertTrue( cp.toString(), cp.contains( "dep-0.1.jar" ) );
     }
 
+    private Connector newHttpsConnector( String keystore, String storepwd, String keypwd )
+    {
+        SslSocketConnector connector = new SslSocketConnector();
+        connector.setPort( 0 );
+        connector.setKeystore( keystore );
+        connector.setPassword( storepwd );
+        connector.setKeyPassword( keypwd );
+        return connector;
+    }
+
+    static class RedirectHandler extends AbstractHandler
+    {
+
+        private final String protocol;
+
+        private final Connector connector;
+
+        public RedirectHandler( String protocol, Connector connector )
+        {
+            this.protocol = protocol;
+            this.connector = connector;
+        }
+
+        public void handle( String target, HttpServletRequest request, HttpServletResponse response, int dispatch )
+            throws IOException
+        {
+            System.out.println( "Handling " + request.getMethod() + " " + request.getRequestURL() );
+
+            PrintWriter writer = response.getWriter();
+
+            String uri = request.getRequestURI();
+            if ( uri.startsWith( "/repo/" ) )
+            {
+                String location = protocol + "://localhost:" + connector.getLocalPort() + "/redirected/"
+                    + uri.substring( 6 );
+                if ( uri.endsWith( ".pom" ) )
+                {
+                    response.setStatus( HttpServletResponse.SC_MOVED_TEMPORARILY );
+                }
+                else
+                {
+                    response.setStatus( HttpServletResponse.SC_MOVED_PERMANENTLY );
+                }
+                response.setHeader( "Location", location );
+            }
+            else if ( uri.endsWith( ".pom" ) )
+            {
+                writer.println( "<project>" );
+                writer.println( "  <modelVersion>4.0.0</modelVersion>" );
+                writer.println( "  <groupId>org.apache.maven.its.mng4448</groupId>" );
+                writer.println( "  <artifactId>dep</artifactId>" );
+                writer.println( "  <version>0.1</version>" );
+                writer.println( "</project>" );
+                response.setStatus( HttpServletResponse.SC_OK );
+            }
+            else if ( uri.endsWith( ".jar" ) )
+            {
+                writer.println( "empty" );
+                response.setStatus( HttpServletResponse.SC_OK );
+            }
+            else
+            {
+                response.setStatus( HttpServletResponse.SC_NOT_FOUND );
+            }
+
+            ( (Request) request ).setHandled( true );
+        }
+
+    }
+
 }

Added: maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/keystore
URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/keystore?rev=922090&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/keystore
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/settings-template.xml
URL: http://svn.apache.org/viewvc/maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/settings-template.xml?rev=922090&r1=922089&r2=922090&view=diff
==============================================================================
--- maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/settings-template.xml (original)
+++ maven/core-integration-testing/trunk/core-it-suite/src/test/resources/mng-4448/settings-template.xml Fri Mar 12 00:51:02 2010
@@ -26,7 +26,7 @@ under the License.
       <repositories>
         <repository>
           <id>maven-core-it</id>
-          <url>http://localhost:@port@/repo/</url>
+          <url>@protocol@://localhost:@port@/repo/</url>
           <releases>
             <checksumPolicy>ignore</checksumPolicy>
           </releases>