blob: cc43ee18f95a106f92d2cb32aaa0546485af5b5d [file] [log] [blame]
/*
* This file is subject to the license found in LICENCE.TXT in the root directory of the project.
*
* #SNAPSHOT#
*/
package fr.jayasoft.ivy.ant;
import java.io.File;
import java.io.IOException;
import junit.framework.TestCase;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Delete;
import fr.jayasoft.ivy.util.IvyPatternHelper;
public class IvyRetrieveTest extends TestCase {
private static final String IVY_RETRIEVE_PATTERN = "build/test/lib/[organisation]/[module]/ivy-[revision].xml";
private static final String RETRIEVE_PATTERN = "build/test/lib/[conf]/[artifact]-[revision].[type]";
private File _cache;
private IvyRetrieve _retrieve;
private Project _project;
protected void setUp() throws Exception {
createCache();
cleanTestLib();
_project = new Project();
_project.setProperty("ivy.conf.file", "test/repositories/ivyconf.xml");
_retrieve = new IvyRetrieve();
_retrieve.setProject(_project);
_retrieve.setCache(_cache);
_retrieve.setPattern(RETRIEVE_PATTERN);
}
private void createCache() {
_cache = new File("build/cache");
_cache.mkdirs();
}
protected void tearDown() throws Exception {
cleanCache();
cleanTestLib();
}
private void cleanCache() {
Delete del = new Delete();
del.setProject(new Project());
del.setDir(_cache);
del.execute();
}
private void cleanTestLib() {
Delete del = new Delete();
del.setProject(new Project());
del.setDir(new File("build/test/lib"));
del.execute();
}
public void testSimple() throws Exception {
_project.setProperty("ivy.dep.file", "test/java/fr/jayasoft/ivy/ant/ivy-simple.xml");
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org1", "mod1.2", "2.0", "mod1.2", "jar", "jar")).exists());
}
public void testInline() throws Exception {
// we first resolve another ivy file
IvyResolve resolve = new IvyResolve();
resolve.setProject(_project);
resolve.setFile(new File("test/java/fr/jayasoft/ivy/ant/ivy-latest.xml"));
resolve.execute();
assertTrue(_retrieve.getIvyInstance().getArchiveFileInCache(_cache, "org1", "mod1.2", "2.2", "mod1.2", "jar", "jar").exists());
// then we resolve a dependency directly
_retrieve.setOrganisation("org1");
_retrieve.setModule("mod1.2");
_retrieve.setRevision("2.0");
_retrieve.setInline(true);
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org1", "mod1.2", "2.0", "mod1.2", "jar", "jar")).exists());
}
public void testWithConf() throws Exception {
_project.setProperty("ivy.dep.file", "test/repositories/1/org6/mod6.2/ivys/ivy-0.4.xml");
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "mod6.1", "jar", "jar", "default")).exists());
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "mod6.1", "jar", "jar", "extension")).exists());
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org1", "mod1.2", "2.1", "mod1.2", "jar", "jar", "extension")).exists());
}
public void testSync() throws Exception {
_project.setProperty("ivy.dep.file", "test/repositories/1/org6/mod6.2/ivys/ivy-0.4.xml");
_retrieve.setSync(true);
File[] old = new File[] {
new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "mod6.1", "jar", "jar", "unknown")), // unknown configuration
new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "mod6.1", "unknown", "unknown", "default")), // unknown type
new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "unknown", "jar", "jar", "default")), // unknown artifact
new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "unknown", "mod6.1", "jar", "jar", "default")), // unknown revision
};
for (int i = 0; i < old.length; i++) {
touch(old[i]);
}
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "mod6.1", "jar", "jar", "default")).exists());
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "mod6.1", "jar", "jar", "extension")).exists());
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org1", "mod1.2", "2.1", "mod1.2", "jar", "jar", "extension")).exists());
for (int i = 0; i < old.length; i++) {
assertFalse(old[i] +" should have been deleted by sync", old[i].exists());
}
assertFalse(new File("build/test/lib/unknown").exists()); //even conf directory should have been deleted
}
public void testWithAPreviousResolve() throws Exception {
// first we do a resolve in another project
Project project = new Project();
project.setProperty("ivy.conf.file", "test/repositories/ivyconf.xml");
project.setProperty("ivy.dep.file", "test/java/fr/jayasoft/ivy/ant/ivy-simple.xml");
IvyResolve resolve = new IvyResolve();
resolve.setProject(project);
resolve.setCache(_cache);
resolve.execute();
// then we do a retrieve with the correct module information
_retrieve.setOrganisation("jayasoft");
_retrieve.setModule("resolve-simple");
_retrieve.setConf("default");
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN, "org1", "mod1.2", "2.0", "mod1.2",
"jar", "jar")).exists());
}
public void testUseOrigin() throws Exception {
// test case for IVY-304
// first we do a resolve with useOrigin=true in another project
Project project = new Project();
project.setProperty("ivy.conf.file", "test/repositories/ivyconf.xml");
project.setProperty("ivy.dep.file", "test/java/fr/jayasoft/ivy/ant/ivy-simple.xml");
IvyResolve resolve = new IvyResolve();
resolve.setProject(project);
resolve.setCache(_cache);
resolve.setUseOrigin(true);
resolve.execute();
// then we do a retrieve with the correct module information and useOrigin=false
_retrieve.setOrganisation("jayasoft");
_retrieve.setModule("resolve-simple");
_retrieve.setConf("default");
_retrieve.setUseOrigin(false);
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN, "org1", "mod1.2", "2.0", "mod1.2",
"jar", "jar")).exists());
}
public void testFailureWithoutAPreviousResolve() throws Exception {
// we do a retrieve with the module information whereas no resolve has been previously done
try {
_retrieve.setOrganisation("jayasoft");
_retrieve.setModule("resolve-simple");
_retrieve.setConf("default");
_retrieve.execute();
fail("retrieve without previous resolve should have thrown an exception");
} catch (Exception ex) {
// OK
}
}
public void testFailure() throws Exception {
try {
_project.setProperty("ivy.dep.file", "test/java/fr/jayasoft/ivy/ant/ivy-failure.xml");
_retrieve.execute();
fail("failure didn't raised an exception with default haltonfailure setting");
} catch (BuildException ex) {
// ok => should raised an exception
}
}
public void testHaltOnFailure() throws Exception {
try {
_project.setProperty("ivy.dep.file", "test/java/fr/jayasoft/ivy/ant/ivy-failure.xml");
_retrieve.setHaltonfailure(false);
_retrieve.execute();
} catch (BuildException ex) {
fail("failure raised an exception with haltonfailure set to false");
}
}
public void testCustomIvyPattern() throws Exception {
// mod2.5 depends on virtual mod2.3 which depends on mod2.1 which depends on mod1.1 which depends on mod1.2
_project.setProperty("ivy.dep.file", "test/repositories/1/org2/mod2.5/ivys/ivy-0.6.1.xml");
String ivyPattern = IVY_RETRIEVE_PATTERN;
_retrieve.setIvypattern(ivyPattern);
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(ivyPattern,
"org2", "mod2.3", "0.4.1", "ivy", "ivy", "xml")).exists());
assertTrue(new File(IvyPatternHelper.substitute(ivyPattern,
"org2", "mod2.1", "0.3", "ivy", "ivy", "xml")).exists());
assertTrue(new File(IvyPatternHelper.substitute(ivyPattern,
"org1", "mod1.1", "1.0", "ivy", "ivy", "xml")).exists());
assertFalse(new File(IvyPatternHelper.substitute(ivyPattern,
"org1", "mod1.2", "2.0", "ivy", "ivy", "xml")).exists());
}
public void testCustomIvyPatternWithConf() throws Exception {
_project.setProperty("ivy.dep.file", "test/repositories/1/org6/mod6.2/ivys/ivy-0.4.xml");
String ivyPattern = "build/test/lib/[conf]/[organisation]/[module]/ivy-[revision].xml";
_retrieve.setIvypattern(ivyPattern);
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(ivyPattern,
"org6", "mod6.1", "0.4", "ivy", "ivy", "xml", "default")).exists());
assertTrue(new File(IvyPatternHelper.substitute(ivyPattern,
"org6", "mod6.1", "0.4", "ivy", "ivy", "xml", "extension")).exists());
assertFalse(new File(IvyPatternHelper.substitute(ivyPattern,
"org1", "mod1.2", "2.1", "ivy", "ivy", "xml", "extension")).exists());
}
public void testSyncWithIvyPattern() throws Exception {
_project.setProperty("ivy.dep.file", "test/repositories/1/org6/mod6.2/ivys/ivy-0.4.xml");
String ivyPattern = "build/test/lib/[conf]/[organisation]/[module]/ivy-[revision].xml";
_retrieve.setIvypattern(ivyPattern);
_retrieve.setSync(true);
File[] old = new File[] {
new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "mod6.1", "jar", "jar", "unknown")), // unknown configuration
new File(IvyPatternHelper.substitute(RETRIEVE_PATTERN,
"org6", "mod6.1", "0.4", "mod6.1", "unknown", "unknown", "default")), // unknown type
new File(IvyPatternHelper.substitute(ivyPattern,
"org6", "mod6.1", "0.4", "ivy", "ivy", "xml", "unk")), // unknown conf for ivy
new File(IvyPatternHelper.substitute(ivyPattern,
"unknown", "mod6.1", "0.4", "ivy", "ivy", "xml", "default")), // unknown organisation for ivy
};
for (int i = 0; i < old.length; i++) {
touch(old[i]);
}
_retrieve.execute();
assertTrue(new File(IvyPatternHelper.substitute(ivyPattern,
"org6", "mod6.1", "0.4", "ivy", "ivy", "xml", "default")).exists());
assertTrue(new File(IvyPatternHelper.substitute(ivyPattern,
"org6", "mod6.1", "0.4", "ivy", "ivy", "xml", "extension")).exists());
assertFalse(new File(IvyPatternHelper.substitute(ivyPattern,
"org1", "mod1.2", "2.1", "ivy", "ivy", "xml", "extension")).exists());
for (int i = 0; i < old.length; i++) {
assertFalse(old[i] +" should have been deleted by sync", old[i].exists());
}
assertFalse(new File("build/test/lib/unknown").exists());
assertFalse(new File("build/test/lib/unk").exists());
assertFalse(new File("build/test/lib/default/unknown").exists());
}
public void testDoubleRetrieveWithDifferentConfigurations() {
// IVY-315
_project.setProperty("ivy.dep.file", "test/java/fr/jayasoft/ivy/ant/ivy-doubleretrieve.xml");
_retrieve.setConf("compile");
_retrieve.execute();
_retrieve = new IvyRetrieve();
_retrieve.setProject(_project);
_retrieve.setCache(_cache);
_retrieve.setPattern(RETRIEVE_PATTERN);
_retrieve.setConf("compile,unittest");
_retrieve.execute();
}
// creates an empty file, creating parent directories if necessary
private void touch(File file) throws IOException {
if (file.getParentFile() != null) {
file.getParentFile().mkdirs();
}
file.createNewFile();
}
}