You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wagon-commits@maven.apache.org by ni...@apache.org on 2008/01/28 11:31:11 UTC

svn commit: r615844 - in /maven/wagon/trunk: wagon-provider-api/src/main/java/org/apache/maven/wagon/ wagon-provider-api/src/test/java/org/apache/maven/wagon/ wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/ wagon-providers...

Author: nicolas
Date: Mon Jan 28 02:31:09 2008
New Revision: 615844

URL: http://svn.apache.org/viewvc?rev=615844&view=rev
Log:
fix WAGON-86 apply James William Dumay patch
add support for get/setTimeOut on wagon (omitted for lightweight as this would require Java5)

Added:
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java   (with props)
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java   (with props)
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java   (with props)
Modified:
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java
    maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/WagonMock.java
    maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java
    maven/wagon/trunk/wagon-providers/wagon-http/pom.xml
    maven/wagon/trunk/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java
    maven/wagon/trunk/wagon-providers/wagon-http/src/main/resources/META-INF/plexus/components.xml
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonGzipTest.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java
    maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/CorrectedWebdavResource.java
    maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java Mon Jan 28 02:31:09 2008
@@ -67,6 +67,8 @@
     protected AuthenticationInfo authenticationInfo;
 
     protected boolean interactive = true;
+    
+    private int connectionTimeout = 60000;
 
     // ----------------------------------------------------------------------
     // Accessors
@@ -173,6 +175,16 @@
                     "Specified destination directory cannot be created: " + destinationDirectory );
             }
         }
+    }
+    
+    public void setTimeout( int timeoutValue )
+    {
+    	connectionTimeout = timeoutValue;
+    }
+    
+    public int getTimeout()
+    {
+    	return connectionTimeout;
     }
 
     // ----------------------------------------------------------------------

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/Wagon.java Mon Jan 28 02:31:09 2008
@@ -211,6 +211,16 @@
      */
     void disconnect()
         throws ConnectionException;
+    
+    /**
+     * Set the connection timeout limit in milliseconds
+     */
+    void setTimeout( int timeoutValue );
+    
+    /**
+     * Get the connection timeout limit in milliseconds
+     */
+    int getTimeout();
 
     // ----------------------------------------------------------------------
     //  Session listener

Modified: maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/WagonMock.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/WagonMock.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/WagonMock.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/WagonMock.java Mon Jan 28 02:31:09 2008
@@ -37,6 +37,7 @@
     extends StreamWagon
 {
     private boolean errorInputStream;
+    private int timeout = 0;
 
     public WagonMock()
     {
@@ -109,6 +110,16 @@
 
     public void closeConnection()
     {
+    }
+    
+    public void setTimeout( int timeoutValue )
+    {
+    	timeout = timeoutValue;
+    }
+    
+    public int getTimeout()
+    {
+    	return timeout;
     }
 
     public List getFileList( String destinationDirectory )

Modified: maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java Mon Jan 28 02:31:09 2008
@@ -92,7 +92,9 @@
         String host = getRepository().getHost();
 
         ftp = new FTPClient();
-
+        ftp.setDefaultTimeout(getTimeout());
+        ftp.setDataTimeout(getTimeout());
+        
         ftp.addProtocolCommandListener( new PrintCommandListener( this ) );
 
         try

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=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/pom.xml (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/pom.xml Mon Jan 28 02:31:09 2008
@@ -60,13 +60,13 @@
     <dependency>
       <groupId>commons-logging</groupId>
       <artifactId>commons-logging</artifactId>
-      <version>1.0.3</version>
+      <version>1.0.4</version>
       <scope>runtime</scope>
     </dependency>
     <dependency>
       <groupId>commons-httpclient</groupId>
       <artifactId>commons-httpclient</artifactId>
-      <version>2.0.2</version>
+      <version>3.1</version>
     </dependency>
   </dependencies>
 </project>

Modified: maven/wagon/trunk/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java Mon Jan 28 02:31:09 2008
@@ -23,14 +23,15 @@
 import org.apache.commons.httpclient.Header;
 import org.apache.commons.httpclient.HostConfiguration;
 import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpRecoverableException;
+import org.apache.commons.httpclient.HttpConnectionManager;
+import org.apache.commons.httpclient.HttpMethod;
 import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.NTCredentials;
 import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.NTCredentials;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.methods.HeadMethod;
 import org.apache.commons.httpclient.methods.PutMethod;
+import org.apache.commons.httpclient.params.HttpConnectionParams;
 import org.apache.commons.httpclient.util.DateParseException;
 import org.apache.commons.httpclient.util.DateParser;
 import org.apache.maven.wagon.AbstractWagon;
@@ -57,27 +58,21 @@
 /**
  * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
  * @version $Id$
- * 
- * @plexus.component role="org.apache.maven.wagon.Wagon" 
- *   role-hint="http"
- *   instantiation-strategy="per-lookup"
  */
 public class HttpWagon
     extends AbstractWagon
 {
-    private static final int DEFAULT_NUMBER_OF_ATTEMPTS = 3;
-
     private static final int SC_NULL = -1;
 
     private HttpClient client;
 
-    private int numberOfAttempts = DEFAULT_NUMBER_OF_ATTEMPTS;
-
     private static final TimeZone GMT_TIME_ZONE = TimeZone.getTimeZone( "GMT" );
 
+    private HttpConnectionManager connectionManager;
+
     public void openConnection()
     {
-        client = new HttpClient( new MultiThreadedHttpConnectionManager() );
+        client = new HttpClient( connectionManager );
 
         String username = null;
 
@@ -155,11 +150,11 @@
         firePutInitiated( resource, source );
 
         PutMethod putMethod = new PutMethod( url );
+        putMethod.getParams().setSoTimeout( getTimeout() );
 
         try
         {
             InputStream is = new PutInputStream( source, resource, this, getTransferEventSupport() );
-
             putMethod.setRequestBody( is );
         }
         catch ( FileNotFoundException e )
@@ -169,31 +164,8 @@
             throw new ResourceDoesNotExistException( "Source file does not exist: " + source, e );
         }
 
-        int statusCode = SC_NULL;
-
-        int attempt = 0;
-
-        fireTransferDebug( "about to execute client for put" );
-
-        // We will retry up to NumberOfAttempts times.
-        while ( statusCode == SC_NULL && attempt < getNumberOfAttempts() )
-        {
-            try
-            {
-                firePutStarted( resource, source );
-
-                statusCode = client.executeMethod( putMethod );
-            }
-            catch ( HttpRecoverableException e )
-            {
-                attempt++;
-            }
-            catch ( IOException e )
-            {
-                throw new TransferFailedException( e.getMessage(), e );
-            }
-        }
-
+        int statusCode = execute( putMethod );
+        
         fireTransferDebug( url + " - Status code: " + statusCode );
 
         // Check that we didn't run out of retries.
@@ -207,8 +179,7 @@
                 break;
 
             case SC_NULL:
-                throw new TransferFailedException(
-                    "Failed to transfer file: " + url + " after " + attempt + " attempts" );
+                throw new TransferFailedException( "Failed to transfer file: " + url );
 
             case HttpStatus.SC_FORBIDDEN:
                 throw new AuthorizationException( "Access denied to: " + url );
@@ -264,6 +235,7 @@
         String url = getRepository().getUrl() + "/" + resourceName;
 
         GetMethod getMethod = new GetMethod( url );
+        getMethod.getParams().setSoTimeout( getTimeout() );
 
         try
         {
@@ -284,27 +256,7 @@
                 getMethod.addRequestHeader( hdr );
             }
 
-            int statusCode = SC_NULL;
-
-            int attempt = 0;
-
-            // We will retry up to NumberOfAttempts times.
-            while ( statusCode == SC_NULL && attempt < getNumberOfAttempts() )
-            {
-                try
-                {
-                    // execute the getMethod.
-                    statusCode = client.executeMethod( getMethod );
-                }
-                catch ( HttpRecoverableException e )
-                {
-                    attempt++;
-                }
-                catch ( IOException e )
-                {
-                    throw new TransferFailedException( e.getMessage(), e );
-                }
-            }
+            int statusCode = execute( getMethod );
 
             fireTransferDebug( url + " - Status code: " + statusCode );
 
@@ -318,8 +270,7 @@
                     return false;
 
                 case SC_NULL:
-                    throw new TransferFailedException(
-                        "Failed to transfer file: " + url + " after " + attempt + " attempts" );
+                    throw new TransferFailedException( "Failed to transfer file: " + url );
 
                 case HttpStatus.SC_FORBIDDEN:
                     throw new AuthorizationException( "Access denied to: " + url );
@@ -435,16 +386,6 @@
         }
     }
 
-    public int getNumberOfAttempts()
-    {
-        return numberOfAttempts;
-    }
-
-    public void setNumberOfAttempts( int numberOfAttempts )
-    {
-        this.numberOfAttempts = numberOfAttempts;
-    }
-
     public List getFileList( String destinationDirectory )
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException 
     {
@@ -456,6 +397,7 @@
         String url = getRepository().getUrl() + "/" + destinationDirectory;
 
         GetMethod getMethod = new GetMethod( url );
+        getMethod.getParams().setSoTimeout( getTimeout() );
 
         try
         {
@@ -466,27 +408,7 @@
             getMethod.addRequestHeader( "Pragma", "no-cache" );
             getMethod.addRequestHeader( "Expires", "0" );
 
-            int statusCode = SC_NULL;
-
-            int attempt = 0;
-
-            // We will retry up to NumberOfAttempts times.
-            while ( statusCode == SC_NULL && attempt < getNumberOfAttempts() )
-            {
-                try
-                {
-                    // execute the getMethod.
-                    statusCode = client.executeMethod( getMethod );
-                }
-                catch ( HttpRecoverableException e )
-                {
-                    attempt++;
-                }
-                catch ( IOException e )
-                {
-                    throw new TransferFailedException( e.getMessage(), e );
-                }
-            }
+            int statusCode = execute( getMethod );
 
             fireTransferDebug( url + " - Status code: " + statusCode );
 
@@ -497,8 +419,7 @@
                     break;
 
                 case SC_NULL:
-                    throw new TransferFailedException(
-                        "Failed to transfer file: " + url + " after " + attempt + " attempts" );
+                    throw new TransferFailedException( "Failed to transfer file: " );
 
                 case HttpStatus.SC_FORBIDDEN:
                     throw new AuthorizationException( "Access denied to: " + url );
@@ -540,29 +461,12 @@
         String url = getRepository().getUrl() + "/" + resourceName;
         
         HeadMethod headMethod = new HeadMethod( url );
+        headMethod.getParams().setSoTimeout( getTimeout() );
         
-        int statusCode = SC_NULL;
-        int attempt = 0;
+        int statusCode = execute( headMethod );
         
         try
         {
-            while ( statusCode == SC_NULL && attempt < getNumberOfAttempts() )
-            {
-                try
-                {
-                    // execute the getMethod.
-                    statusCode = client.executeMethod( headMethod );
-                }
-                catch ( HttpRecoverableException e )
-                {
-                    attempt++;
-                }
-                catch ( IOException e )
-                {
-                    throw new TransferFailedException( e.getMessage(), e );
-                }
-            }
-
             switch ( statusCode )
             {
                 case HttpStatus.SC_OK:
@@ -572,8 +476,7 @@
                     return true;
 
                 case SC_NULL:
-                    throw new TransferFailedException( "Failed to transfer file: " + url + " after " + attempt
-                        + " attempts" );
+                    throw new TransferFailedException( "Failed to transfer file: " + url);
 
                 case HttpStatus.SC_FORBIDDEN:
                     throw new AuthorizationException( "Access denied to: " + url );
@@ -597,5 +500,25 @@
         {
             headMethod.releaseConnection();
         }
+    }
+
+    private int execute(HttpMethod httpMethod)
+        throws TransferFailedException
+    {
+        int statusCode = SC_NULL;
+        try
+        {
+            // execute the method.
+            statusCode = client.executeMethod( httpMethod );
+        }
+        catch ( IOException e )
+        {
+            throw new TransferFailedException( e.getMessage(), e );
+        }
+        return statusCode;
+    }
+
+    public void setConnectionManager(HttpConnectionManager connectionManager) {
+        this.connectionManager = connectionManager;
     }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-http/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/main/resources/META-INF/plexus/components.xml?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/main/resources/META-INF/plexus/components.xml Mon Jan 28 02:31:09 2008
@@ -18,12 +18,32 @@
   -->
 
 <component-set>
-  <components>
-    <component>
-      <role>org.apache.maven.wagon.Wagon</role>
-      <role-hint>http</role-hint>
-      <implementation>org.apache.maven.wagon.providers.http.HttpWagon</implementation>
-      <instantiation-strategy>per-lookup</instantiation-strategy>
-    </component>
-  </components>
+    <components>
+	  <component>
+	    <role>org.apache.commons.httpclient.HttpConnectionManager</role>
+	    <implementation>org.apache.commons.httpclient.MultiThreadedHttpConnectionManager</implementation>
+	  </component>
+      <component>
+        <role>org.apache.maven.wagon.Wagon</role>
+        <role-hint>http</role-hint>
+        <implementation>org.apache.maven.wagon.providers.http.HttpWagon</implementation>
+        <instantiation-strategy>per-lookup</instantiation-strategy>
+	    <requirements>
+		  <requirement>
+		    <role>org.apache.commons.httpclient.HttpConnectionManager</role>
+		  </requirement>
+	    </requirements>
+      </component>
+      <component>
+        <role>org.apache.maven.wagon.Wagon</role>
+        <role-hint>https</role-hint>
+        <implementation>org.apache.maven.wagon.providers.http.HttpWagon</implementation>
+        <instantiation-strategy>per-lookup</instantiation-strategy>
+	    <requirements>
+		  <requirement>
+		    <role>org.apache.commons.httpclient.HttpConnectionManager</role>
+		  </requirement>
+	    </requirements>
+      </component>
+    </components>
 </component-set>

Modified: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonGzipTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonGzipTest.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonGzipTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonGzipTest.java Mon Jan 28 02:31:09 2008
@@ -27,8 +27,10 @@
 
 import org.apache.maven.wagon.FileTestUtils;
 import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.WagonTestCase;
 import org.apache.maven.wagon.repository.Repository;
 import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.PlexusTestCase;
 import org.mortbay.http.HttpContext;
 import org.mortbay.http.HttpServer;
 import org.mortbay.http.SocketListener;
@@ -36,77 +38,68 @@
 
 import junit.framework.TestCase;
 
-public class HttpWagonGzipTest extends TestCase 
+public class HttpWagonGzipTest extends HttpWagonHttpServerTestCase
 {
     public void testGzipGet() throws Exception 
     {
-        HttpServer server = new HttpServer();
-        SocketListener listener = new SocketListener();
-        listener.setPort(10008);
-        server.addListener(listener);
-
         String localRepositoryPath = FileTestUtils.getTestOutputDir().toString();
-        HttpContext context = new HttpContext();
-        context.setContextPath("/");
-        context.setResourceBase(localRepositoryPath);
-        ResourceHandler rh = new ResourceHandler();
-        rh.setMinGzipLength(1);
-        context.addHandler(rh);
-        server.addContext(context);
-        server.start();
+        context.setResourceBase( localRepositoryPath );
+        resourceHandler.setMinGzipLength( 1 );
+
+        startServer();
 
-        try 
+        try
         {
-            Wagon wagon = new HttpWagon();
+            Wagon wagon = getWagon();
 
             Repository testRepository = new Repository();
 
-            testRepository.setUrl("http://localhost:10008");
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
 
-            File sourceFile = new File(localRepositoryPath + "/gzip");
+            File sourceFile = new File( localRepositoryPath + "/gzip" );
 
             sourceFile.deleteOnExit();
 
             String resName = "gzip-res.txt";
-            String sourceContent = writeTestFileGzip(sourceFile, resName);
+            String sourceContent = writeTestFileGzip( sourceFile, resName );
 
-            wagon.connect(testRepository);
+            wagon.connect( testRepository );
 
-            File destFile = FileTestUtils.createUniqueFile(getName(), getName());
+            File destFile = FileTestUtils.createUniqueFile( getName(), getName() );
 
             destFile.deleteOnExit();
 
-            wagon.get("gzip/" + resName, destFile);
+            wagon.get( "gzip/" + resName, destFile );
 
             wagon.disconnect();
 
-            String destContent = FileUtils.fileRead(destFile);
+            String destContent = FileUtils.fileRead( destFile );
 
-            assertEquals(sourceContent, destContent);
-        } 
-        finally 
+            assertEquals( sourceContent, destContent );
+        }
+        finally
         {
-            server.stop();
+            stopServer();
         }
     }
 
-    private String writeTestFileGzip(File parent, String child) throws IOException 
+    private String writeTestFileGzip( File parent, String child ) throws IOException 
     {
-        File file = new File(parent, child);
+        File file = new File( parent, child );
         file.getParentFile().mkdirs();
         file.deleteOnExit();
-        OutputStream out = new FileOutputStream(file);
-        out.write(child.getBytes());
+        OutputStream out = new FileOutputStream( file );
+        out.write( child.getBytes() );
         out.close();
         
-        file = new File(parent, child + ".gz");
+        file = new File( parent, child + ".gz" );
         file.deleteOnExit();
-        out = new FileOutputStream(file);
-        out = new GZIPOutputStream(out);
+        out = new FileOutputStream( file );
+        out = new GZIPOutputStream( out );
         //write out different data than non-gz file, so we can
         //assert the gz version was returned
         String content = file.getAbsolutePath();
-        out.write(content.getBytes());
+        out.write( content.getBytes() );
         out.close();
         return content;
     }

Added: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java?rev=615844&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java (added)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java Mon Jan 28 02:31:09 2008
@@ -0,0 +1,78 @@
+package org.apache.maven.wagon.providers.http;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+import org.codehaus.plexus.PlexusTestCase;
+import org.mortbay.http.HttpServer;
+import org.mortbay.http.SocketListener;
+import org.mortbay.http.HttpContext;
+import org.mortbay.http.handler.ResourceHandler;
+import org.apache.maven.wagon.Wagon;
+
+/**
+ * User: jdumay
+ * Date: 24/01/2008
+ * Time: 18:15:53
+ */
+public abstract class HttpWagonHttpServerTestCase extends PlexusTestCase
+{
+    protected final int httpServerPort = 10008;
+
+    private HttpServer server;
+
+    protected HttpContext context;
+
+    protected ResourceHandler resourceHandler;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        server = new HttpServer();
+        SocketListener listener = new SocketListener();
+        listener.setPort( httpServerPort );
+        server.addListener( listener );
+        
+        context = new HttpContext();
+        context.setContextPath( "/" );
+        server.addContext( context );
+        
+        resourceHandler = new ResourceHandler();
+        context.addHandler( resourceHandler );
+    }
+
+    protected Wagon getWagon()
+        throws Exception
+    {
+        return (Wagon) lookup( HttpWagon.ROLE );
+    }
+
+    protected void startServer()
+        throws Exception
+    {
+        server.start();
+    }
+
+    protected void stopServer()
+        throws Exception
+    {
+        server.stop();
+    }
+}

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonHttpServerTestCase.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java?rev=615844&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java (added)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java Mon Jan 28 02:31:09 2008
@@ -0,0 +1,184 @@
+package org.apache.maven.wagon.providers.http;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+import org.mortbay.http.HttpServer;
+import org.mortbay.http.SocketListener;
+import org.mortbay.http.HttpContext;
+import org.mortbay.http.handler.ResourceHandler;
+import org.mortbay.jetty.servlet.ServletHandler;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.FileTestUtils;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.repository.Repository;
+
+import java.io.File;
+
+/**
+ * User: jdumay
+ * Date: 24/01/2008
+ * Time: 17:17:34
+ */
+public class HttpWagonTimeoutTest extends HttpWagonHttpServerTestCase
+{
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        ServletHandler servlets = new ServletHandler();
+        servlets.addServlet( "/", "org.apache.maven.wagon.providers.http.WaitForeverServlet" );
+        context.addHandler( servlets );
+        startServer();
+    }
+
+    public void testGetTimeout() throws Exception
+    {
+        Exception thrown = null;
+
+        try
+        {
+            Wagon wagon = getWagon();
+            wagon.setTimeout( 1000 );
+
+            Repository testRepository = new Repository();
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
+            
+            wagon.connect( testRepository );
+
+            File destFile = FileTestUtils.createUniqueFile( getName(), getName() );
+            destFile.deleteOnExit();
+
+            wagon.get( "/timeoutfile", destFile );
+
+            wagon.disconnect();
+        }
+        catch (Exception e)
+        {
+            thrown = e;
+        }
+        finally
+        {
+            stopServer();
+        }
+
+        assertNotNull( thrown );
+        assertEquals( TransferFailedException.class, thrown.getClass() );
+    }
+    
+    public void testResourceExits() throws Exception
+    {
+        Exception thrown = null;
+
+        try
+        {
+            Wagon wagon = getWagon();
+            wagon.setTimeout( 1000 );
+
+            Repository testRepository = new Repository();
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
+
+            wagon.connect( testRepository );
+
+            wagon.resourceExists( "/timeoutfile" );
+
+            wagon.disconnect();
+        }
+        catch (Exception e)
+        {
+            thrown = e;
+        }
+        finally
+        {
+            stopServer();
+        }
+
+        assertNotNull( thrown );
+        assertEquals( TransferFailedException.class, thrown.getClass() );
+    }
+
+    public void testGetFileList() throws Exception
+    {
+        Exception thrown = null;
+
+        try
+        {
+            Wagon wagon = getWagon();
+            wagon.setTimeout( 1000 );
+
+            Repository testRepository = new Repository();
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
+
+            wagon.connect( testRepository );
+
+            wagon.getFileList( "/timeoutfile" );
+
+            wagon.disconnect();
+        }
+        catch (Exception e)
+        {
+            thrown = e;
+        }
+        finally
+        {
+            stopServer();
+        }
+
+        assertNotNull( thrown );
+        assertEquals( TransferFailedException.class, thrown.getClass() );
+    }
+
+    public void testPutTimeout() throws Exception
+    {
+        Exception thrown = null;
+
+        try
+        {
+            Wagon wagon = getWagon();
+            wagon.setTimeout( 1000 );
+
+            Repository testRepository = new Repository();
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
+
+            wagon.connect( testRepository );
+
+            File destFile = File.createTempFile( "Hello", null );
+            destFile.deleteOnExit();
+
+            wagon.put( destFile, "/timeoutfile" );
+
+            wagon.disconnect();
+        }
+        catch (Exception e)
+        {
+            thrown = e;
+        }
+        finally
+        {
+            stopServer();
+        }
+
+        assertNotNull( thrown );
+        assertEquals( TransferFailedException.class, thrown.getClass() );
+    }
+
+}

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTimeoutTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java?rev=615844&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java (added)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java Mon Jan 28 02:31:09 2008
@@ -0,0 +1,47 @@
+package org.apache.maven.wagon.providers.http;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletException;
+import java.io.IOException;
+
+/**
+ * User: jdumay
+ * Date: 24/01/2008
+ * Time: 17:25:27
+ */
+public class WaitForeverServlet extends HttpServlet {
+    public void service(HttpServletRequest request, HttpServletResponse response)
+        throws ServletException, IOException
+    {
+        System.out.println( "Calling WaitForeverServlet" );
+        try
+        {
+            Thread.sleep( 2000 );
+        }
+        catch (InterruptedException e)
+        {
+            //eat
+        }
+    }
+}

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/AbstractJschWagon.java Mon Jan 28 02:31:09 2008
@@ -117,6 +117,7 @@
         try
         {
             session = sch.getSession( authenticationInfo.getUserName(), host, port );
+            session.setTimeout(getTimeout());
         }
         catch ( JSchException e )
         {

Modified: maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/CorrectedWebdavResource.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/CorrectedWebdavResource.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/CorrectedWebdavResource.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/CorrectedWebdavResource.java Mon Jan 28 02:31:09 2008
@@ -27,6 +27,7 @@
 import java.util.zip.GZIPInputStream;
 
 import org.apache.commons.httpclient.Header;
+import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpMethod;
 import org.apache.commons.httpclient.HttpStatus;
 import org.apache.commons.httpclient.HttpURL;
@@ -56,6 +57,11 @@
     {
         super( url );
         setFollowRedirects( true ); // TODO: Make this configurable.
+    }
+    
+    public void setConnectionTimeout(int timeout)
+    {
+    	client.setConnectionTimeout(timeout);
     }
 
     public void setHeaders( Map headers )

Modified: maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java?rev=615844&r1=615843&r2=615844&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java Mon Jan 28 02:31:09 2008
@@ -145,10 +145,10 @@
 
             CorrectedWebdavResource.setDefaultAction( CorrectedWebdavResource.NOACTION );
             webdavResource = new CorrectedWebdavResource( httpURL );
+            webdavResource.setConnectionTimeout(getTimeout());
 
             if ( hasProxy )
             {
-
                 webdavResource.setProxy( proxyInfo.getHost(), proxyInfo.getPort() );
                 if ( !StringUtils.isEmpty( proxyInfo.getUserName() ) )
                 {



---------------------------------------------------------------------
To unsubscribe, e-mail: wagon-commits-unsubscribe@maven.apache.org
For additional commands, e-mail: wagon-commits-help@maven.apache.org