[MNG-6732] DefaultArtifactDescriptorReader.loadPom to check IGNORE_MISSING policy upon ArtifactTransferException

This closes #277
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
index 586c83e..0e9a574 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
@@ -68,6 +68,7 @@
 import org.eclipse.aether.spi.locator.Service;
 import org.eclipse.aether.spi.locator.ServiceLocator;
 import org.eclipse.aether.transfer.ArtifactNotFoundException;
+import org.eclipse.aether.transfer.ArtifactTransferException;
 
 /**
  * @author Benjamin Bentmann
@@ -243,9 +244,10 @@
             }
             catch ( ArtifactResolutionException e )
             {
-                if ( e.getCause() instanceof ArtifactNotFoundException )
+                Throwable cause = e.getCause();
+                if ( cause instanceof ArtifactTransferException )
                 {
-                    missingDescriptor( session, trace, a, (Exception) e.getCause() );
+                    missingDescriptor( session, trace, a, (Exception) cause );
                     if ( ( getPolicy( session, a, request ) & ArtifactDescriptorPolicy.IGNORE_MISSING ) != 0 )
                     {
                         return null;
diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
index e873138..83196d2 100644
--- a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
+++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
@@ -27,6 +27,7 @@
 import org.eclipse.aether.artifact.DefaultArtifact;
 import org.eclipse.aether.impl.ArtifactDescriptorReader;
 import org.eclipse.aether.impl.RepositoryEventDispatcher;
+import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.resolution.ArtifactDescriptorRequest;
 import org.mockito.ArgumentCaptor;
 
@@ -34,18 +35,31 @@
     extends AbstractRepositoryTestCase
 {
 
+    private DefaultArtifactDescriptorReader reader;
+
+    private RepositoryEventDispatcher mockEventDispatcher;
+
+    private ArgumentCaptor<RepositoryEvent> eventCaptor;
+
+    @Override
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        reader = (DefaultArtifactDescriptorReader) lookup( ArtifactDescriptorReader.class );
+
+        mockEventDispatcher = mock( RepositoryEventDispatcher.class );
+
+        eventCaptor = ArgumentCaptor.forClass( RepositoryEvent.class );
+
+        reader.setRepositoryEventDispatcher( mockEventDispatcher );
+    }
+
     public void testMng5459()
         throws Exception
     {
         // prepare
-        DefaultArtifactDescriptorReader reader = (DefaultArtifactDescriptorReader) lookup( ArtifactDescriptorReader.class );
-
-        RepositoryEventDispatcher eventDispatcher = mock( RepositoryEventDispatcher.class );
-
-        ArgumentCaptor<RepositoryEvent> event = ArgumentCaptor.forClass( RepositoryEvent.class );
-
-        reader.setRepositoryEventDispatcher( eventDispatcher );
-
         ArtifactDescriptorRequest request = new ArtifactDescriptorRequest();
 
         request.addRepository( newTestRepository() );
@@ -56,11 +70,11 @@
         reader.readArtifactDescriptor( session, request );
 
         // verify
-        verify( eventDispatcher ).dispatch( event.capture() );
+        verify( mockEventDispatcher ).dispatch( eventCaptor.capture() );
 
         boolean missingArtifactDescriptor = false;
 
-        for( RepositoryEvent evt : event.getAllValues() )
+        for( RepositoryEvent evt : eventCaptor.getAllValues() )
         {
             if ( EventType.ARTIFACT_DESCRIPTOR_MISSING.equals( evt.getType() ) )
             {
@@ -74,4 +88,41 @@
             fail( "Expected missing artifact descriptor for org.apache.maven.its:dep-mng5459:pom:0.4.0-20130404.090532-2" );
         }
     }
+
+    public void testNonexistentRepository()
+        throws Exception
+    {
+        // prepare
+        ArtifactDescriptorRequest request = new ArtifactDescriptorRequest();
+
+        // [MNG-6732] DefaultArtifactDescriptorReader.loadPom to check IGNORE_MISSING policy upon ArtifactTransferException
+        RemoteRepository nonexistentRepository = new RemoteRepository.Builder( "repo", "default", "http://nonexistent.domain" ).build();
+
+        request.addRepository( nonexistentRepository );
+
+        request.setArtifact( new DefaultArtifact( "org.apache.maven.its", "dep-mng6732", "jar", "0.0.1" ) );
+
+        // execute
+        reader.readArtifactDescriptor( session, request );
+
+        // verify
+        verify(mockEventDispatcher).dispatch( eventCaptor.capture() );
+
+        boolean artifactTransferExceptionFound = false;
+
+        for( RepositoryEvent evt : eventCaptor.getAllValues() )
+        {
+            if ( EventType.ARTIFACT_DESCRIPTOR_MISSING.equals( evt.getType() ) )
+            {
+                assertEquals( "Could not transfer artifact org.apache.maven.its:dep-mng6732:pom:0.0.1 from/to repo (" + nonexistentRepository.getUrl()
+                    + "): Cannot access http://nonexistent.domain with type default using the available connector factories: BasicRepositoryConnectorFactory", evt.getException().getMessage() );
+                artifactTransferExceptionFound = true;
+            }
+        }
+
+        if( !artifactTransferExceptionFound )
+        {
+            fail( "Expected missing artifact descriptor for org.apache.maven.its:dep-mng6732:pom:0.0.1" );
+        }
+    }
 }