Index: src/test/java/org/apache/maven/artifact/manager/WagonNoOp.java
===================================================================
--- src/test/java/org/apache/maven/artifact/manager/WagonNoOp.java (revision 0)
+++ src/test/java/org/apache/maven/artifact/manager/WagonNoOp.java (revision 0)
@@ -0,0 +1,69 @@
+package org.apache.maven.artifact.manager;
+
+/*
+ * 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 org.apache.maven.wagon.AbstractWagon;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.resource.Resource;
+
+public class WagonNoOp extends AbstractWagon
+{
+
+ public void closeConnection()
+ {
+ // NO-OP
+ }
+
+ public void get( String resourceName, File destination ) throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ Resource resource = new Resource(resourceName);
+ fireGetInitiated( resource, destination );
+ fireGetStarted( resource, destination );
+ fireGetCompleted( resource, destination );
+ }
+
+ public boolean getIfNewer( String resourceName, File destination, long timestamp ) throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ // NO-OP
+ return false;
+ }
+
+ public void openConnection()
+ {
+ // NO-OP
+ }
+
+ public void put( File source, String destination ) throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+ {
+ Resource resource = new Resource(destination);
+ firePutInitiated( resource, source );
+ firePutStarted( resource, source );
+ firePutCompleted( resource, source );
+ }
+
+ public String[] getSupportedProtocols()
+ {
+ return new String[]{ "noop" };
+ }
+}
Index: src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
===================================================================
--- src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java (revision 537498)
+++ src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java (working copy)
@@ -19,8 +19,20 @@
* under the License.
*/
+import java.io.File;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.wagon.UnsupportedProtocolException;
import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.observers.Debug;
import org.apache.maven.wagon.repository.Repository;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.util.xml.Xpp3Dom;
@@ -33,7 +45,26 @@
extends PlexusTestCase
{
+ private final class MockArtifactRepositoryLayout implements ArtifactRepositoryLayout
+ {
+ public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
+ {
+ return "path";
+ }
+
+ public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+ {
+ return "path";
+ }
+
+ public String pathOf( Artifact artifact )
+ {
+ return "path";
+ }
+ }
+
private WagonManager wagonManager;
+ TransferListener transferListener = new Debug();
protected void setUp()
throws Exception
@@ -53,6 +84,8 @@
assertWagon( "b2" );
assertWagon( "c" );
+
+ assertWagon( "noop" );
try
{
@@ -110,6 +143,43 @@
assertTrue( true );
}
}
+
+ /* Check that transfer listeners are properly removed after putRemoteFile */
+ public void testWagonTransferListenerPutRemoteFile()
+ throws Exception
+ {
+ Artifact artifact = new DefaultArtifact("sample.group", "sample-art",
+ VersionRange.createFromVersion( "1.0" ),
+ "scope", "type", "classifier", null);
+ ArtifactRepository repo = new DefaultArtifactRepository("id", "noop://url", new MockArtifactRepositoryLayout());
+ WagonNoOp wagon = (WagonNoOp) wagonManager.getWagon( "noop" );
+ assertFalse( "Transfer listener is registered before test" ,
+ wagon.getTransferEventSupport().hasTransferListener( transferListener ));
+ wagonManager.setDownloadMonitor( transferListener );
+ wagonManager.putArtifact( new File("sample file"), artifact, repo );
+ assertFalse( "Transfer listener still registered after putArtifact" ,
+ wagon.getTransferEventSupport().hasTransferListener( transferListener ));
+ }
+
+ /* Check that transfer listeners are properly removed after putRemoteFile */
+ public void testWagonTransferListenerGetArtifact()
+ throws Exception
+ {
+ File tmpFile = File.createTempFile( "mvn-test", ".temp") ;
+ tmpFile.deleteOnExit();
+ Artifact artifact = new DefaultArtifact("sample.group", "sample-art",
+ VersionRange.createFromVersion( "1.0" ),
+ "scope", "type", "classifier", null);
+ artifact.setFile( tmpFile );
+ ArtifactRepository repo = new DefaultArtifactRepository("id", "noop://url", new MockArtifactRepositoryLayout());
+ WagonNoOp wagon = (WagonNoOp) wagonManager.getWagon( "noop" );
+ assertFalse( "Transfer listener is registered before test" ,
+ wagon.getTransferEventSupport().hasTransferListener( transferListener ));
+ wagonManager.setDownloadMonitor( transferListener );
+ wagonManager.getArtifact(artifact, repo );
+ assertFalse( "Transfer listener still registered after getArtifact" ,
+ wagon.getTransferEventSupport().hasTransferListener( transferListener ));
+ }
private void assertWagon( String protocol )
throws Exception
Index: src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml
===================================================================
--- src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml (revision 537498)
+++ src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml (working copy)
@@ -40,6 +40,11 @@
org.apache.maven.artifact.manager.WagonC
+ org.apache.maven.wagon.Wagon
+ noop
+ org.apache.maven.artifact.manager.WagonNoOp
+
+
org.apache.maven.artifact.repository.authentication.AuthenticationInfoProvider
org.apache.maven.artifact.repository.authentication.DummyAuthenticationInfoProvider
Index: src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
===================================================================
--- src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (revision 537498)
+++ src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (working copy)
@@ -201,6 +201,10 @@
}
catch ( NoSuchAlgorithmException e )
{
+ // Remove transfer listeners
+ wagon.removeTransferListener( (TransferListener) checksums.get( "md5" ) );
+ wagon.removeTransferListener( (TransferListener) checksums.get( "sha1" ) );
+
throw new TransferFailedException( "Unable to add checksum methods: " + e.getMessage(), e );
}
@@ -271,6 +275,14 @@
}
finally
{
+ // Remove every transfer listener
+ wagon.removeTransferListener( (TransferListener) checksums.get( "md5" ) );
+ wagon.removeTransferListener( (TransferListener) checksums.get( "sha1" ) );
+ if (null != downloadMonitor)
+ {
+ wagon.removeTransferListener( downloadMonitor );
+ }
+
disconnectWagon( wagon );
releaseWagon( protocol, wagon );
@@ -385,8 +397,8 @@
}
// TODO: configure on repository
- ChecksumObserver md5ChecksumObserver;
- ChecksumObserver sha1ChecksumObserver;
+ ChecksumObserver md5ChecksumObserver = null;
+ ChecksumObserver sha1ChecksumObserver = null;
try
{
md5ChecksumObserver = new ChecksumObserver( "MD5" );
@@ -397,6 +409,9 @@
}
catch ( NoSuchAlgorithmException e )
{
+ // Remove transfer listeners
+ wagon.removeTransferListener( md5ChecksumObserver );
+ wagon.removeTransferListener( sha1ChecksumObserver );
throw new TransferFailedException( "Unable to add checksum methods: " + e.getMessage(), e );
}
@@ -531,6 +546,15 @@
}
finally
{
+ // Remove every TransferListener
+ wagon.removeTransferListener( md5ChecksumObserver );
+ wagon.removeTransferListener( sha1ChecksumObserver );
+ if (null != downloadMonitor)
+ {
+ wagon.removeTransferListener( downloadMonitor );
+ }
+
+
disconnectWagon( wagon );
releaseWagon( protocol, wagon );