1 6 package fr.jayasoft.ivy.resolver; 7 8 import java.io.File ; 9 import java.util.Arrays ; 10 import java.util.GregorianCalendar ; 11 import java.util.List ; 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 31 public class ChainResolverTest extends TestCase { 32 private Ivy _ivy; 33 private ResolveData _data; 34 private File _cache; 35 36 protected void setUp() throws Exception { 37 _ivy = new Ivy(); 38 _cache = new File ("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 { 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 { 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 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 { 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 { 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 { 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 (2005, 1, 20).getTime()), 107 MockResolver.buildMockResolver("2", false, null), 108 MockResolver.buildMockResolver("3", true, new GregorianCalendar (2005, 1, 25).getTime()), MockResolver.buildMockResolver("4", false, null), 110 MockResolver.buildMockResolver("5", true, new GregorianCalendar (2005, 1, 22).getTime()), 111 MockResolver.buildMockResolver("6", true, new GregorianCalendar (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 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 { 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 (2005, 1, 20).getTime()), 136 MockResolver.buildMockResolver("2", false, null), 137 MockResolver.buildMockResolver("3", true, ModuleRevisionId.newInstance("org", "mod", "2"), new GregorianCalendar (2005, 1, 25).getTime()), 138 MockResolver.buildMockResolver("4", false, null), 139 MockResolver.buildMockResolver("5", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar (2005, 1, 22).getTime()), MockResolver.buildMockResolver("6", true, ModuleRevisionId.newInstance("org", "mod", "3"), new GregorianCalendar (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 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 { 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 (2005, 1, 22).getTime(), true), MockResolver.buildMockResolver("3", false, null), 167 MockResolver.buildMockResolver("4", false, null), 168 MockResolver.buildMockResolver("5", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar (2005, 1, 22).getTime()), 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 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 { 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 (2005, 1, 20).getTime()), 197 MockResolver.buildMockResolver("2", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar (2005, 1, 22).getTime(), true), MockResolver.buildMockResolver("3", true, ModuleRevisionId.newInstance("org", "mod", "2"), new GregorianCalendar (2005, 1, 25).getTime()), 199 MockResolver.buildMockResolver("4", false, null), 200 MockResolver.buildMockResolver("5", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar (2005, 1, 22).getTime()), MockResolver.buildMockResolver("6", true, ModuleRevisionId.newInstance("org", "mod", "3"), new GregorianCalendar (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 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 { 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 (2005, 1, 22).getTime(), true), MockResolver.buildMockResolver("3", false, null), 228 MockResolver.buildMockResolver("4", true, ModuleRevisionId.newInstance("org", "mod", "4"), new GregorianCalendar (2005, 1, 22).getTime()), 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 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 { 250 ChainResolver chain = new ChainResolver(); 252 chain.setName("chain"); 253 chain.setIvy(_ivy); 254 255 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 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 { 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 (2005, 1, 20).getTime()), 287 MockResolver.buildMockResolver("2", false, null), 288 MockResolver.buildMockResolver("3", true, new GregorianCalendar (2005, 1, 25).getTime()), MockResolver.buildMockResolver("4", false, null), 290 MockResolver.buildMockResolver("5", true, new GregorianCalendar (2005, 1, 22).getTime()), 291 MockResolver.buildMockResolver("6", true, new GregorianCalendar (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 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 { 310 312 ChainResolver chain = new ChainResolver(); 314 chain.setName("chain"); 315 chain.setIvy(_ivy); 316 317 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 333 chain = new ChainResolver(); 334 chain.setName("chain"); 335 chain.setIvy(_ivy); 336 chain.setReturnFirst(true); 337 338 resolver = new FileSystemResolver(); 340 resolver.setName("1"); 341 resolver.setIvy(_ivy); 342 343 chain.add(resolver); 344 345 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 { 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 |