Author: epunzalan Date: Wed Feb 8 18:26:30 2006 New Revision: 376149 URL: http://svn.apache.org/viewcvs?rev=376149&view=rev Log: PR: MRM-43
added more unit test coverage Added: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt.md5 maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt.sha1 maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.jar (with props) maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.pom maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/not-standard/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/not-standard/repository/ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/not-standard/repository/file.txt Modified: maven/repository-manager/trunk/maven-repository-proxy/pom.xml maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyManager.java maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/DefaultProxyManagerTest.java Modified: maven/repository-manager/trunk/maven-repository-proxy/pom.xml URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/pom.xml?rev=376149&r1=376148&r2=376149&view=diff ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/pom.xml (original) +++ maven/repository-manager/trunk/maven-repository-proxy/pom.xml Wed Feb 8 18:26:30 2006 @@ -37,5 +37,12 @@ <groupId>org.apache.maven</groupId> <artifactId>maven-artifact-manager</artifactId> </dependency> + <!-- below should be in extensions --> + <dependency> + <groupId>org.apache.maven.wagon</groupId> + <artifactId>wagon-file</artifactId> + <version>1.0-alpha-7-SNAPSHOT</version> + <scope>test</scope> + </dependency> </dependencies> </project> Modified: maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyManager.java URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyManager.java?rev=376149&r1=376148&r2=376149&view=diff ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyManager.java (original) +++ maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyManager.java Wed Feb 8 18:26:30 2006 @@ -22,8 +22,6 @@ import org.apache.maven.artifact.manager.WagonManager; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.repository.ArtifactUtils; -import org.apache.maven.repository.digest.DefaultDigester; -import org.apache.maven.repository.digest.Digester; import org.apache.maven.repository.proxy.configuration.ProxyConfiguration; import org.apache.maven.repository.proxy.repository.ProxyRepository; import org.apache.maven.wagon.ConnectionException; @@ -35,9 +33,13 @@ import org.apache.maven.wagon.authorization.AuthorizationException; import org.apache.maven.wagon.observers.ChecksumObserver; import org.codehaus.plexus.logging.AbstractLogEnabled; +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.IOUtil; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.security.NoSuchAlgorithmException; import java.util.HashMap; import java.util.Iterator; @@ -134,6 +136,7 @@ ArtifactRepository repoCache = config.getRepositoryCache(); File artifactFile = new File( repoCache.getBasedir(), repoCache.pathOf( artifact ) ); + artifact.setFile( artifactFile ); if ( !artifactFile.exists() ) { @@ -207,7 +210,6 @@ if ( connected ) { File temp = new File( target.getAbsolutePath() + ".tmp" ); - temp.deleteOnExit(); int tries = 0; boolean success = false; @@ -216,11 +218,12 @@ { tries++; + getLogger().info( "trying " + path + " from " + repository.getId() ); + wagon.get( path, temp ); if ( useChecksum ) { - releaseChecksums( wagon, checksums ); success = doChecksumCheck( checksums, path, wagon ); } else @@ -235,6 +238,24 @@ } disconnectWagon( wagon ); + if ( !temp.renameTo( target ) ) + { + getLogger().warn( "Unable to rename tmp file to its final name... resorting to copy command." ); + + try + { + FileUtils.copyFile( temp, target ); + } + catch ( IOException e ) + { + throw new ProxyException( "Cannot copy tmp file to its final location", e ); + } + finally + { + temp.delete(); + } + } + return target; } //try next repository @@ -253,8 +274,8 @@ } catch ( UnsupportedProtocolException e ) { - getLogger().info( "Skipping repository " + repository.getUrl() + ": no wagonManager configured for protocol " + - repository.getProtocol() ); + getLogger().info( "Skipping repository " + repository.getUrl() + ": no wagonManager configured " + + "for protocol " + repository.getProtocol() ); } finally { @@ -351,45 +372,26 @@ */ private boolean doChecksumCheck( Map checksumMap, String path, Wagon wagon ) { + releaseChecksums( wagon, checksumMap ); for ( Iterator checksums = checksumMap.keySet().iterator(); checksums.hasNext(); ) { String checksumExt = (String) checksums.next(); ChecksumObserver checksum = (ChecksumObserver) checksumMap.get( checksumExt ); - String remotePath = path + "." + checksumExt; - File checksumFile = new File( config.getRepositoryCache().getBasedir(), remotePath ); + String checksumPath = path + "." + checksumExt; + File checksumFile = new File( config.getRepositoryCache().getBasedir(), checksumPath ); try { File tempChecksumFile = new File( checksumFile.getAbsolutePath() + "." + checksumExt ); - wagon.get( remotePath + "." + checksumExt, tempChecksumFile ); + wagon.get( checksumPath, tempChecksumFile ); - String algorithm; - if ( "md5".equals( checksumExt ) ) - { - algorithm = "MD5"; - } - else - { - algorithm = "SHA-1"; - } - - Digester digester = new DefaultDigester(); - try - { - return digester.verifyChecksum( tempChecksumFile, checksum.getActualChecksum(), algorithm ); - } - catch ( NoSuchAlgorithmException e ) - { - getLogger().info( "Failed to initialize checksum: " + algorithm + "\n " + e.getMessage() ); - return false; - } - catch ( IOException e ) + String remoteChecksum = readTextFile( tempChecksumFile ).trim(); + if ( remoteChecksum.indexOf( ' ' ) > 0 ) { - getLogger().info( "Failed to verify checksum: " + algorithm + "\n " + e.getMessage() ); - return false; + remoteChecksum = remoteChecksum.substring( 0, remoteChecksum.indexOf( ' ' ) ); } - + return remoteChecksum.toUpperCase().equals( checksum.getActualChecksum().toUpperCase() ); } catch ( ChecksumFailedException e ) { @@ -397,19 +399,24 @@ } catch ( TransferFailedException e ) { - getLogger().warn( "An error occurred during the download of " + remotePath + ": " + e.getMessage() ); + getLogger().warn( "An error occurred during the download of " + checksumPath + ": " + e.getMessage() ); // do nothing try the next checksum } catch ( ResourceDoesNotExistException e ) { - getLogger().warn( "An error occurred during the download of " + remotePath + ": " + e.getMessage() ); + getLogger().warn( "An error occurred during the download of " + checksumPath + ": " + e.getMessage() ); // do nothing try the next checksum } catch ( AuthorizationException e ) { - getLogger().warn( "An error occurred during the download of " + remotePath + ": " + e.getMessage() ); + getLogger().warn( "An error occurred during the download of " + checksumPath + ": " + e.getMessage() ); // do nothing try the next checksum } + catch ( IOException e ) + { + getLogger().info( "An error occurred while reading the temporary checksum file." ); + return false; + } } getLogger().info( "Skipping checksum validation for " + path + ": No remote checksums available." ); @@ -424,6 +431,34 @@ { throw new ProxyException( "No proxy configuration defined." ); } + } + + private String readTextFile( File file ) + throws IOException + { + String text = ""; + + InputStream fis = new FileInputStream( file ); + try + { + byte[] buffer = new byte[ 64 ]; + int numRead; + do + { + numRead = fis.read( buffer ); + if ( numRead > 0 ) + { + text += new String( buffer ); + } + } + while ( numRead != -1 ); + } + finally + { + IOUtil.close( fis ); + } + + return text; } /** Modified: maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/DefaultProxyManagerTest.java URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/DefaultProxyManagerTest.java?rev=376149&r1=376148&r2=376149&view=diff ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/DefaultProxyManagerTest.java (original) +++ maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/DefaultProxyManagerTest.java Wed Feb 8 18:26:30 2006 @@ -3,7 +3,12 @@ import org.codehaus.plexus.PlexusTestCase; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.apache.maven.repository.proxy.configuration.ProxyConfiguration; +import org.apache.maven.repository.proxy.repository.ProxyRepository; import org.apache.maven.wagon.ResourceDoesNotExistException; +import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; +import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; + +import java.io.File; /* * Copyright 2005-2006 The Apache Software Foundation. @@ -55,25 +60,27 @@ { fail( "Expected Exception not thrown." ); } - - try - { - proxy.getRemoteFile( "/invalid" ); - fail( "Expected empty configuration error." ); - } - catch ( ProxyException e ) - { - assertEquals( "Expected Exception not thrown.", "No proxy configuration defined.", e.getMessage() ); - } - catch ( ResourceDoesNotExistException e ) - { - fail( "Expected Exception not thrown." ); - } } public void testCache() + throws Exception { - + File file = proxy.get( "/commons-logging/commons-logging/1.0/commons-logging-1.0.jar" ); + assertTrue( "File must be downloaded.", file.exists() ); + assertTrue( "Downloaded file should be present in the cache.", + file.getAbsolutePath().startsWith( proxy.getConfiguration().getRepositoryCachePath() ) ); + + file = proxy.get( "/commons-logging/commons-logging/1.0/commons-logging-1.0.jar" ); + + file = proxy.get( "/not-standard/repository/file.txt" ); + assertTrue( "File must be downloaded.", file.exists() ); + assertTrue( "Downloaded file should be present in the cache.", + file.getAbsolutePath().startsWith( proxy.getConfiguration().getRepositoryCachePath() ) ); + + file = proxy.get( "/checksumed-md5/repository/file.txt" ); + assertTrue( "File must be downloaded.", file.exists() ); + assertTrue( "Downloaded file should be present in the cache.", + file.getAbsolutePath().startsWith( proxy.getConfiguration().getRepositoryCachePath() ) ); } protected void tearDown() @@ -90,6 +97,14 @@ ProxyConfiguration config = (ProxyConfiguration) container.lookup( ProxyConfiguration.ROLE ); config.setRepositoryCachePath( "target/proxy-cache" ); + + ArtifactRepositoryLayout defLayout = new DefaultRepositoryLayout(); + + File repo1File = new File( "src/test/remote-repo1" ); + + ProxyRepository repo1 = new ProxyRepository( "test-repo", "file://" + repo1File.getAbsolutePath(), defLayout ); + + config.addRepository( repo1 ); return config; } Added: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt?rev=376149&view=auto ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt (added) +++ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt Wed Feb 8 18:26:30 2006 @@ -0,0 +1 @@ +test file only \ No newline at end of file Added: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt.md5 URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt.md5?rev=376149&view=auto ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt.md5 (added) +++ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-md5/repository/file.txt.md5 Wed Feb 8 18:26:30 2006 @@ -0,0 +1 @@ +a473f827aa9d5df4e84c802e054c50f7 \ No newline at end of file Added: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt?rev=376149&view=auto ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt (added) +++ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt Wed Feb 8 18:26:30 2006 @@ -0,0 +1 @@ +test file only \ No newline at end of file Added: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt.sha1 URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt.sha1?rev=376149&view=auto ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt.sha1 (added) +++ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/checksumed-sha1/repository/file.txt.sha1 Wed Feb 8 18:26:30 2006 @@ -0,0 +1 @@ +ABCDE \ No newline at end of file Added: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.jar URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.jar?rev=376149&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.pom URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.pom?rev=376149&view=auto ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.pom (added) +++ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/commons-logging/commons-logging/1.0/commons-logging-1.0.pom Wed Feb 8 18:26:30 2006 @@ -0,0 +1,6 @@ +<project> + <modelVersion>4.0.0</modelVersion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + <version>1.0</version> +</project> Added: maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/not-standard/repository/file.txt URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/not-standard/repository/file.txt?rev=376149&view=auto ============================================================================== --- maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/not-standard/repository/file.txt (added) +++ maven/repository-manager/trunk/maven-repository-proxy/src/test/remote-repo1/not-standard/repository/file.txt Wed Feb 8 18:26:30 2006 @@ -0,0 +1 @@ +test file only \ No newline at end of file