blob: aa7ff67edcf14f65ac4124316f6b8b4a4036667d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2017 IBM Corporation and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which accompanies this distribution,
* and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors: IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.build.internal.tests;
import static org.junit.Assume.assumeTrue;
import java.io.File;
import java.net.URL;
import java.util.*;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.*;
import org.eclipse.pde.build.tests.BuildConfiguration;
import org.eclipse.pde.build.tests.PDETestCase;
import org.eclipse.pde.internal.build.FetchScriptGenerator;
import org.eclipse.pde.internal.build.IPDEBuildConstants;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
/**
* These tests are not included in the main test suite unless the
* "pde.build.includeFetch" system property is defined. This is because the test
* machines have firewalls which cause some of the tests to fail.
*/
@RunWith(BlockJUnit4ClassRunner.class)
public class FetchTests extends PDETestCase {
@BeforeClass
public static void enable() {
assumeTrue(System.getProperty("pde.build.includeFetch") != null);
}
@Test
public void testBug174194() throws Exception {
IFolder buildFolder = newTest("174194");
IFile script = buildFolder.getFile("testbuild.xml");
try {
runAntScript(script.getLocation().toOSString(), new String[] { "default" },
buildFolder.getLocation().toOSString(), new Properties());
} catch (Exception e) {
assertTrue(e.getMessage()
.endsWith("Could not retrieve feature.xml or build.properties for feature org.eclipse.rcp."));
}
assertResourceFile(buildFolder, "log.log");
assertLogContainsLine(buildFolder.getFile("log.log"),
"Could not retrieve feature.xml or build.properties for feature org.eclipse.rcp");
}
@Test
public void testGetUnpack() throws Exception {
IFolder buildFolder = newTest("testGetUnpack");
StringBuffer buffer = new StringBuffer();
buffer.append(
"plugin@javax.xml.rpc,1.1.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/bundles/javax.xml.rpc_1.1.0.v200905122109.zip,unpack=true\n");
buffer.append(
"plugin@com.ibm.icu.base,3.6.0=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/updateSite/plugins/com.ibm.icu.base_3.6.0.v20080530.jar,unpack=true,dest=${buildDirectory}/plugins/com.ibm.icu.base_3.6.0/.zip\n");
buffer.append(
"plugin@com.ibm.icu.base,3.6.1=GET,http://download.eclipse.org/tools/orbit/downloads/drops/R20090825191606/updateSite/plugins/com.ibm.icu.base_3.6.1.v20080530.jar,unpack=true\n");
Utils.writeBuffer(buildFolder.getFile("directory.txt"), buffer);
Utils.generateFeature(buildFolder, "org.eclipse.pde.build.container.feature", null,
new String[] { "javax.xml.rpc", "com.ibm.icu.base;version=3.6.0.qualifier",
"com.ibm.icu.base;version=3.6.1.qualifier" });
Properties fetchProperties = new Properties();
fetchProperties.put("buildDirectory", buildFolder.getLocation().toOSString());
fetchProperties.put("type", "feature");
fetchProperties.put("id", "org.eclipse.pde.build.container.feature");
URL resource = FileLocator.find(Platform.getBundle("org.eclipse.pde.build"),
new Path("/scripts/genericTargets.xml"), null);
String buildXMLPath = FileLocator.toFileURL(resource).getPath();
runAntScript(buildXMLPath, new String[] { "fetchElement" }, buildFolder.getLocation().toOSString(),
fetchProperties);
assertResourceFile(buildFolder.getFile("plugins/javax.xml.rpc_1.1.0.v200905122109/META-INF/MANIFEST.MF"));
assertResourceFile(buildFolder.getFile("plugins/com.ibm.icu.base_3.6.0/META-INF/MANIFEST.MF"));
assertResourceFile(buildFolder.getFile("plugins/com.ibm.icu.base_3.6.1.v20080530/META-INF/MANIFEST.MF"));
}
@Test
public void testFetchFeature() throws Exception {
IFolder buildFolder = newTest("fetchFeature");
StringBuffer buffer = new StringBuffer();
buffer.append(
"feature@org.eclipse.cvs=v20090619,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.cvs-feature\n");
buffer.append(
"plugin@org.eclipse.cvs=v20090520,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.cvs\n");
buffer.append(
"plugin@org.eclipse.team.cvs.core=I20090430-0408,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,\n");
buffer.append(
"plugin@org.eclipse.team.cvs.ssh2=I20090508-2000,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,\n");
buffer.append(
"plugin@org.eclipse.team.cvs.ui=I20090521-1750,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,\n");
Utils.writeBuffer(buildFolder.getFile("directory.txt"), buffer);
Properties fetchProperties = new Properties();
fetchProperties.put("buildDirectory", buildFolder.getLocation().toOSString());
fetchProperties.put("type", "feature");
fetchProperties.put("id", "org.eclipse.cvs");
URL resource = FileLocator.find(Platform.getBundle("org.eclipse.pde.build"),
new Path("/scripts/genericTargets.xml"), null);
String buildXMLPath = FileLocator.toFileURL(resource).getPath();
runAntScript(buildXMLPath, new String[] { "fetchElement" }, buildFolder.getLocation().toOSString(),
fetchProperties);
IFile sourceRefsFile = buildFolder.getFile(IPDEBuildConstants.DEFAULT_SOURCE_REFERENCES_FILENAME_DESCRIPTOR);
assertResourceFile(sourceRefsFile);
Properties sourceRefs = Utils.loadProperties(sourceRefsFile);
assertEquals(sourceRefs.get("org.eclipse.cvs,0.0.0"),
"scm:cvs:pserver:dev.eclipse.org:/cvsroot/eclipse:org.eclipse.sdk-feature/plugins/org.eclipse.cvs;tag=v20090520");
assertEquals(sourceRefs.get("org.eclipse.team.cvs.core,0.0.0"),
"scm:cvs:pserver:dev.eclipse.org:/cvsroot/eclipse:org.eclipse.team.cvs.core;tag=I20090430-0408");
assertEquals(sourceRefs.get("org.eclipse.team.cvs.ssh2,0.0.0"),
"scm:cvs:pserver:dev.eclipse.org:/cvsroot/eclipse:org.eclipse.team.cvs.ssh2;tag=I20090508-2000");
}
@Test
public void testFetch_308696() throws Exception {
IFolder buildFolder = newTest("308696");
StringBuffer buffer = new StringBuffer();
buffer.append(
"feature@org.eclipse.cvs=v20090619,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.cvs-feature\n");
buffer.append(
"plugin@org.eclipse.cvs=v20100407,user@dev.eclipse.org:/cvsroot/eclipse,,org.eclipse.sdk-feature/plugins/org.eclipse.cvs\n");
buffer.append("plugin@org.eclipse.team.cvs.core=I20100310-0800,user@dev.eclipse.org:/cvsroot/eclipse,\n");
buffer.append(
"plugin@org.eclipse.team.cvs.ssh2=I20090508-2000,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,\n");
buffer.append(
"plugin@org.eclipse.team.cvs.ui=I20090521-1750,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,\n");
Utils.writeBuffer(buildFolder.getFile("directory.txt"), buffer);
StringBuffer script = new StringBuffer();
script.append("<project> \n");
script.append(" <target name=\"fetchElement\"> \n");
script.append(" <mkdir dir=\"${buildDirectory}/features\"/> \n");
script.append(" <mkdir dir=\"${buildDirectory}/plugins\"/> \n");
script.append(" <eclipse.fetch \n");
script.append(" elements=\"feature@org.eclipse.cvs\" \n");
script.append(" buildDirectory=\"${buildDirectory}\" \n");
script.append(" directory=\"${buildDirectory}/directory.txt\" \n");
// script.append(" baseLocation=\"${baseLocation}\" \n");
script.append(" /> \n");
script.append(" </target> \n");
script.append("</project> \n");
IFile scriptFile = buildFolder.getFile("script.xml");
Utils.writeBuffer(scriptFile, script);
Properties fetchProperties = new Properties();
fetchProperties.put("buildDirectory", buildFolder.getLocation().toOSString());
// fetchProperties.put("baseLocation",
// Platform.getInstallLocation().getURL().getPath());
runAntScript(scriptFile.getLocation().toOSString(), new String[] { "fetchElement" },
buildFolder.getLocation().toOSString(), fetchProperties);
IFile sourceRefsFile = buildFolder.getFile(IPDEBuildConstants.DEFAULT_SOURCE_REFERENCES_FILENAME_DESCRIPTOR);
assertResourceFile(sourceRefsFile);
Properties sourceRefs = Utils.loadProperties(sourceRefsFile);
assertEquals(sourceRefs.get("org.eclipse.cvs,0.0.0"),
"scm:cvs:pserver:dev.eclipse.org:/cvsroot/eclipse:org.eclipse.sdk-feature/plugins/org.eclipse.cvs;tag=v20100407");
assertEquals(sourceRefs.get("org.eclipse.team.cvs.core,0.0.0"),
"scm:cvs:pserver:dev.eclipse.org:/cvsroot/eclipse:org.eclipse.team.cvs.core;tag=I20100310-0800");
}
@Test
public void testFetchP2Feature() throws Exception {
IFolder buildFolder = newTest("p2.fetchFeature");
StringBuffer buffer = new StringBuffer();
buffer.append(
"feature@org.eclipse.cvs=p2IU,id=org.eclipse.cvs.feature.jar,repository=http://eclipsebuildserv/3.7-I-builds/\n");
buffer.append(
"plugin@org.eclipse.cvs=p2IU,id=org.eclipse.cvs,repository=http://eclipsebuildserv/3.7-I-builds/\n");
buffer.append(
"plugin@org.eclipse.team.cvs.core=p2IU,id=org.eclipse.team.cvs.core,repository=http://eclipsebuildserv/3.7-I-builds/\n");
buffer.append(
"plugin@org.eclipse.team.cvs.ssh2=p2IU,id=org.eclipse.team.cvs.ssh2,repository=http://eclipsebuildserv/3.7-I-builds/\n");
buffer.append(
"plugin@org.eclipse.team.cvs.ui=p2IU,id=org.eclipse.team.cvs.ui,repository=http://eclipsebuildserv/3.7-I-builds/\n");
Utils.writeBuffer(buildFolder.getFile("directory.txt"), buffer);
Properties fetchProperties = new Properties();
fetchProperties.put("buildDirectory", buildFolder.getLocation().toOSString());
fetchProperties.put("transformedRepoLocation", buildFolder.getLocation().toOSString());
fetchProperties.put("type", "feature");
fetchProperties.put("id", "org.eclipse.cvs");
URL resource = FileLocator.find(Platform.getBundle("org.eclipse.pde.build"),
new Path("/scripts/genericTargets.xml"), null);
String buildXMLPath = FileLocator.toFileURL(resource).getPath();
runAntScript(buildXMLPath, new String[] { "fetchElement" }, buildFolder.getLocation().toOSString(),
fetchProperties);
File features = new File(buildFolder.getLocation().toFile(), "features");
File plugins = new File(buildFolder.getLocation().toFile(), "plugins");
assertEquals(features.list().length, 1);
assertEquals(plugins.list().length, 4);
}
@Test
public void testFetchLicenseFeature() throws Exception {
IFolder buildFolder = newTest("license.fetchFeature");
StringBuffer buffer = new StringBuffer();
buffer.append(
"feature@F1=HEAD,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests/resources/licenseFeature1/features/F1\n");
buffer.append(
"feature@L1=HEAD,:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse,,pde/build/org.eclipse.pde.build.tests/resources/licenseFeature1/features/L1\n");
Utils.writeBuffer(buildFolder.getFile("directory.txt"), buffer);
Properties fetchProperties = new Properties();
fetchProperties.put("buildDirectory", buildFolder.getLocation().toOSString());
fetchProperties.put("type", "feature");
fetchProperties.put("id", "F1");
URL resource = FileLocator.find(Platform.getBundle("org.eclipse.pde.build"),
new Path("/scripts/genericTargets.xml"), null);
String buildXMLPath = FileLocator.toFileURL(resource).getPath();
runAntScript(buildXMLPath, new String[] { "fetchElement" }, buildFolder.getLocation().toOSString(),
fetchProperties);
File features = new File(buildFolder.getLocation().toFile(), "features");
assertEquals(2, features.list().length);
}
@Test
public void testBug248767_2() throws Exception {
IFolder buildFolder = newTest("248767_2");
IFolder base = Utils.createFolder(buildFolder, "base");
IFolder A = Utils.createFolder(buildFolder, "plugins/A");
Utils.generateFeature(buildFolder, "org.eclipse.pde.build.container.feature", null,
new String[] { "org.eclipse.osgi.util", "A" });
StringBuffer buffer = new StringBuffer(
"plugin@org.eclipse.osgi.util=v20080303,:pserver:anonymous@dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util");
Utils.createFolder(buildFolder, "maps");
Utils.writeBuffer(buildFolder.getFile("maps/test.map"), buffer);
Utils.generatePluginBuildProperties(A, null);
Attributes manifestAdditions = new Attributes();
manifestAdditions.put(new Attributes.Name("Require-Bundle"), "org.eclipse.osgi.util");
Utils.generateBundleManifest(A, "A", "1.0.0", manifestAdditions);
buffer = new StringBuffer();
buffer.append("import org.osgi.util.measurement.Measurement;");
buffer.append("public class Foo { ");
buffer.append(" public static void main(String[] args) { ");
buffer.append(" Measurement m = new Measurement(1.0); ");
buffer.append(" } ");
buffer.append("} ");
Utils.createFolder(A, "src");
Utils.writeBuffer(A.getFile("src/Foo.java"), buffer);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "org.eclipse.pde.build.container.feature");
properties.put("baseLocation", base.getLocation().toOSString());
properties.put("pluginPath",
FileLocator.getBundleFile(Platform.getBundle("org.eclipse.osgi")).getAbsolutePath());
properties.remove("skipFetch");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
}
@Test
public void testBug171869_Get() throws Exception {
IFolder buildFolder = newTest("171869");
Utils.createFolder(buildFolder, "plugins");
// org.eclipse.pde.build.container.feature is special in that the fetch won't
// try
// to fetch it, and will just fetch everything it includes.
Properties fetchProperties = new Properties();
fetchProperties.put("buildDirectory", buildFolder.getLocation().toOSString());
fetchProperties.put("type", "feature");
fetchProperties.put("id", "org.eclipse.pde.build.container.feature");
URL resource = FileLocator.find(Platform.getBundle("org.eclipse.pde.build"),
new Path("/scripts/genericTargets.xml"), null);
String buildXMLPath = FileLocator.toFileURL(resource).getPath();
runAntScript(buildXMLPath, new String[] { "fetchElement" }, buildFolder.getLocation().toOSString(),
fetchProperties);
assertResourceFile(buildFolder, "plugins/com.ibm.icu.base_3.6.1.v20080530.jar");
assertResourceFile(buildFolder, "plugins/com.ibm.icu.base_3.6.0.v20080530.jar");
}
@Test
public void testP2Get() throws Exception {
IFolder buildFolder = newTest("p2.get");
Utils.createFolder(buildFolder, "plugins");
// copy over the directory.txt file and make sure that it has the right location
// for the repository
URL mapFile = FileLocator.find(Platform.getBundle("org.eclipse.pde.build.tests"),
new Path("/resources/p2.get/directory.txt.template"), null);
URL repoLocation = FileLocator.find(Platform.getBundle("org.eclipse.pde.build.tests"),
new Path("/resources/repos/1"), null);
repoLocation = FileLocator.resolve(repoLocation);
Map<String, String> replacements = new HashMap<>();
replacements.put("repoLocation", repoLocation.toExternalForm());
Utils.transferAndReplace(mapFile, buildFolder.getFile("directory.txt"), replacements);
// org.eclipse.pde.build.container.feature is special in that the fetch won't
// try
// to fetch it, and will just fetch everything it includes.
Properties fetchProperties = new Properties();
fetchProperties.put("buildDirectory", buildFolder.getLocation().toOSString());
fetchProperties.put("transformedRepoLocation", buildFolder.getLocation().toOSString());
fetchProperties.put("type", "feature");
fetchProperties.put("id", "org.eclipse.pde.build.container.feature");
URL resource = FileLocator.find(Platform.getBundle("org.eclipse.pde.build"),
new Path("/scripts/genericTargets.xml"), null);
String buildXMLPath = FileLocator.toFileURL(resource).getPath();
runAntScript(buildXMLPath, new String[] { "fetchElement" }, buildFolder.getLocation().toOSString(),
fetchProperties);
assertResourceFile(buildFolder, "plugins/aBundle_1.0.0.jar");
}
@Test
public void testBug306510() throws Exception {
IFolder buildFolder = newTest("306510");
Utils.generateFeature(buildFolder, "org.eclipse.pde.build.container.feature", null,
new String[] { "org.eclipse.osgi.util;version=3.2.100.vR_qualifier" });
StringBuffer buffer = new StringBuffer(
"plugin@org.eclipse.osgi.util,3.2.100.vR_qualifier=v20100108,:pserver:anonymous@dev.eclipse.org:/cvsroot/rt,,org.eclipse.equinox/compendium/bundles/org.eclipse.osgi.util");
Utils.createFolder(buildFolder, "maps");
Utils.writeBuffer(buildFolder.getFile("maps/test.map"), buffer);
StringBuffer customBuffer = new StringBuffer();
customBuffer
.append("<project name=\"custom\" default=\"noDefault\"> \n");
customBuffer
.append(" <import file=\"${eclipse.pdebuild.templates}/headless-build/customTargets.xml\"/> \n");
customBuffer
.append(" <target name=\"postFetch\"> \n");
customBuffer.append(
" <replace file=\"${buildDirectory}/plugins/org.eclipse.osgi.util_3.2.100.vR_qualifier/META-INF/MANIFEST.MF\" \n");
customBuffer
.append(" token=\"qualifier\" value=\"vR_qualifier\" /> \n");
customBuffer
.append(" </target> \n");
customBuffer
.append("</project> \n");
Utils.writeBuffer(buildFolder.getFile("customTargets.xml"), customBuffer);
Properties properties = BuildConfiguration.getBuilderProperties(buildFolder);
properties.put("topLevelElementId", "org.eclipse.pde.build.container.feature");
properties.put("archivesFormat", "*,*,*-folder");
properties.remove("skipFetch");
Utils.storeBuildProperties(buildFolder, properties);
runBuild(buildFolder);
Manifest m = Utils.loadManifest(buildFolder
.getFile("tmp/eclipse/plugins/org.eclipse.osgi.util_3.2.100.vR_v20100108/META-INF/MANIFEST.MF"));
assertEquals(m.getMainAttributes().getValue("Bundle-Version"), "3.2.100.vR_v20100108");
}
@Test
public void testBug351740() throws Exception {
FetchScriptGenerator generator = new FetchScriptGenerator();
generator.setFetchTagAsString("CVS=HEAD,GIT=master;platform.ui=development,SVN=trunk;platform.ui=maintenance");
Properties tags = generator.getOverrideTags("CVS");
assertEquals(tags.getProperty("CVS"), "HEAD");
assertEquals(tags.getProperty("GIT"), "master");
assertEquals(tags.getProperty("SVN"), "trunk");
assertFalse(tags.containsKey("platform.ui"));
tags = generator.getOverrideTags("GIT");
assertEquals(tags.getProperty("GIT"), "master");
assertEquals(tags.getProperty("platform.ui"), "development");
tags = generator.getOverrideTags("SVN");
assertEquals(tags.getProperty("platform.ui"), "maintenance");
generator.setFetchTagAsString("GIT=master,HEAD;foo=bar");
tags = generator.getOverrideTags("GIT");
assertEquals(tags.getProperty("GIT"), "master");
assertEquals(tags.getProperty("CVS"), "HEAD");
assertEquals(tags.size(), 2);
tags = generator.getOverrideTags("CVS");
assertEquals(tags.getProperty("foo"), "bar");
assertEquals(tags.size(), 3);
}
}