[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" );
+ }
+ }
}