You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2006/08/13 04:51:40 UTC

svn commit: r431137 - in /maven/repository-manager/trunk/maven-repository-proxy/src: main/java/org/apache/maven/repository/proxy/DefaultProxyRequestHandler.java test/java/org/apache/maven/repository/proxy/ProxyRequestHandlerTest.java

Author: brett
Date: Sat Aug 12 19:51:39 2006
New Revision: 431137

URL: http://svn.apache.org/viewvc?rev=431137&view=rev
Log:
[MRM-138] add more proxy tests, and fix a bug where a cached failure would not trigger a hard failure on a repository configured to

Modified:
    maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyRequestHandler.java
    maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/ProxyRequestHandlerTest.java

Modified: maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyRequestHandler.java
URL: http://svn.apache.org/viewvc/maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyRequestHandler.java?rev=431137&r1=431136&r2=431137&view=diff
==============================================================================
--- maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyRequestHandler.java (original)
+++ maven/repository-manager/trunk/maven-repository-proxy/src/main/java/org/apache/maven/repository/proxy/DefaultProxyRequestHandler.java Sat Aug 12 19:51:39 2006
@@ -110,7 +110,7 @@
 
             if ( repository.isCachedFailure( path ) )
             {
-                getLogger().debug( "Skipping repository " + repository.getName() + " for a cached path failure." );
+                processRepositoryFailure( repository, "Cached failure found" );
             }
             else
             {
@@ -249,8 +249,8 @@
 
                     if ( tries > 1 && !success )
                     {
-                        //noinspection ThrowCaughtLocally
-                        throw new TransferFailedException( "Checksum failures occurred while downloading " + path );
+                        processRepositoryFailure( repository, "Checksum failures occurred while downloading " + path );
+                        return;
                     }
 
                     // temp won't exist if we called getIfNewer and it was older, but its still a successful return
@@ -265,13 +265,11 @@
         }
         catch ( TransferFailedException e )
         {
-            String message = "Skipping repository " + repository.getName() + ": " + e.getMessage();
-            processRepositoryFailure( repository, message, e );
+            processRepositoryFailure( repository, e );
         }
         catch ( AuthorizationException e )
         {
-            String message = "Skipping repository " + repository.getName() + ": " + e.getMessage();
-            processRepositoryFailure( repository, message, e );
+            processRepositoryFailure( repository, e );
         }
         catch ( ResourceDoesNotExistException e )
         {
@@ -483,26 +481,33 @@
         }
     }
 
-    /**
-     * Queries the configuration on how to handle a repository download failure
-     *
-     * @param repository the repository object where the failure occurred
-     * @param message    the message/reason for the failure
-     * @param t          the cause for the exception
-     * @throws ProxyException if hard failure is enabled on the repository causing the failure
-     */
-    private void processRepositoryFailure( ProxiedArtifactRepository repository, String message, Throwable t )
+    private void processRepositoryFailure( ProxiedArtifactRepository repository, Throwable t )
+        throws ProxyException
+    {
+        if ( repository.isHardFail() )
+        {
+            throw new ProxyException(
+                "An error occurred in hardfailing repository " + repository.getName() + "...\n    " + t.getMessage(),
+                t );
+        }
+        else
+        {
+            getLogger().warn( "Skipping repository " + repository.getName() + ": " + t.getMessage() );
+            getLogger().debug( "Cause", t );
+        }
+    }
+
+    private void processRepositoryFailure( ProxiedArtifactRepository repository, String message )
         throws ProxyException
     {
         if ( repository.isHardFail() )
         {
             throw new ProxyException(
-                "An error occurred in hardfailing repository " + repository.getName() + "...\n    " + message, t );
+                "An error occurred in hardfailing repository " + repository.getName() + "...\n    " + message );
         }
         else
         {
-            getLogger().warn( message );
-            getLogger().debug( message, t );
+            getLogger().warn( "Skipping repository " + repository.getName() + ": " + message );
         }
     }
 

Modified: maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/ProxyRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/ProxyRequestHandlerTest.java?rev=431137&r1=431136&r2=431137&view=diff
==============================================================================
--- maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/ProxyRequestHandlerTest.java (original)
+++ maven/repository-manager/trunk/maven-repository-proxy/src/test/java/org/apache/maven/repository/proxy/ProxyRequestHandlerTest.java Sat Aug 12 19:51:39 2006
@@ -36,8 +36,6 @@
 /**
  * @author Brett Porter
  * @todo! tests to do vvv
- * @todo test when failure is cached
- * @todo test when failure is cached and repo is hard fail
  * @todo test when failure should be cached but caching is disabled
  * @todo test snapshots - general
  * @todo test snapshots - newer version on repo2 is pulled down
@@ -58,6 +56,7 @@
  * @todo test remote checksum present and correct
  * @todo test remote checksum present and incorrect
  * @todo test remote checksum transfer failed
+ * @todo test when failure is cached but cache period is over (and check failure is cleared)
  */
 public class ProxyRequestHandlerTest
     extends PlexusTestCase
@@ -320,6 +319,64 @@
             wagonMockControl.verify();
 
             assertEquals( "Check cause", failedException, e.getCause() );
+            assertTrue( "Check failure", proxiedArtifactRepository.isCachedFailure( path ) );
+        }
+    }
+
+    public void testGetInSecondProxiedRepoFirstFailsFromCache()
+        throws ResourceDoesNotExistException, ProxyException, IOException, TransferFailedException,
+        AuthorizationException
+    {
+        // fail from the cache, even though it is in the first repo now
+
+        String path = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
+        File expectedFile = new File( defaultManagedRepository.getBasedir(), path );
+
+        assertFalse( expectedFile.exists() );
+
+        proxiedRepositories.clear();
+        ProxiedArtifactRepository proxiedArtifactRepository = createProxiedRepository( proxiedRepository1 );
+        proxiedArtifactRepository.addFailure( path );
+        proxiedRepositories.add( proxiedArtifactRepository );
+        proxiedRepositories.add( createProxiedRepository( proxiedRepository2 ) );
+        File file = requestHandler.get( path, proxiedRepositories, defaultManagedRepository );
+
+        assertEquals( "Check file matches", expectedFile, file );
+        assertTrue( "Check file created", file.exists() );
+
+        File proxiedFile = new File( proxiedRepository2.getBasedir(), path );
+        String expectedContents = FileUtils.fileRead( proxiedFile );
+        assertEquals( "Check file contents", expectedContents, FileUtils.fileRead( file ) );
+
+        proxiedFile = new File( proxiedRepository1.getBasedir(), path );
+        String unexpectedContents = FileUtils.fileRead( proxiedFile );
+        assertFalse( "Check file contents", unexpectedContents.equals( FileUtils.fileRead( file ) ) );
+    }
+
+    public void testGetInSecondProxiedRepoFirstHardFailsFromCache()
+        throws ResourceDoesNotExistException, ProxyException, IOException, TransferFailedException,
+        AuthorizationException
+    {
+        // fail from the cache, even though it is in the first repo now
+
+        String path = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
+        File expectedFile = new File( defaultManagedRepository.getBasedir(), path );
+
+        assertFalse( expectedFile.exists() );
+
+        proxiedRepositories.clear();
+        ProxiedArtifactRepository proxiedArtifactRepository = createHardFailProxiedRepository( proxiedRepository1 );
+        proxiedArtifactRepository.addFailure( path );
+        proxiedRepositories.add( proxiedArtifactRepository );
+        proxiedRepositories.add( createProxiedRepository( proxiedRepository2 ) );
+        try
+        {
+            File file = requestHandler.get( path, proxiedRepositories, defaultManagedRepository );
+            fail( "Found file: " + file + "; but was expecting a failure" );
+        }
+        catch ( ProxyException e )
+        {
+            // expect a failure
             assertTrue( "Check failure", proxiedArtifactRepository.isCachedFailure( path ) );
         }
     }