View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.repository;
20  
21  import java.io.File;
22  import java.util.Arrays;
23  import java.util.List;
24  
25  import org.apache.maven.artifact.Artifact;
26  import org.apache.maven.artifact.repository.ArtifactRepository;
27  import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
28  import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
29  import org.apache.maven.artifact.resolver.ResolutionErrorHandler;
30  import org.apache.maven.execution.DefaultMavenExecutionRequest;
31  import org.apache.maven.execution.DefaultMavenExecutionResult;
32  import org.apache.maven.execution.MavenSession;
33  import org.apache.maven.model.Dependency;
34  import org.apache.maven.model.Repository;
35  import org.apache.maven.model.RepositoryPolicy;
36  import org.apache.maven.plugin.LegacySupport;
37  import org.apache.maven.repository.legacy.LegacyRepositorySystem;
38  import org.codehaus.plexus.ContainerConfiguration;
39  import org.codehaus.plexus.PlexusConstants;
40  import org.codehaus.plexus.PlexusTestCase;
41  import org.eclipse.aether.DefaultRepositorySystemSession;
42  import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
43  import org.eclipse.aether.repository.LocalRepository;
44  
45  /**
46   * Tests {@link LegacyRepositorySystem}.
47   *
48   * @author Benjamin Bentmann
49   */
50  public class LegacyRepositorySystemTest extends PlexusTestCase {
51      private RepositorySystem repositorySystem;
52  
53      private ResolutionErrorHandler resolutionErrorHandler;
54  
55      @Override
56      protected void customizeContainerConfiguration(ContainerConfiguration containerConfiguration) {
57          super.customizeContainerConfiguration(containerConfiguration);
58          containerConfiguration.setAutoWiring(true);
59          containerConfiguration.setClassPathScanning(PlexusConstants.SCANNING_INDEX);
60      }
61  
62      @Override
63      protected void setUp() throws Exception {
64          super.setUp();
65          repositorySystem = lookup(RepositorySystem.class, "default");
66          resolutionErrorHandler = lookup(ResolutionErrorHandler.class);
67      }
68  
69      @Override
70      protected void tearDown() throws Exception {
71          repositorySystem = null;
72          resolutionErrorHandler = null;
73          super.tearDown();
74      }
75  
76      protected List<ArtifactRepository> getRemoteRepositories() throws Exception {
77          File repoDir = new File(getBasedir(), "src/test/remote-repo").getAbsoluteFile();
78  
79          RepositoryPolicy policy = new RepositoryPolicy();
80          policy.setEnabled(true);
81          policy.setChecksumPolicy("ignore");
82          policy.setUpdatePolicy("always");
83  
84          Repository repository = new Repository();
85          repository.setId(RepositorySystem.DEFAULT_REMOTE_REPO_ID);
86          repository.setUrl("file://" + repoDir.toURI().getPath());
87          repository.setReleases(policy);
88          repository.setSnapshots(policy);
89  
90          return Arrays.asList(repositorySystem.buildArtifactRepository(repository));
91      }
92  
93      protected ArtifactRepository getLocalRepository() throws Exception {
94          File repoDir = new File(getBasedir(), "target/local-repo").getAbsoluteFile();
95  
96          return repositorySystem.createLocalRepository(repoDir);
97      }
98  
99      public void testThatASystemScopedDependencyIsNotResolvedFromRepositories() throws Exception {
100         //
101         // We should get a whole slew of dependencies resolving this artifact transitively
102         //
103         Dependency d = new Dependency();
104         d.setGroupId("org.apache.maven.its");
105         d.setArtifactId("b");
106         d.setVersion("0.1");
107         d.setScope(Artifact.SCOPE_COMPILE);
108         Artifact artifact = repositorySystem.createDependencyArtifact(d);
109 
110         ArtifactResolutionRequest request = new ArtifactResolutionRequest()
111                 .setArtifact(artifact)
112                 .setResolveRoot(true)
113                 .setResolveTransitively(true)
114                 .setRemoteRepositories(getRemoteRepositories())
115                 .setLocalRepository(getLocalRepository());
116 
117         DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
118         LocalRepository localRepo =
119                 new LocalRepository(request.getLocalRepository().getBasedir());
120         session.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory().newInstance(session, localRepo));
121         LegacySupport legacySupport = lookup(LegacySupport.class);
122         legacySupport.setSession(new MavenSession(
123                 getContainer(), session, new DefaultMavenExecutionRequest(), new DefaultMavenExecutionResult()));
124 
125         ArtifactResolutionResult result = repositorySystem.resolve(request);
126         resolutionErrorHandler.throwErrors(request, result);
127         assertEquals(2, result.getArtifacts().size());
128 
129         //
130         // System scoped version which should
131         //
132         d.setScope(Artifact.SCOPE_SYSTEM);
133         File file = new File(getBasedir(), "src/test/repository-system/maven-core-2.1.0.jar");
134         assertTrue(file.exists());
135         d.setSystemPath(file.getCanonicalPath());
136 
137         artifact = repositorySystem.createDependencyArtifact(d);
138 
139         //
140         // The request has not set any local or remote repositories as the system scoped dependency being resolved
141         // should only
142         // give us the dependency off the disk and nothing more.
143         //
144         request = new ArtifactResolutionRequest()
145                 .setArtifact(artifact)
146                 .setResolveRoot(true)
147                 .setResolveTransitively(true);
148 
149         result = repositorySystem.resolve(request);
150         resolutionErrorHandler.throwErrors(request, result);
151         assertEquals(1, result.getArtifacts().size());
152 
153         //
154         // Put in a bogus file to make sure missing files cause the resolution to fail.
155         //
156         file = new File(getBasedir(), "src/test/repository-system/maven-monkey-2.1.0.jar");
157         assertFalse(file.exists());
158         d.setSystemPath(file.getCanonicalPath());
159         artifact = repositorySystem.createDependencyArtifact(d);
160 
161         //
162         // The request has not set any local or remote repositories as the system scoped dependency being resolved
163         // should only
164         // give us the dependency off the disk and nothing more.
165         //
166         request = new ArtifactResolutionRequest()
167                 .setArtifact(artifact)
168                 .setResolveRoot(true)
169                 .setResolveTransitively(true);
170 
171         try {
172             result = repositorySystem.resolve(request);
173             resolutionErrorHandler.throwErrors(request, result);
174         } catch (Exception e) {
175             assertTrue(result.hasMissingArtifacts());
176         }
177     }
178 
179     public void testLocalRepositoryBasedir() throws Exception {
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 }