From d3e7df29ac4d1352c20f434fec62d8973267c97e Mon Sep 17 00:00:00 2001 From: tbingaman Date: Thu, 4 Sep 2014 09:09:52 -0400 Subject: [PATCH 1/2] Add test cases for IVY-1485. --- .../org/apache/ivy/core/resolve/ResolveTest.java | 182 +++++++++++++++++++++ .../IVY-1485/ivy-overlap-transitive-newer.xml | 32 ++++ .../IVY-1485/ivy-overlap-transitive-older.xml | 32 ++++ test/repositories/IVY-1485/ivy-simple.xml | 31 ++++ test/repositories/IVY-1485/ivysettings.xml | 27 +++ .../IVY-1485/overlap-newer/modA/1/ivy.xml | 26 +++ .../IVY-1485/overlap-newer/modA/5/ivy.xml | 26 +++ .../IVY-1485/overlap-newer/modB/1/ivy.xml | 29 ++++ .../IVY-1485/overlap-older/modA/1/ivy.xml | 26 +++ .../IVY-1485/overlap-older/modA/5/ivy.xml | 26 +++ .../IVY-1485/overlap-older/modB/1/ivy.xml | 29 ++++ test/repositories/IVY-1485/simple/modA/1/ivy.xml | 26 +++ test/repositories/IVY-1485/simple/modA/5/ivy.xml | 26 +++ test/repositories/IVY-1485/simple/modB/1/ivy.xml | 29 ++++ 14 files changed, 547 insertions(+) create mode 100644 test/repositories/IVY-1485/ivy-overlap-transitive-newer.xml create mode 100644 test/repositories/IVY-1485/ivy-overlap-transitive-older.xml create mode 100644 test/repositories/IVY-1485/ivy-simple.xml create mode 100644 test/repositories/IVY-1485/ivysettings.xml create mode 100644 test/repositories/IVY-1485/overlap-newer/modA/1/ivy.xml create mode 100644 test/repositories/IVY-1485/overlap-newer/modA/5/ivy.xml create mode 100644 test/repositories/IVY-1485/overlap-newer/modB/1/ivy.xml create mode 100644 test/repositories/IVY-1485/overlap-older/modA/1/ivy.xml create mode 100644 test/repositories/IVY-1485/overlap-older/modA/5/ivy.xml create mode 100644 test/repositories/IVY-1485/overlap-older/modB/1/ivy.xml create mode 100644 test/repositories/IVY-1485/simple/modA/1/ivy.xml create mode 100644 test/repositories/IVY-1485/simple/modA/5/ivy.xml create mode 100644 test/repositories/IVY-1485/simple/modB/1/ivy.xml diff --git a/test/java/org/apache/ivy/core/resolve/ResolveTest.java b/test/java/org/apache/ivy/core/resolve/ResolveTest.java index bb1e7c8..24714b8 100644 --- a/test/java/org/apache/ivy/core/resolve/ResolveTest.java +++ b/test/java/org/apache/ivy/core/resolve/ResolveTest.java @@ -2154,6 +2154,188 @@ public class ResolveTest extends TestCase { assertFalse(getArchiveFileInCache("org1", "mod1.2", "2.0", "mod1.2", "jar", "jar").exists()); } + public void testDeliverWithTransitiveDepsInDifferentConfs() throws Exception { + // IVY-1485 + + ivy = Ivy.newInstance(); + ivy.configure(new File("test/repositories/IVY-1485/ivysettings.xml")); + + ResolveOptions opts = new ResolveOptions(); + opts.setConfs(new String[] {"*"}); + opts.setResolveId("resolveid"); + opts.setTransitive(true); + + ResolveReport report = ivy.resolve( + new File("test/repositories/IVY-1485/ivy-simple.xml").toURL(), opts); + assertFalse(report.hasError()); + + ModuleRevisionId modAExpectedRevId = ModuleRevisionId.newInstance("simple", "modA", "5"); + + // check that the resolve report has the expected results, namely that the transitive dep on modA#1 has not + // overridden the direct dep on modA#5. This is about testing the consistency of results between the resolve + // report and the delivered descriptor. + + Set reportMrids = report.getConfigurationReport("conf1").getModuleRevisionIds(); + assertEquals( + new HashSet(Arrays.asList(new ModuleRevisionId[] { modAExpectedRevId })), + reportMrids); + + DeliverOptions dopts = new DeliverOptions(); + dopts.setGenerateRevConstraint(true); + dopts.setConfs(new String[] { "*" }); + dopts.setStatus("release"); + dopts.setPubdate(new Date()); + dopts.setResolveId("resolveid"); + String pubrev = "1"; + String deliveryPattern = "build/test/deliver/assembly-[revision].xml"; + + ivy.deliver(pubrev, deliveryPattern, dopts); + + // now check that the resolve report has the same info as the delivered descriptor + + File deliveredIvyFile = new File("build/test/deliver/assembly-1.xml"); + assertTrue(deliveredIvyFile.exists()); + ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( + ivy.getSettings(), deliveredIvyFile.toURL(), false); + DependencyDescriptor[] dds = md.getDependencies(); + assertEquals(2, dds.length); + assertEquals(ModuleRevisionId.newInstance("simple", "modB", "1"), dds[1].getDependencyRevisionId()); + assertEquals(ModuleRevisionId.newInstance("simple", "modA", "5"), dds[0].getDependencyRevisionId()); + } + + public void testDeliverWithTransitiveDepsInOverlappingConfsTransitiveNewer() throws Exception { + // IVY-1485 + + ivy = Ivy.newInstance(); + ivy.configure(new File("test/repositories/IVY-1485/ivysettings.xml")); + + ResolveOptions opts = new ResolveOptions(); + opts.setConfs(new String[] {"*"}); + opts.setResolveId("resolveid"); + opts.setTransitive(true); + + ResolveReport report = ivy.resolve( + new File("test/repositories/IVY-1485/ivy-overlap-transitive-newer.xml").toURL(), opts); + assertFalse(report.hasError()); + + ModuleRevisionId conf1ModAExpectedRevId = ModuleRevisionId.newInstance("overlap-newer", "modA", "1"); + ModuleRevisionId conf2ModBExpectedRevId = ModuleRevisionId.newInstance("overlap-newer", "modB", "1"); + ModuleRevisionId conf2ModAExpectedRevId = ModuleRevisionId.newInstance("overlap-newer", "modA", "5"); + ModuleRevisionId conf3ModBExpectedRevId = ModuleRevisionId.newInstance("overlap-newer", "modB", "1"); + ModuleRevisionId conf3ModAExpectedRevId = ModuleRevisionId.newInstance("overlap-newer", "modA", "5"); + + Set conf1ReportMrids = report.getConfigurationReport("conf1").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf1ModAExpectedRevId})), + conf1ReportMrids); + Set conf2ReportMrids = report.getConfigurationReport("conf2").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf2ModBExpectedRevId, conf2ModAExpectedRevId})), + conf2ReportMrids); + Set conf3ReportMrids = report.getConfigurationReport("conf3").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf3ModBExpectedRevId, conf3ModAExpectedRevId})), + conf3ReportMrids); + + DeliverOptions dopts = new DeliverOptions(); + dopts.setGenerateRevConstraint(true); + dopts.setConfs(new String[] { "*" }); + dopts.setStatus("release"); + dopts.setPubdate(new Date()); + dopts.setResolveId("resolveid"); + String pubrev = "1"; + String deliveryPattern = "build/test/deliver/assembly-[revision].xml"; + + ivy.deliver(pubrev, deliveryPattern, dopts); + + // now check that the resolve report has the same info as the delivered descriptor + + File deliveredIvyFile = new File("build/test/deliver/assembly-1.xml"); + assertTrue(deliveredIvyFile.exists()); + + ResolveReport report2 = ivy.resolve(deliveredIvyFile.toURL(), opts); + assertFalse(report.hasError()); + + Set conf1ReportMrids2 = report2.getConfigurationReport("conf1").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf1ModAExpectedRevId})), + conf1ReportMrids2); + Set conf2ReportMrids2 = report2.getConfigurationReport("conf2").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf2ModBExpectedRevId, conf2ModAExpectedRevId})), + conf2ReportMrids2); + Set conf3ReportMrids2 = report2.getConfigurationReport("conf3").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf3ModBExpectedRevId, conf3ModAExpectedRevId})), + conf3ReportMrids2); + + ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( + ivy.getSettings(), deliveredIvyFile.toURL(), false); + DependencyDescriptor[] dds = md.getDependencies(); + assertEquals(2, dds.length); + assertEquals(ModuleRevisionId.newInstance("overlap-newer", "modA", "1"), dds[0].getDependencyRevisionId()); + assertEquals(ModuleRevisionId.newInstance("overlap-newer", "modB", "1"), dds[1].getDependencyRevisionId()); + } + + public void testDeliverWithTransitiveDepsInOverlappingConfsTransitiveOlder() throws Exception { + // IVY-1485 + + ivy = Ivy.newInstance(); + ivy.configure(new File("test/repositories/IVY-1485/ivysettings.xml")); + + ResolveOptions opts = new ResolveOptions(); + opts.setConfs(new String[] {"*"}); + opts.setResolveId("resolveid"); + opts.setTransitive(true); + + ResolveReport report = ivy.resolve( + new File("test/repositories/IVY-1485/ivy-overlap-transitive-older.xml").toURL(), opts); + assertFalse(report.hasError()); + + ModuleRevisionId conf1ModAExpectedRevId = ModuleRevisionId.newInstance("overlap-older", "modA", "5"); + ModuleRevisionId conf2ModBExpectedRevId = ModuleRevisionId.newInstance("overlap-older", "modB", "1"); + ModuleRevisionId conf2ModAExpectedRevId = ModuleRevisionId.newInstance("overlap-older", "modA", "5"); + ModuleRevisionId conf3ModBExpectedRevId = ModuleRevisionId.newInstance("overlap-older", "modB", "1"); + ModuleRevisionId conf3ModAExpectedRevId = ModuleRevisionId.newInstance("overlap-older", "modA", "1"); + + Set conf1ReportMrids = report.getConfigurationReport("conf1").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf1ModAExpectedRevId})), + conf1ReportMrids); + Set conf2ReportMrids = report.getConfigurationReport("conf2").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf2ModBExpectedRevId, conf2ModAExpectedRevId})), + conf2ReportMrids); + Set conf3ReportMrids = report.getConfigurationReport("conf3").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf3ModBExpectedRevId, conf3ModAExpectedRevId})), + conf3ReportMrids); + + DeliverOptions dopts = new DeliverOptions(); + dopts.setGenerateRevConstraint(true); + dopts.setConfs(new String[] { "*" }); + dopts.setStatus("release"); + dopts.setPubdate(new Date()); + dopts.setResolveId("resolveid"); + String pubrev = "1"; + String deliveryPattern = "build/test/deliver/assembly-[revision].xml"; + + ivy.deliver(pubrev, deliveryPattern, dopts); + + // now check that the resolve report has the same info as the delivered descriptor + + File deliveredIvyFile = new File("build/test/deliver/assembly-1.xml"); + assertTrue(deliveredIvyFile.exists()); + + ResolveReport report2 = ivy.resolve(deliveredIvyFile.toURL(), opts); + assertFalse(report.hasError()); + + Set conf1ReportMrids2 = report2.getConfigurationReport("conf1").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf1ModAExpectedRevId})), + conf1ReportMrids2); + Set conf2ReportMrids2 = report2.getConfigurationReport("conf2").getModuleRevisionIds(); + assertEquals(new HashSet(Arrays.asList(new ModuleRevisionId[] {conf2ModBExpectedRevId, conf2ModAExpectedRevId})), + conf2ReportMrids2); + + ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( + ivy.getSettings(), deliveredIvyFile.toURL(), false); + DependencyDescriptor[] dds = md.getDependencies(); + assertEquals(2, dds.length); + assertEquals(ModuleRevisionId.newInstance("overlap-older", "modA", "5"), dds[0].getDependencyRevisionId()); + assertEquals(ModuleRevisionId.newInstance("overlap-older", "modB", "1"), dds[1].getDependencyRevisionId()); + } + public void testTransitiveEvictionWithExtendingConf() throws Exception { // IVY-590 ResolveReport report = ivy.resolve(ResolveTest.class.getResource("ivy-590.xml"), diff --git a/test/repositories/IVY-1485/ivy-overlap-transitive-newer.xml b/test/repositories/IVY-1485/ivy-overlap-transitive-newer.xml new file mode 100644 index 0000000..6fac61c --- /dev/null +++ b/test/repositories/IVY-1485/ivy-overlap-transitive-newer.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + diff --git a/test/repositories/IVY-1485/ivy-overlap-transitive-older.xml b/test/repositories/IVY-1485/ivy-overlap-transitive-older.xml new file mode 100644 index 0000000..2dbe080 --- /dev/null +++ b/test/repositories/IVY-1485/ivy-overlap-transitive-older.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + diff --git a/test/repositories/IVY-1485/ivy-simple.xml b/test/repositories/IVY-1485/ivy-simple.xml new file mode 100644 index 0000000..addbf81 --- /dev/null +++ b/test/repositories/IVY-1485/ivy-simple.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + diff --git a/test/repositories/IVY-1485/ivysettings.xml b/test/repositories/IVY-1485/ivysettings.xml new file mode 100644 index 0000000..4fa0207 --- /dev/null +++ b/test/repositories/IVY-1485/ivysettings.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/test/repositories/IVY-1485/overlap-newer/modA/1/ivy.xml b/test/repositories/IVY-1485/overlap-newer/modA/1/ivy.xml new file mode 100644 index 0000000..1df2a5a --- /dev/null +++ b/test/repositories/IVY-1485/overlap-newer/modA/1/ivy.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/test/repositories/IVY-1485/overlap-newer/modA/5/ivy.xml b/test/repositories/IVY-1485/overlap-newer/modA/5/ivy.xml new file mode 100644 index 0000000..cc8146b --- /dev/null +++ b/test/repositories/IVY-1485/overlap-newer/modA/5/ivy.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/test/repositories/IVY-1485/overlap-newer/modB/1/ivy.xml b/test/repositories/IVY-1485/overlap-newer/modB/1/ivy.xml new file mode 100644 index 0000000..5bff715 --- /dev/null +++ b/test/repositories/IVY-1485/overlap-newer/modB/1/ivy.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/test/repositories/IVY-1485/overlap-older/modA/1/ivy.xml b/test/repositories/IVY-1485/overlap-older/modA/1/ivy.xml new file mode 100644 index 0000000..db0ecb4 --- /dev/null +++ b/test/repositories/IVY-1485/overlap-older/modA/1/ivy.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/test/repositories/IVY-1485/overlap-older/modA/5/ivy.xml b/test/repositories/IVY-1485/overlap-older/modA/5/ivy.xml new file mode 100644 index 0000000..d927cf5 --- /dev/null +++ b/test/repositories/IVY-1485/overlap-older/modA/5/ivy.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/test/repositories/IVY-1485/overlap-older/modB/1/ivy.xml b/test/repositories/IVY-1485/overlap-older/modB/1/ivy.xml new file mode 100644 index 0000000..6eab94e --- /dev/null +++ b/test/repositories/IVY-1485/overlap-older/modB/1/ivy.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/test/repositories/IVY-1485/simple/modA/1/ivy.xml b/test/repositories/IVY-1485/simple/modA/1/ivy.xml new file mode 100644 index 0000000..796a684 --- /dev/null +++ b/test/repositories/IVY-1485/simple/modA/1/ivy.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/test/repositories/IVY-1485/simple/modA/5/ivy.xml b/test/repositories/IVY-1485/simple/modA/5/ivy.xml new file mode 100644 index 0000000..88c5135 --- /dev/null +++ b/test/repositories/IVY-1485/simple/modA/5/ivy.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/test/repositories/IVY-1485/simple/modB/1/ivy.xml b/test/repositories/IVY-1485/simple/modB/1/ivy.xml new file mode 100644 index 0000000..e8ec067 --- /dev/null +++ b/test/repositories/IVY-1485/simple/modB/1/ivy.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + -- 2.1.0