KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > fr > jayasoft > ivy > resolver > ChainResolverTest


1 /*
2  * This file is subject to the license found in LICENCE.TXT in the root directory of the project.
3  *
4  * #SNAPSHOT#
5  */

6 package fr.jayasoft.ivy.resolver;
7
8 import java.io.File JavaDoc;
9 import java.util.Arrays JavaDoc;
10 import java.util.GregorianCalendar JavaDoc;
11 import java.util.List JavaDoc;
12
13 import org.apache.tools.ant.Project;
14 import org.apache.tools.ant.taskdefs.Delete;
15
16 import junit.framework.TestCase;
17 import fr.jayasoft.ivy.DefaultDependencyDescriptor;
18 import fr.jayasoft.ivy.DependencyDescriptor;
19 import fr.jayasoft.ivy.DependencyResolver;
20 import fr.jayasoft.ivy.Ivy;
21 import fr.jayasoft.ivy.ModuleRevisionId;
22 import fr.jayasoft.ivy.ResolveData;
23 import fr.jayasoft.ivy.ResolvedModuleRevision;
24 import fr.jayasoft.ivy.latest.LatestRevisionStrategy;
25 import fr.jayasoft.ivy.latest.LatestTimeStrategy;
26 import fr.jayasoft.ivy.xml.XmlIvyConfigurationParser;
27
28 /**
29  * Tests ChainResolver
30  */

31 public class ChainResolverTest extends TestCase {
32     private Ivy _ivy;
33     private ResolveData _data;
34     private File JavaDoc _cache;
35     
36     protected void setUp() throws Exception JavaDoc {
37         _ivy = new Ivy();
38         _cache = new File JavaDoc("build/cache");
39         _data = new ResolveData(_ivy, _cache, null, null, true);
40         _cache.mkdirs();
41         _ivy.setDefaultCache(_cache);
42     }
43     
44     protected void tearDown() throws Exception JavaDoc {
45         Delete del = new Delete();
46         del.setProject(new Project());
47         del.setDir(_cache);
48         del.execute();
49     }
50     
51     public void testOrderFromConf() throws Exception JavaDoc {
52         new XmlIvyConfigurationParser(_data.getIvy()).parse(ChainResolverTest.class.getResource("chainresolverconf.xml"));
53         DependencyResolver resolver = _data.getIvy().getResolver("chain");
54         assertNotNull(resolver);
55         assertTrue(resolver instanceof ChainResolver);
56         ChainResolver chain = (ChainResolver)resolver;
57         assertResolversSizeAndNames(chain, 3);
58     }
59
60     private void assertResolversSizeAndNames(ChainResolver chain, int size) {
61         List JavaDoc resolvers = chain.getResolvers();
62         assertEquals(size, resolvers.size());
63         for (int i=0; i < resolvers.size(); i++) {
64             DependencyResolver r = (DependencyResolver)resolvers.get(i);
65             assertEquals(String.valueOf(i+1), r.getName());
66         }
67     }
68     
69     public void testName() throws Exception JavaDoc {
70         ChainResolver chain = new ChainResolver();
71         chain.setIvy(_ivy);
72         chain.setName("chain");
73         assertEquals("chain", chain.getName());
74     }
75     
76     public void testResolveOrder() throws Exception JavaDoc {
77         ChainResolver chain = new ChainResolver();
78         chain.setName("chain");
79         chain.setIvy(_ivy);
80         MockResolver[] resolvers = new MockResolver[] {
81                 MockResolver.buildMockResolver("1", false, null),
82                 MockResolver.buildMockResolver("2", true, null),
83                 MockResolver.buildMockResolver("3", true, null)
84             };
85         for (int i = 0; i < resolvers.length; i++) {
86             chain.add(resolvers[i]);
87         }
88         assertResolversSizeAndNames(chain, resolvers.length);
89         
90         
91         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org","mod", "rev"), false);
92         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
93         assertNotNull(rmr);
94         assertEquals("2", rmr.getResolver().getName());
95         assertEquals(Arrays.asList(new DependencyDescriptor[] {dd}), resolvers[0].askedDeps);
96         assertEquals(Arrays.asList(new DependencyDescriptor[] {dd}), resolvers[1].askedDeps);
97         assertTrue(resolvers[2].askedDeps.isEmpty());
98     }
99     
100     public void testLatestTimeResolve() throws Exception JavaDoc {
101         ChainResolver chain = new ChainResolver();
102         chain.setName("chain");
103         chain.setIvy(_ivy);
104         chain.setLatestStrategy(new LatestTimeStrategy());
105         MockResolver[] resolvers = new MockResolver[] {
106                 MockResolver.buildMockResolver("1", true, new GregorianCalendar JavaDoc(2005, 1, 20).getTime()),
107                 MockResolver.buildMockResolver("2", false, null),
108                 MockResolver.buildMockResolver("3", true, new GregorianCalendar JavaDoc(2005, 1, 25).getTime()), // younger -> should the one kept
109
MockResolver.buildMockResolver("4", false, null),
110                 MockResolver.buildMockResolver("5", true, new GregorianCalendar JavaDoc(2005, 1, 22).getTime()),
111                 MockResolver.buildMockResolver("6", true, new GregorianCalendar JavaDoc(2005, 1, 18).getTime()),
112                 MockResolver.buildMockResolver("7", false, null)
113             };
114         for (int i = 0; i < resolvers.length; i++) {
115             chain.add(resolvers[i]);
116         }
117         assertResolversSizeAndNames(chain, resolvers.length);
118         
119         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org","mod", "latest.integration"), false);
120         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
121         assertNotNull(rmr);
122         assertEquals("3", rmr.getResolver().getName());
123         List JavaDoc ddAsList = Arrays.asList(new DependencyDescriptor[] {dd});
124         for (int i = 0; i < resolvers.length; i++) {
125             assertEquals(ddAsList, resolvers[i].askedDeps);
126         }
127     }
128     
129     public void testLatestRevisionResolve() throws Exception JavaDoc {
130         ChainResolver chain = new ChainResolver();
131         chain.setName("chain");
132         chain.setIvy(_ivy);
133         chain.setLatestStrategy(new LatestRevisionStrategy());
134         MockResolver[] resolvers = new MockResolver[] {
135                 MockResolver.buildMockResolver("1", true, ModuleRevisionId.newInstance("org", "mod", "1"), new GregorianCalendar JavaDoc(2005, 1, 20).getTime()),
136                 MockResolver.buildMockResolver("2", false, null),
137                 MockResolver.buildMockResolver("3", true, ModuleRevisionId.newInstance("org", "mod", "2"), new GregorianCalendar JavaDoc(2005, 1, 25).getTime()),
138                 MockResolver.buildMockResolver("4", false, null),
139                 MockResolver.buildMockResolver("5", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar JavaDoc(2005, 1, 22).getTime()), // latest -> should the one kept
140
MockResolver.buildMockResolver("6", true, ModuleRevisionId.newInstance("org", "mod", "3"), new GregorianCalendar JavaDoc(2005, 1, 18).getTime()),
141                 MockResolver.buildMockResolver("7", false, null)
142             };
143         for (int i = 0; i < resolvers.length; i++) {
144             chain.add(resolvers[i]);
145         }
146         assertResolversSizeAndNames(chain, resolvers.length);
147         
148         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org","mod", "latest.integration"), false);
149         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
150         assertNotNull(rmr);
151         assertEquals("5", rmr.getResolver().getName());
152         List JavaDoc ddAsList = Arrays.asList(new DependencyDescriptor[] {dd});
153         for (int i = 0; i < resolvers.length; i++) {
154             assertEquals(ddAsList, resolvers[i].askedDeps);
155         }
156     }
157     
158     public void testWithDefault() throws Exception JavaDoc {
159         ChainResolver chain = new ChainResolver();
160         chain.setName("chain");
161         chain.setIvy(_ivy);
162         chain.setLatestStrategy(new LatestRevisionStrategy());
163         MockResolver[] resolvers = new MockResolver[] {
164                 MockResolver.buildMockResolver("1", false, null),
165                 MockResolver.buildMockResolver("2", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar JavaDoc(2005, 1, 22).getTime(), true), // latest -> but default
166
MockResolver.buildMockResolver("3", false, null),
167                 MockResolver.buildMockResolver("4", false, null),
168                 MockResolver.buildMockResolver("5", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar JavaDoc(2005, 1, 22).getTime()), // latest -> should the one kept
169
MockResolver.buildMockResolver("6", false, null),
170                 MockResolver.buildMockResolver("7", false, null)
171             };
172         for (int i = 0; i < resolvers.length; i++) {
173             chain.add(resolvers[i]);
174         }
175         assertResolversSizeAndNames(chain, resolvers.length);
176         
177         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org","mod", "4"), false);
178         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
179         assertNotNull(rmr);
180         assertEquals("5", rmr.getResolver().getName());
181         List JavaDoc ddAsList = Arrays.asList(new DependencyDescriptor[] {dd});
182         for (int i = 0; i < 5; i++) {
183             assertEquals(ddAsList, resolvers[i].askedDeps);
184         }
185         for (int i = 5; i < resolvers.length; i++) {
186             assertTrue(resolvers[i].askedDeps.isEmpty());
187         }
188     }
189     
190     public void testLatestWithDefault() throws Exception JavaDoc {
191         ChainResolver chain = new ChainResolver();
192         chain.setName("chain");
193         chain.setIvy(_ivy);
194         chain.setLatestStrategy(new LatestRevisionStrategy());
195         MockResolver[] resolvers = new MockResolver[] {
196                 MockResolver.buildMockResolver("1", true, ModuleRevisionId.newInstance("org", "mod", "1"), new GregorianCalendar JavaDoc(2005, 1, 20).getTime()),
197                 MockResolver.buildMockResolver("2", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar JavaDoc(2005, 1, 22).getTime(), true), // latest -> but default
198
MockResolver.buildMockResolver("3", true, ModuleRevisionId.newInstance("org", "mod", "2"), new GregorianCalendar JavaDoc(2005, 1, 25).getTime()),
199                 MockResolver.buildMockResolver("4", false, null),
200                 MockResolver.buildMockResolver("5", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar JavaDoc(2005, 1, 22).getTime()), // latest -> should the one kept
201
MockResolver.buildMockResolver("6", true, ModuleRevisionId.newInstance("org", "mod", "3"), new GregorianCalendar JavaDoc(2005, 1, 18).getTime()),
202                 MockResolver.buildMockResolver("7", false, null)
203             };
204         for (int i = 0; i < resolvers.length; i++) {
205             chain.add(resolvers[i]);
206         }
207         assertResolversSizeAndNames(chain, resolvers.length);
208         
209         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org","mod", "latest.integration"), false);
210         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
211         assertNotNull(rmr);
212         assertEquals("5", rmr.getResolver().getName());
213         List JavaDoc ddAsList = Arrays.asList(new DependencyDescriptor[] {dd});
214         for (int i = 0; i < resolvers.length; i++) {
215             assertEquals(ddAsList, resolvers[i].askedDeps);
216         }
217     }
218     
219     public void testFixedWithDefault() throws Exception JavaDoc {
220         ChainResolver chain = new ChainResolver();
221         chain.setName("chain");
222         chain.setIvy(_ivy);
223         chain.setLatestStrategy(new LatestRevisionStrategy());
224         MockResolver[] resolvers = new MockResolver[] {
225                 MockResolver.buildMockResolver("1", false, null),
226                 MockResolver.buildMockResolver("2", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar JavaDoc(2005, 1, 22).getTime(), true), // default
227
MockResolver.buildMockResolver("3", false, null),
228                 MockResolver.buildMockResolver("4", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar JavaDoc(2005, 1, 22).getTime()), // not default -> should the one kept
229
MockResolver.buildMockResolver("5", false, null)
230             };
231         for (int i = 0; i < resolvers.length; i++) {
232             chain.add(resolvers[i]);
233         }
234         assertResolversSizeAndNames(chain, resolvers.length);
235         
236         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org","mod", "4"), false);
237         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
238         assertNotNull(rmr);
239         assertEquals("4", rmr.getResolver().getName());
240         List JavaDoc ddAsList = Arrays.asList(new DependencyDescriptor[] {dd});
241         for (int i = 0; i < 4; i++) {
242             assertEquals("invalid asked dependencies for "+resolvers[i], ddAsList, resolvers[i].askedDeps);
243         }
244         for (int i = 4; i < resolvers.length; i++) {
245             assertTrue("invalid asked dependencies for "+resolvers[i], resolvers[i].askedDeps.isEmpty());
246         }
247     }
248     
249     public void testFixedWithDefaultAndRealResolver() throws Exception JavaDoc {
250         // test case for IVY-206
251
ChainResolver chain = new ChainResolver();
252         chain.setName("chain");
253         chain.setIvy(_ivy);
254         
255         // no ivy pattern for first resolver: will only find a 'default' module
256
FileSystemResolver resolver = new FileSystemResolver();
257         resolver.setName("1");
258         resolver.setIvy(_ivy);
259         
260         resolver.addArtifactPattern("test/repositories/1/[organisation]/[module]/[type]s/[artifact]-[revision].[type]");
261         chain.add(resolver);
262         
263         // second resolver has an ivy pattern and will thus find the real module, which should be kept
264
resolver = new FileSystemResolver();
265         resolver.setName("2");
266         resolver.setIvy(_ivy);
267         
268         resolver.addIvyPattern("test/repositories/1/[organisation]/[module]/ivys/ivy-[revision].xml");
269         resolver.addArtifactPattern("test/repositories/1/[organisation]/[module]/[type]s/[artifact]-[revision].[type]");
270         chain.add(resolver);
271         
272         _ivy.addResolver(chain);
273         
274         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org1","mod1.1", "1.0"), false);
275         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
276         assertNotNull(rmr);
277         assertEquals("2", rmr.getResolver().getName());
278     }
279     
280     public void testReturnFirst() throws Exception JavaDoc {
281         ChainResolver chain = new ChainResolver();
282         chain.setName("chain");
283         chain.setIvy(_ivy);
284         chain.setReturnFirst(true);
285         MockResolver[] resolvers = new MockResolver[] {
286                 MockResolver.buildMockResolver("1", true, new GregorianCalendar JavaDoc(2005, 1, 20).getTime()),
287                 MockResolver.buildMockResolver("2", false, null),
288                 MockResolver.buildMockResolver("3", true, new GregorianCalendar JavaDoc(2005, 1, 25).getTime()), // younger -> should the one kept
289
MockResolver.buildMockResolver("4", false, null),
290                 MockResolver.buildMockResolver("5", true, new GregorianCalendar JavaDoc(2005, 1, 22).getTime()),
291                 MockResolver.buildMockResolver("6", true, new GregorianCalendar JavaDoc(2005, 1, 18).getTime()),
292                 MockResolver.buildMockResolver("7", false, null)
293             };
294         for (int i = 0; i < resolvers.length; i++) {
295             chain.add(resolvers[i]);
296         }
297         assertResolversSizeAndNames(chain, resolvers.length);
298         
299         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org","mod", "latest.integration"), false);
300         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
301         assertNotNull(rmr);
302         assertEquals("1", rmr.getResolver().getName());
303         List JavaDoc ddAsList = Arrays.asList(new DependencyDescriptor[] {dd});
304         for (int i = 1; i < resolvers.length; i++) {
305             assertTrue(resolvers[i].askedDeps.isEmpty());
306         }
307     }
308     
309     public void testReturnFirstWithDefaultAndCacheAndRealResolver() throws Exception JavaDoc {
310         // test case for IVY-207
311

312         // 1 ---- we first do a first resolve which puts a default file in cache
313
ChainResolver chain = new ChainResolver();
314         chain.setName("chain");
315         chain.setIvy(_ivy);
316         
317         // no ivy pattern for resolver: will only find a 'default' module
318
FileSystemResolver resolver = new FileSystemResolver();
319         resolver.setName("old");
320         resolver.setIvy(_ivy);
321         
322         resolver.addArtifactPattern("test/repositories/1/[organisation]/[module]/[type]s/[artifact]-[revision].[type]");
323         chain.add(resolver);
324                 
325         _ivy.addResolver(chain);
326         
327         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org1","mod1.1", "1.0"), false);
328         chain.getDependency(dd, _data);
329         
330         // 2 ---- now we ask to resolve dependencies with a chain in return first mode, in which the first resolver
331
// is not able to find the module, but the second is
332

333         chain = new ChainResolver();
334         chain.setName("chain");
335         chain.setIvy(_ivy);
336         chain.setReturnFirst(true);
337         
338         // no pattern for first resolver: will not find the module
339
resolver = new FileSystemResolver();
340         resolver.setName("1");
341         resolver.setIvy(_ivy);
342         
343         chain.add(resolver);
344         
345         // second resolver will find the real module, which should be kept
346
resolver = new FileSystemResolver();
347         resolver.setName("2");
348         resolver.setIvy(_ivy);
349         
350         resolver.addIvyPattern("test/repositories/1/[organisation]/[module]/ivys/ivy-[revision].xml");
351         resolver.addArtifactPattern("test/repositories/1/[organisation]/[module]/[type]s/[artifact]-[revision].[type]");
352         chain.add(resolver);
353         
354         _ivy.addResolver(chain);
355         
356         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
357         assertNotNull(rmr);
358         assertEquals("2", rmr.getResolver().getName());
359     }
360     
361     public void testDual() throws Exception JavaDoc {
362         ChainResolver chain = new ChainResolver();
363         chain.setName("chain");
364         chain.setIvy(_ivy);
365         chain.setDual(true);
366         MockResolver[] resolvers = new MockResolver[] {
367                 MockResolver.buildMockResolver("1", false, null),
368                 MockResolver.buildMockResolver("2", true, null),
369                 MockResolver.buildMockResolver("3", true, null)
370             };
371         for (int i = 0; i < resolvers.length; i++) {
372             chain.add(resolvers[i]);
373         }
374         assertResolversSizeAndNames(chain, resolvers.length);
375         
376         
377         DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(ModuleRevisionId.newInstance("org","mod", "rev"), false);
378         ResolvedModuleRevision rmr = chain.getDependency(dd, _data);
379         assertNotNull(rmr);
380         assertEquals("2", rmr.getResolver().getName());
381         assertEquals("chain", rmr.getArtifactResolver().getName());
382     }
383         
384 }
385
Popular Tags