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 br...@apache.org on 2008/07/30 11:54:11 UTC

svn commit: r680954 - in /maven/wagon/trunk/wagon-provider-api/src: main/java/org/apache/maven/wagon/ main/java/org/apache/maven/wagon/events/ main/java/org/apache/maven/wagon/observers/ main/java/org/apache/maven/wagon/proxy/ test/java/org/apache/mave...

Author: brett
Date: Wed Jul 30 02:54:09 2008
New Revision: 680954

URL: http://svn.apache.org/viewvc?rev=680954&view=rev
Log:
completing test coverage of the API module

Added:
    maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/StreamWagonTest.java   (with props)
Modified:
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PermissionModeUtils.java
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/WagonUtils.java
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/events/TransferEvent.java
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/Debug.java
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyUtils.java
    maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/AbstractWagonTest.java
    maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/observers/ChecksumObserverTest.java

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java?rev=680954&r1=680953&r2=680954&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PathUtils.java Wed Jul 30 02:54:09 2008
@@ -28,8 +28,12 @@
  * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
  * @version $Id$
  */
-public class PathUtils
+public final class PathUtils
 {
+    private PathUtils()
+    {
+    }
+    
     /**
      * Returns the directory path portion of a file specification string.
      * Matches the equally named unix command.

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PermissionModeUtils.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PermissionModeUtils.java?rev=680954&r1=680953&r2=680954&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PermissionModeUtils.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/PermissionModeUtils.java Wed Jul 30 02:54:09 2008
@@ -26,8 +26,12 @@
  * @see PermissionModeUtils
  * @since Sep 3, 2005
  */
-public class PermissionModeUtils
+public final class PermissionModeUtils
 {
+    private PermissionModeUtils()
+    {
+    }
+    
     /**
      * See the System Interfaces volume of IEEE Std 1003.1-2001, umask(1)
      *

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/WagonUtils.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/WagonUtils.java?rev=680954&r1=680953&r2=680954&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/WagonUtils.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/WagonUtils.java Wed Jul 30 02:54:09 2008
@@ -29,10 +29,13 @@
 /**
  * @author <a href="mailto:mmaczka@interia.pl">Michal Maczka</a>
  * @version $Id$
+ * @deprecated
  */
-public class WagonUtils
+public final class WagonUtils
 {
-
+    private WagonUtils()
+    {
+    }
 
     public static String toString( String resource, Wagon wagon )
         throws IOException, TransferFailedException, ResourceDoesNotExistException, AuthorizationException

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/events/TransferEvent.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/events/TransferEvent.java?rev=680954&r1=680953&r2=680954&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/events/TransferEvent.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/events/TransferEvent.java Wed Jul 30 02:54:09 2008
@@ -288,7 +288,7 @@
             if ( other.exception != null )
                 return false;
         }
-        else if ( !exception.equals( other.exception ) )
+        else if ( !exception.getClass().equals( other.exception.getClass() ) )
             return false;
         if ( requestType != other.requestType )
             return false;

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/Debug.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/Debug.java?rev=680954&r1=680953&r2=680954&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/Debug.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/observers/Debug.java Wed Jul 30 02:54:09 2008
@@ -39,7 +39,6 @@
 
     long transfer;
 
-
     public Debug()
     {
         this( System.out );
@@ -199,4 +198,9 @@
 
     }
 
+    public PrintStream getOut()
+    {
+        return out;
+    }
+
 }

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyUtils.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyUtils.java?rev=680954&r1=680953&r2=680954&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyUtils.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/proxy/ProxyUtils.java Wed Jul 30 02:54:09 2008
@@ -24,8 +24,11 @@
 /**
  * @author <a href="mailto:lafeuil@gmail.com">Thomas Champagne</a>
  */
-public class ProxyUtils
+public final class ProxyUtils
 {
+    private ProxyUtils()
+    {
+    }
 
     /**
      * Check if the specified host is in the list of non proxy hosts.

Modified: maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/AbstractWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/AbstractWagonTest.java?rev=680954&r1=680953&r2=680954&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/AbstractWagonTest.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/AbstractWagonTest.java Wed Jul 30 02:54:09 2008
@@ -19,20 +19,28 @@
  * under the License.
  */
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 
 import junit.framework.TestCase;
 
 import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
 import org.apache.maven.wagon.authorization.AuthorizationException;
 import org.apache.maven.wagon.events.SessionListener;
+import org.apache.maven.wagon.events.TransferEvent;
 import org.apache.maven.wagon.events.TransferListener;
 import org.apache.maven.wagon.proxy.ProxyInfo;
 import org.apache.maven.wagon.proxy.ProxyInfoProvider;
 import org.apache.maven.wagon.repository.Repository;
+import org.apache.maven.wagon.repository.RepositoryPermissions;
+import org.apache.maven.wagon.resource.Resource;
+import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
+import org.easymock.AbstractMatcher;
 import org.easymock.MockControl;
 
 /**
@@ -42,6 +50,36 @@
 public class AbstractWagonTest
     extends TestCase
 {
+    private static class TestWagon
+        extends AbstractWagon
+    {
+        protected void closeConnection()
+            throws ConnectionException
+        {
+        }
+
+        protected void openConnectionInternal()
+            throws ConnectionException, AuthenticationException
+        {
+        }
+
+        public void get( String resourceName, File destination )
+            throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+        {
+        }
+
+        public boolean getIfNewer( String resourceName, File destination, long timestamp )
+            throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+        {
+            return false;
+        }
+
+        public void put( File source, String destination )
+            throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+        {
+        }
+    };
+
     private String basedir;
 
     private WagonMock wagon = null;
@@ -73,12 +111,12 @@
 
         wagon = new WagonMock();
 
-        sessionListenerControl = MockControl.createControl( SessionListener.class ); 
+        sessionListenerControl = MockControl.createControl( SessionListener.class );
         sessionListener = (SessionListener) sessionListenerControl.getMock();
 
         wagon.addSessionListener( sessionListener );
 
-        transferListenerControl = MockControl.createControl( TransferListener.class ); 
+        transferListenerControl = MockControl.createControl( TransferListener.class );
         transferListener = (TransferListener) transferListenerControl.getMock();
 
         wagon.addTransferListener( transferListener );
@@ -103,7 +141,8 @@
         assertFalse( wagon.hasTransferListener( transferListener ) );
     }
 
-    public void testNoProxyConfiguration() throws ConnectionException, AuthenticationException
+    public void testNoProxyConfiguration()
+        throws ConnectionException, AuthenticationException
     {
         Repository repository = new Repository();
         wagon.connect( repository );
@@ -115,7 +154,8 @@
         assertNull( wagon.getProxyInfo( "http", "localhost" ) );
     }
 
-    public void testNullProxyConfiguration() throws ConnectionException, AuthenticationException
+    public void testNullProxyConfiguration()
+        throws ConnectionException, AuthenticationException
     {
         Repository repository = new Repository();
         wagon.connect( repository, (ProxyInfo) null );
@@ -125,13 +165,30 @@
         assertNull( wagon.getProxyInfo( "scp", "www.example.com" ) );
         assertNull( wagon.getProxyInfo( "ftp", "www.example.com" ) );
         assertNull( wagon.getProxyInfo( "http", "localhost" ) );
+
+        wagon.connect( repository );
+        assertNull( wagon.getProxyInfo() );
+        assertNull( wagon.getProxyInfo( "http", "www.example.com" ) );
+        assertNull( wagon.getProxyInfo( "dav", "www.example.com" ) );
+        assertNull( wagon.getProxyInfo( "scp", "www.example.com" ) );
+        assertNull( wagon.getProxyInfo( "ftp", "www.example.com" ) );
+        assertNull( wagon.getProxyInfo( "http", "localhost" ) );
+
+        wagon.connect( repository, new AuthenticationInfo() );
+        assertNull( wagon.getProxyInfo() );
+        assertNull( wagon.getProxyInfo( "http", "www.example.com" ) );
+        assertNull( wagon.getProxyInfo( "dav", "www.example.com" ) );
+        assertNull( wagon.getProxyInfo( "scp", "www.example.com" ) );
+        assertNull( wagon.getProxyInfo( "ftp", "www.example.com" ) );
+        assertNull( wagon.getProxyInfo( "http", "localhost" ) );
     }
 
-    public void testLegacyProxyConfiguration() throws ConnectionException, AuthenticationException
+    public void testLegacyProxyConfiguration()
+        throws ConnectionException, AuthenticationException
     {
         ProxyInfo proxyInfo = new ProxyInfo();
         proxyInfo.setType( "http" );
-        
+
         Repository repository = new Repository();
         wagon.connect( repository, proxyInfo );
         assertEquals( proxyInfo, wagon.getProxyInfo() );
@@ -141,19 +198,20 @@
         assertNull( wagon.getProxyInfo( "ftp", "www.example.com" ) );
     }
 
-    public void testProxyConfiguration() throws ConnectionException, AuthenticationException
+    public void testProxyConfiguration()
+        throws ConnectionException, AuthenticationException
     {
         final ProxyInfo httpProxyInfo = new ProxyInfo();
         httpProxyInfo.setType( "http" );
-        
-        final ProxyInfo socksProxyInfo = new ProxyInfo(); 
+
+        final ProxyInfo socksProxyInfo = new ProxyInfo();
         socksProxyInfo.setType( "http" );
-        
+
         ProxyInfoProvider proxyInfoProvider = new ProxyInfoProvider()
         {
             public ProxyInfo getProxyInfo( String protocol )
             {
-                if ( "http".equals( protocol ) || "dav".equals( protocol ))
+                if ( "http".equals( protocol ) || "dav".equals( protocol ) )
                 {
                     return httpProxyInfo;
                 }
@@ -164,7 +222,7 @@
                 return null;
             }
         };
-        
+
         Repository repository = new Repository();
         wagon.connect( repository, proxyInfoProvider );
         assertNull( wagon.getProxyInfo() );
@@ -183,14 +241,86 @@
         sessionListener.sessionOpening( null );
         sessionListener.sessionOpened( null );
         sessionListenerControl.replay();
-        
+
         wagon.connect( repository );
-        
+
         sessionListenerControl.verify();
 
         assertEquals( repository, wagon.getRepository() );
     }
 
+    public void testSessionConnectionRefusedEventConnectionException()
+        throws Exception
+    {
+        final WagonException exception = new ConnectionException( "" );
+
+        try
+        {
+            runTestSessionConnectionRefusedEvent( exception );
+            fail();
+        }
+        catch ( ConnectionException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    public void testSessionConnectionRefusedEventAuthenticationException()
+        throws Exception
+    {
+        final WagonException exception = new AuthenticationException( "" );
+
+        try
+        {
+            runTestSessionConnectionRefusedEvent( exception );
+            fail();
+        }
+        catch ( AuthenticationException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    private void runTestSessionConnectionRefusedEvent( final WagonException exception )
+        throws ConnectionException, AuthenticationException
+    {
+        Repository repository = new Repository();
+
+        sessionListenerControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
+        sessionListener.sessionOpening( null );
+        sessionListener.sessionConnectionRefused( null );
+        sessionListenerControl.replay();
+
+        Wagon wagon = new TestWagon()
+        {
+            protected void openConnectionInternal()
+                throws ConnectionException, AuthenticationException
+            {
+                if ( exception instanceof ConnectionException )
+                {
+                    throw (ConnectionException) exception;
+                }
+                if ( exception instanceof AuthenticationException )
+                {
+                    throw (AuthenticationException) exception;
+                }
+            }
+        };
+        wagon.addSessionListener( sessionListener );
+
+        try
+        {
+            wagon.connect( repository );
+            fail();
+        }
+        finally
+        {
+            sessionListenerControl.verify();
+
+            assertEquals( repository, wagon.getRepository() );
+        }
+    }
+
     public void testSessionCloseEvents()
         throws Exception
     {
@@ -198,12 +328,47 @@
         sessionListener.sessionDisconnecting( null );
         sessionListener.sessionDisconnected( null );
         sessionListenerControl.replay();
-        
+
         wagon.disconnect();
-        
+
         sessionListenerControl.verify();
     }
 
+    public void testSessionCloseRefusedEventConnectionException()
+        throws Exception
+    {
+        Repository repository = new Repository();
+
+        sessionListenerControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
+        sessionListener.sessionDisconnecting( null );
+        sessionListener.sessionError( null );
+        sessionListenerControl.replay();
+
+        Wagon wagon = new TestWagon()
+        {
+            protected void closeConnection()
+                throws ConnectionException
+            {
+                throw new ConnectionException( "" );
+            }
+        };
+        wagon.addSessionListener( sessionListener );
+
+        try
+        {
+            wagon.disconnect();
+            fail();
+        }
+        catch ( ConnectionException e )
+        {
+            assertTrue( true );
+        }
+        finally
+        {
+            sessionListenerControl.verify();
+        }
+    }
+
     public void testGetTransferEvents()
         throws Exception
     {
@@ -217,14 +382,14 @@
         transferListenerControl.setVoidCallable( 5 );
         transferListener.transferCompleted( null );
         transferListenerControl.replay();
-        
+
         wagon.fireTransferDebug( "fetch debug message" );
 
         Repository repository = new Repository();
         wagon.connect( repository );
 
         wagon.get( artifact, destination );
-        
+
         transferListenerControl.verify();
     }
 
@@ -233,12 +398,12 @@
     {
         transferListenerControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
         transferListener.transferInitiated( null );
-        transferListener.transferStarted( null );        
+        transferListener.transferStarted( null );
         transferListener.debug( null );
         transferListenerControl.setVoidCallable( MockControl.ZERO_OR_MORE );
         transferListener.transferError( null );
         transferListenerControl.replay();
-        
+
         try
         {
             Repository repository = new Repository();
@@ -272,7 +437,7 @@
         transferListener.transferProgress( null, null, 0 );
         transferListener.transferCompleted( null );
         transferListenerControl.replay();
-        
+
         wagon.fireTransferDebug( "deploy debug message" );
 
         Repository repository = new Repository();
@@ -284,56 +449,156 @@
         transferListenerControl.verify();
     }
 
-    /*
-    public void testPutError()
+    public void testStreamShutdown()
     {
-        MockInputStream mockInputStream = new MockInputStream();
+        IOUtil.close( (InputStream) null );
 
-        //forced io error!
-        mockInputStream.setForcedError( true );
+        IOUtil.close( (OutputStream) null );
 
-        StreamSource result = new StreamSource( mockInputStream );
+        InputStreamMock inputStream = new InputStreamMock();
+
+        assertFalse( inputStream.isClosed() );
+
+        IOUtil.close( inputStream );
+
+        assertTrue( inputStream.isClosed() );
+
+        OutputStreamMock outputStream = new OutputStreamMock();
+
+        assertFalse( outputStream.isClosed() );
+
+        IOUtil.close( outputStream );
+
+        assertTrue( outputStream.isClosed() );
+    }
+
+    public void testRepositoryPermissionsOverride()
+        throws ConnectionException, AuthenticationException
+    {
+        Repository repository = new Repository();
 
-        PutRequest command = new PutRequest( result, "my favourite resource" );
+        RepositoryPermissions original = new RepositoryPermissions();
+        original.setFileMode( "664" );
+        repository.setPermissions( original );
+
+        RepositoryPermissions override = new RepositoryPermissions();
+        override.setFileMode( "644" );
+        wagon.setPermissionsOverride( override );
 
+        wagon.connect( repository );
+
+        assertEquals( override, repository.getPermissions() );
+        assertEquals( "644", repository.getPermissions().getFileMode() );
+    }
+
+    public void testRepositoryUserName()
+        throws ConnectionException, AuthenticationException
+    {
+        Repository repository = new Repository( "id", "http://bporter:password@www.example.com/path/to/resource" );
+
+        AuthenticationInfo authenticationInfo = new AuthenticationInfo();
+        authenticationInfo.setUserName( "brett" );
+        authenticationInfo.setPassword( "pass" );
+        wagon.connect( repository, authenticationInfo );
+
+        assertEquals( authenticationInfo, wagon.getAuthenticationInfo() );
+        assertEquals( "brett", authenticationInfo.getUserName() );
+        assertEquals( "pass", authenticationInfo.getPassword() );
+    }
+
+    public void testRepositoryUserNameNotGivenInCredentials()
+        throws ConnectionException, AuthenticationException
+    {
+        Repository repository = new Repository( "id", "http://bporter:password@www.example.com/path/to/resource" );
+
+        AuthenticationInfo authenticationInfo = new AuthenticationInfo();
+        wagon.connect( repository, authenticationInfo );
+
+        assertEquals( authenticationInfo, wagon.getAuthenticationInfo() );
+        assertEquals( "bporter", authenticationInfo.getUserName() );
+        assertEquals( "password", authenticationInfo.getPassword() );
+    }
+
+    public void testConnectNullRepository()
+        throws ConnectionException, AuthenticationException
+    {
         try
         {
-            wagon.transfer( command );
-
-            fail( "Transfer error was expected during fetch" );
+            wagon.connect( null );
+            fail();
         }
-        catch ( Exception e )
+        catch ( IllegalStateException e )
         {
+            assertTrue( true );
         }
-
-        assertTrue( transferListener.isTransferStartedCalled() );
-
-        assertTrue( transferListener.isTransferErrorCalled() );
-
-        assertFalse( transferListener.isTransferCompletedCalled() );
     }
-    */
 
-    public void testStreamShutdown()
+    public void testPostProcessListeners()
+        throws TransferFailedException, IOException
     {
-        IOUtil.close( (InputStream) null );
+        File tempFile = File.createTempFile( "wagon", "tmp" );
+        tempFile.deleteOnExit();
+        String content = "content";
+        FileUtils.fileWrite( tempFile.getAbsolutePath(), content );
 
-        IOUtil.close( (OutputStream) null );
+        Resource resource = new Resource( "resource" );
 
-        InputStreamMock inputStream = new InputStreamMock();
+        transferListener.transferInitiated( null );
+        transferListenerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        transferListener.transferStarted( null );
+        transferListenerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        TransferEvent event =
+            new TransferEvent( wagon, resource, TransferEvent.TRANSFER_PROGRESS, TransferEvent.REQUEST_PUT );
+        event.setLocalFile( tempFile );
+        transferListener.transferProgress( event, content.getBytes(), content.length() );
+        ProgressArgumentMatcher matcher = new ProgressArgumentMatcher();
+        transferListenerControl.setMatcher( matcher );
+        transferListener.transferCompleted( null );
+        transferListenerControl.setMatcher( MockControl.ALWAYS_MATCHER );
+        transferListenerControl.replay();
 
-        assertFalse( inputStream.isClosed() );
+        wagon.postProcessListeners( resource, tempFile, TransferEvent.REQUEST_PUT );
 
-        IOUtil.close( inputStream );
+        assertEquals( content.length(), matcher.getSize() );
+        assertEquals( new String( content.getBytes() ), new String( matcher.getBytes() ) );
 
-        assertTrue( inputStream.isClosed() );
+        tempFile.delete();
+    }
 
-        OutputStreamMock outputStream = new OutputStreamMock();
+    static final class ProgressArgumentMatcher
+        extends AbstractMatcher
+    {
+        private ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
-        assertFalse( outputStream.isClosed() );
+        private int size;
+        
+        private byte[] lastArray;
 
-        IOUtil.close( outputStream );
+        protected boolean argumentMatches( Object expected, Object actual )
+        {
+            if ( actual instanceof byte[] )
+            {
+                lastArray = (byte[]) actual;
+                return true;
+            }
+            if ( actual instanceof Integer )
+            {
+                int length = ( (Integer) actual ).intValue();
+                baos.write( lastArray, 0, length );
+                size += length;
+                return true;
+            }
+            return super.argumentMatches( expected, actual );
+        }
 
-        assertTrue( outputStream.isClosed() );
+        public int getSize()
+        {
+            return size;
+        }
+
+        public byte[] getBytes()
+        {
+            return baos.toByteArray();
+        }
     }
 }

Added: maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/StreamWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/StreamWagonTest.java?rev=680954&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/StreamWagonTest.java (added)
+++ maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/StreamWagonTest.java Wed Jul 30 02:54:09 2008
@@ -0,0 +1,552 @@
+package org.apache.maven.wagon;
+
+/*
+ * 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 java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.wagon.authentication.AuthenticationException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.repository.Repository;
+import org.apache.maven.wagon.resource.Resource;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringInputStream;
+import org.codehaus.plexus.util.StringOutputStream;
+import org.easymock.MockControl;
+
+public class StreamWagonTest
+    extends TestCase
+{
+    private static class TestWagon
+        extends StreamWagon
+    {
+        public void closeConnection()
+            throws ConnectionException
+        {
+        }
+
+        public void fillInputData( InputData inputData )
+            throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+        {
+        }
+
+        public void fillOutputData( OutputData outputData )
+            throws TransferFailedException
+        {
+        }
+
+        protected void openConnectionInternal()
+            throws ConnectionException, AuthenticationException
+        {
+        }
+    }
+
+    private Repository repository = new Repository( "id", "url" );
+
+    public void testNullInputStream()
+        throws Exception
+    {
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillInputData( InputData inputData )
+            {
+                inputData.setInputStream( null );
+            }
+        };
+
+        MockControl control = MockControl.createControl( TransferListener.class );
+        TransferListener listener = (TransferListener) control.getMock();
+        listener.transferInitiated( null );
+        control.setMatcher( MockControl.ALWAYS_MATCHER );
+        TransferEvent transferEvent =
+            new TransferEvent( wagon, new Resource( "resource" ), new TransferFailedException( "" ),
+                               TransferEvent.REQUEST_GET );
+        listener.transferError( transferEvent );
+        control.replay();
+
+        wagon.connect( repository );
+        wagon.addTransferListener( listener );
+        try
+        {
+            wagon.getToStream( "resource", new StringOutputStream() );
+            fail();
+        }
+        catch ( TransferFailedException e )
+        {
+            assertTrue( true );
+        }
+        finally
+        {
+            wagon.disconnect();
+        }
+
+        control.verify();
+    }
+
+    public void testNullOutputStream()
+        throws Exception
+    {
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillOutputData( OutputData inputData )
+            {
+                inputData.setOutputStream( null );
+            }
+        };
+
+        MockControl control = MockControl.createControl( TransferListener.class );
+        TransferListener listener = (TransferListener) control.getMock();
+        listener.transferInitiated( null );
+        control.setMatcher( MockControl.ALWAYS_MATCHER );
+        TransferEvent transferEvent =
+            new TransferEvent( wagon, new Resource( "resource" ), new TransferFailedException( "" ),
+                               TransferEvent.REQUEST_PUT );
+        listener.transferError( transferEvent );
+        control.replay();
+
+        wagon.connect( repository );
+        wagon.addTransferListener( listener );
+        try
+        {
+            wagon.putFromStream( new StringInputStream( "" ), "resource" );
+            fail();
+        }
+        catch ( TransferFailedException e )
+        {
+            assertTrue( true );
+        }
+        finally
+        {
+            wagon.disconnect();
+        }
+
+        control.verify();
+    }
+
+    public void testTransferFailedExceptionOnInput()
+        throws Exception
+    {
+        try
+        {
+            runTestTransferError( new TransferFailedException( "" ) );
+            fail();
+        }
+        catch ( TransferFailedException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    public void testTransferFailedExceptionOnOutput()
+        throws Exception
+    {
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillOutputData( OutputData inputData )
+                throws TransferFailedException
+            {
+                throw (TransferFailedException) new TransferFailedException( "" );
+            }
+        };
+
+        MockControl control = MockControl.createControl( TransferListener.class );
+        TransferListener listener = (TransferListener) control.getMock();
+        listener.transferInitiated( null );
+        control.setMatcher( MockControl.ALWAYS_MATCHER );
+        TransferEvent transferEvent =
+            new TransferEvent( wagon, new Resource( "resource" ), new TransferFailedException( "" ),
+                               TransferEvent.REQUEST_PUT );
+        listener.transferError( transferEvent );
+        control.replay();
+
+        wagon.connect( repository );
+        wagon.addTransferListener( listener );
+        try
+        {
+            wagon.putFromStream( new StringInputStream( "" ), "resource" );
+            fail();
+        }
+        catch ( TransferFailedException e )
+        {
+            assertTrue( true );
+        }
+        finally
+        {
+            wagon.disconnect();
+            control.verify();
+        }
+    }
+
+    public void testResourceDoesNotExistException()
+        throws Exception
+    {
+        try
+        {
+            runTestTransferError( new ResourceDoesNotExistException( "" ) );
+            fail();
+        }
+        catch ( ResourceDoesNotExistException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    public void testAuthorizationException()
+        throws Exception
+    {
+        try
+        {
+            runTestTransferError( new AuthorizationException( "" ) );
+            fail();
+        }
+        catch ( AuthorizationException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    private void runTestTransferError( final WagonException exception )
+        throws ConnectionException, AuthenticationException, ResourceDoesNotExistException, AuthorizationException,
+        TransferFailedException
+    {
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillInputData( InputData inputData )
+                throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+            {
+                if ( exception instanceof TransferFailedException )
+                {
+                    throw (TransferFailedException) exception;
+                }
+                if ( exception instanceof ResourceDoesNotExistException )
+                {
+                    throw (ResourceDoesNotExistException) exception;
+                }
+                if ( exception instanceof AuthorizationException )
+                {
+                    throw (AuthorizationException) exception;
+                }
+            }
+        };
+
+        MockControl control = MockControl.createControl( TransferListener.class );
+        TransferListener listener = (TransferListener) control.getMock();
+        listener.transferInitiated( null );
+        control.setMatcher( MockControl.ALWAYS_MATCHER );
+        TransferEvent transferEvent =
+            new TransferEvent( wagon, new Resource( "resource" ), exception, TransferEvent.REQUEST_GET );
+        listener.transferError( transferEvent );
+        control.replay();
+
+        wagon.connect( repository );
+        wagon.addTransferListener( listener );
+        try
+        {
+            wagon.getToStream( "resource", new StringOutputStream() );
+            fail();
+        }
+        finally
+        {
+            wagon.disconnect();
+            control.verify();
+        }
+    }
+
+    public void testGetIfNewerWithNewerResource()
+        throws Exception
+    {
+        long resourceTime = System.currentTimeMillis();
+        long comparisonTime = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2008-01-01" ).getTime();
+        assertTrue( runTestGetIfNewer( resourceTime, comparisonTime ) );
+    }
+
+    public void testGetIfNewerWithOlderResource()
+        throws Exception
+    {
+        long comparisonTime = System.currentTimeMillis();
+        long resourceTime = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2008-01-01" ).getTime();
+        assertFalse( runTestGetIfNewer( resourceTime, comparisonTime ) );
+    }
+
+    public void testGetIfNewerWithSameTimeResource()
+        throws Exception
+    {
+        long resourceTime = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2008-01-01" ).getTime();
+        assertFalse( runTestGetIfNewer( resourceTime, resourceTime ) );
+    }
+
+    private boolean runTestGetIfNewer( final long resourceTime, long comparisonTime )
+        throws IOException, ConnectionException, AuthenticationException, TransferFailedException,
+        ResourceDoesNotExistException, AuthorizationException
+    {
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillInputData( InputData inputData )
+            {
+                inputData.setInputStream( new StringInputStream( "" ) );
+                inputData.getResource().setLastModified( resourceTime );
+            }
+        };
+
+        File tempFile = File.createTempFile( "wagon", "tmp" );
+        tempFile.deleteOnExit();
+
+        wagon.connect( repository );
+        try
+        {
+            return wagon.getIfNewer( "resource", tempFile, comparisonTime );
+        }
+        finally
+        {
+            wagon.disconnect();
+            tempFile.delete();
+        }
+    }
+
+    public void testGetToStream()
+        throws Exception
+    {
+        final String content = "the content to return";
+        final long comparisonTime = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2008-01-01" ).getTime();
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillInputData( InputData inputData )
+            {
+                inputData.setInputStream( new StringInputStream( content ) );
+                inputData.getResource().setLastModified( comparisonTime );
+            }
+        };
+
+        wagon.connect( repository );
+        try
+        {
+            StringOutputStream out = new StringOutputStream();
+            wagon.getToStream( "resource", out );
+            assertEquals( content, out.toString() );
+        }
+        finally
+        {
+            wagon.disconnect();
+        }
+    }
+
+    public void testGet()
+        throws Exception
+    {
+        final String content = "the content to return";
+        final long comparisonTime = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2008-01-01" ).getTime();
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillInputData( InputData inputData )
+            {
+                inputData.setInputStream( new StringInputStream( content ) );
+                inputData.getResource().setLastModified( comparisonTime );
+            }
+        };
+
+        File tempFile = File.createTempFile( "wagon", "tmp" );
+        tempFile.deleteOnExit();
+
+        wagon.connect( repository );
+        try
+        {
+            wagon.get( "resource", tempFile );
+            assertEquals( content, FileUtils.fileRead( tempFile ) );
+        }
+        finally
+        {
+            wagon.disconnect();
+            tempFile.delete();
+        }
+    }
+
+    public void testGetIfNewerToStreamWithNewerResource()
+        throws Exception
+    {
+        long resourceTime = System.currentTimeMillis();
+        long comparisonTime = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2008-01-01" ).getTime();
+        assertTrue( runTestGetIfNewerToStream( resourceTime, comparisonTime ) );
+    }
+
+    public void testGetIfNewerToStreamWithOlderResource()
+        throws Exception
+    {
+        long comparisonTime = System.currentTimeMillis();
+        long resourceTime = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2008-01-01" ).getTime();
+        assertFalse( runTestGetIfNewerToStream( resourceTime, comparisonTime ) );
+    }
+
+    public void testGetIfNewerToStreamWithSameTimeResource()
+        throws Exception
+    {
+        long resourceTime = new SimpleDateFormat( "yyyy-MM-dd" ).parse( "2008-01-01" ).getTime();
+        assertFalse( runTestGetIfNewerToStream( resourceTime, resourceTime ) );
+    }
+
+    private boolean runTestGetIfNewerToStream( final long resourceTime, long comparisonTime )
+        throws IOException, ConnectionException, AuthenticationException, TransferFailedException,
+        ResourceDoesNotExistException, AuthorizationException
+    {
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillInputData( InputData inputData )
+            {
+                inputData.setInputStream( new StringInputStream( "" ) );
+                inputData.getResource().setLastModified( resourceTime );
+            }
+        };
+
+        wagon.connect( repository );
+        try
+        {
+            return wagon.getIfNewerToStream( "resource", new StringOutputStream(), comparisonTime );
+        }
+        finally
+        {
+            wagon.disconnect();
+        }
+    }
+
+    public void testPutFromStream()
+        throws Exception
+    {
+        final String content = "the content to return";
+
+        final StringOutputStream out = new StringOutputStream();
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillOutputData( OutputData outputData )
+            {
+                assertEquals( "resource", outputData.getResource().getName() );
+                assertEquals( -1, outputData.getResource().getContentLength() );
+                assertEquals( 0, outputData.getResource().getLastModified() );
+                outputData.setOutputStream( out );
+            }
+        };
+
+        wagon.connect( repository );
+        try
+        {
+            wagon.putFromStream( new StringInputStream( content ), "resource" );
+            assertEquals( content, out.toString() );
+        }
+        finally
+        {
+            wagon.disconnect();
+        }
+    }
+
+    public void testPutFromStreamWithResourceInformation()
+        throws Exception
+    {
+        final String content = "the content to return";
+        final long lastModified = System.currentTimeMillis();
+
+        final StringOutputStream out = new StringOutputStream();
+        StreamingWagon wagon = new TestWagon()
+        {
+            public void fillOutputData( OutputData outputData )
+            {
+                assertEquals( "resource", outputData.getResource().getName() );
+                assertEquals( content.length(), outputData.getResource().getContentLength() );
+                assertEquals( lastModified, outputData.getResource().getLastModified() );
+                outputData.setOutputStream( out );
+            }
+        };
+
+        wagon.connect( repository );
+        try
+        {
+            wagon.putFromStream( new StringInputStream( content ), "resource", content.length(), lastModified );
+            assertEquals( content, out.toString() );
+        }
+        finally
+        {
+            wagon.disconnect();
+        }
+    }
+
+    public void testPut()
+        throws Exception
+    {
+        final String content = "the content to return";
+
+        final File tempFile = File.createTempFile( "wagon", "tmp" );
+        FileUtils.fileWrite( tempFile.getAbsolutePath(), content );
+        tempFile.deleteOnExit();
+
+        final StringOutputStream out = new StringOutputStream();
+        Wagon wagon = new TestWagon()
+        {
+            public void fillOutputData( OutputData outputData )
+            {
+                assertEquals( "resource", outputData.getResource().getName() );
+                assertEquals( content.length(), outputData.getResource().getContentLength() );
+                assertEquals( tempFile.lastModified(), outputData.getResource().getLastModified() );
+                outputData.setOutputStream( out );
+            }
+        };
+
+        wagon.connect( repository );
+        try
+        {
+            wagon.put( tempFile, "resource" );
+            assertEquals( content, out.toString() );
+        }
+        finally
+        {
+            wagon.disconnect();
+            tempFile.delete();
+        }
+    }
+
+    public void testPutFileDoesntExist()
+        throws Exception
+    {
+        final File tempFile = File.createTempFile( "wagon", "tmp" );
+        tempFile.delete();
+        assertFalse( tempFile.exists() );
+
+        Wagon wagon = new TestWagon();
+
+        wagon.connect( repository );
+        try
+        {
+            wagon.put( tempFile, "resource" );
+            fail();
+        }
+        catch ( TransferFailedException e )
+        {
+            assertTrue( true );
+        }
+        finally
+        {
+            wagon.disconnect();
+        }
+    }
+
+}

Propchange: maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/StreamWagonTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/StreamWagonTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/observers/ChecksumObserverTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/observers/ChecksumObserverTest.java?rev=680954&r1=680953&r2=680954&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/observers/ChecksumObserverTest.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/test/java/org/apache/maven/wagon/observers/ChecksumObserverTest.java Wed Jul 30 02:54:09 2008
@@ -31,8 +31,10 @@
 import org.apache.maven.wagon.Wagon;
 import org.apache.maven.wagon.WagonMock;
 import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferEvent;
 import org.apache.maven.wagon.events.TransferListener;
 import org.apache.maven.wagon.repository.Repository;
+import org.apache.maven.wagon.resource.Resource;
 
 public class ChecksumObserverTest
     extends TestCase
@@ -47,18 +49,19 @@
         wagon = new WagonMock( true );
 
         Repository repository = new Repository();
-        wagon.connect( repository );        
+        wagon.connect( repository );
     }
-    
+
     public void tearDown()
-        throws ConnectionException
+        throws Exception
     {
         wagon.disconnect();
+
+        super.tearDown();
     }
 
     public void testSubsequentTransfersAfterTransferError()
-        throws NoSuchAlgorithmException, ResourceDoesNotExistException,
-        AuthorizationException, IOException
+        throws NoSuchAlgorithmException, ResourceDoesNotExistException, AuthorizationException, IOException
     {
         TransferListener listener = new ChecksumObserver();
 
@@ -66,7 +69,7 @@
 
         File testFile = File.createTempFile( "wagon", "tmp" );
         testFile.deleteOnExit();
-        
+
         try
         {
             wagon.get( "resource", testFile );
@@ -86,7 +89,35 @@
         {
             assertTrue( true );
         }
-        
+
         testFile.delete();
     }
+
+    public void testChecksum()
+        throws NoSuchAlgorithmException
+    {
+        ChecksumObserver listener = new ChecksumObserver( "SHA-1" );
+
+        Resource resource = new Resource( "resource" );
+
+        TransferEvent transferEvent =
+            new TransferEvent( wagon, resource, TransferEvent.TRANSFER_INITIATED, TransferEvent.REQUEST_GET );
+
+        listener.transferInitiated( transferEvent );
+
+        transferEvent = new TransferEvent( wagon, resource, TransferEvent.TRANSFER_STARTED, TransferEvent.REQUEST_GET );
+
+        listener.transferStarted( transferEvent );
+
+        transferEvent = new TransferEvent( wagon, resource, TransferEvent.TRANSFER_PROGRESS, TransferEvent.REQUEST_GET );
+
+        listener.transferProgress( transferEvent, "checksum\n".getBytes(), 9 );
+
+        transferEvent =
+            new TransferEvent( wagon, resource, TransferEvent.TRANSFER_COMPLETED, TransferEvent.REQUEST_GET );
+
+        listener.transferCompleted( transferEvent );
+
+        assertEquals( "2e5daf0201ddeb068a62d5e08da18657ab2c6be9", listener.getActualChecksum() );
+    }
 }



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