[MRM-138] add more proxy tests

git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@431135 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Porter 2006-08-13 02:22:06 +00:00
parent f2fb641b50
commit 58463f598f
9 changed files with 535 additions and 98 deletions

View File

@ -26,6 +26,7 @@ import java.util.Properties;
* Test the configuration store.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @noinspection JavaDoc
*/
public class ConfigurationStoreTest
extends PlexusTestCase
@ -130,6 +131,9 @@ public class ConfigurationStoreTest
assertEquals( "check value", "index-path", configuration.getIndexPath() );
}
/**
* @noinspection JUnitTestMethodWithNoAssertions
*/
public void testChangeListeners()
throws Exception
{

View File

@ -42,6 +42,12 @@
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
</dependency>
<dependency>
<groupId>easymock</groupId>
<artifactId>easymock</artifactId>
<version>1.2_Java1.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>

View File

@ -17,7 +17,6 @@ package org.apache.maven.repository.proxy;
*/
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.manager.ChecksumFailedException;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.repository.discovery.ArtifactDiscoverer;
@ -38,8 +37,8 @@ import java.io.File;
import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -49,6 +48,7 @@ import java.util.Map;
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @plexus.component
* @todo this currently duplicates a lot of the wagon manager, and doesn't do things like snapshot resolution, etc.
* The checksum handling is inconsistent with that of the wagon manager.
* Should we have a more artifact based one? This will merge metadata so should behave correctly, and it is able to
* correct some limitations of the wagon manager (eg, it can retrieve newer SNAPSHOT files without metadata)
*/
@ -100,7 +100,7 @@ public class DefaultProxyRequestHandler
public File getAlways( String path, List proxiedRepositories, ArtifactRepository managedRepository,
ProxyInfo wagonProxy )
throws ProxyException, ResourceDoesNotExistException
throws ResourceDoesNotExistException, ProxyException
{
File target = new File( managedRepository.getBasedir(), path );
@ -114,68 +114,24 @@ public class DefaultProxyRequestHandler
}
else
{
if ( path.endsWith( ".md5" ) || path.endsWith( ".sha1" ) )
try
{
// always read from the managed repository, no need to make remote request
}
else if ( path.endsWith( "maven-metadata.xml" ) )
{
// TODO: this is not always!
if ( !target.exists() || isOutOfDate( repository.getRepository().getReleases(), target ) )
{
getFileFromRepository( path, repository, managedRepository.getBasedir(), wagonProxy, target );
}
}
else
{
Artifact artifact = null;
try
{
artifact = defaultArtifactDiscoverer.buildArtifact( path );
}
catch ( DiscovererException e )
{
getLogger().debug(
"Failed to build artifact using default layout with message: " + e.getMessage() );
}
get( path, target, repository, managedRepository, wagonProxy );
if ( artifact == null )
if ( !target.exists() )
{
try
{
artifact = legacyArtifactDiscoverer.buildArtifact( path );
}
catch ( DiscovererException e )
{
getLogger().debug(
"Failed to build artifact using legacy layout with message: " + e.getMessage() );
}
}
if ( artifact != null )
{
getArtifactFromRepository( artifact, repository, managedRepository, wagonProxy, target );
repository.addFailure( path );
}
else
{
// Some other unknown file in the repository, proxy as is
// TODO: this is not always!
if ( !target.exists() )
{
getFileFromRepository( path, repository, managedRepository.getBasedir(), wagonProxy,
target );
}
// in case it previously failed and we've since found it
repository.clearFailure( path );
}
}
if ( !target.exists() )
catch ( ProxyException e )
{
repository.addFailure( path );
}
else
{
// in case it previously failed and we've since found it
repository.clearFailure( path );
throw e;
}
}
}
@ -188,9 +144,65 @@ public class DefaultProxyRequestHandler
return target;
}
private void get( String path, File target, ProxiedArtifactRepository repository,
ArtifactRepository managedRepository, ProxyInfo wagonProxy )
throws ProxyException
{
if ( path.endsWith( ".md5" ) || path.endsWith( ".sha1" ) )
{
// always read from the managed repository, no need to make remote request
}
else if ( path.endsWith( "maven-metadata.xml" ) )
{
// TODO: this is not always!
if ( !target.exists() || isOutOfDate( repository.getRepository().getReleases(), target ) )
{
getFileFromRepository( path, repository, managedRepository.getBasedir(), wagonProxy, target );
}
}
else
{
Artifact artifact = null;
try
{
artifact = defaultArtifactDiscoverer.buildArtifact( path );
}
catch ( DiscovererException e )
{
getLogger().debug( "Failed to build artifact using default layout with message: " + e.getMessage() );
}
if ( artifact == null )
{
try
{
artifact = legacyArtifactDiscoverer.buildArtifact( path );
}
catch ( DiscovererException e )
{
getLogger().debug( "Failed to build artifact using legacy layout with message: " + e.getMessage() );
}
}
if ( artifact != null )
{
getArtifactFromRepository( artifact, repository, managedRepository, wagonProxy, target );
}
else
{
// Some other unknown file in the repository, proxy as is
// TODO: this is not always!
if ( !target.exists() )
{
getFileFromRepository( path, repository, managedRepository.getBasedir(), wagonProxy, target );
}
}
}
}
private void getFileFromRepository( String path, ProxiedArtifactRepository repository, String repositoryCachePath,
ProxyInfo httpProxy, File target )
throws ProxyException, ResourceDoesNotExistException
throws ProxyException
{
boolean connected = false;
Map checksums = null;
@ -222,7 +234,7 @@ public class DefaultProxyRequestHandler
{
tries++;
getLogger().info( "Trying " + path + " from " + repository.getName() + "..." );
getLogger().debug( "Trying " + path + " from " + repository.getName() + "..." );
if ( !target.exists() )
{
@ -233,21 +245,21 @@ public class DefaultProxyRequestHandler
wagon.getIfNewer( path, temp, target.lastModified() );
}
success = doChecksumCheck( checksums, path, wagon, repositoryCachePath );
success = checkChecksum( checksums, path, wagon, repositoryCachePath );
if ( tries > 1 && !success )
{
throw new ProxyException( "Checksum failures occurred while downloading " + path );
//noinspection ThrowCaughtLocally
throw new TransferFailedException( "Checksum failures occurred while downloading " + path );
}
// temp won't exist if we called getIfNewer and it was older, but its still a successful return
if ( temp.exists() )
{
moveTempToTarget( temp, target );
}
}
while ( !success );
disconnectWagon( wagon );
if ( temp.exists() )
{
moveTempToTarget( temp, target );
}
}
//try next repository
}
@ -261,6 +273,11 @@ public class DefaultProxyRequestHandler
String message = "Skipping repository " + repository.getName() + ": " + e.getMessage();
processRepositoryFailure( repository, message, e );
}
catch ( ResourceDoesNotExistException e )
{
// hard failure setting doesn't affect "not found".
getLogger().debug( "Artifact not found in repository: " + repository.getName() + ": " + e.getMessage() );
}
finally
{
if ( wagon != null && checksums != null )
@ -288,7 +305,7 @@ public class DefaultProxyRequestHandler
*/
private Map prepareChecksumListeners( Wagon wagon )
{
Map checksums = new HashMap();
Map checksums = new LinkedHashMap();
try
{
ChecksumObserver checksum = new ChecksumObserver( "SHA-1" );
@ -344,7 +361,7 @@ public class DefaultProxyRequestHandler
return connected;
}
private boolean doChecksumCheck( Map checksumMap, String path, Wagon wagon, String repositoryCachePath )
private boolean checkChecksum( Map checksumMap, String path, Wagon wagon, String repositoryCachePath )
throws ProxyException
{
releaseChecksumListeners( wagon, checksumMap );
@ -367,45 +384,49 @@ public class DefaultProxyRequestHandler
remoteChecksum = remoteChecksum.substring( 0, remoteChecksum.indexOf( ' ' ) );
}
boolean checksumCheck = false;
if ( remoteChecksum.toUpperCase().equals( checksum.getActualChecksum().toUpperCase() ) )
String actualChecksum = checksum.getActualChecksum().toUpperCase();
remoteChecksum = remoteChecksum.toUpperCase();
boolean checksumCheck;
if ( remoteChecksum.equals( actualChecksum ) )
{
moveTempToTarget( tempChecksumFile, checksumFile );
checksumCheck = true;
}
else
{
getLogger().warn(
"The checksum '" + actualChecksum + "' did not match the remote value: " + remoteChecksum );
checksumCheck = false;
}
return checksumCheck;
}
catch ( ChecksumFailedException e )
{
return false;
}
catch ( TransferFailedException e )
{
getLogger().debug( "An error occurred during the download of " + checksumPath + ": " + e.getMessage(),
e );
getLogger().warn( "An error occurred during the download of " + checksumPath + ": " + e.getMessage(),
e );
// do nothing try the next checksum
}
catch ( ResourceDoesNotExistException e )
{
getLogger().debug( "An error occurred during the download of " + checksumPath + ": " + e.getMessage(),
e );
getLogger().debug( "The checksum did not exist: " + checksumPath, e );
// do nothing try the next checksum
}
catch ( AuthorizationException e )
{
getLogger().debug( "An error occurred during the download of " + checksumPath + ": " + e.getMessage(),
e );
getLogger().warn( "An error occurred during the download of " + checksumPath + ": " + e.getMessage(),
e );
// do nothing try the next checksum
}
catch ( IOException e )
{
getLogger().debug( "An error occurred while reading the temporary checksum file.", e );
getLogger().warn( "An error occurred while reading the temporary checksum file.", e );
return false;
}
}
getLogger().debug( "Skipping checksum validation for " + path + ": No remote checksums available." );
getLogger().debug( "No remote checksums available." );
return true;
}
@ -480,13 +501,14 @@ public class DefaultProxyRequestHandler
}
else
{
getLogger().error( message, t );
getLogger().warn( message );
getLogger().debug( message, t );
}
}
private void getArtifactFromRepository( Artifact artifact, ProxiedArtifactRepository repository,
ArtifactRepository managedRepository, ProxyInfo httpProxy, File remoteFile )
throws ProxyException, ResourceDoesNotExistException
throws ProxyException
{
ArtifactRepository artifactRepository = repository.getRepository();
ArtifactRepositoryPolicy policy =

View File

@ -20,21 +20,24 @@ import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.wagon.ResourceDoesNotExistException;
import org.apache.maven.wagon.TransferFailedException;
import org.apache.maven.wagon.Wagon;
import org.apache.maven.wagon.authorization.AuthorizationException;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.util.FileUtils;
import org.easymock.MockControl;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
/**
* @author Brett Porter
* @todo! tests to do vvv
* @todo test when >1 repo has the artifact
* @todo test when >1 repo has the artifact but one fails
* @todo test hard failure on repo1
* @todo test when failure is cached
* @todo test when failure is cached and repo is hard fail
* @todo test when failure should be cached but caching is disabled
* @todo test snapshots - general
* @todo test snapshots - newer version on repo2 is pulled down
@ -43,10 +46,18 @@ import java.util.List;
* @todo test metadata - general
* @todo test metadata - multiple repos are merged
* @todo test metadata - update interval
* @todo test metadata - looking for an update and file has been removed remotely
* @todo test when managed repo is m1 layout (proxy is m2), including metadata
* @todo test when one proxied repo is m1 layout (managed is m2), including metadata
* @todo test when one proxied repo is m1 layout (managed is m1), including metadata
* @todo test get always
* @todo test get always when resource is present locally but not in any proxied repos (should fail)
* @todo test remote checksum only md5
* @todo test remote checksum only sha1
* @todo test remote checksum missing
* @todo test remote checksum present and correct
* @todo test remote checksum present and incorrect
* @todo test remote checksum transfer failed
*/
public class ProxyRequestHandlerTest
extends PlexusTestCase
@ -61,6 +72,14 @@ public class ProxyRequestHandlerTest
private ArtifactRepository proxiedRepository2;
private ArtifactRepositoryLayout defaultLayout;
private ArtifactRepositoryFactory factory;
private MockControl wagonMockControl;
private Wagon wagonMock;
protected void setUp()
throws Exception
{
@ -72,24 +91,25 @@ public class ProxyRequestHandlerTest
FileUtils.deleteDirectory( repoLocation );
copyDirectoryStructure( getTestFile( "src/test/repositories/managed" ), repoLocation );
ArtifactRepositoryFactory factory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
ArtifactRepositoryLayout defaultLayout =
(ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
defaultManagedRepository = factory.createArtifactRepository( "managed-repository",
repoLocation.toURI().toURL().toExternalForm(),
defaultLayout, null, null );
defaultLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
factory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
defaultManagedRepository = createRepository( "managed-repository", repoLocation );
File location = getTestFile( "src/test/repositories/proxied1" );
proxiedRepository1 = factory.createArtifactRepository( "proxied1", location.toURI().toURL().toExternalForm(),
defaultLayout, null, null );
proxiedRepository1 = createRepository( "proxied1", location );
location = getTestFile( "src/test/repositories/proxied2" );
proxiedRepository2 = factory.createArtifactRepository( "proxied2", location.toURI().toURL().toExternalForm(),
defaultLayout, null, null );
proxiedRepository2 = createRepository( "proxied2", location );
proxiedRepositories = new ArrayList( 2 );
proxiedRepositories.add( createProxiedRepository( proxiedRepository1 ) );
proxiedRepositories.add( createProxiedRepository( proxiedRepository2 ) );
wagonMockControl = MockControl.createNiceControl( Wagon.class );
wagonMock = (Wagon) wagonMockControl.getMock();
WagonDelegate delegate = (WagonDelegate) lookup( Wagon.ROLE, "test" );
delegate.setDelegate( wagonMock );
}
public void testGetDefaultLayoutNotPresent()
@ -134,12 +154,183 @@ public class ProxyRequestHandlerTest
file.lastModified() );
}
public void testGetWhenInBothProxiedRepos()
throws ResourceDoesNotExistException, ProxyException, IOException
{
String path = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
File expectedFile = new File( defaultManagedRepository.getBasedir(), path );
assertFalse( expectedFile.exists() );
File file = requestHandler.get( path, proxiedRepositories, defaultManagedRepository );
assertEquals( "Check file matches", expectedFile, file );
assertTrue( "Check file created", file.exists() );
File proxiedFile = new File( proxiedRepository1.getBasedir(), path );
String expectedContents = FileUtils.fileRead( proxiedFile );
assertEquals( "Check file contents", expectedContents, FileUtils.fileRead( file ) );
proxiedFile = new File( proxiedRepository2.getBasedir(), path );
String unexpectedContents = FileUtils.fileRead( proxiedFile );
assertFalse( "Check file contents", unexpectedContents.equals( FileUtils.fileRead( file ) ) );
}
public void testGetInSecondProxiedRepo()
throws ResourceDoesNotExistException, ProxyException, IOException
{
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
File expectedFile = new File( defaultManagedRepository.getBasedir(), path );
assertFalse( expectedFile.exists() );
File file = requestHandler.get( path, proxiedRepositories, defaultManagedRepository );
assertEquals( "Check file matches", expectedFile, file );
assertTrue( "Check file created", file.exists() );
File proxiedFile = new File( proxiedRepository2.getBasedir(), path );
String expectedContents = FileUtils.fileRead( proxiedFile );
assertEquals( "Check file contents", expectedContents, FileUtils.fileRead( file ) );
}
public void testNotFoundInAnyProxies()
throws ResourceDoesNotExistException, ProxyException, IOException
{
String path = "org/apache/maven/test/does-not-exist/1.0/does-not-exist-1.0.jar";
File expectedFile = new File( defaultManagedRepository.getBasedir(), path );
assertFalse( expectedFile.exists() );
try
{
File file = requestHandler.get( path, proxiedRepositories, defaultManagedRepository );
fail( "File returned was: " + file + "; should have got a not found exception" );
}
catch ( ResourceDoesNotExistException e )
{
// expected, but check file was not created
assertFalse( expectedFile.exists() );
}
}
public void testGetInSecondProxiedRepoFirstFails()
throws ResourceDoesNotExistException, ProxyException, IOException, TransferFailedException,
AuthorizationException
{
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
File expectedFile = new File( defaultManagedRepository.getBasedir(), path ).getAbsoluteFile();
assertFalse( expectedFile.exists() );
proxiedRepository1 = createRepository( "proxied1", "test://..." );
proxiedRepositories.clear();
ProxiedArtifactRepository proxiedArtifactRepository = createProxiedRepository( proxiedRepository1 );
proxiedRepositories.add( proxiedArtifactRepository );
proxiedRepositories.add( createProxiedRepository( proxiedRepository2 ) );
wagonMock.get( path, new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" ) );
wagonMockControl.setThrowable( new TransferFailedException( "transfer failed" ) );
wagonMockControl.replay();
File file = requestHandler.get( path, proxiedRepositories, defaultManagedRepository );
wagonMockControl.verify();
assertEquals( "Check file matches", expectedFile, file );
assertTrue( "Check file created", file.exists() );
File proxiedFile = new File( proxiedRepository2.getBasedir(), path );
String expectedContents = FileUtils.fileRead( proxiedFile );
assertEquals( "Check file contents", expectedContents, FileUtils.fileRead( file ) );
assertTrue( "Check failure", proxiedArtifactRepository.isCachedFailure( path ) );
}
public void testGetButAllRepositoriesFail()
throws ResourceDoesNotExistException, ProxyException, IOException, TransferFailedException,
AuthorizationException
{
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
File expectedFile = new File( defaultManagedRepository.getBasedir(), path ).getAbsoluteFile();
assertFalse( expectedFile.exists() );
proxiedRepository1 = createRepository( "proxied1", "test://..." );
proxiedRepository2 = createRepository( "proxied2", "test://..." );
proxiedRepositories.clear();
ProxiedArtifactRepository proxiedArtifactRepository1 = createProxiedRepository( proxiedRepository1 );
proxiedRepositories.add( proxiedArtifactRepository1 );
ProxiedArtifactRepository proxiedArtifactRepository2 = createProxiedRepository( proxiedRepository2 );
proxiedRepositories.add( proxiedArtifactRepository2 );
wagonMock.get( path, new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" ) );
wagonMockControl.setThrowable( new TransferFailedException( "transfer failed" ) );
wagonMock.get( path, new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" ) );
wagonMockControl.setThrowable( new TransferFailedException( "transfer failed" ) );
wagonMockControl.replay();
try
{
File file = requestHandler.get( path, proxiedRepositories, defaultManagedRepository );
fail( "Found file: " + file + "; but was expecting a failure" );
}
catch ( ResourceDoesNotExistException e )
{
// as expected
wagonMockControl.verify();
assertTrue( "Check failure", proxiedArtifactRepository1.isCachedFailure( path ) );
assertTrue( "Check failure", proxiedArtifactRepository2.isCachedFailure( path ) );
// TODO: do we really want failures to present as a not found?
// TODO: How much information on each failure should we pass back to the user vs. logging in the proxy?
}
}
public void testGetInSecondProxiedRepoFirstHardFails()
throws ResourceDoesNotExistException, ProxyException, IOException, TransferFailedException,
AuthorizationException
{
String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
File expectedFile = new File( defaultManagedRepository.getBasedir(), path ).getAbsoluteFile();
assertFalse( expectedFile.exists() );
proxiedRepository1 = createRepository( "proxied1", "test://..." );
proxiedRepositories.clear();
ProxiedArtifactRepository proxiedArtifactRepository = createHardFailProxiedRepository( proxiedRepository1 );
proxiedRepositories.add( proxiedArtifactRepository );
proxiedRepositories.add( createProxiedRepository( proxiedRepository2 ) );
wagonMock.get( path, new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" ) );
TransferFailedException failedException = new TransferFailedException( "transfer failed" );
wagonMockControl.setThrowable( failedException );
wagonMockControl.replay();
try
{
File file = requestHandler.get( path, proxiedRepositories, defaultManagedRepository );
fail( "Found file: " + file + "; but was expecting a failure" );
}
catch ( ProxyException e )
{
// expect a failure
wagonMockControl.verify();
assertEquals( "Check cause", failedException, e.getCause() );
assertTrue( "Check failure", proxiedArtifactRepository.isCachedFailure( path ) );
}
}
/**
* A faster recursive copy that omits .svn directories.
*
* @param sourceDirectory the source directory to copy
* @param destDirectory the target location
* @throws java.io.IOException if there is a copying problemt
* @throws java.io.IOException if there is a copying problem
* @todo get back into plexus-utils, share with indexing module
*/
private static void copyDirectoryStructure( File sourceDirectory, File destDirectory )
throws IOException
@ -193,6 +384,30 @@ public class ProxyRequestHandlerTest
{
ProxiedArtifactRepository proxiedArtifactRepository = new ProxiedArtifactRepository( repository );
proxiedArtifactRepository.setName( repository.getId() );
proxiedArtifactRepository.setCacheFailures( true );
return proxiedArtifactRepository;
}
private static ProxiedArtifactRepository createHardFailProxiedRepository( ArtifactRepository repository )
{
ProxiedArtifactRepository proxiedArtifactRepository = createProxiedRepository( repository );
proxiedArtifactRepository.setHardFail( true );
return proxiedArtifactRepository;
}
private ArtifactRepository createRepository( String id, File repoLocation )
throws MalformedURLException
{
return createRepository( id, repoLocation.toURI().toURL().toExternalForm() );
}
private ArtifactRepository createRepository( String id, String url )
{
return createRepository( id, url, defaultLayout );
}
private ArtifactRepository createRepository( String id, String url, ArtifactRepositoryLayout repositoryLayout )
{
return factory.createArtifactRepository( id, url, repositoryLayout, null, null );
}
}

View File

@ -0,0 +1,157 @@
package org.apache.maven.repository.proxy;
/*
* Copyright 2005-2006 The Apache Software Foundation.
*
* Licensed 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.apache.maven.wagon.Wagon;
import org.apache.maven.wagon.TransferFailedException;
import org.apache.maven.wagon.ResourceDoesNotExistException;
import org.apache.maven.wagon.ConnectionException;
import org.apache.maven.wagon.events.SessionListener;
import org.apache.maven.wagon.events.TransferListener;
import org.apache.maven.wagon.proxy.ProxyInfo;
import org.apache.maven.wagon.authentication.AuthenticationException;
import org.apache.maven.wagon.authentication.AuthenticationInfo;
import org.apache.maven.wagon.repository.Repository;
import org.apache.maven.wagon.authorization.AuthorizationException;
import java.io.File;
/**
* A dummy wagon implementation
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
*/
public class WagonDelegate
implements Wagon
{
private Wagon delegate;
public void get( String resourceName, File destination )
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
{
delegate.get( resourceName, destination );
}
public boolean getIfNewer( String resourceName, File destination, long timestamp )
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
{
return delegate.getIfNewer( resourceName, destination, timestamp );
}
public void put( File source, String destination )
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
{
delegate.put( source, destination );
}
public void putDirectory( File sourceDirectory, String destinationDirectory )
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
{
delegate.putDirectory( sourceDirectory, destinationDirectory );
}
public boolean supportsDirectoryCopy()
{
return delegate.supportsDirectoryCopy();
}
public Repository getRepository()
{
return delegate.getRepository();
}
public void connect( Repository source )
throws ConnectionException, AuthenticationException
{
delegate.connect( source );
}
public void connect( Repository source, ProxyInfo proxyInfo )
throws ConnectionException, AuthenticationException
{
delegate.connect( source, proxyInfo );
}
public void connect( Repository source, AuthenticationInfo authenticationInfo )
throws ConnectionException, AuthenticationException
{
delegate.connect( source, authenticationInfo );
}
public void connect( Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo )
throws ConnectionException, AuthenticationException
{
delegate.connect( source, authenticationInfo, proxyInfo );
}
public void openConnection()
throws ConnectionException, AuthenticationException
{
delegate.openConnection();
}
public void disconnect()
throws ConnectionException
{
delegate.disconnect();
}
public void addSessionListener( SessionListener listener )
{
delegate.addSessionListener( listener );
}
public void removeSessionListener( SessionListener listener )
{
delegate.removeSessionListener( listener );
}
public boolean hasSessionListener( SessionListener listener )
{
return delegate.hasSessionListener( listener );
}
public void addTransferListener( TransferListener listener )
{
delegate.addTransferListener( listener );
}
public void removeTransferListener( TransferListener listener )
{
delegate.removeTransferListener( listener );
}
public boolean hasTransferListener( TransferListener listener )
{
return delegate.hasTransferListener( listener );
}
public boolean isInteractive()
{
return delegate.isInteractive();
}
public void setInteractive( boolean interactive )
{
delegate.setInteractive( interactive );
}
public void setDelegate( Wagon delegate )
{
this.delegate = delegate;
}
}

View File

@ -0,0 +1,25 @@
<!--
~ Copyright 2005-2006 The Apache Software Foundation.
~
~ Licensed 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.
-->
<component-set>
<components>
<component>
<role>org.apache.maven.wagon.Wagon</role>
<role-hint>test</role-hint>
<implementation>org.apache.maven.repository.proxy.WagonDelegate</implementation>
</component>
</components>
</component-set>