001    package org.apache.maven.repository;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
005     * agreements. See the NOTICE file distributed with this work for additional information regarding
006     * copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the
007     * "License"); you may not use this file except in compliance with the License. You may obtain a
008     * copy of the License at
009     * 
010     * http://www.apache.org/licenses/LICENSE-2.0
011     * 
012     * Unless required by applicable law or agreed to in writing, software distributed under the License
013     * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
014     * or implied. See the License for the specific language governing permissions and limitations under
015     * the License.
016     */
017    
018    import java.io.File;
019    import java.util.Arrays;
020    import java.util.List;
021    
022    import org.apache.maven.artifact.Artifact;
023    import org.apache.maven.artifact.repository.ArtifactRepository;
024    import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
025    import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
026    import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
027    import org.apache.maven.execution.DefaultMavenExecutionRequest;
028    import org.apache.maven.execution.DefaultMavenExecutionResult;
029    import org.apache.maven.execution.MavenSession;
030    import org.apache.maven.model.Dependency;
031    import org.apache.maven.model.Repository;
032    import org.apache.maven.model.RepositoryPolicy;
033    import org.apache.maven.plugin.LegacySupport;
034    import org.apache.maven.repository.RepositorySystem;
035    import org.codehaus.plexus.PlexusTestCase;
036    import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
037    import org.sonatype.aether.util.DefaultRepositorySystemSession;
038    
039    /**
040     * Tests {@link LegacyRepositorySystem}.
041     * 
042     * @author Benjamin Bentmann
043     */
044    public class LegacyRepositorySystemTest
045        extends PlexusTestCase
046    {
047        private RepositorySystem repositorySystem;
048    
049        private ResolutionErrorHandler resolutionErrorHandler;
050        
051        @Override
052        protected void setUp()
053            throws Exception
054        {
055            super.setUp();
056            repositorySystem = lookup( RepositorySystem.class, "default" );
057            resolutionErrorHandler = lookup( ResolutionErrorHandler.class );
058        }
059    
060        @Override
061        protected void tearDown()
062            throws Exception
063        {
064            repositorySystem = null;
065            resolutionErrorHandler = null;
066            super.tearDown();
067        }
068        
069        protected List<ArtifactRepository> getRemoteRepositories()
070            throws Exception
071        {
072            File repoDir = new File( getBasedir(), "src/test/remote-repo" ).getAbsoluteFile();
073    
074            RepositoryPolicy policy = new RepositoryPolicy();
075            policy.setEnabled( true );
076            policy.setChecksumPolicy( "ignore" );
077            policy.setUpdatePolicy( "always" );
078    
079            Repository repository = new Repository();
080            repository.setId( RepositorySystem.DEFAULT_REMOTE_REPO_ID );
081            repository.setUrl( "file://" + repoDir.toURI().getPath() );
082            repository.setReleases( policy );
083            repository.setSnapshots( policy );
084    
085            return Arrays.asList( repositorySystem.buildArtifactRepository( repository ) );
086        }
087    
088        protected ArtifactRepository getLocalRepository()
089            throws Exception
090        {
091            File repoDir = new File( getBasedir(), "target/local-repo" ).getAbsoluteFile();
092    
093            return repositorySystem.createLocalRepository( repoDir );
094        }
095    
096        public void testThatASystemScopedDependencyIsNotResolvedFromRepositories()
097            throws Exception
098        {
099            //
100            // We should get a whole slew of dependencies resolving this artifact transitively
101            //
102            Dependency d = new Dependency();
103            d.setGroupId( "org.apache.maven.its" );
104            d.setArtifactId( "b" );
105            d.setVersion( "0.1" );
106            d.setScope( Artifact.SCOPE_COMPILE );
107            Artifact artifact = repositorySystem.createDependencyArtifact( d );
108            
109            ArtifactResolutionRequest request = new ArtifactResolutionRequest()
110                .setArtifact( artifact )
111                .setResolveRoot( true )
112                .setResolveTransitively( true )
113                .setRemoteRepositories( getRemoteRepositories() )
114                .setLocalRepository( getLocalRepository() );            
115                                
116            DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
117            session.setLocalRepositoryManager( new SimpleLocalRepositoryManager( request.getLocalRepository().getBasedir() ) );
118            LegacySupport legacySupport = lookup( LegacySupport.class );
119            legacySupport.setSession( new MavenSession( getContainer(), session, new DefaultMavenExecutionRequest(),
120                                                        new DefaultMavenExecutionResult() ) );
121    
122            ArtifactResolutionResult result = repositorySystem.resolve( request );
123            resolutionErrorHandler.throwErrors( request, result );        
124            assertEquals( 2, result.getArtifacts().size() );
125            
126            //
127            // System scoped version which should 
128            //        
129            d.setScope( Artifact.SCOPE_SYSTEM );
130            File file = new File( getBasedir(), "src/test/repository-system/maven-core-2.1.0.jar" );
131            assertTrue( file.exists() );
132            d.setSystemPath( file.getCanonicalPath() );
133            
134            artifact = repositorySystem.createDependencyArtifact( d );
135            
136            //
137            // The request has not set any local or remote repositories as the system scoped dependency being resolved should only
138            // give us the dependency off the disk and nothing more.
139            //
140            request = new ArtifactResolutionRequest()
141                .setArtifact( artifact )
142                .setResolveRoot( true )
143                .setResolveTransitively( true );
144                                
145            result = repositorySystem.resolve( request );
146            resolutionErrorHandler.throwErrors( request, result );        
147            assertEquals( 1, result.getArtifacts().size() );       
148    
149            //
150            // Put in a bogus file to make sure missing files cause the resolution to fail.
151            //        
152            file = new File( getBasedir(), "src/test/repository-system/maven-monkey-2.1.0.jar" );
153            assertFalse( file.exists() );
154            d.setSystemPath( file.getCanonicalPath() );
155            artifact = repositorySystem.createDependencyArtifact( d );
156            
157            //
158            // The request has not set any local or remote repositories as the system scoped dependency being resolved should only
159            // give us the dependency off the disk and nothing more.
160            //
161            request = new ArtifactResolutionRequest()
162                .setArtifact( artifact )
163                .setResolveRoot( true )
164                .setResolveTransitively( true );
165                         
166            try
167            {
168                result = repositorySystem.resolve( request );
169                resolutionErrorHandler.throwErrors( request, result );
170            }
171            catch( Exception e )
172            {
173                assertTrue( result.hasMissingArtifacts() );
174            }
175        }
176    
177        public void testLocalRepositoryBasedir()
178            throws Exception
179        {
180            File localRepoDir = new File( "" ).getAbsoluteFile();
181    
182            ArtifactRepository localRepo = repositorySystem.createLocalRepository( localRepoDir );
183    
184            String basedir = localRepo.getBasedir();
185    
186            assertFalse( basedir.endsWith( "/" ) );
187            assertFalse( basedir.endsWith( "\\" ) );
188    
189            assertEquals( localRepoDir, new File( basedir ) );
190    
191            assertEquals( localRepoDir.getPath(), basedir );
192        }
193    
194    }