]> source.dussan.org Git - archiva.git/blob
168854b6f2cdb5000109b74957f0cd1a167c3a09
[archiva.git] /
1 package org.apache.archiva.dependency.tree.maven2;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *   http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import junit.framework.TestCase;
23 import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
24 import org.apache.archiva.configuration.ArchivaConfiguration;
25 import org.apache.archiva.configuration.Configuration;
26 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
27 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
28 import org.apache.maven.project.DependencyResolutionResult;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.sonatype.aether.RepositorySystem;
33 import org.sonatype.aether.RepositorySystemSession;
34 import org.sonatype.aether.artifact.Artifact;
35 import org.sonatype.aether.collection.CollectRequest;
36 import org.sonatype.aether.collection.CollectResult;
37 import org.sonatype.aether.collection.DependencyCollectionException;
38 import org.sonatype.aether.graph.Dependency;
39 import org.sonatype.aether.graph.DependencyNode;
40 import org.sonatype.aether.impl.DependencyCollector;
41 import org.sonatype.aether.impl.internal.DefaultRepositorySystem;
42 import org.sonatype.aether.util.artifact.DefaultArtifact;
43 import org.sonatype.aether.util.graph.DefaultDependencyNode;
44 import org.springframework.test.context.ContextConfiguration;
45
46 import javax.inject.Inject;
47 import javax.inject.Named;
48 import java.io.File;
49 import java.util.Collections;
50 import java.util.HashMap;
51 import java.util.Map;
52
53 @RunWith( ArchivaSpringJUnit4ClassRunner.class )
54 @ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
55 public class DependencyTreeBuilderTestMaven3
56     extends TestCase
57 {
58     @Inject
59     @Named( value = "dependencyTreeBuilder#maven3" )
60     private Maven3DependencyTreeBuilder builder;
61
62     @Inject
63     private PlexusSisuBridge plexusSisuBridge;
64
65     private static final String TEST_REPO_ID = "test";
66
67     private static final String TEST_VERSION = "1.2.1";
68
69     private static final String TEST_ARTIFACT_ID = "archiva-common";
70
71     private static final String TEST_GROUP_ID = "org.apache.archiva";
72
73     private DefaultRepositorySystem defaultRepositorySystem;
74
75
76     @Inject
77     @Named( value = "archivaConfiguration#test" )
78     ArchivaConfiguration config;
79
80     @Before
81     public void setUp()
82         throws Exception
83     {
84         super.setUp();
85
86         defaultRepositorySystem = (DefaultRepositorySystem) plexusSisuBridge.lookup( RepositorySystem.class );
87
88         final Map<String, DependencyNode> nodes = new HashMap<String, DependencyNode>();
89
90         DefaultDependencyNode springContext = new DefaultDependencyNode(
91             new Dependency( createArtifact( "org.springframework", "spring-context", "2.5.6" ), "compile" ) );
92
93         springContext.setPremanagedVersion( "2.5.5" );
94
95         nodes.put( getId( springContext.getDependency().getArtifact() ), springContext );
96
97         DefaultDependencyNode springTest = new DefaultDependencyNode(
98             new Dependency( createArtifact( "org.springframework", "spring-test", "2.5.5" ), "test" ) );
99
100         nodes.put( getId( springTest.getDependency().getArtifact() ), springTest );
101
102         DefaultDependencyNode plexusUtils = new DefaultDependencyNode(
103             new Dependency( createArtifact( "org.codehaus.plexus", "plexus-utils", "1.4.5" ), "compile" ) );
104
105         plexusUtils.setPremanagedVersion( "1.5.1" );
106
107         nodes.put( getId( plexusUtils.getDependency().getArtifact() ), plexusUtils );
108
109         DefaultDependencyNode slf4jLog4j12 = new DefaultDependencyNode(
110             new Dependency( createArtifact( "org.slf4j", "slf4j-log4j12", "1.5.0" ), "runtime" ) );
111
112         slf4jLog4j12.setPremanagedScope( "test" );
113
114         nodes.put( getId( slf4jLog4j12.getDependency().getArtifact() ), slf4jLog4j12 );
115
116         DefaultDependencyNode plexusLog4j = new DefaultDependencyNode(
117             new Dependency( createArtifact( "org.codehaus.plexus", "plexus-log4j-logging", "1.1-alpha-3" ), "test" ) );
118
119         nodes.put( getId( plexusLog4j.getDependency().getArtifact() ), plexusLog4j );
120
121         DefaultDependencyNode log4j =
122             new DefaultDependencyNode( new Dependency( createArtifact( "log4j", "log4j", "1.2.14" ), "test" ) );
123
124         nodes.put( getId( log4j.getDependency().getArtifact() ), log4j );
125
126         DefaultDependencyNode mavenArtifact = new DefaultDependencyNode(
127             new Dependency( createArtifact( "org.apache.maven", "maven-artifact", "2.0.8" ), "test" ) );
128
129         nodes.put( getId( mavenArtifact.getDependency().getArtifact() ), mavenArtifact );
130
131         DefaultDependencyNode mavenProject = new DefaultDependencyNode(
132             new Dependency( createArtifact( "org.apache.maven", "maven-project", "2.0.8" ), "test" ) );
133
134         nodes.put( getId( mavenProject.getDependency().getArtifact() ), mavenProject );
135
136         DefaultDependencyNode mavenCore = new DefaultDependencyNode(
137             new Dependency( createArtifact( "org.apache.maven", "maven-core", "2.0.8" ), "test" ) );
138
139         nodes.put( getId( mavenCore.getDependency().getArtifact() ), mavenCore );
140
141         DefaultDependencyNode mavenSettings = new DefaultDependencyNode(
142             new Dependency( createArtifact( "org.apache.maven", "maven-settings", "2.0.8" ), "test" ) );
143
144         nodes.put( getId( mavenSettings.getDependency().getArtifact() ), mavenSettings );
145
146         DefaultDependencyNode mavenModel = new DefaultDependencyNode(
147             new Dependency( createArtifact( "org.apache.maven", "maven-model", "2.0.8" ), "test" ) );
148
149         nodes.put( getId( mavenModel.getDependency().getArtifact() ), mavenModel );
150
151         DefaultDependencyNode plexusCommandLine = new DefaultDependencyNode(
152             new Dependency( createArtifact( "org.codehaus.plexus", "plexus-command-line", "1.0-alpha-2" ), "test" ) );
153
154         nodes.put( getId( plexusCommandLine.getDependency().getArtifact() ), plexusCommandLine );
155
156         DefaultDependencyNode plexusRegistryCommons = new DefaultDependencyNode(
157             new Dependency( createArtifact( "org.codehaus.plexus.registry", "plexus-registry-commons", "1.0-alpha-2" ),
158                             "test" ) );
159
160         nodes.put( getId( plexusRegistryCommons.getDependency().getArtifact() ), plexusRegistryCommons );
161
162         plexusRegistryCommons.setPremanagedVersion( "1.0-alpha-3" );
163
164         DefaultDependencyNode plexusRegistryApi = new DefaultDependencyNode(
165             new Dependency( createArtifact( "org.codehaus.plexus.registry", "plexus-registry-api", "1.0-alpha-2" ),
166                             "test" ) );
167
168         nodes.put( getId( plexusRegistryApi.getDependency().getArtifact() ), plexusRegistryApi );
169
170         plexusRegistryApi.setPremanagedVersion( "1.0-alpha-3" );
171
172         DefaultDependencyNode plexusSpring = new DefaultDependencyNode(
173             new Dependency( createArtifact( "org.codehaus.plexus", "plexus-spring", "1.2" ), "test" ) );
174
175         nodes.put( getId( plexusSpring.getDependency().getArtifact() ), plexusSpring );
176
177         plexusSpring.getChildren().add( springContext );
178         plexusSpring.getChildren().add( springTest );
179         plexusSpring.getChildren().add( plexusUtils );
180         plexusSpring.getChildren().add( slf4jLog4j12 );
181         plexusSpring.getChildren().add( plexusLog4j );
182         plexusSpring.getChildren().add( log4j );
183         plexusSpring.getChildren().add( mavenArtifact );
184         plexusSpring.getChildren().add( mavenProject );
185         plexusSpring.getChildren().add( mavenCore );
186         plexusSpring.getChildren().add( mavenSettings );
187         plexusSpring.getChildren().add( mavenModel );
188         plexusSpring.getChildren().add( plexusCommandLine );
189         plexusSpring.getChildren().add( plexusRegistryCommons );
190         plexusSpring.getChildren().add( plexusRegistryApi );
191
192         DefaultDependencyNode commonsLang = new DefaultDependencyNode(
193             new Dependency( createArtifact( "commons-lang", "commons-lang", "2.2" ), "compile" ) );
194
195         nodes.put( getId( commonsLang.getDependency().getArtifact() ), commonsLang );
196
197         DefaultDependencyNode commonsIO = new DefaultDependencyNode(
198             new Dependency( createArtifact( "commons-io", "commons-io", "1.4" ), "compile" ) );
199
200         nodes.put( getId( commonsIO.getDependency().getArtifact() ), commonsIO );
201
202         DefaultDependencyNode slf4j = new DefaultDependencyNode(
203             new Dependency( createArtifact( "org.slf4j", "slf4j-api", "1.5.0" ), "compile" ) );
204
205         nodes.put( getId( slf4j.getDependency().getArtifact() ), slf4j );
206
207         DefaultDependencyNode plexusAPI = new DefaultDependencyNode(
208             new Dependency( createArtifact( "org.codehaus.plexus", "plexus-component-api", "1.0-alpha-22" ),
209                             "compile" ) );
210
211         nodes.put( getId( plexusAPI.getDependency().getArtifact() ), plexusAPI );
212
213         DefaultDependencyNode xalan =
214             new DefaultDependencyNode( new Dependency( createArtifact( "xalan", "xalan", "2.7.0" ), "compile" ) );
215
216         nodes.put( getId( xalan.getDependency().getArtifact() ), xalan );
217
218         DefaultDependencyNode dom4j =
219             new DefaultDependencyNode( new Dependency( createArtifact( "dom4j", "dom4j", "1.6.1" ), "test" ) );
220
221         nodes.put( getId( dom4j.getDependency().getArtifact() ), dom4j );
222
223         //dom4j.setFailedUpdateScope("compile");
224
225         DefaultDependencyNode junit =
226             new DefaultDependencyNode( new Dependency( createArtifact( "junit", "junit", "3.8.1" ), "test" ) );
227
228         nodes.put( getId( junit.getDependency().getArtifact() ), junit );
229
230         DefaultDependencyNode easymock = new DefaultDependencyNode(
231             new Dependency( createArtifact( "easymock", "easymock", "1.2_Java1.3" ), "test" ) );
232
233         nodes.put( getId( easymock.getDependency().getArtifact() ), easymock );
234
235         DefaultDependencyNode easymockExt = new DefaultDependencyNode(
236             new Dependency( createArtifact( "easymock", "easymockclassextension", "1.2" ), "test" ) );
237
238         nodes.put( getId( easymockExt.getDependency().getArtifact() ), easymockExt );
239
240         DependencyNode mainNode = new DefaultDependencyNode(
241             new Dependency( createArtifact( TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION ), "compile" ) );
242
243         nodes.put( getId( mainNode.getDependency().getArtifact() ), mainNode );
244
245         mainNode.getChildren().add( commonsLang );
246         mainNode.getChildren().add( commonsIO );
247         mainNode.getChildren().add( slf4j );
248         mainNode.getChildren().add( plexusAPI );
249         mainNode.getChildren().add( plexusSpring );
250         mainNode.getChildren().add( xalan );
251         mainNode.getChildren().add( dom4j );
252         mainNode.getChildren().add( junit );
253         mainNode.getChildren().add( easymock );
254         mainNode.getChildren().add( easymockExt );
255
256         defaultRepositorySystem.setDependencyCollector( new DependencyCollector()
257         {
258
259             public CollectResult collectDependencies( RepositorySystemSession session, CollectRequest request )
260                 throws DependencyCollectionException
261             {
262                 CollectResult collectResult = new CollectResult( request );
263                 collectResult.setRoot( new DefaultDependencyNode() );
264                 for ( Dependency dependency : request.getDependencies() )
265                 {
266                     DependencyNode node = nodes.get( getId( dependency.getArtifact() ) );
267                     if ( node != null )
268                     {
269                         collectResult.getRoot().getChildren().add( node );
270                     }
271                 }
272                 return collectResult;
273             }
274         } );
275
276         Configuration configuration = new Configuration();
277         ManagedRepositoryConfiguration repoConfig = new ManagedRepositoryConfiguration();
278         repoConfig.setId( TEST_REPO_ID );
279         repoConfig.setLocation( new File( "target/test-repository" ).getAbsolutePath() );
280         configuration.addManagedRepository( repoConfig );
281         config.save( configuration );
282
283         //artifactFactory = ((DefaultDependencyTreeBuilder)this.builder).getFactory();
284     }
285
286
287     private Artifact createArtifact( String groupId, String artifactId, String version )
288     {
289         return new DefaultArtifact( groupId, artifactId, null, version );
290     }
291
292     private String getId( Artifact artifact )
293     {
294         return artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion();
295     }
296
297     @Test
298     public void testBuilderDependencies()
299         throws Exception
300     {
301
302         DependencyResolutionResult resolutionResult =
303             builder.buildDependencyTree( Collections.singletonList( TEST_REPO_ID ), TEST_GROUP_ID, TEST_ARTIFACT_ID,
304                                          TEST_VERSION );
305
306         assertNotNull( resolutionResult );
307         assertEquals( 10, resolutionResult.getDependencies().size() );
308
309     }
310 }