You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/04/16 02:49:29 UTC
svn commit: r529106 [1/3] - in
/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy:
./ src/main/java/org/apache/maven/archiva/proxy/
src/main/java/org/apache/maven/archiva/proxy/policy/
src/test/java/org/apache/maven/archi...
Author: joakime
Date: Sun Apr 15 17:49:27 2007
New Revision: 529106
URL: http://svn.apache.org/viewvc?view=rev&rev=529106
Log:
* Expanding Proxy / Policy tests.
Added:
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ChecksumTransferTest.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ManagedDefaultTransferTest.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ManagedLegacyTransferTest.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MetadataTransferTest.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/MockConfiguration.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/RelocateTransferTest.java
- copied, changed from r528579, maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectorsTest.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/SnapshotTransferTest.java (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/resources/log4j.xml (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/resources/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.xml (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/resources/org/apache/maven/archiva/proxy/ChecksumTransferTest.xml (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/resources/org/apache/maven/archiva/proxy/ManagedDefaultTransferTest.xml (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/resources/org/apache/maven/archiva/proxy/ManagedLegacyTransferTest.xml (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/resources/org/apache/maven/archiva/proxy/MetadataTransferTest.xml (with props)
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/resources/org/apache/maven/archiva/proxy/SnapshotTransferTest.xml (with props)
Removed:
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/policy/
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ProxyRequestHandlerTest.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectorsTest.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/resources/org/apache/maven/archiva/proxy/ProxyRequestHandlerTest.xml
Modified:
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/pom.xml
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java
maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/WagonDelegate.java
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/pom.xml?view=diff&rev=529106&r1=529105&r2=529106
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/pom.xml (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/pom.xml Sun Apr 15 17:49:27 2007
@@ -38,9 +38,12 @@
<artifactId>archiva-repository-layer</artifactId>
</dependency>
<dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-file</artifactId>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
@@ -57,8 +60,17 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-slf4j-logging</artifactId>
+ <version>1.1-alpha-1-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.2</version>
+ <scope>test</scope>
</dependency>
+
</dependencies>
</project>
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java?view=diff&rev=529106&r1=529105&r2=529106
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java Sun Apr 15 17:49:27 2007
@@ -19,22 +19,21 @@
* under the License.
*/
-import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
-import org.apache.maven.archiva.common.utils.VersionUtil;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.NetworkProxyConfiguration;
+import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
-import org.apache.maven.archiva.configuration.RepositoryProxyConnectorConfiguration;
import org.apache.maven.archiva.model.ArchivaRepository;
import org.apache.maven.archiva.model.ArtifactReference;
import org.apache.maven.archiva.model.ProjectReference;
-import org.apache.maven.archiva.proxy.policy.PostfetchPolicy;
-import org.apache.maven.archiva.proxy.policy.PrefetchPolicy;
+import org.apache.maven.archiva.policies.DownloadPolicy;
+import org.apache.maven.archiva.policies.urlcache.UrlFailureCache;
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
import org.apache.maven.archiva.repository.layout.LayoutException;
import org.apache.maven.wagon.ConnectionException;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
import org.apache.maven.wagon.Wagon;
import org.apache.maven.wagon.WagonException;
import org.apache.maven.wagon.authentication.AuthenticationException;
@@ -50,11 +49,14 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
+import java.util.Map.Entry;
/**
* DefaultRepositoryProxyConnectors
@@ -86,14 +88,19 @@
private BidirectionalRepositoryLayoutFactory layoutFactory;
/**
- * @plexus.requirement role="checksum"
+ * @plexus.requirement role="org.apache.maven.archiva.policies.PreDownloadPolicy"
*/
- private PrefetchPolicy checksumPolicy;
+ private Map preDownloadPolicies;
/**
- * @plexus.requirement role="artifact-update"
+ * @plexus.requirement role="org.apache.maven.archiva.policies.PostDownloadPolicy"
*/
- private PostfetchPolicy updatePolicy;
+ private Map postDownloadPolicies;
+
+ /**
+ * @plexus.requirement role-hint="default"
+ */
+ private UrlFailureCache urlFailureCache;
private Map proxyConnectorMap = new HashMap();
@@ -101,7 +108,7 @@
private List propertyNameTriggers = new ArrayList();
- public boolean fetchFromProxies( ArchivaRepository repository, ArtifactReference artifact )
+ public File fetchFromProxies( ArchivaRepository repository, ArtifactReference artifact )
throws ProxyException
{
if ( !repository.isManaged() )
@@ -122,36 +129,41 @@
+ e.getMessage(), e );
}
- boolean isSnapshot = VersionUtil.isSnapshot( artifact.getVersion() );
+ Properties requestProperties = new Properties();
+ requestProperties.setProperty( "version", artifact.getVersion() );
List connectors = getProxyConnectors( repository );
Iterator it = connectors.iterator();
while ( it.hasNext() )
{
ProxyConnector connector = (ProxyConnector) it.next();
+ getLogger().debug( "Attempting connector: " + connector );
ArchivaRepository targetRepository = connector.getTargetRepository();
try
{
BidirectionalRepositoryLayout targetLayout = layoutFactory.getLayout( targetRepository.getLayoutType() );
String targetPath = targetLayout.toPath( artifact );
- if ( transferFile( connector, targetRepository, targetPath, localFile, isSnapshot ) )
+ File downloadedFile = transferFile( connector, targetRepository, targetPath, localFile,
+ requestProperties );
+
+ if ( fileExists( downloadedFile ) )
{
- // Transfer was successful. return.
- return true;
+ getLogger().info( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
+ return downloadedFile;
}
}
catch ( LayoutException e )
{
getLogger().error( "Unable to proxy due to bad layout definition: " + e.getMessage(), e );
- return false;
+ return null;
}
}
- return false;
+ return null;
}
- public boolean fetchFromProxies( ArchivaRepository repository, ProjectReference metadata )
+ public File fetchFromProxies( ArchivaRepository repository, ProjectReference metadata )
throws ProxyException
{
if ( !repository.isManaged() )
@@ -172,6 +184,8 @@
+ e.getMessage(), e );
}
+ Properties requestProperties = new Properties();
+
List connectors = getProxyConnectors( repository );
Iterator it = connectors.iterator();
while ( it.hasNext() )
@@ -183,20 +197,43 @@
BidirectionalRepositoryLayout targetLayout = layoutFactory.getLayout( targetRepository.getLayoutType() );
String targetPath = targetLayout.toPath( metadata ) + FILENAME_MAVEN_METADATA;
- if ( transferFile( connector, targetRepository, targetPath, localFile, false ) )
+ File downloadedFile = transferFile( connector, targetRepository, targetPath, localFile,
+ requestProperties );
+
+ if ( fileExists( downloadedFile ) )
{
- // Transfer was successful. return.
- return true;
+ getLogger().info( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
+ return downloadedFile;
}
}
catch ( LayoutException e )
{
getLogger().error( "Unable to proxy due to bad layout definition: " + e.getMessage(), e );
- return false;
+ return null;
}
}
- return false;
+ return null;
+ }
+
+ private boolean fileExists( File file )
+ {
+ if ( file == null )
+ {
+ return false;
+ }
+
+ if ( !file.exists() )
+ {
+ return false;
+ }
+
+ if ( !file.isFile() )
+ {
+ return false;
+ }
+
+ return true;
}
/**
@@ -206,39 +243,38 @@
* @param targetRepository
* @param targetPath
* @param localFile
- * @param isSnapshot
+ * @param requestProperties
* @return
* @throws ProxyException
*/
- private boolean transferFile( ProxyConnector connector, ArchivaRepository targetRepository, String targetPath,
- File localFile, boolean isSnapshot )
+ private File transferFile( ProxyConnector connector, ArchivaRepository targetRepository, String targetPath,
+ File localFile, Properties requestProperties )
throws ProxyException
{
- if ( isSnapshot )
- {
- // Handle Snapshot Policy
- if ( !updatePolicy.applyPolicy( connector.getSnapshotsPolicy(), localFile ) )
- {
- return false;
- }
- }
- else
+ String url = targetRepository.getUrl().toString() + targetPath;
+ requestProperties.setProperty( "url", url );
+
+ // Handle pre-download policy
+ if ( !applyPolicies( connector.getPolicies(), this.preDownloadPolicies, requestProperties, localFile ) )
{
- // Handle Release Policy
- if ( !updatePolicy.applyPolicy( connector.getReleasesPolicy(), localFile ) )
+ getLogger().info( "Failed pre-download policies - " + localFile.getAbsolutePath() );
+
+ if ( fileExists( localFile ) )
{
- return false;
+ return localFile;
}
+
+ return null;
}
// Is a whitelist defined?
- if ( CollectionUtils.isNotEmpty( connector.getWhitelist() ) )
+ if ( !isEmpty( connector.getWhitelist() ) )
{
// Path must belong to whitelist.
if ( !matchesPattern( targetPath, connector.getWhitelist() ) )
{
getLogger().debug( "Path [" + targetPath + "] is not part of defined whitelist (skipping transfer)." );
- return false;
+ return null;
}
}
@@ -246,17 +282,12 @@
if ( matchesPattern( targetPath, connector.getBlacklist() ) )
{
getLogger().debug( "Path [" + targetPath + "] is part of blacklist (skipping transfer)." );
- return false;
+ return null;
}
- // Transfer the file.
Wagon wagon = null;
-
try
{
- File temp = new File( localFile.getAbsolutePath() + ".tmp" );
- temp.deleteOnExit();
-
String protocol = targetRepository.getUrl().getProtocol();
wagon = (Wagon) wagons.get( protocol );
if ( wagon == null )
@@ -267,43 +298,166 @@
boolean connected = connectToRepository( connector, wagon, targetRepository );
if ( connected )
{
- if ( localFile.exists() )
+ localFile = transferSimpleFile( wagon, targetRepository, targetPath, localFile );
+
+ transferChecksum( wagon, targetRepository, targetPath, localFile, ".sha1" );
+ transferChecksum( wagon, targetRepository, targetPath, localFile, ".md5" );
+ }
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ // Do not cache url here.
+ return null;
+ }
+ catch ( WagonException e )
+ {
+ urlFailureCache.cacheFailure( url );
+ return null;
+ }
+ finally
+ {
+ if ( wagon != null )
+ {
+ try
{
- getLogger().debug( "Retrieving " + targetPath + " from " + targetRepository.getName() );
- wagon.get( targetPath, temp );
+ wagon.disconnect();
}
- else
+ catch ( ConnectionException e )
{
- getLogger().debug(
- "Retrieving " + targetPath + " from " + targetRepository.getName()
- + " if updated" );
- wagon.getIfNewer( targetPath, temp, localFile.lastModified() );
+ getLogger().warn( "Unable to disconnect wagon.", e );
}
+ }
+ }
+
+ // Handle post-download policies.
+ if ( !applyPolicies( connector.getPolicies(), this.postDownloadPolicies, requestProperties, localFile ) )
+ {
+ getLogger().info( "Failed post-download policies - " + localFile.getAbsolutePath() );
+
+ if ( fileExists( localFile ) )
+ {
+ return localFile;
+ }
+
+ return null;
+ }
+
+ // Everything passes.
+ return localFile;
+ }
+
+ private void transferChecksum( Wagon wagon, ArchivaRepository targetRepository, String targetPath, File localFile,
+ String type )
+ throws ProxyException
+ {
+ String url = targetRepository.getUrl().toString() + targetPath;
+
+ // Transfer checksum does not use the policy.
+ if ( urlFailureCache.hasFailedBefore( url + type ) )
+ {
+ return;
+ }
+
+ try
+ {
+ File hashFile = new File( localFile.getAbsolutePath() + type );
+ transferSimpleFile( wagon, targetRepository, targetPath + type, hashFile );
+ getLogger().debug( "Checksum" + type + " Downloaded: " + hashFile );
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ getLogger().debug( "Checksum" + type + " Not Download: " + e.getMessage() );
+ }
+ catch ( WagonException e )
+ {
+ urlFailureCache.cacheFailure( url + type );
+ getLogger().warn( "Transfer failed on checksum: " + url + " : " + e.getMessage(), e );
+ }
+ }
+
+ private File transferSimpleFile( Wagon wagon, ArchivaRepository targetRepository, String targetPath, File localFile )
+ throws ProxyException, WagonException
+ {
+ // Transfer the file.
+ File temp = null;
+
+ try
+ {
+ temp = new File( localFile.getAbsolutePath() + ".tmp" );
+
+ boolean success = false;
+
+ if ( localFile.exists() )
+ {
+ getLogger().debug( "Retrieving " + targetPath + " from " + targetRepository.getName() );
+ wagon.get( targetPath, temp );
+ success = true;
- // temp won't exist if we called getIfNewer and it was older, but its still a successful return
if ( temp.exists() )
{
moveTempToTarget( temp, localFile );
}
- else
+
+ // You wouldn't get here on failure, a WagonException would have been thrown.
+ getLogger().debug( "Downloaded successfully." );
+ }
+ else
+ {
+ getLogger().debug( "Retrieving " + targetPath + " from " + targetRepository.getName() + " if updated" );
+ success = wagon.getIfNewer( targetPath, temp, localFile.lastModified() );
+ if ( !success )
{
getLogger().debug(
- "Attempt to retrieving " + targetPath + " from " + targetRepository.getName()
- + " failed: local file does not exist." );
- return false;
+ "Not downloaded, as local file is newer than remote side: "
+ + localFile.getAbsolutePath() );
+ }
+ else if ( temp.exists() )
+ {
+ getLogger().debug( "Downloaded successfully." );
+ moveTempToTarget( temp, localFile );
}
-
- getLogger().debug( "Successfully downloaded" );
}
+
+ return localFile;
+ }
+ catch ( ResourceDoesNotExistException e )
+ {
+ getLogger().warn( "Resource does not exist: " + e.getMessage() );
+ throw e;
}
catch ( WagonException e )
{
getLogger().warn( "Download failure:" + e.getMessage(), e );
- return false;
+ throw e;
}
+ finally
+ {
+ if ( temp != null )
+ {
+ temp.delete();
+ }
+ }
+ }
- // Handle checksum Policy.
- return checksumPolicy.applyPolicy( connector.getChecksumPolicy(), localFile );
+ private boolean applyPolicies( Properties policySettings, Map downloadPolicies, Properties request, File localFile )
+ {
+ Iterator it = downloadPolicies.entrySet().iterator();
+ while ( it.hasNext() )
+ {
+ Map.Entry entry = (Entry) it.next();
+ String key = (String) entry.getKey();
+ DownloadPolicy policy = (DownloadPolicy) entry.getValue();
+ String defaultSetting = policy.getDefaultPolicySetting();
+ String setting = policySettings.getProperty( key, defaultSetting );
+
+ getLogger().debug( "Applying [" + key + "] policy with [" + setting + "]" );
+ if ( !policy.applyPolicy( setting, request, localFile ) )
+ {
+ getLogger().debug( "Didn't pass the [" + key + "] policy." );
+ return false;
+ }
+ }
+ return true;
}
/**
@@ -378,7 +532,7 @@
private boolean matchesPattern( String path, List patterns )
{
- if ( CollectionUtils.isEmpty( patterns ) )
+ if ( isEmpty( patterns ) )
{
return false;
}
@@ -442,20 +596,18 @@
it = proxyConfigs.iterator();
while ( it.hasNext() )
{
- RepositoryProxyConnectorConfiguration proxyConfig = (RepositoryProxyConnectorConfiguration) it.next();
+ ProxyConnectorConfiguration proxyConfig = (ProxyConnectorConfiguration) it.next();
String key = proxyConfig.getSourceRepoId();
// Create connector object.
ProxyConnector connector = new ProxyConnector();
connector.setSourceRepository( getRepository( proxyConfig.getSourceRepoId() ) );
connector.setTargetRepository( getRepository( proxyConfig.getTargetRepoId() ) );
- connector.setSnapshotsPolicy( proxyConfig.getSnapshotsPolicy() );
- connector.setReleasesPolicy( proxyConfig.getReleasesPolicy() );
- connector.setChecksumPolicy( proxyConfig.getChecksumPolicy() );
+ connector.setPolicies( proxyConfig.getPolicies() );
// Copy any blacklist patterns.
List blacklist = new ArrayList();
- if ( !CollectionUtils.isEmpty( proxyConfig.getBlackListPatterns() ) )
+ if ( !isEmpty( proxyConfig.getBlackListPatterns() ) )
{
blacklist.addAll( proxyConfig.getBlackListPatterns() );
}
@@ -463,7 +615,7 @@
// Copy any whitelist patterns.
List whitelist = new ArrayList();
- if ( !CollectionUtils.isEmpty( proxyConfig.getWhiteListPatterns() ) )
+ if ( !isEmpty( proxyConfig.getWhiteListPatterns() ) )
{
whitelist.addAll( proxyConfig.getWhiteListPatterns() );
}
@@ -507,6 +659,16 @@
this.networkProxyMap.put( key, proxy );
}
}
+ }
+
+ private boolean isEmpty( Collection collection )
+ {
+ if ( collection == null )
+ {
+ return true;
+ }
+
+ return collection.isEmpty();
}
private ArchivaRepository getRepository( String repoId )
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java?view=diff&rev=529106&r1=529105&r2=529106
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ProxyConnector.java Sun Apr 15 17:49:27 2007
@@ -22,7 +22,9 @@
import org.apache.maven.archiva.model.ArchivaRepository;
import org.apache.maven.archiva.repository.connector.RepositoryConnector;
+import java.util.Enumeration;
import java.util.List;
+import java.util.Properties;
/**
* This represents a connector for a repository to repository proxy.
@@ -41,14 +43,10 @@
private List whitelist;
- private String snapshotsPolicy;
-
- private String releasesPolicy;
-
- private String checksumPolicy;
-
private String proxyId;
+ private Properties policies;
+
public List getBlacklist()
{
return blacklist;
@@ -89,43 +87,50 @@
this.whitelist = whitelist;
}
- public String getChecksumPolicy()
+ public Properties getPolicies()
{
- return checksumPolicy;
+ return policies;
}
- public void setChecksumPolicy( String failurePolicy )
+ public void setPolicies( Properties policies )
{
- this.checksumPolicy = failurePolicy;
+ this.policies = policies;
}
- public String getReleasesPolicy()
+ public String getProxyId()
{
- return releasesPolicy;
+ return proxyId;
}
- public void setReleasesPolicy( String releasesPolicy )
+ public void setProxyId( String proxyId )
{
- this.releasesPolicy = releasesPolicy;
+ this.proxyId = proxyId;
}
- public String getSnapshotsPolicy()
+ public String toString()
{
- return snapshotsPolicy;
- }
+ StringBuffer sb = new StringBuffer();
- public void setSnapshotsPolicy( String snapshotsPolicy )
- {
- this.snapshotsPolicy = snapshotsPolicy;
- }
+ sb.append( "ProxyConnector[\n" );
+ sb.append( " source:" ).append( this.sourceRepository ).append( "\n" );
+ sb.append( " target:" ).append( this.targetRepository ).append( "\n" );
+ sb.append( " proxyId:" ).append( this.proxyId ).append( "\n" );
- public String getProxyId()
- {
- return proxyId;
+ Enumeration keys = this.policies.propertyNames();
+ while ( keys.hasMoreElements() )
+ {
+ String name = (String) keys.nextElement();
+ sb.append( " policy[" ).append( name ).append( "]:" );
+ sb.append( this.policies.getProperty( name ) ).append( "\n" );
+ }
+
+ sb.append( "]" );
+
+ return sb.toString();
}
- public void setProxyId( String proxyId )
+ public void setPolicy( String policyId, String policySetting )
{
- this.proxyId = proxyId;
+ // TODO Auto-generated method stub
}
}
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java?view=diff&rev=529106&r1=529105&r2=529106
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/RepositoryProxyConnectors.java Sun Apr 15 17:49:27 2007
@@ -23,6 +23,7 @@
import org.apache.maven.archiva.model.ArtifactReference;
import org.apache.maven.archiva.model.ProjectReference;
+import java.io.File;
import java.util.List;
/**
@@ -45,7 +46,7 @@
* @return true if the fetch operation succeeded in obtaining content, false if no content was obtained.
* @throws ProxyException if there was a problem fetching the content from the target repositories.
*/
- public boolean fetchFromProxies( ArchivaRepository repository, ArtifactReference artifact )
+ public File fetchFromProxies( ArchivaRepository repository, ArtifactReference artifact )
throws ProxyException;
/**
@@ -60,7 +61,7 @@
* @return true if the fetch operation succeeded in obtaining content, false if no content was obtained.
* @throws ProxyException if there was a problem fetching the content from the target repositories.
*/
- public boolean fetchFromProxies( ArchivaRepository repository, ProjectReference metadata )
+ public File fetchFromProxies( ArchivaRepository repository, ProjectReference metadata )
throws ProxyException;
/**
Modified: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java?view=diff&rev=529106&r1=529105&r2=529106
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java (original)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java Sun Apr 15 17:49:27 2007
@@ -20,10 +20,32 @@
*/
import org.apache.commons.io.FileUtils;
+import org.apache.maven.archiva.common.utils.PathUtil;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.model.ProjectReference;
+import org.apache.maven.archiva.policies.urlcache.UrlFailureCache;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.wagon.Wagon;
import org.codehaus.plexus.PlexusTestCase;
+import org.easymock.MockControl;
+import java.io.BufferedReader;
import java.io.File;
+import java.io.FileReader;
import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Locale;
/**
* AbstractProxyTestCase
@@ -34,6 +56,144 @@
public class AbstractProxyTestCase
extends PlexusTestCase
{
+ protected static final String ID_LEGACY_PROXIED = "legacy-proxied";
+
+ protected static final String ID_PROXIED1 = "proxied1";
+
+ protected static final String ID_PROXIED2 = "proxied2";
+
+ protected static final String ID_DEFAULT_MANAGED = "default-managed-repository";
+
+ protected static final String ID_LEGACY_MANAGED = "legacy-managed-repository";
+
+ protected static final String REPOPATH_PROXIED_LEGACY = "src/test/repositories/legacy-proxied";
+
+ protected static final String REPOPATH_PROXIED1 = "src/test/repositories/proxied1";
+
+ protected static final String REPOPATH_PROXIED2 = "src/test/repositories/proxied2";
+
+ protected static final String REPOPATH_DEFAULT_MANAGED = "src/test/repositories/managed";
+
+ protected static final String REPOPATH_DEFAULT_MANAGED_TARGET = "target/test-repository/managed";
+
+ protected static final String REPOPATH_LEGACY_MANAGED = "src/test/repositories/legacy-managed";
+
+ protected static final String REPOPATH_LEGACY_MANAGED_TARGET = "target/test-repository/legacy-managed";
+
+ protected MockControl wagonMockControl;
+
+ protected Wagon wagonMock;
+
+ protected RepositoryProxyConnectors proxyHandler;
+
+ protected ArchivaRepository managedDefaultRepository;
+
+ protected File managedDefaultDir;
+
+ protected ArchivaRepository managedLegacyRepository;
+
+ protected File managedLegacyDir;
+
+ protected BidirectionalRepositoryLayoutFactory layoutFactory;
+
+ protected MockConfiguration config;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ layoutFactory = (BidirectionalRepositoryLayoutFactory) lookup( BidirectionalRepositoryLayoutFactory.class
+ .getName() );
+
+ config = (MockConfiguration) lookup( ArchivaConfiguration.class.getName(), "mock" );
+ RepositoryConfiguration repoConfig;
+
+ // Setup source repository (using default layout)
+ File repoLocation = getTestFile( REPOPATH_DEFAULT_MANAGED_TARGET );
+ // faster only to delete this one before copying, the others are done case by case
+ FileUtils.deleteDirectory( new File( repoLocation, "org/apache/maven/test/get-merged-metadata" ) );
+ copyDirectoryStructure( getTestFile( REPOPATH_DEFAULT_MANAGED ), repoLocation );
+
+ managedDefaultRepository = createRepository( ID_DEFAULT_MANAGED, "Default Managed Repository",
+ REPOPATH_DEFAULT_MANAGED_TARGET, "default" );
+
+ managedDefaultDir = new File( managedDefaultRepository.getUrl().getPath() );
+
+ repoConfig = createRepoConfig( managedDefaultRepository );
+
+ config.getConfiguration().addRepository( repoConfig );
+
+ // Setup source repository (using legacy layout)
+ repoLocation = getTestFile( REPOPATH_LEGACY_MANAGED_TARGET );
+ FileUtils.deleteDirectory( repoLocation );
+ copyDirectoryStructure( getTestFile( REPOPATH_LEGACY_MANAGED ), repoLocation );
+
+ managedLegacyRepository = createRepository( ID_LEGACY_MANAGED, "Legacy Managed Repository",
+ REPOPATH_LEGACY_MANAGED_TARGET, "legacy" );
+
+ managedLegacyDir = new File( managedLegacyRepository.getUrl().getPath() );
+
+ repoConfig = createRepoConfig( managedLegacyRepository );
+
+ config.getConfiguration().addRepository( repoConfig );
+
+ // Setup target (proxied to) repository.
+ saveRepositoryConfig( ID_PROXIED1, "Proxied Repository 1", REPOPATH_PROXIED1, "default" );
+
+ // Setup target (proxied to) repository.
+ saveRepositoryConfig( ID_PROXIED2, "Proxied Repository 2", REPOPATH_PROXIED2, "default" );
+
+ // Setup target (proxied to) repository using legacy layout.
+ saveRepositoryConfig( ID_LEGACY_PROXIED, "Proxied Legacy Repository", REPOPATH_PROXIED_LEGACY, "legacy" );
+
+ // Setup the proxy handler.
+ proxyHandler = (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() );
+
+ // Setup the wagon mock.
+ wagonMockControl = MockControl.createNiceControl( Wagon.class );
+ wagonMock = (Wagon) wagonMockControl.getMock();
+ WagonDelegate delegate = (WagonDelegate) lookup( Wagon.ROLE, "test" );
+ delegate.setDelegate( wagonMock );
+
+ System.out.println( "\n.\\ " + getName() + "() \\._________________________________________\n" );
+ }
+
+ protected void saveRepositoryConfig( String id, String name, String path, String layout )
+ {
+ RepositoryConfiguration repoConfig = new RepositoryConfiguration();
+
+ repoConfig.setId( id );
+ repoConfig.setName( name );
+
+ if ( path.indexOf( "://" ) > 0 )
+ {
+ repoConfig.setUrl( path );
+ }
+ else
+ {
+ repoConfig.setUrl( PathUtil.toUrl( path ) );
+ }
+ repoConfig.setLayout( layout );
+
+ config.getConfiguration().addRepository( repoConfig );
+ config.triggerChange( "repository", "" );
+ }
+
+ protected void assertFileEquals( File expectedFile, File actualFile, File sourceFile )
+ throws Exception
+ {
+ assertNotNull( "Expected File should not be null.", expectedFile );
+ assertNotNull( "Actual File should not be null.", actualFile );
+
+ assertTrue( "Check file exists.", actualFile.exists() );
+ assertEquals( "Check file path matches.", expectedFile.getAbsolutePath(), actualFile.getAbsolutePath() );
+
+ String expectedContents = FileUtils.readFileToString( sourceFile, null );
+ String actualContents = FileUtils.readFileToString( actualFile, null );
+ assertEquals( "Check file contents.", expectedContents, actualContents );
+ }
+
/**
* A faster recursive copy that omits .svn directories.
*
@@ -42,7 +202,7 @@
* @throws java.io.IOException if there is a copying problem
* @todo get back into plexus-utils, share with converter module
*/
- private static void copyDirectoryStructure( File sourceDirectory, File destDirectory )
+ protected void copyDirectoryStructure( File sourceDirectory, File destDirectory )
throws IOException
{
if ( !sourceDirectory.exists() )
@@ -78,8 +238,8 @@
{
if ( !destination.exists() && !destination.mkdirs() )
{
- throw new IOException(
- "Could not create destination directory '" + destination.getAbsolutePath() + "'." );
+ throw new IOException( "Could not create destination directory '"
+ + destination.getAbsolutePath() + "'." );
}
copyDirectoryStructure( file, destination );
@@ -90,5 +250,180 @@
throw new IOException( "Unknown file type: " + file.getAbsolutePath() );
}
}
+ }
+
+ protected ArtifactReference createArtifactReference( String layoutType, String path )
+ throws Exception
+ {
+ BidirectionalRepositoryLayout layout = layoutFactory.getLayout( layoutType );
+ ArchivaArtifact artifact = layout.toArtifact( path );
+ ArtifactReference ref = new ArtifactReference();
+ ref.setGroupId( artifact.getGroupId() );
+ ref.setArtifactId( artifact.getArtifactId() );
+ ref.setVersion( artifact.getVersion() );
+ ref.setClassifier( artifact.getClassifier() );
+ ref.setType( artifact.getType() );
+ return ref;
+ }
+
+ protected ProjectReference createMetadataReference( String layoutType, String path )
+ throws Exception
+ {
+ BidirectionalRepositoryLayout layout = layoutFactory.getLayout( layoutType );
+ ProjectReference metadata = layout.toProjectReference( path );
+ return metadata;
+ }
+
+ protected ArchivaRepository createManagedLegacyRepository()
+ {
+ return createRepository( "src/test/repositories/legacy-managed", "testManagedLegacyRepo",
+ "Test Managed (Legacy) Repository", "legacy" );
+ }
+
+ protected ArchivaRepository createProxiedLegacyRepository()
+ {
+ return createRepository( "src/test/repositories/legacy-proxied", "testProxiedLegacyRepo",
+ "Test Proxied (Legacy) Repository", "legacy" );
+ }
+
+ protected RepositoryConfiguration createRepoConfig( ArchivaRepository repo )
+ {
+ return createRepoConfig( repo.getId(), repo.getName(), repo.getUrl().toString(), repo.getLayoutType() );
+ }
+
+ protected RepositoryConfiguration createRepoConfig( String id, String name, String path, String layout )
+ {
+ RepositoryConfiguration repoConfig = new RepositoryConfiguration();
+
+ repoConfig.setId( id );
+ repoConfig.setName( name );
+
+ repoConfig.setUrl( PathUtil.toUrl( path ) );
+ repoConfig.setLayout( layout );
+
+ return repoConfig;
+ }
+
+ protected ArchivaRepository createRepository( String id, String name, String path, String layout )
+ {
+ ArchivaRepository repo = new ArchivaRepository( id, name, PathUtil.toUrl( path ) );
+ repo.getModel().setLayoutName( layout );
+
+ return repo;
+ }
+
+ protected void saveConnector( String sourceRepoId, String targetRepoId, String checksumPolicy,
+ String releasePolicy, String snapshotPolicy, String cacheFailuresPolicy )
+ {
+ ProxyConnectorConfiguration connectorConfig = new ProxyConnectorConfiguration();
+ connectorConfig.setSourceRepoId( sourceRepoId );
+ connectorConfig.setTargetRepoId( targetRepoId );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CHECKSUM, checksumPolicy );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_RELEASES, releasePolicy );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_SNAPSHOTS, snapshotPolicy );
+ connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CACHE_FAILURES, cacheFailuresPolicy );
+
+ config.getConfiguration().addProxyConnector( connectorConfig );
+ config.triggerChange( "proxyConnector", "" );
+ }
+
+ protected UrlFailureCache lookupUrlFailureCache()
+ throws Exception
+ {
+ UrlFailureCache failurlCache = (UrlFailureCache) lookup( UrlFailureCache.class.getName(), "default" );
+ assertNotNull( "URL Failure Cache cannot be null.", failurlCache );
+ return failurlCache;
+ }
+
+ protected void assertNoTempFiles( File expectedFile )
+ {
+ File workingDir = expectedFile.getParentFile();
+ if ( ( workingDir == null ) || !workingDir.isDirectory() )
+ {
+ return;
+ }
+
+ Collection tmpFiles = FileUtils.listFiles( workingDir, new String[] { "tmp" }, false );
+ if ( !tmpFiles.isEmpty() )
+ {
+ StringBuffer emsg = new StringBuffer();
+ emsg.append( "Found Temp Files in dir: " ).append( workingDir.getPath() );
+ Iterator it = tmpFiles.iterator();
+ while ( it.hasNext() )
+ {
+ File tfile = (File) it.next();
+ emsg.append( "\n " ).append( tfile.getName() );
+ }
+ fail( emsg.toString() );
+ }
+ }
+
+ /**
+ * Read the first line from the checksum file, and return it (trimmed).
+ */
+ protected String readChecksumFile( File checksumFile )
+ throws Exception
+ {
+ FileReader freader = null;
+ BufferedReader buf = null;
+
+ try
+ {
+ freader = new FileReader( checksumFile );
+ buf = new BufferedReader( freader );
+ return buf.readLine();
+ }
+ finally
+ {
+ if ( buf != null )
+ {
+ buf.close();
+ }
+
+ if ( freader != null )
+ {
+ freader.close();
+ }
+ }
+ }
+
+ protected void assertChecksums( File expectedFile, String expectedSha1Contents, String expectedMd5Contents )
+ throws Exception
+ {
+ File sha1File = new File( expectedFile.getAbsolutePath() + ".sha1" );
+ File md5File = new File( expectedFile.getAbsolutePath() + ".md5" );
+
+ if ( expectedSha1Contents == null )
+ {
+ assertFalse( "SHA1 File should NOT exist: " + sha1File.getPath(), sha1File.exists() );
+ }
+ else
+ {
+ assertTrue( "SHA1 File should exist: " + sha1File.getPath(), sha1File.exists() );
+ String actualSha1Contents = readChecksumFile( sha1File );
+ assertEquals( "SHA1 File contents: " + sha1File.getPath(), expectedSha1Contents, actualSha1Contents );
+ }
+
+ if ( expectedMd5Contents == null )
+ {
+ assertFalse( "MD5 File should NOT exist: " + md5File.getPath(), md5File.exists() );
+ }
+ else
+ {
+ assertTrue( "MD5 File should exist: " + md5File.getPath(), md5File.exists() );
+ String actualMd5Contents = readChecksumFile( md5File );
+ assertEquals( "MD5 File contents: " + md5File.getPath(), expectedMd5Contents, actualMd5Contents );
+ }
+ }
+
+ protected void assertNotDownloaded( File downloadedFile )
+ {
+ assertNull( "Found file: " + downloadedFile + "; but was expecting a failure", downloadedFile );
+ }
+
+ protected static Date getPastDate()
+ throws ParseException
+ {
+ return new SimpleDateFormat( "yyyy-MM-dd", Locale.US ).parse( "2000-01-01" );
}
}
Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.java?view=auto&rev=529106
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.java Sun Apr 15 17:49:27 2007
@@ -0,0 +1,140 @@
+package org.apache.maven.archiva.proxy;
+
+/*
+ * 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.apache.maven.archiva.common.utils.PathUtil;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.policies.CachedFailuresPolicy;
+import org.apache.maven.archiva.policies.ChecksumPolicy;
+import org.apache.maven.archiva.policies.ReleasesPolicy;
+import org.apache.maven.archiva.policies.SnapshotsPolicy;
+import org.apache.maven.archiva.policies.urlcache.UrlFailureCache;
+import org.apache.maven.wagon.TransferFailedException;
+
+import java.io.File;
+
+/**
+ * CacheFailuresTransferTest
+ *
+ * @author Brett Porter
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class CacheFailuresTransferTest
+ extends AbstractProxyTestCase
+{
+ public void testGetWithCacheFailuresOn()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ expectedFile.delete();
+ assertFalse( expectedFile.exists() );
+
+ // Configure Repository (usually done within archiva.xml configuration)
+ saveRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
+ saveRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://bad.machine.com/repo/", "default" );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied1", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.CACHED );
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied2", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.CACHED );
+
+ wagonMock.getIfNewer( path, new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" ), 0 );
+ TransferFailedException failedException = new TransferFailedException( "transfer failed" );
+ wagonMockControl.setThrowable( failedException );
+
+ wagonMockControl.replay();
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+
+ wagonMockControl.verify();
+ assertNoTempFiles( expectedFile );
+ }
+
+ public void testGetWithCacheFailuresOff()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ expectedFile.delete();
+ assertFalse( expectedFile.exists() );
+
+ // Configure Repository (usually done within archiva.xml configuration)
+ saveRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
+ saveRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://bad.machine.com/repo/", "default" );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied1", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied2", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ wagonMock.getIfNewer( path, new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" ), 0 );
+ TransferFailedException failedException = new TransferFailedException( "transfer failed" );
+ wagonMockControl.setThrowable( failedException );
+
+ wagonMockControl.replay();
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+
+ wagonMockControl.verify();
+ assertNoTempFiles( expectedFile );
+ }
+
+ public void testGetWhenInBothProxiedButFirstCacheFailure()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ expectedFile.delete();
+ assertFalse( expectedFile.exists() );
+
+ String url = PathUtil.toUrl( REPOPATH_PROXIED1 + "/" + path );
+
+ // Intentionally set failure on url in proxied1 (for test)
+ UrlFailureCache failurlCache = lookupUrlFailureCache();
+ failurlCache.cacheFailure( url );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.CACHED );
+ saveConnector( ID_DEFAULT_MANAGED, "proxied2", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.CACHED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ // Validate that file actually came from proxied2 (as intended).
+ File proxied2File = new File( REPOPATH_PROXIED2, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied2File );
+ assertNoTempFiles( expectedFile );
+ }
+}
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/CacheFailuresTransferTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ChecksumTransferTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ChecksumTransferTest.java?view=auto&rev=529106
==============================================================================
--- maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ChecksumTransferTest.java (added)
+++ maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ChecksumTransferTest.java Sun Apr 15 17:49:27 2007
@@ -0,0 +1,459 @@
+package org.apache.maven.archiva.proxy;
+
+/*
+ * 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.apache.commons.io.FileUtils;
+import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.policies.CachedFailuresPolicy;
+import org.apache.maven.archiva.policies.ChecksumPolicy;
+import org.apache.maven.archiva.policies.ReleasesPolicy;
+import org.apache.maven.archiva.policies.SnapshotsPolicy;
+import org.apache.maven.wagon.TransferFailedException;
+
+import java.io.File;
+
+/**
+ * ChecksumTransferTest
+ *
+ * @author Brett Porter
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ChecksumTransferTest
+ extends AbstractProxyTestCase
+{
+ public void testGetChecksumBothCorrect()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-right/1.0/get-checksum-both-right-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "066d76e459f7782c312c31e8a11b3c0f1e3e43a7 *get-checksum-both-right-1.0.jar",
+ "e58f30c6a150a2e843552438d18e15cb *get-checksum-both-right-1.0.jar" );
+ }
+
+ public void testGetChecksumCorrectSha1NoMd5()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "748a3a013bf5eacf2bbb40a2ac7d37889b728837 *get-checksum-sha1-only-1.0.jar", null );
+ }
+
+ public void testGetChecksumNoSha1CorrectMd5()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, null, "f3af5201bf8da801da37db8842846e1c *get-checksum-md5-only-1.0.jar" );
+ }
+
+ public void testGetWithNoChecksumsUsingIgnoredSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, null, null );
+ }
+
+ public void testGetChecksumBadSha1BadMd5IgnoredSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "invalid checksum file", "invalid checksum file" );
+ }
+
+ public void testGetChecksumBadSha1BadMd5FailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertChecksums( expectedFile, null, null );
+ }
+
+ public void testGetChecksumBadSha1BadMd5FixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-both-bad/1.0/get-checksum-both-bad-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "4ec20a12dc91557330bd0b39d1805be5e329ae56 get-checksum-both-bad-1.0.jar",
+ "a292491a35925465e693a44809a078b5 get-checksum-both-bad-1.0.jar" );
+ }
+
+ public void testGetChecksumCorrectSha1BadMd5UsingFailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertChecksums( expectedFile, null, null );
+ }
+
+ public void testGetChecksumNoSha1CorrectMd5UsingFailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ // This is a success situation. No SHA1 with a Good MD5.
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, null, "f3af5201bf8da801da37db8842846e1c *get-checksum-md5-only-1.0.jar" );
+ }
+
+ public void testGetWithNoChecksumsUsingFailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertChecksums( expectedFile, null, null );
+ }
+
+ public void testGetChecksumCorrectSha1BadMd5UsingIgnoredSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "3dd1a3a57b807d3ef3fbc6013d926c891cbb8670 *get-checksum-sha1-bad-md5-1.0.jar",
+ "invalid checksum file" );
+ }
+
+ public void testGetChecksumCorrectSha1BadMd5UsingFixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-bad-md5/1.0/get-checksum-sha1-bad-md5-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "3dd1a3a57b807d3ef3fbc6013d926c891cbb8670 *get-checksum-sha1-bad-md5-1.0.jar",
+ "c35f3b76268b73a4ba617f6f275c49ab get-checksum-sha1-bad-md5-1.0.jar" );
+ }
+
+ public void testGetChecksumNoSha1CorrectMd5UsingFixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-md5-only/1.0/get-checksum-md5-only-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "71f7dc3f72053a3f2d9fdd6fef9db055ef957ffb get-checksum-md5-only-1.0.jar",
+ "f3af5201bf8da801da37db8842846e1c *get-checksum-md5-only-1.0.jar" );
+ }
+
+ public void testGetWithNoChecksumsUsingFixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "1f12821c5e43e1a0b76b9564a6ddb0548ccb9486 get-default-layout-1.0.jar",
+ "3f7341545f21226b6f49a3c2704cb9be get-default-layout-1.0.jar" );
+ }
+
+ public void testGetChecksumTransferFailed()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-checksum-sha1-only/1.0/get-checksum-sha1-only-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ FileUtils.deleteDirectory( expectedFile.getParentFile() );
+ assertFalse( expectedFile.getParentFile().exists() );
+ assertFalse( expectedFile.exists() );
+
+ saveRepositoryConfig( "badproxied", "Bad Proxied", "test://bad.machine.com/repo/", "default" );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "badproxied", ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ wagonMock.getIfNewer( path, new File( expectedFile.getAbsolutePath() + ".tmp" ), 0 );
+ wagonMockControl.setReturnValue( true );
+ wagonMock.getIfNewer( path + ".sha1", new File( expectedFile.getAbsolutePath() + ".sha1.tmp" ), 0 );
+ wagonMockControl.setReturnValue( true );
+ wagonMock.getIfNewer( path + ".md5", new File( expectedFile.getAbsolutePath() + ".md5.tmp" ), 0 );
+ wagonMockControl.setThrowable( new TransferFailedException( "transfer failed" ) );
+ wagonMockControl.replay();
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ wagonMockControl.verify();
+
+ // Do what the mock doesn't do.
+ String proxyPath = new File( REPOPATH_PROXIED1, path ).getAbsolutePath();
+ String localPath = new File( managedDefaultDir, path ).getAbsolutePath();
+ FileUtils.copyFile( new File( proxyPath ), new File( localPath ) );
+ FileUtils.copyFile( new File( proxyPath + ".sha1" ), new File( localPath + ".sha1" ) );
+
+ // Test results.
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "748a3a013bf5eacf2bbb40a2ac7d37889b728837 *get-checksum-sha1-only-1.0.jar", null );
+ }
+
+ public void testGetAlwaysBadChecksumPresentLocallyAbsentRemoteUsingIgnoredSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ assertTrue( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.IGNORED, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ // There are no hashcodes on the proxy side to download, hence the local ones should remain invalid.
+ assertChecksums( expectedFile, "invalid checksum file", "invalid checksum file" );
+ }
+
+ public void testGetAlwaysBadChecksumPresentLocallyAbsentRemoteUsingFailSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ assertTrue( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FAIL, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ assertNotDownloaded( downloadedFile );
+ assertNoTempFiles( expectedFile );
+ // There are no hashcodes on the proxy side to download.
+ // The FAIL policy will delete the checksums as bad.
+ assertChecksums( expectedFile, null, null );
+ }
+
+ public void testGetAlwaysBadChecksumPresentLocallyAbsentRemoteUsingFixSetting()
+ throws Exception
+ {
+ String path = "org/apache/maven/test/get-bad-local-checksum/1.0/get-bad-local-checksum-1.0.jar";
+ File expectedFile = new File( managedDefaultDir, path );
+ ArtifactReference artifact = createArtifactReference( "default", path );
+
+ assertTrue( expectedFile.exists() );
+
+ // Configure Connector (usually done within archiva.xml configuration)
+ saveConnector( ID_DEFAULT_MANAGED, "proxied1", ChecksumPolicy.FIX, ReleasesPolicy.IGNORED,
+ SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
+
+ File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
+
+ File proxied1File = new File( REPOPATH_PROXIED1, path );
+ assertFileEquals( expectedFile, downloadedFile, proxied1File );
+ assertNoTempFiles( expectedFile );
+ assertChecksums( expectedFile, "96a08dc80a108cba8efd3b20aec91b32a0b2cbd4 get-bad-local-checksum-1.0.jar",
+ "46fdd6ca55bf1d7a7eb0c858f41e0ccd get-bad-local-checksum-1.0.jar" );
+ }
+
+}
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ChecksumTransferTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ChecksumTransferTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/branches/archiva-jpox-database-refactor/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/ChecksumTransferTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain