/* * 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.ant; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.text.ParseException; import org.apache.ivy.TestHelper; import org.apache.ivy.core.module.descriptor.ModuleDescriptor; import org.apache.ivy.core.settings.IvySettings; import org.apache.ivy.plugins.parser.xml.XmlModuleDescriptorParser; import org.apache.ivy.util.DefaultMessageLogger; import org.apache.ivy.util.FileUtil; import org.apache.ivy.util.Message; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Delete; import org.apache.tools.ant.taskdefs.Echo; import junit.framework.TestCase; public class IvyPublishTest extends TestCase { private File cache; private IvyPublish publish; private Project project; protected void setUp() throws Exception { cleanTestDir(); cleanRep(); createCache(); project = TestHelper.newProject(); project.init(); project.setProperty("ivy.settings.file", "test/repositories/ivysettings.xml"); project.setProperty("build", "build/test/publish"); publish = new IvyPublish(); publish.setProject(project); System.setProperty("ivy.cache.dir", cache.getAbsolutePath()); Message.setDefaultLogger(new DefaultMessageLogger(10)); } private void createCache() { cache = new File("build/cache"); cache.mkdirs(); } protected void tearDown() throws Exception { cleanCache(); cleanTestDir(); cleanRep(); } private void cleanCache() { FileUtil.forceDelete(cache); } private void cleanTestDir() { FileUtil.forceDelete(new File("build/test/publish")); FileUtil.forceDelete(new File("build/test/transactional")); } private void cleanRep() { Delete del = new Delete(); del.setProject(new Project()); del.setDir(new File("test/repositories/1/apache")); del.execute(); } public void testMergeParent() throws IOException, ParseException { // publish the parent descriptor first, so that it can be found while // we are reading the child descriptor. project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-multiconf.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); IvyPublish pubParent = new IvyPublish(); pubParent.setProject(project); pubParent.setResolver("1"); pubParent.setPubrevision("1.0"); File art = new File("build/test/publish/resolve-simple-1.0.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); pubParent.execute(); // update=true implies merge=true project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml"); publish.setResolver("1"); publish.setUpdate(true); publish.setOrganisation("apache"); publish.setModule("resolve-extends"); publish.setRevision("1.0"); publish.setPubrevision("1.2"); publish.setStatus("release"); publish.addArtifactspattern("test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml"); publish.execute(); // should have published the files with "1" resolver File published = new File("test/repositories/1/apache/resolve-extends/ivys/ivy-1.2.xml"); assertTrue(published.exists()); // do a text compare, since we want to test comments as well as structure. // we could do a better job of this with xmlunit int lineNo = 1; BufferedReader merged = new BufferedReader(new FileReader(published)); BufferedReader expected = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream("ivy-extends-merged.xml"))); for (String mergeLine = merged.readLine(), expectedLine = expected.readLine(); mergeLine != null && expectedLine != null; mergeLine = merged.readLine(), expectedLine = expected .readLine()) { // strip timestamps for the comparison if (mergeLine.indexOf("<info") >= 0) { mergeLine = mergeLine.replaceFirst("\\s?publication=\"\\d+\"", ""); } // discard whitespace-only lines if (!(mergeLine.trim().equals("") && expectedLine.trim().equals(""))) { assertEquals("published descriptor matches at line[" + lineNo + "]", expectedLine, mergeLine); } ++lineNo; } } public void testMergeParentWithoutPublishingParent() throws IOException, ParseException { // here we directly publish a module extending ivy-multiconf.xml, // the module parent is not published not yet in cache // See : IVY-1248 // update=true implies merge=true // project.setProperty("ivy.dep.file", // "test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml"); publish.setResolver("1"); publish.setUpdate(true); publish.setOrganisation("apache"); publish.setModule("resolve-extends"); publish.setRevision("1.0"); publish.setPubrevision("1.2"); publish.setStatus("release"); publish.addArtifactspattern("test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml"); publish.execute(); // should have published the files with "1" resolver File published = new File("test/repositories/1/apache/resolve-extends/ivys/ivy-1.2.xml"); assertTrue(published.exists()); // do a text compare, since we want to test comments as well as structure. // we could do a better job of this with xmlunit int lineNo = 1; BufferedReader merged = new BufferedReader(new FileReader(published)); BufferedReader expected = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream("ivy-extends-merged.xml"))); for (String mergeLine = merged.readLine(), expectedLine = expected.readLine(); mergeLine != null && expectedLine != null; mergeLine = merged.readLine(), expectedLine = expected .readLine()) { // strip timestamps for the comparison if (mergeLine.indexOf("<info") >= 0) { mergeLine = mergeLine.replaceFirst("\\s?publication=\"\\d+\"", ""); } // discard whitespace-only lines if (!(mergeLine.trim().equals("") && expectedLine.trim().equals(""))) { assertEquals("published descriptor matches at line[" + lineNo + "]", expectedLine, mergeLine); } ++lineNo; } } public void testMergeParentWithoutPublishingParentForceDeliver() throws IOException, ParseException { // here we directly publish a module extending ivy-multiconf.xml, // the module parent is not published not yet in cache // See : IVY-1248 IvyResolve resolve = new IvyResolve(); resolve.setProject(project); resolve.setFile(new File("test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml")); resolve.execute(); // update=true implies merge=true publish.setResolver("1"); publish.setUpdate(true); publish.setOrganisation("apache"); publish.setModule("resolve-extends"); publish.setRevision("1.0"); publish.setPubrevision("1.2"); publish.setStatus("release"); publish.addArtifactspattern("test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml"); publish.setForcedeliver(true); publish.setSrcivypattern("test/repositories/1/apache/resolve-extends/ivys/ivy-deliver-1.2.xml"); publish.execute(); // should have published the files with "1" resolver File published = new File("test/repositories/1/apache/resolve-extends/ivys/ivy-1.2.xml"); assertTrue(published.exists()); // do a text compare, since we want to test comments as well as structure. // we could do a better job of this with xmlunit int lineNo = 1; BufferedReader merged = new BufferedReader(new FileReader(published)); BufferedReader expected = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream("ivy-extends-merged.xml"))); for (String mergeLine = merged.readLine(), expectedLine = expected.readLine(); mergeLine != null && expectedLine != null; mergeLine = merged.readLine(), expectedLine = expected .readLine()) { // strip timestamps for the comparison if (mergeLine.indexOf("<info") >= 0) { mergeLine = mergeLine.replaceFirst("\\s?publication=\"\\d+\"", ""); } // discard whitespace-only lines if (!(mergeLine.trim().equals("") && expectedLine.trim().equals(""))) { assertEquals("published descriptor matches at line[" + lineNo + "]", expectedLine, mergeLine); } ++lineNo; } } public void testMergeParentWithoutLocationAttribute() throws IOException, ParseException { // See : IVY-XXX IvyResolve resolve = new IvyResolve(); resolve.setProject(project); resolve.setFile(new File("test/java/org/apache/ivy/ant/extends/child1/ivy-child1.xml")); resolve.execute(); // update=true implies merge=true // project.setProperty("ivy.dep.file", // "test/java/org/apache/ivy/ant/ivy-extends-multiconf.xml"); publish.setResolver("1"); publish.setUpdate(true); publish.setPubrevision("1.2"); publish.setStatus("release"); publish.addArtifactspattern("${build}/[artifact].[ext]"); publish.execute(); // should have published the files with "1" resolver File published = new File("test/repositories/1/apache/child1/ivys/ivy-1.2.xml"); assertTrue(published.exists()); // do a text compare, since we want to test comments as well as structure. // we could do a better job of this with xmlunit int lineNo = 1; BufferedReader merged = new BufferedReader(new FileReader(published)); BufferedReader expected = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream("extends/child1/ivy-child1-merged.xml"))); for (String mergeLine = merged.readLine(), expectedLine = expected.readLine(); mergeLine != null && expectedLine != null; mergeLine = merged.readLine(), expectedLine = expected .readLine()) { // strip timestamps for the comparison if (mergeLine.indexOf("<info") >= 0) { mergeLine = mergeLine.replaceFirst("\\s?publication=\"\\d+\"", ""); } // discard whitespace-only lines if (!(mergeLine.trim().equals("") && expectedLine.trim().equals(""))) { assertEquals("published descriptor matches at line[" + lineNo + "]", expectedLine, mergeLine); } ++lineNo; } } public void testMinimalMerge() throws IOException, ParseException { // publish the parent descriptor first, so that it can be found while // we are reading the child descriptor. project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-multiconf.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); IvyPublish pubParent = new IvyPublish(); pubParent.setProject(project); pubParent.setResolver("1"); pubParent.setPubrevision("1.0"); File art = new File("build/test/publish/resolve-simple-1.0.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); pubParent.execute(); // update=true implies merge=true project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-extends-minimal.xml"); publish.setResolver("1"); publish.setUpdate(true); publish.setOrganisation("apache"); publish.setModule("resolve-extends"); publish.setRevision("1.0"); publish.setPubrevision("1.2"); publish.setStatus("release"); publish.addArtifactspattern("test/java/org/apache/ivy/ant/ivy-extends-minimal.xml"); publish.execute(); // should have published the files with "1" resolver File published = new File("test/repositories/1/apache/resolve-minimal/ivys/ivy-1.2.xml"); assertTrue(published.exists()); // do a text compare, since we want to test comments as well as structure. // we could do a better job of this with xmlunit int lineNo = 1; BufferedReader merged = new BufferedReader(new FileReader(published)); BufferedReader expected = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream("ivy-extends-minimal-merged.xml"))); for (String mergeLine = merged.readLine(), expectedLine = expected.readLine(); mergeLine != null && expectedLine != null; mergeLine = merged.readLine(), expectedLine = expected .readLine()) { // strip timestamps for the comparison if (mergeLine.indexOf("<info") >= 0) { mergeLine = mergeLine.replaceFirst("\\s?publication=\"\\d+\"", ""); } // discard whitespace-only lines if (!(mergeLine.trim().equals("") && expectedLine.trim().equals(""))) { assertEquals("published descriptor matches at line[" + lineNo + "]", expectedLine, mergeLine); } ++lineNo; } } public void testMergeExtraAttributes() throws IOException, ParseException { // publish the parent descriptor first, so that it can be found while // we are reading the child descriptor. project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-multiconf.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); IvyPublish pubParent = new IvyPublish(); pubParent.setProject(project); pubParent.setResolver("1"); pubParent.setPubrevision("1.0"); File art = new File("build/test/publish/resolve-simple-1.0.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); pubParent.execute(); // update=true implies merge=true project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-extends-extra-attributes.xml"); res = new IvyResolve(); res.setProject(project); res.execute(); publish.setResolver("1"); publish.setUpdate(true); publish.setOrganisation("apache"); publish.setModule("resolve-minimal"); publish.setRevision("1.0"); publish.setPubrevision("1.2"); publish.setStatus("release"); publish.addArtifactspattern("build/test/publish/ivy-extends-extra-attributes.xml"); publish.setForcedeliver(true); publish.execute(); // should have published the files with "1" resolver File published = new File("test/repositories/1/apache/resolve-minimal/ivys/ivy-1.2.xml"); assertTrue(published.exists()); // do a text compare, since we want to test comments as well as structure. // we could do a better job of this with xmlunit int lineNo = 1; BufferedReader merged = new BufferedReader(new FileReader(published)); BufferedReader expected = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream("ivy-extends-extra-attributes-merged.xml"))); for (String mergeLine = merged.readLine(), expectedLine = expected.readLine(); mergeLine != null && expectedLine != null; mergeLine = merged.readLine(), expectedLine = expected .readLine()) { // strip timestamps for the comparison if (mergeLine.indexOf("<info") >= 0) { mergeLine = mergeLine.replaceFirst("\\s?publication=\"\\d+\"", ""); } // discard whitespace-only lines if (!(mergeLine.trim().equals("") && expectedLine.trim().equals(""))) { assertEquals("published descriptor matches at line[" + lineNo + "]", expectedLine, mergeLine); } ++lineNo; } } public void testMergeExtraAttributesFromParent() throws IOException, ParseException { // publish the parent descriptor first, so that it can be found while // we are reading the child descriptor. project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-multiconf-extra-attributes.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); IvyPublish pubParent = new IvyPublish(); pubParent.setProject(project); pubParent.setResolver("1"); pubParent.setPubrevision("1.0"); File art = new File("build/test/publish/resolve-simple-1.0.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); pubParent.execute(); // update=true implies merge=true project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-extends-extra-attributes-parent.xml"); res = new IvyResolve(); res.setProject(project); res.execute(); publish.setResolver("1"); publish.setUpdate(true); publish.setOrganisation("apache"); publish.setModule("resolve-minimal"); publish.setRevision("1.0"); publish.setPubrevision("1.2"); publish.setStatus("release"); publish.addArtifactspattern("build/test/publish/ivy-extends-extra-attributes.xml"); publish.setForcedeliver(true); publish.execute(); // should have published the files with "1" resolver File published = new File("test/repositories/1/apache/resolve-minimal/ivys/ivy-1.2.xml"); assertTrue(published.exists()); // do a text compare, since we want to test comments as well as structure. // we could do a better job of this with xmlunit int lineNo = 1; BufferedReader merged = new BufferedReader(new FileReader(published)); BufferedReader expected = new BufferedReader(new InputStreamReader(getClass() .getResourceAsStream("ivy-extends-extra-attributes-merged.xml"))); for (String mergeLine = merged.readLine(), expectedLine = expected.readLine(); mergeLine != null && expectedLine != null; mergeLine = merged.readLine(), expectedLine = expected .readLine()) { // strip timestamps for the comparison if (mergeLine.indexOf("<info") >= 0) { mergeLine = mergeLine.replaceFirst("\\s?publication=\"\\d+\"", ""); } // discard whitespace-only lines if (!(mergeLine.trim().equals("") && expectedLine.trim().equals(""))) { assertEquals("published descriptor matches at line[" + lineNo + "]", expectedLine, mergeLine); } ++lineNo; } } public void testSimple() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-multiconf.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setResolver("1"); File art = new File("build/test/publish/resolve-simple-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.execute(); // should have do the ivy delivering assertTrue(new File("build/test/publish/ivy-1.2.xml").exists()); // should have published the files with "1" resolver assertTrue(new File("test/repositories/1/apache/resolve-simple/ivys/ivy-1.2.xml").exists()); assertTrue(new File("test/repositories/1/apache/resolve-simple/jars/resolve-simple-1.2.jar") .exists()); // should have updated published ivy version ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( new IvySettings(), new File("test/repositories/1/apache/resolve-simple/ivys/ivy-1.2.xml").toURI().toURL(), false); assertEquals("1.2", md.getModuleRevisionId().getRevision()); } public void testHaltOnMissing() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-multiconf.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setResolver("1"); publish.setHaltonmissing(true); try { publish.execute(); fail("publish with haltonmissing and a missing artifact should raise an exception"); } catch (BuildException ex) { assertTrue(ex.getMessage().indexOf("missing") != -1); assertTrue(ex.getMessage().indexOf("resolve-simple.jar") != -1); // should have do the ivy delivering assertTrue(new File("build/test/publish/ivy-1.2.xml").exists()); // should not have published the files with "1" resolver assertFalse(new File("test/repositories/1/apache/resolve-simple/ivys/ivy-1.2.xml") .exists()); assertFalse(new File( "test/repositories/1/apache/resolve-simple/jars/resolve-simple-1.2.jar") .exists()); } } public void testHaltOnMissing2() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-publish-multi.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); // in this test case one artifact is available, and the other one is missing // since we use a transactional resolver, no file should be published at all File art = new File("build/test/publish/multi1-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.setPubrevision("1.2"); publish.setResolver("transactional"); publish.setHaltonmissing(true); try { publish.execute(); fail("publish with haltonmissing and a missing artifact should raise an exception"); } catch (BuildException ex) { assertTrue(ex.getMessage().indexOf("missing") != -1); assertTrue(ex.getMessage().indexOf("multi2.jar") != -1); // should have do the ivy delivering assertTrue(new File("build/test/publish/ivy-1.2.xml").exists()); // should not have published the files with "transactional" resolver assertFalse(new File("build/test/transactional/apache/multi/1.2").exists()); } } public void testHaltOnMissing3() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-publish-multi.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); // in this test case one artifact is available, and the other one is missing // this should be detected early and no file should be published at all File art = new File("build/test/publish/multi1-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.setPubrevision("1.2"); publish.setResolver("1"); publish.setHaltonmissing(true); try { publish.execute(); fail("publish with haltonmissing and a missing artifact should raise an exception"); } catch (BuildException ex) { assertTrue(ex.getMessage().indexOf("missing") != -1); assertTrue(ex.getMessage().indexOf("multi2.jar") != -1); // should have do the ivy delivering assertTrue(new File("build/test/publish/ivy-1.2.xml").exists()); // should not have published the files with "transactional" resolver assertFalse(new File("test/repositories/1/apache/multi").exists()); } } public void testPublishNotAllConfigs() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-multiconf.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setResolver("1"); publish.setConf("compile"); publish.setUpdate(true); File art = new File("build/test/publish/resolve-simple-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.execute(); // should have do the ivy delivering assertTrue(new File("build/test/publish/ivy-1.2.xml").exists()); // should have published the files with "1" resolver assertTrue(new File("test/repositories/1/apache/resolve-simple/ivys/ivy-1.2.xml").exists()); assertTrue(new File("test/repositories/1/apache/resolve-simple/jars/resolve-simple-1.2.jar") .exists()); // should have updated published ivy version ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( new IvySettings(), new File("test/repositories/1/apache/resolve-simple/ivys/ivy-1.2.xml").toURI().toURL(), false); assertEquals("1.2", md.getModuleRevisionId().getRevision()); // should only contain the default configuration String[] configs = md.getConfigurationsNames(); assertEquals("Number of configurations not correct", 1, configs.length); assertEquals("Compile configuration not present", "compile", configs[0]); } public void testMultiPatterns() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-publish-multi.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setResolver("1"); File art = new File("build/test/publish/1/multi1-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); art = new File("build/test/publish/2/multi2-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.addArtifactspattern("build/test/publish/1/[artifact]-[revision].[ext]"); publish.addArtifactspattern("build/test/publish/2/[artifact]-[revision].[ext]"); publish.execute(); // should have do the ivy delivering assertTrue(new File("build/test/publish/1/ivy-1.2.xml").exists()); // should have published the files with "1" resolver assertTrue(new File("test/repositories/1/apache/multi/ivys/ivy-1.2.xml").exists()); assertTrue(new File("test/repositories/1/apache/multi/jars/multi1-1.2.jar").exists()); assertTrue(new File("test/repositories/1/apache/multi/jars/multi2-1.2.jar").exists()); } public void testPublishPublicConfigsByWildcard() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-publish-public.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setResolver("1"); publish.setConf("*(public)"); File art = new File("build/test/publish/publish-public-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.addArtifactspattern("build/test/publish/[artifact]-[revision].[ext]"); publish.execute(); // should have do the ivy delivering assertTrue(new File("build/test/publish/ivy-1.2.xml").exists()); // should have published the files with "1" resolver assertTrue(new File("test/repositories/1/apache/publish-public/ivys/ivy-1.2.xml").exists()); assertTrue(new File("test/repositories/1/apache/publish-public/jars/publish-public-1.2.jar") .exists()); } public void testCustom() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-custom.xml"); IvyResolve res = new IvyResolve(); res.setValidate(false); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setPubdate("20060906141243"); publish.setResolver("1"); publish.setValidate(false); File art = new File("build/test/publish/resolve-custom-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.execute(); // should have do the ivy delivering assertTrue(new File("build/test/publish/ivy-1.2.xml").exists()); File dest = new File("test/repositories/1/apache/resolve-custom/ivys/ivy-1.2.xml"); // should have published the files with "1" resolver assertTrue(dest.exists()); assertTrue(new File("test/repositories/1/apache/resolve-custom/jars/resolve-custom-1.2.jar") .exists()); // should have updated published ivy version ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( new IvySettings(), dest.toURI().toURL(), false); assertEquals("1.2", md.getModuleRevisionId().getRevision()); // should have kept custom attributes assertEquals("cval1", md.getModuleRevisionId().getAttribute("custom-info")); assertEquals("cval2", md.getConfiguration("default").getAttribute("custom-conf")); assertEquals("cval3", md.getDependencies()[0].getAttribute("custom-dep")); // should respect the ivy file, with descriptions, ... String expected = FileUtil.readEntirely(new BufferedReader(new InputStreamReader( IvyPublishTest.class.getResourceAsStream("published-ivy-custom.xml")))); String updated = FileUtil.readEntirely(new BufferedReader(new FileReader(dest))); assertEquals(expected, updated); } public void testNoDeliver() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-latest.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.3"); publish.setResolver("1"); publish.setSrcivypattern("build/test/publish/ivy-1.3.xml"); FileUtil.copy(new File("test/java/org/apache/ivy/ant/ivy-publish.xml"), new File( "build/test/publish/ivy-1.3.xml"), null); File art = new File("build/test/publish/resolve-latest-1.3.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.execute(); // should have published the files with "1" resolver assertTrue(new File("test/repositories/1/apache/resolve-latest/ivys/ivy-1.3.xml").exists()); assertTrue(new File("test/repositories/1/apache/resolve-latest/jars/resolve-latest-1.3.jar") .exists()); // the published ivy version should be ok (ok in ivy-publish file) ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( new IvySettings(), new File("test/repositories/1/apache/resolve-latest/ivys/ivy-1.3.xml").toURI().toURL(), false); assertEquals("1.3", md.getModuleRevisionId().getRevision()); // should not have done delivery (replace dynamic revisions with static ones) assertEquals("latest.integration", md.getDependencies()[0].getDependencyRevisionId() .getRevision()); } public void testNoDeliverWithBranch() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-latest.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setUpdate(true); publish.setPubrevision("1.3"); publish.setPubbranch("BRANCH1"); publish.setResolver("1"); publish.setSrcivypattern("build/test/publish/ivy-1.3.xml"); FileUtil.copy(new File("test/java/org/apache/ivy/ant/ivy-publish.xml"), new File( "build/test/publish/ivy-1.3.xml"), null); File art = new File("build/test/publish/resolve-latest-1.3.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.execute(); // should have published the files with "1" resolver assertTrue(new File("test/repositories/1/apache/resolve-latest/ivys/ivy-1.3.xml").exists()); assertTrue(new File("test/repositories/1/apache/resolve-latest/jars/resolve-latest-1.3.jar") .exists()); // the published ivy version should be ok (ok in ivy-publish file) ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( new IvySettings(), new File("test/repositories/1/apache/resolve-latest/ivys/ivy-1.3.xml").toURI().toURL(), false); assertEquals("BRANCH1", md.getModuleRevisionId().getBranch()); assertEquals("1.3", md.getModuleRevisionId().getRevision()); // should not have done delivery (replace dynamic revisions with static ones) assertEquals("latest.integration", md.getDependencies()[0].getDependencyRevisionId() .getRevision()); } public void testForceDeliver() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-latest.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.3"); publish.setResolver("1"); publish.setSrcivypattern("build/test/publish/ivy-1.3.xml"); publish.setForcedeliver(true); FileUtil.copy(new File("test/java/org/apache/ivy/ant/ivy-latest.xml"), new File( "build/test/publish/ivy-1.3.xml"), null); File art = new File("build/test/publish/resolve-latest-1.3.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); publish.execute(); // should have published the files with "1" resolver assertTrue(new File("test/repositories/1/apache/resolve-latest/ivys/ivy-1.3.xml").exists()); assertTrue(new File("test/repositories/1/apache/resolve-latest/jars/resolve-latest-1.3.jar") .exists()); // should have updated published ivy version ModuleDescriptor md = XmlModuleDescriptorParser.getInstance().parseDescriptor( new IvySettings(), new File("test/repositories/1/apache/resolve-latest/ivys/ivy-1.3.xml").toURI().toURL(), false); assertEquals("1.3", md.getModuleRevisionId().getRevision()); } public void testBadNoDeliver() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-latest.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.3"); publish.setResolver("1"); publish.setSrcivypattern("build/test/publish/ivy-1.3.xml"); FileUtil.copy(new File("test/java/org/apache/ivy/ant/ivy-latest.xml"), new File( "build/test/publish/ivy-1.3.xml"), null); File art = new File("build/test/publish/resolve-latest-1.3.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); try { publish.execute(); fail("shouldn't publish ivy file with bad revision"); } catch (BuildException ex) { // normal } } public void testReadonly() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-simple.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setResolver("1"); File art = new File("build/test/publish/resolve-simple-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); Echo echo = new Echo(); echo.setProject(project); echo.setMessage("new version"); echo.setFile(art); echo.execute(); File dest = new File( "test/repositories/1/apache/resolve-simple/jars/resolve-simple-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), dest, null); echo = new Echo(); echo.setProject(project); echo.setMessage("old version"); echo.setFile(dest); echo.execute(); dest.setReadOnly(); try { publish.execute(); fail("by default, publish should fail when a readonly artifact already exist"); } catch (Exception ex) { assertTrue(dest.exists()); BufferedReader reader = new BufferedReader(new FileReader(dest)); assertEquals("old version", reader.readLine()); reader.close(); } } public void testOverwrite() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-simple.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setResolver("1"); File art = new File("build/test/publish/resolve-simple-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); Echo echo = new Echo(); echo.setProject(project); echo.setMessage("new version"); echo.setFile(art); echo.execute(); File dest = new File( "test/repositories/1/apache/resolve-simple/jars/resolve-simple-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), dest, null); echo = new Echo(); echo.setProject(project); echo.setMessage("old version"); echo.setFile(dest); echo.execute(); publish.setOverwrite(true); publish.execute(); assertTrue(dest.exists()); BufferedReader reader = new BufferedReader(new FileReader(dest)); assertEquals("new version", reader.readLine()); reader.close(); } public void testOverwriteReadOnly() throws Exception { project.setProperty("ivy.dep.file", "test/java/org/apache/ivy/ant/ivy-simple.xml"); IvyResolve res = new IvyResolve(); res.setProject(project); res.execute(); publish.setPubrevision("1.2"); publish.setResolver("1"); File art = new File("build/test/publish/resolve-simple-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), art, null); Echo echo = new Echo(); echo.setProject(project); echo.setMessage("new version"); echo.setFile(art); echo.execute(); File dest = new File( "test/repositories/1/apache/resolve-simple/jars/resolve-simple-1.2.jar"); FileUtil.copy(new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"), dest, null); echo = new Echo(); echo.setProject(project); echo.setMessage("old version"); echo.setFile(dest); echo.execute(); dest.setReadOnly(); publish.setOverwrite(true); publish.execute(); assertTrue(dest.exists()); BufferedReader reader = new BufferedReader(new FileReader(dest)); assertEquals("new version", reader.readLine()); reader.close(); } }