001package org.eclipse.aether.internal.impl;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 * 
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 * 
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import static org.junit.Assert.*;
023
024import java.io.File;
025import java.io.IOException;
026import java.util.Arrays;
027import java.util.Collection;
028import java.util.HashMap;
029import java.util.List;
030import java.util.Map;
031
032import org.eclipse.aether.DefaultRepositorySystemSession;
033import org.eclipse.aether.RepositoryEvent;
034import org.eclipse.aether.RepositorySystemSession;
035import org.eclipse.aether.RepositoryEvent.EventType;
036import org.eclipse.aether.artifact.Artifact;
037import org.eclipse.aether.artifact.ArtifactProperties;
038import org.eclipse.aether.artifact.DefaultArtifact;
039import org.eclipse.aether.impl.UpdateCheckManager;
040import org.eclipse.aether.impl.VersionResolver;
041import org.eclipse.aether.internal.test.util.TestFileProcessor;
042import org.eclipse.aether.internal.test.util.TestFileUtils;
043import org.eclipse.aether.internal.test.util.TestLocalRepositoryManager;
044import org.eclipse.aether.internal.test.util.TestUtils;
045import org.eclipse.aether.metadata.Metadata;
046import org.eclipse.aether.repository.LocalArtifactRegistration;
047import org.eclipse.aether.repository.LocalArtifactRequest;
048import org.eclipse.aether.repository.LocalArtifactResult;
049import org.eclipse.aether.repository.LocalMetadataRegistration;
050import org.eclipse.aether.repository.LocalMetadataRequest;
051import org.eclipse.aether.repository.LocalMetadataResult;
052import org.eclipse.aether.repository.LocalRepository;
053import org.eclipse.aether.repository.LocalRepositoryManager;
054import org.eclipse.aether.repository.RemoteRepository;
055import org.eclipse.aether.repository.RepositoryPolicy;
056import org.eclipse.aether.repository.WorkspaceReader;
057import org.eclipse.aether.repository.WorkspaceRepository;
058import org.eclipse.aether.resolution.ArtifactRequest;
059import org.eclipse.aether.resolution.ArtifactResolutionException;
060import org.eclipse.aether.resolution.ArtifactResult;
061import org.eclipse.aether.resolution.VersionRequest;
062import org.eclipse.aether.resolution.VersionResolutionException;
063import org.eclipse.aether.resolution.VersionResult;
064import org.eclipse.aether.spi.connector.ArtifactDownload;
065import org.eclipse.aether.spi.connector.MetadataDownload;
066import org.eclipse.aether.transfer.ArtifactNotFoundException;
067import org.eclipse.aether.transfer.ArtifactTransferException;
068import org.eclipse.aether.util.repository.SimpleResolutionErrorPolicy;
069import org.junit.After;
070import org.junit.Before;
071import org.junit.Test;
072
073/**
074 */
075public class DefaultArtifactResolverTest
076{
077    private DefaultArtifactResolver resolver;
078
079    private DefaultRepositorySystemSession session;
080
081    private TestLocalRepositoryManager lrm;
082
083    private StubRepositoryConnectorProvider repositoryConnectorProvider;
084
085    private Artifact artifact;
086
087    private RecordingRepositoryConnector connector;
088
089    @Before
090    public void setup()
091    {
092        UpdateCheckManager updateCheckManager = new StaticUpdateCheckManager( true );
093        repositoryConnectorProvider = new StubRepositoryConnectorProvider();
094        VersionResolver versionResolver = new StubVersionResolver();
095        session = TestUtils.newSession();
096        lrm = (TestLocalRepositoryManager) session.getLocalRepositoryManager();
097        resolver = new DefaultArtifactResolver();
098        resolver.setFileProcessor( new TestFileProcessor() );
099        resolver.setRepositoryEventDispatcher( new StubRepositoryEventDispatcher() );
100        resolver.setVersionResolver( versionResolver );
101        resolver.setUpdateCheckManager( updateCheckManager );
102        resolver.setRepositoryConnectorProvider( repositoryConnectorProvider );
103        resolver.setRemoteRepositoryManager( new StubRemoteRepositoryManager() );
104        resolver.setSyncContextFactory( new StubSyncContextFactory() );
105        resolver.setOfflineController( new DefaultOfflineController() );
106
107        artifact = new DefaultArtifact( "gid", "aid", "", "ext", "ver" );
108
109        connector = new RecordingRepositoryConnector();
110        repositoryConnectorProvider.setConnector( connector );
111    }
112
113    @After
114    public void teardown()
115        throws Exception
116    {
117        if ( session.getLocalRepository() != null )
118        {
119            TestFileUtils.deleteFile( session.getLocalRepository().getBasedir() );
120        }
121    }
122
123    @Test
124    public void testResolveLocalArtifactSuccessful()
125        throws IOException, ArtifactResolutionException
126    {
127        File tmpFile = TestFileUtils.createTempFile( "tmp" );
128        Map<String, String> properties = new HashMap<>();
129        properties.put( ArtifactProperties.LOCAL_PATH, tmpFile.getAbsolutePath() );
130        artifact = artifact.setProperties( properties );
131
132        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
133        ArtifactResult result = resolver.resolveArtifact( session, request );
134
135        assertTrue( result.getExceptions().isEmpty() );
136
137        Artifact resolved = result.getArtifact();
138        assertNotNull( resolved.getFile() );
139        resolved = resolved.setFile( null );
140
141        assertEquals( artifact, resolved );
142    }
143
144    @Test
145    public void testResolveLocalArtifactUnsuccessful()
146        throws IOException
147    {
148        File tmpFile = TestFileUtils.createTempFile( "tmp" );
149        Map<String, String> properties = new HashMap<>();
150        properties.put( ArtifactProperties.LOCAL_PATH, tmpFile.getAbsolutePath() );
151        artifact = artifact.setProperties( properties );
152
153        tmpFile.delete();
154
155        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
156
157        try
158        {
159            resolver.resolveArtifact( session, request );
160            fail( "expected exception" );
161        }
162        catch ( ArtifactResolutionException e )
163        {
164            assertNotNull( e.getResults() );
165            assertEquals( 1, e.getResults().size() );
166
167            ArtifactResult result = e.getResults().get( 0 );
168
169            assertSame( request, result.getRequest() );
170
171            assertFalse( result.getExceptions().isEmpty() );
172            assertTrue( result.getExceptions().get( 0 ) instanceof ArtifactNotFoundException );
173
174            Artifact resolved = result.getArtifact();
175            assertNull( resolved );
176        }
177
178    }
179
180    @Test
181    public void testResolveRemoteArtifact()
182        throws ArtifactResolutionException
183    {
184        connector.setExpectGet( artifact );
185
186        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
187        request.addRepository( new RemoteRepository.Builder( "id", "default", "file:///" ).build() );
188
189        ArtifactResult result = resolver.resolveArtifact( session, request );
190
191        assertTrue( result.getExceptions().isEmpty() );
192
193        Artifact resolved = result.getArtifact();
194        assertNotNull( resolved.getFile() );
195
196        resolved = resolved.setFile( null );
197        assertEquals( artifact, resolved );
198
199        connector.assertSeenExpected();
200    }
201
202    @Test
203    public void testResolveRemoteArtifactUnsuccessful()
204    {
205        RecordingRepositoryConnector connector = new RecordingRepositoryConnector()
206        {
207
208            @Override
209            public void get( Collection<? extends ArtifactDownload> artifactDownloads,
210                             Collection<? extends MetadataDownload> metadataDownloads )
211            {
212                super.get( artifactDownloads, metadataDownloads );
213                ArtifactDownload download = artifactDownloads.iterator().next();
214                ArtifactTransferException exception =
215                    new ArtifactNotFoundException( download.getArtifact(), null, "not found" );
216                download.setException( exception );
217            }
218
219        };
220
221        connector.setExpectGet( artifact );
222        repositoryConnectorProvider.setConnector( connector );
223
224        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
225        request.addRepository( new RemoteRepository.Builder( "id", "default", "file:///" ).build() );
226
227        try
228        {
229            resolver.resolveArtifact( session, request );
230            fail( "expected exception" );
231        }
232        catch ( ArtifactResolutionException e )
233        {
234            connector.assertSeenExpected();
235            assertNotNull( e.getResults() );
236            assertEquals( 1, e.getResults().size() );
237
238            ArtifactResult result = e.getResults().get( 0 );
239
240            assertSame( request, result.getRequest() );
241
242            assertFalse( result.getExceptions().isEmpty() );
243            assertTrue( result.getExceptions().get( 0 ) instanceof ArtifactNotFoundException );
244
245            Artifact resolved = result.getArtifact();
246            assertNull( resolved );
247        }
248
249    }
250
251    @Test
252    public void testArtifactNotFoundCache()
253        throws Exception
254    {
255        RecordingRepositoryConnector connector = new RecordingRepositoryConnector()
256        {
257            @Override
258            public void get( Collection<? extends ArtifactDownload> artifactDownloads,
259                             Collection<? extends MetadataDownload> metadataDownloads )
260            {
261                super.get( artifactDownloads, metadataDownloads );
262                for ( ArtifactDownload download : artifactDownloads )
263                {
264                    download.getFile().delete();
265                    ArtifactTransferException exception =
266                        new ArtifactNotFoundException( download.getArtifact(), null, "not found" );
267                    download.setException( exception );
268                }
269            }
270        };
271
272        repositoryConnectorProvider.setConnector( connector );
273        resolver.setUpdateCheckManager( new DefaultUpdateCheckManager()
274            .setUpdatePolicyAnalyzer( new DefaultUpdatePolicyAnalyzer() )
275            .setTrackingFileManager( new DefaultTrackingFileManager() )
276        );
277
278        session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) );
279        session.setUpdatePolicy( RepositoryPolicy.UPDATE_POLICY_NEVER );
280
281        RemoteRepository remoteRepo = new RemoteRepository.Builder( "id", "default", "file:///" ).build();
282
283        Artifact artifact1 = artifact;
284        Artifact artifact2 = artifact.setVersion( "ver2" );
285
286        ArtifactRequest request1 = new ArtifactRequest( artifact1, Arrays.asList( remoteRepo ), "" );
287        ArtifactRequest request2 = new ArtifactRequest( artifact2, Arrays.asList( remoteRepo ), "" );
288
289        connector.setExpectGet( artifact1, artifact2 );
290        try
291        {
292            resolver.resolveArtifacts( session, Arrays.asList( request1, request2 ) );
293            fail( "expected exception" );
294        }
295        catch ( ArtifactResolutionException e )
296        {
297            connector.assertSeenExpected();
298        }
299
300        TestFileUtils.writeString( new File( lrm.getRepository().getBasedir(), lrm.getPathForLocalArtifact( artifact2 ) ),
301                             "artifact" );
302        lrm.setArtifactAvailability( artifact2, false );
303
304        DefaultUpdateCheckManagerTest.resetSessionData( session );
305        connector.resetActual();
306        connector.setExpectGet( new Artifact[0] );
307        try
308        {
309            resolver.resolveArtifacts( session, Arrays.asList( request1, request2 ) );
310            fail( "expected exception" );
311        }
312        catch ( ArtifactResolutionException e )
313        {
314            connector.assertSeenExpected();
315            for ( ArtifactResult result : e.getResults() )
316            {
317                Throwable t = result.getExceptions().get( 0 );
318                assertTrue( t.toString(), t instanceof ArtifactNotFoundException );
319                assertTrue( t.toString(), t.getMessage().contains( "cached" ) );
320            }
321        }
322    }
323
324    @Test
325    public void testResolveFromWorkspace()
326        throws IOException, ArtifactResolutionException
327    {
328        WorkspaceReader workspace = new WorkspaceReader()
329        {
330
331            public WorkspaceRepository getRepository()
332            {
333                return new WorkspaceRepository( "default" );
334            }
335
336            public List<String> findVersions( Artifact artifact )
337            {
338                return Arrays.asList( artifact.getVersion() );
339            }
340
341            public File findArtifact( Artifact artifact )
342            {
343                try
344                {
345                    return TestFileUtils.createTempFile( artifact.toString() );
346                }
347                catch ( IOException e )
348                {
349                    throw new RuntimeException( e.getMessage(), e );
350                }
351            }
352        };
353        session.setWorkspaceReader( workspace );
354
355        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
356        request.addRepository( new RemoteRepository.Builder( "id", "default", "file:///" ).build() );
357
358        ArtifactResult result = resolver.resolveArtifact( session, request );
359
360        assertTrue( result.getExceptions().isEmpty() );
361
362        Artifact resolved = result.getArtifact();
363        assertNotNull( resolved.getFile() );
364
365        assertEquals( resolved.toString(), TestFileUtils.readString( resolved.getFile() ) );
366
367        resolved = resolved.setFile( null );
368        assertEquals( artifact, resolved );
369
370        connector.assertSeenExpected();
371    }
372
373    @Test
374    public void testResolveFromWorkspaceFallbackToRepository()
375        throws ArtifactResolutionException
376    {
377        WorkspaceReader workspace = new WorkspaceReader()
378        {
379
380            public WorkspaceRepository getRepository()
381            {
382                return new WorkspaceRepository( "default" );
383            }
384
385            public List<String> findVersions( Artifact artifact )
386            {
387                return Arrays.asList( artifact.getVersion() );
388            }
389
390            public File findArtifact( Artifact artifact )
391            {
392                return null;
393            }
394        };
395        session.setWorkspaceReader( workspace );
396
397        connector.setExpectGet( artifact );
398        repositoryConnectorProvider.setConnector( connector );
399
400        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
401        request.addRepository( new RemoteRepository.Builder( "id", "default", "file:///" ).build() );
402
403        ArtifactResult result = resolver.resolveArtifact( session, request );
404
405        assertTrue( "exception on resolveArtifact", result.getExceptions().isEmpty() );
406
407        Artifact resolved = result.getArtifact();
408        assertNotNull( resolved.getFile() );
409
410        resolved = resolved.setFile( null );
411        assertEquals( artifact, resolved );
412
413        connector.assertSeenExpected();
414    }
415
416    @Test
417    public void testRepositoryEventsSuccessfulLocal()
418        throws ArtifactResolutionException, IOException
419    {
420        RecordingRepositoryListener listener = new RecordingRepositoryListener();
421        session.setRepositoryListener( listener );
422
423        File tmpFile = TestFileUtils.createTempFile( "tmp" );
424        Map<String, String> properties = new HashMap<>();
425        properties.put( ArtifactProperties.LOCAL_PATH, tmpFile.getAbsolutePath() );
426        artifact = artifact.setProperties( properties );
427
428        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
429        resolver.resolveArtifact( session, request );
430
431        List<RepositoryEvent> events = listener.getEvents();
432        assertEquals( 2, events.size() );
433        RepositoryEvent event = events.get( 0 );
434        assertEquals( EventType.ARTIFACT_RESOLVING, event.getType() );
435        assertNull( event.getException() );
436        assertEquals( artifact, event.getArtifact() );
437
438        event = events.get( 1 );
439        assertEquals( EventType.ARTIFACT_RESOLVED, event.getType() );
440        assertNull( event.getException() );
441        assertEquals( artifact, event.getArtifact().setFile( null ) );
442    }
443
444    @Test
445    public void testRepositoryEventsUnsuccessfulLocal()
446    {
447        RecordingRepositoryListener listener = new RecordingRepositoryListener();
448        session.setRepositoryListener( listener );
449
450        Map<String, String> properties = new HashMap<>();
451        properties.put( ArtifactProperties.LOCAL_PATH, "doesnotexist" );
452        artifact = artifact.setProperties( properties );
453
454        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
455        try
456        {
457            resolver.resolveArtifact( session, request );
458            fail( "expected exception" );
459        }
460        catch ( ArtifactResolutionException ignored )
461        {
462        }
463
464        List<RepositoryEvent> events = listener.getEvents();
465        assertEquals( 2, events.size() );
466
467        RepositoryEvent event = events.get( 0 );
468        assertEquals( artifact, event.getArtifact() );
469        assertEquals( EventType.ARTIFACT_RESOLVING, event.getType() );
470
471        event = events.get( 1 );
472        assertEquals( artifact, event.getArtifact() );
473        assertEquals( EventType.ARTIFACT_RESOLVED, event.getType() );
474        assertNotNull( event.getException() );
475        assertEquals( 1, event.getExceptions().size() );
476
477    }
478
479    @Test
480    public void testRepositoryEventsSuccessfulRemote()
481        throws ArtifactResolutionException
482    {
483        RecordingRepositoryListener listener = new RecordingRepositoryListener();
484        session.setRepositoryListener( listener );
485
486        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
487        request.addRepository( new RemoteRepository.Builder( "id", "default", "file:///" ).build() );
488
489        resolver.resolveArtifact( session, request );
490
491        List<RepositoryEvent> events = listener.getEvents();
492        assertEquals( events.toString(), 4, events.size() );
493        RepositoryEvent event = events.get( 0 );
494        assertEquals( EventType.ARTIFACT_RESOLVING, event.getType() );
495        assertNull( event.getException() );
496        assertEquals( artifact, event.getArtifact() );
497
498        event = events.get( 1 );
499        assertEquals( EventType.ARTIFACT_DOWNLOADING, event.getType() );
500        assertNull( event.getException() );
501        assertEquals( artifact, event.getArtifact().setFile( null ) );
502
503        event = events.get( 2 );
504        assertEquals( EventType.ARTIFACT_DOWNLOADED, event.getType() );
505        assertNull( event.getException() );
506        assertEquals( artifact, event.getArtifact().setFile( null ) );
507
508        event = events.get( 3 );
509        assertEquals( EventType.ARTIFACT_RESOLVED, event.getType() );
510        assertNull( event.getException() );
511        assertEquals( artifact, event.getArtifact().setFile( null ) );
512    }
513
514    @Test
515    public void testRepositoryEventsUnsuccessfulRemote()
516    {
517        RecordingRepositoryConnector connector = new RecordingRepositoryConnector()
518        {
519
520            @Override
521            public void get( Collection<? extends ArtifactDownload> artifactDownloads,
522                             Collection<? extends MetadataDownload> metadataDownloads )
523            {
524                super.get( artifactDownloads, metadataDownloads );
525                ArtifactDownload download = artifactDownloads.iterator().next();
526                ArtifactTransferException exception =
527                    new ArtifactNotFoundException( download.getArtifact(), null, "not found" );
528                download.setException( exception );
529            }
530
531        };
532        repositoryConnectorProvider.setConnector( connector );
533
534        RecordingRepositoryListener listener = new RecordingRepositoryListener();
535        session.setRepositoryListener( listener );
536
537        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
538        request.addRepository( new RemoteRepository.Builder( "id", "default", "file:///" ).build() );
539
540        try
541        {
542            resolver.resolveArtifact( session, request );
543            fail( "expected exception" );
544        }
545        catch ( ArtifactResolutionException ignored )
546        {
547        }
548
549        List<RepositoryEvent> events = listener.getEvents();
550        assertEquals( events.toString(), 4, events.size() );
551
552        RepositoryEvent event = events.get( 0 );
553        assertEquals( artifact, event.getArtifact() );
554        assertEquals( EventType.ARTIFACT_RESOLVING, event.getType() );
555
556        event = events.get( 1 );
557        assertEquals( artifact, event.getArtifact() );
558        assertEquals( EventType.ARTIFACT_DOWNLOADING, event.getType() );
559
560        event = events.get( 2 );
561        assertEquals( artifact, event.getArtifact() );
562        assertEquals( EventType.ARTIFACT_DOWNLOADED, event.getType() );
563        assertNotNull( event.getException() );
564        assertEquals( 1, event.getExceptions().size() );
565
566        event = events.get( 3 );
567        assertEquals( artifact, event.getArtifact() );
568        assertEquals( EventType.ARTIFACT_RESOLVED, event.getType() );
569        assertNotNull( event.getException() );
570        assertEquals( 1, event.getExceptions().size() );
571    }
572
573    @Test
574    public void testVersionResolverFails()
575    {
576        resolver.setVersionResolver( new VersionResolver()
577        {
578
579            public VersionResult resolveVersion( RepositorySystemSession session, VersionRequest request )
580                throws VersionResolutionException
581            {
582                throw new VersionResolutionException( new VersionResult( request ) );
583            }
584        } );
585
586        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
587        try
588        {
589            resolver.resolveArtifact( session, request );
590            fail( "expected exception" );
591        }
592        catch ( ArtifactResolutionException e )
593        {
594            connector.assertSeenExpected();
595            assertNotNull( e.getResults() );
596            assertEquals( 1, e.getResults().size() );
597
598            ArtifactResult result = e.getResults().get( 0 );
599
600            assertSame( request, result.getRequest() );
601
602            assertFalse( result.getExceptions().isEmpty() );
603            assertTrue( result.getExceptions().get( 0 ) instanceof VersionResolutionException );
604
605            Artifact resolved = result.getArtifact();
606            assertNull( resolved );
607        }
608    }
609
610    @Test
611    public void testRepositoryEventsOnVersionResolverFail()
612    {
613        resolver.setVersionResolver( new VersionResolver()
614        {
615
616            public VersionResult resolveVersion( RepositorySystemSession session, VersionRequest request )
617                throws VersionResolutionException
618            {
619                throw new VersionResolutionException( new VersionResult( request ) );
620            }
621        } );
622
623        RecordingRepositoryListener listener = new RecordingRepositoryListener();
624        session.setRepositoryListener( listener );
625
626        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
627        try
628        {
629            resolver.resolveArtifact( session, request );
630            fail( "expected exception" );
631        }
632        catch ( ArtifactResolutionException ignored )
633        {
634        }
635
636        List<RepositoryEvent> events = listener.getEvents();
637        assertEquals( 2, events.size() );
638
639        RepositoryEvent event = events.get( 0 );
640        assertEquals( artifact, event.getArtifact() );
641        assertEquals( EventType.ARTIFACT_RESOLVING, event.getType() );
642
643        event = events.get( 1 );
644        assertEquals( artifact, event.getArtifact() );
645        assertEquals( EventType.ARTIFACT_RESOLVED, event.getType() );
646        assertNotNull( event.getException() );
647        assertEquals( 1, event.getExceptions().size() );
648    }
649
650    @Test
651    public void testLocalArtifactAvailable()
652        throws ArtifactResolutionException
653    {
654        session.setLocalRepositoryManager( new LocalRepositoryManager()
655        {
656
657            public LocalRepository getRepository()
658            {
659                return null;
660            }
661
662            public String getPathForRemoteMetadata( Metadata metadata, RemoteRepository repository, String context )
663            {
664                return null;
665            }
666
667            public String getPathForRemoteArtifact( Artifact artifact, RemoteRepository repository, String context )
668            {
669                return null;
670            }
671
672            public String getPathForLocalMetadata( Metadata metadata )
673            {
674                return null;
675            }
676
677            public String getPathForLocalArtifact( Artifact artifact )
678            {
679                return null;
680            }
681
682            public LocalArtifactResult find( RepositorySystemSession session, LocalArtifactRequest request )
683            {
684
685                LocalArtifactResult result = new LocalArtifactResult( request );
686                result.setAvailable( true );
687                try
688                {
689                    result.setFile( TestFileUtils.createTempFile( "" ) );
690                }
691                catch ( IOException e )
692                {
693                    e.printStackTrace();
694                }
695                return result;
696            }
697
698            public void add( RepositorySystemSession session, LocalArtifactRegistration request )
699            {
700            }
701
702            public LocalMetadataResult find( RepositorySystemSession session, LocalMetadataRequest request )
703            {
704                LocalMetadataResult result = new LocalMetadataResult( request );
705                try
706                {
707                    result.setFile( TestFileUtils.createTempFile( "" ) );
708                }
709                catch ( IOException e )
710                {
711                    e.printStackTrace();
712                }
713                return result;
714            }
715
716            public void add( RepositorySystemSession session, LocalMetadataRegistration request )
717            {
718            }
719        } );
720
721        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
722        request.addRepository( new RemoteRepository.Builder( "id", "default", "file:///" ).build() );
723
724        ArtifactResult result = resolver.resolveArtifact( session, request );
725
726        assertTrue( result.getExceptions().isEmpty() );
727
728        Artifact resolved = result.getArtifact();
729        assertNotNull( resolved.getFile() );
730
731        resolved = resolved.setFile( null );
732        assertEquals( artifact, resolved );
733
734    }
735
736    @Test
737    public void testFindInLocalRepositoryWhenVersionWasFoundInLocalRepository()
738        throws ArtifactResolutionException
739    {
740        session.setLocalRepositoryManager( new LocalRepositoryManager()
741        {
742
743            public LocalRepository getRepository()
744            {
745                return null;
746            }
747
748            public String getPathForRemoteMetadata( Metadata metadata, RemoteRepository repository, String context )
749            {
750                return null;
751            }
752
753            public String getPathForRemoteArtifact( Artifact artifact, RemoteRepository repository, String context )
754            {
755                return null;
756            }
757
758            public String getPathForLocalMetadata( Metadata metadata )
759            {
760                return null;
761            }
762
763            public String getPathForLocalArtifact( Artifact artifact )
764            {
765                return null;
766            }
767
768            public LocalArtifactResult find( RepositorySystemSession session, LocalArtifactRequest request )
769            {
770
771                LocalArtifactResult result = new LocalArtifactResult( request );
772                result.setAvailable( false );
773                try
774                {
775                    result.setFile( TestFileUtils.createTempFile( "" ) );
776                }
777                catch ( IOException e )
778                {
779                    e.printStackTrace();
780                }
781                return result;
782            }
783
784            public void add( RepositorySystemSession session, LocalArtifactRegistration request )
785            {
786            }
787
788            public LocalMetadataResult find( RepositorySystemSession session, LocalMetadataRequest request )
789            {
790                return new LocalMetadataResult( request );
791            }
792
793            public void add( RepositorySystemSession session, LocalMetadataRegistration request )
794            {
795            }
796        } );
797        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
798        request.addRepository( new RemoteRepository.Builder( "id", "default", "file:///" ).build() );
799
800        resolver.setVersionResolver( new VersionResolver()
801        {
802
803            public VersionResult resolveVersion( RepositorySystemSession session, VersionRequest request )
804            {
805                return new VersionResult( request ).setRepository( new LocalRepository( "id" ) ).setVersion( request.getArtifact().getVersion() );
806            }
807        } );
808        ArtifactResult result = resolver.resolveArtifact( session, request );
809
810        assertTrue( result.getExceptions().isEmpty() );
811
812        Artifact resolved = result.getArtifact();
813        assertNotNull( resolved.getFile() );
814
815        resolved = resolved.setFile( null );
816        assertEquals( artifact, resolved );
817    }
818
819    @Test
820    public void testFindInLocalRepositoryWhenVersionRangeWasResolvedFromLocalRepository()
821        throws ArtifactResolutionException
822    {
823        session.setLocalRepositoryManager( new LocalRepositoryManager()
824        {
825
826            public LocalRepository getRepository()
827            {
828                return null;
829            }
830
831            public String getPathForRemoteMetadata( Metadata metadata, RemoteRepository repository, String context )
832            {
833                return null;
834            }
835
836            public String getPathForRemoteArtifact( Artifact artifact, RemoteRepository repository, String context )
837            {
838                return null;
839            }
840
841            public String getPathForLocalMetadata( Metadata metadata )
842            {
843                return null;
844            }
845
846            public String getPathForLocalArtifact( Artifact artifact )
847            {
848                return null;
849            }
850
851            public LocalArtifactResult find( RepositorySystemSession session, LocalArtifactRequest request )
852            {
853
854                LocalArtifactResult result = new LocalArtifactResult( request );
855                result.setAvailable( false );
856                try
857                {
858                    result.setFile( TestFileUtils.createTempFile( "" ) );
859                }
860                catch ( IOException e )
861                {
862                    e.printStackTrace();
863                }
864                return result;
865            }
866
867            public void add( RepositorySystemSession session, LocalArtifactRegistration request )
868            {
869            }
870
871            public LocalMetadataResult find( RepositorySystemSession session, LocalMetadataRequest request )
872            {
873                return new LocalMetadataResult( request );
874            }
875
876            public void add( RepositorySystemSession session, LocalMetadataRegistration request )
877            {
878            }
879
880        } );
881        ArtifactRequest request = new ArtifactRequest( artifact, null, "" );
882
883        resolver.setVersionResolver( new VersionResolver()
884        {
885
886            public VersionResult resolveVersion( RepositorySystemSession session, VersionRequest request )
887            {
888                return new VersionResult( request ).setVersion( request.getArtifact().getVersion() );
889            }
890        } );
891        ArtifactResult result = resolver.resolveArtifact( session, request );
892
893        assertTrue( result.getExceptions().isEmpty() );
894
895        Artifact resolved = result.getArtifact();
896        assertNotNull( resolved.getFile() );
897
898        resolved = resolved.setFile( null );
899        assertEquals( artifact, resolved );
900    }
901
902}