/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.apache.ivy.plugins.conflict; import java.io.File; import java.util.Iterator; import java.util.List; import org.apache.ivy.Ivy; import org.apache.ivy.core.module.id.ModuleRevisionId; import org.apache.ivy.core.report.ConfigurationResolveReport; import org.apache.ivy.core.report.ResolveReport; import org.apache.ivy.core.resolve.IvyNode; import org.apache.ivy.core.resolve.ResolveOptions; import org.apache.ivy.util.FileUtil; import junit.framework.TestCase; public class LatestConflictManagerTest extends TestCase { private Ivy ivy; private File _cache; protected void setUp() throws Exception { ivy = new Ivy(); ivy.configure(LatestConflictManagerTest.class.getResource("ivysettings-latest.xml")); _cache = new File("build/cache"); _cache.mkdirs(); } protected void tearDown() throws Exception { FileUtil.forceDelete(_cache); } // Test case for issue IVY-388 public void testIvy388() throws Exception { ResolveReport report = ivy.resolve( LatestConflictManagerTest.class.getResource("ivy-388.xml"), getResolveOptions()); List deps = report.getDependencies(); Iterator dependencies = deps.iterator(); String[] confs = report.getConfigurations(); while (dependencies.hasNext()) { IvyNode node = (IvyNode) dependencies.next(); for (int i = 0; i < confs.length; i++) { String conf = confs[i]; if (!node.isEvicted(conf)) { boolean flag1 = report.getConfigurationReport(conf).getDependency( node.getResolvedId()) != null; boolean flag2 = report.getConfigurationReport(conf).getModuleRevisionIds() .contains(node.getResolvedId()); assertEquals("Inconsistent data for node " + node + " in conf " + conf, flag1, flag2); } } } } // Test case for issue IVY-383 public void testIvy383() throws Exception { ResolveReport report = ivy.resolve( LatestConflictManagerTest.class.getResource("ivy-383.xml"), getResolveOptions()); ConfigurationResolveReport defaultReport = report.getConfigurationReport("default"); Iterator iter = defaultReport.getModuleRevisionIds().iterator(); while (iter.hasNext()) { ModuleRevisionId mrid = (ModuleRevisionId) iter.next(); if (mrid.getName().equals("mod1.1")) { assertEquals("1.0", mrid.getRevision()); } else if (mrid.getName().equals("mod1.2")) { assertEquals("2.2", mrid.getRevision()); } } } // Test case for issue IVY-407 public void testLatestTime1() throws Exception { ivy = new Ivy(); ivy.configure(LatestConflictManagerTest.class.getResource("ivysettings-latest-time.xml")); ivy.getSettings().setVariable("ivy.log.conflict.resolution", "true", true); // set timestamps, because svn is not preserving this information, // and the latest time strategy is relying on it long time = System.currentTimeMillis() - 10000; new File("test/repositories/1/org1/mod1.2/jars/mod1.2-2.0.jar").setLastModified(time); new File("test/repositories/1/org1/mod1.2/jars/mod1.2-2.2.jar") .setLastModified(time + 2000); ResolveReport report = ivy.resolve( LatestConflictManagerTest.class.getResource("ivy-latest-time-1.xml"), getResolveOptions()); ConfigurationResolveReport defaultReport = report.getConfigurationReport("default"); Iterator iter = defaultReport.getModuleRevisionIds().iterator(); while (iter.hasNext()) { ModuleRevisionId mrid = (ModuleRevisionId) iter.next(); if (mrid.getName().equals("mod1.1")) { assertEquals("1.0", mrid.getRevision()); } else if (mrid.getName().equals("mod1.2")) { assertEquals("2.2", mrid.getRevision()); } } } public void testLatestTime2() throws Exception { ivy = new Ivy(); ivy.configure(LatestConflictManagerTest.class.getResource("ivysettings-latest-time.xml")); ivy.getSettings().setVariable("ivy.log.conflict.resolution", "true", true); // set timestamps, because svn is not preserving this information, // and the latest time strategy is relying on it long time = System.currentTimeMillis() - 10000; new File("test/repositories/1/org1/mod1.2/jars/mod1.2-2.0.jar").setLastModified(time); new File("test/repositories/1/org1/mod1.2/jars/mod1.2-2.2.jar") .setLastModified(time + 2000); ResolveReport report = ivy.resolve( LatestConflictManagerTest.class.getResource("ivy-latest-time-2.xml"), getResolveOptions()); ConfigurationResolveReport defaultReport = report.getConfigurationReport("default"); Iterator iter = defaultReport.getModuleRevisionIds().iterator(); while (iter.hasNext()) { ModuleRevisionId mrid = (ModuleRevisionId) iter.next(); if (mrid.getName().equals("mod1.1")) { assertEquals("1.0", mrid.getRevision()); } else if (mrid.getName().equals("mod1.2")) { assertEquals("2.2", mrid.getRevision()); } } } /* * Test case for issue IVY-407 (with transitivity) There are 5 modules A, B, C, D and E. 1) * publish C-1.0.0, C-1.0.1 and C-1.0.2 2) B needs C-1.0.0 : retrieve ok and publish B-1.0.0 3) * A needs B-1.0.0 and C-1.0.2 : retrieve ok and publish A-1.0.0 4) D needs C-1.0.1 : retrieve * ok and publish D-1.0.0 5) E needs D-1.0.0 and A-1.0.0 (D before A in ivy file) retrieve * failed to get C-1.0.2 from A (get apparently C-1.0.1 from D) */ public void testLatestTimeTransitivity() throws Exception { ivy = new Ivy(); ivy.configure(LatestConflictManagerTest.class .getResource("ivysettings-latest-time-transitivity.xml")); ivy.getSettings().setVariable("ivy.log.conflict.resolution", "true", true); // set timestamps, because svn is not preserving this information, // and the latest time strategy is relying on it long time = System.currentTimeMillis() - 10000; new File("test/repositories/IVY-407/MyCompany/C/ivy-1.0.0.xml").setLastModified(time); new File("test/repositories/IVY-407/MyCompany/C/ivy-1.0.1.xml") .setLastModified(time + 2000); new File("test/repositories/IVY-407/MyCompany/C/ivy-1.0.2.xml") .setLastModified(time + 4000); ResolveReport report = ivy.resolve( LatestConflictManagerTest.class.getResource("ivy-latest-time-transitivity.xml"), getResolveOptions()); ConfigurationResolveReport defaultReport = report.getConfigurationReport("default"); Iterator iter = defaultReport.getModuleRevisionIds().iterator(); while (iter.hasNext()) { ModuleRevisionId mrid = (ModuleRevisionId) iter.next(); if (mrid.getName().equals("A")) { assertEquals("A revision should be 1.0.0", "1.0.0", mrid.getRevision()); } else if (mrid.getName().equals("D")) { assertEquals("D revision should be 1.0.0", "1.0.0", mrid.getRevision()); } // by transitivity else if (mrid.getName().equals("B")) { assertEquals("B revision should be 1.0.0", "1.0.0", mrid.getRevision()); } else if (mrid.getName().equals("C")) { assertEquals("C revision should be 1.0.2", "1.0.2", mrid.getRevision()); } } } /* * Test case for issue IVY-1399: * Dependency tree: * Mycompany#target;1 * MyCompany#A;1 * conflicting-dependency#dep;1 * OtherCompany#prefers-later;1 * conflicting-dependency#dep;2 * MyCompany#B;1 * MyCompany#A;1 * ... * OtherCompany#prefers-later;1 * ... * MyCompany#C;1 * conflicting-dependency#dep;1 */ public void testEvictedModules() throws Exception { ivy.configure(LatestConflictManagerTest.class .getResource("ivysettings-evicted.xml")); ivy.getSettings().setVariable("ivy.log.conflict.resolution", "true", true); try { ResolveReport report = ivy.resolve( new File("test/repositories/IVY-1399/MyCompany/target/ivy-1.xml"), getResolveOptions()); report.getConfigurationReport("all"); } catch (IllegalStateException e) { fail("Resolving target should not throw an exception"); } } private ResolveOptions getResolveOptions() { return new ResolveOptions().setValidate(false); } }