You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ep...@apache.org on 2006/02/09 03:26:33 UTC

svn commit: r376149 - in /maven/repository-manager/trunk/maven-repository-proxy: ./ src/main/java/org/apache/maven/repository/proxy/ src/test/java/org/apache/maven/repository/proxy/ src/test/remote-repo1/ src/test/remote-repo1/checksumed-md5/ src/test/...

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