diff options
author | DJ Houghton | 2008-10-17 19:20:36 +0000 |
---|---|---|
committer | DJ Houghton | 2008-10-17 19:20:36 +0000 |
commit | bb673011932a8ff7f5a76210a2cd7c63a9c3c241 (patch) | |
tree | 9962fca3e4e60075a5bb1b9d447cba89b2e91404 | |
parent | 7fa5abedf9b119be0e3500fff07794835862f5ce (diff) | |
download | rt.equinox.p2-bb673011932a8ff7f5a76210a2cd7c63a9c3c241.tar.gz rt.equinox.p2-bb673011932a8ff7f5a76210a2cd7c63a9c3c241.tar.xz rt.equinox.p2-bb673011932a8ff7f5a76210a2cd7c63a9c3c241.zip |
Bug 251230 - [reconciler] Add test reconciler test suite to 3.4.x testsR34x_20081017
21 files changed, 1135 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tests/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.tests/META-INF/MANIFEST.MF index 467a02ca9..f7eeb603e 100644 --- a/bundles/org.eclipse.equinox.p2.tests/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.equinox.p2.tests/META-INF/MANIFEST.MF @@ -17,6 +17,7 @@ Import-Package: org.eclipse.equinox.internal.p2.artifact.repository, org.eclipse.equinox.internal.p2.persistence, org.eclipse.equinox.internal.p2.resolution, org.eclipse.equinox.internal.p2.touchpoint.eclipse, + org.eclipse.equinox.internal.p2.update, org.eclipse.equinox.internal.p2.updatesite, org.eclipse.equinox.internal.p2.updatesite.artifact, org.eclipse.equinox.internal.p2.updatesite.metadata, @@ -37,6 +38,7 @@ Import-Package: org.eclipse.equinox.internal.p2.artifact.repository, org.eclipse.equinox.internal.provisional.spi.p2.artifact.repository, org.eclipse.equinox.internal.provisional.spi.p2.core.repository, org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository, + org.eclipse.osgi.service.datalocation;version="1.1.0", org.eclipse.osgi.service.environment;version="1.0.0", org.eclipse.osgi.service.resolver;version="1.1.0", org.eclipse.osgi.service.urlconversion;version="1.0.0", diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AutomatedTests.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AutomatedTests.java index e96fd0fe0..29de2c821 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AutomatedTests.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AutomatedTests.java @@ -34,6 +34,7 @@ public class AutomatedTests extends TestCase { suite.addTest(org.eclipse.equinox.p2.tests.updatesite.AllTests.suite()); suite.addTest(org.eclipse.equinox.p2.tests.extensionlocation.AllTests.suite()); suite.addTest(org.eclipse.equinox.p2.tests.touchpoint.eclipse.AllTests.suite()); + suite.addTest(org.eclipse.equinox.p2.tests.reconciler.dropins.AllTests.suite()); return suite; } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/AbstractReconcilerTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/AbstractReconcilerTest.java new file mode 100644 index 000000000..6761be390 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/AbstractReconcilerTest.java @@ -0,0 +1,453 @@ +/******************************************************************************* + * Copyright (c) 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.p2.tests.reconciler.dropins; + +import java.io.*; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.*; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.equinox.internal.p2.core.helpers.*; +import org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry; +import org.eclipse.equinox.internal.p2.engine.SurrogateProfileHandler; +import org.eclipse.equinox.internal.p2.update.*; +import org.eclipse.equinox.internal.p2.updatesite.Activator; +import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.engine.IProfile; +import org.eclipse.equinox.internal.provisional.p2.metadata.query.InstallableUnitQuery; +import org.eclipse.equinox.internal.provisional.p2.query.Collector; +import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; +import org.eclipse.equinox.p2.tests.TestActivator; +import org.eclipse.osgi.service.datalocation.Location; +import org.osgi.framework.Version; + +public class AbstractReconcilerTest extends AbstractProvisioningTest { + + private static File output; + protected static Set toRemove = new HashSet(); + private static boolean initialized = false; + + /* + * Constructor for the class. + */ + public AbstractReconcilerTest(String name) { + super(name); + } + + /* + * Set up the platform binary download and get it ready to run the tests. + * This method is not intended to be called by clients, it will be called + * automatically when the clients use a ReconcilerTestSuite. + */ + public void initialize() throws Exception { + initialized = false; + File file = getPlatformZip(); + output = getUniqueFolder(); + toRemove.add(output); + // for now we will exec to un-tar archives to keep the executable bits + if (file.getName().toLowerCase().endsWith(".zip")) { + try { + FileUtils.unzipFile(file, output); + } catch (IOException e) { + fail("0.99", e); + } + } else { + untar("1.0", file); + } + initialized = true; + } + + public void assertInitialized() { + assertTrue("Test suite not initialized, check log for previous errors.", initialized); + } + + /* + * Run the given command. + */ + private void run(String message, String command) { + try { + Process process = Runtime.getRuntime().exec(command, null, output); + process.waitFor(); + } catch (IOException e) { + fail(message, e); + } catch (InterruptedException e) { + fail(message, e); + } + } + + /* + * Untar the given file in the output directory. + */ + private void untar(String message, File file) { + String name = file.getName(); + File gzFile = new File(output, name); + output.mkdirs(); + run(message, "cp " + file + " " + gzFile); + run(message, "tar -zpxf" + gzFile); + gzFile.delete(); + } + + /* + * Return a file object with a unique name in a temporary location. + */ + public static File getUniqueFolder() { + String tempDir = System.getProperty("java.io.tmpdir"); + return new File(tempDir, getUniqueString()); + } + + /* + * Helper method to return the install location. Return null if it is unavailable. + */ + public static File getInstallLocation() { + Location installLocation = (Location) ServiceHelper.getService(TestActivator.getContext(), Location.class.getName(), Location.INSTALL_FILTER); + if (installLocation == null || !installLocation.isSet()) + return null; + URL url = installLocation.getURL(); + if (url == null) + return null; + return URLUtil.toFile(url); + } + + /* + * Return a file handle pointing to the platform binary zip. Method never returns null because + * it will fail an assert before that. + */ + private File getPlatformZip() { + // Check to see if the user set a system property first + String property = TestActivator.getContext().getProperty("org.eclipse.equinox.p2.reconciler.tests.platform.archive"); + File file = null; + if (property == null) { + // the releng test framework copies the zip so let's look for it... + // it will be a sibling of the eclipse/ folder that we are running + File installLocation = getInstallLocation(); + if (installLocation != null) { + // parent will be "eclipse" and the parent's parent will be "eclipse-testing" + File parent = installLocation.getParentFile(); + if (parent != null) { + parent = parent.getParentFile(); + if (parent != null) { + File[] children = parent.listFiles(new FileFilter() { + public boolean accept(File pathname) { + String name = pathname.getName(); + return name.startsWith("eclipse-platform-"); + } + }); + if (children != null && children.length == 1) + file = children[0]; + } + } + } + } else { + file = new File(property); + } + String message = "Need to set the \"org.eclipse.equinox.p2.reconciler.tests.platform.archive\" system property with a valid path to the platform binary drop or copy the archive to be a sibling of the install folder."; + assertNotNull(message, file); + assertTrue(message, file.exists()); + return file; + } + + /* + * Add the given bundle to the given folder (do a copy). + * The folder can be one of dropins, plugins or features. + * If the file handle points to a directory, then do a deep copy. + */ + public void add(String message, String target, File file) { + if (!(target.startsWith("dropins") || target.startsWith("plugins") || target.startsWith("features"))) + fail("Destination folder for resource copying should be either dropins, plugins or features."); + File destinationParent = new File(output, "eclipse/" + target); + destinationParent.mkdirs(); + copy(message, file, new File(destinationParent, file.getName())); + } + + /* + * Create a link file in the links folder. Point it to the given extension location. + */ + public void createLinkFile(String message, String filename, String extensionLocation) { + File file = new File(output, "eclipse/links/" + filename + ".link"); + file.getParentFile().mkdirs(); + Properties properties = new Properties(); + properties.put("path", extensionLocation); + OutputStream stream = null; + try { + stream = new BufferedOutputStream(new FileOutputStream(file)); + properties.store(stream, null); + } catch (IOException e) { + fail(message, e); + } finally { + try { + if (stream != null) + stream.close(); + } catch (IOException e) { + // ignore + } + } + } + + /* + * Delete the link file with the given name from the links folder. + */ + public void removeLinkFile(String message, String filename) { + File file = new File(output, "eclipse/links/" + filename + ".link"); + file.delete(); + } + + public void add(String message, String target, File[] files) { + assertNotNull(files); + for (int i = 0; i < files.length; i++) + add(message, target, files[i]); + } + + /* + * Remove the given filename from the given folder. + */ + public boolean remove(String message, String target, String filename) { + if (!(target.startsWith("dropins") || target.startsWith("plugins") || target.startsWith("features"))) + fail("Target folder for resource deletion should be either dropins, plugins or features."); + File folder = new File(output, "eclipse/" + target); + File targetFile = new File(folder, filename); + if (!targetFile.exists()) + return false; + return delete(targetFile); + } + + /* + * Remove the files with the given names from the target folder. + */ + public void remove(String message, String target, String[] names) { + assertNotNull(names); + for (int i = 0; i < names.length; i++) + remove(message, target, names[i]); + } + + /* + * Return a boolean value indicating whether or not a bundle with the given id + * is listed in the bundles.info file. Ignore the version number and return true + * if there are any matches in the file. + */ + public boolean isInBundlesInfo(String bundleId) throws IOException { + return isInBundlesInfo(bundleId, null); + } + + /* + * Return a boolean value indicating whether or not a bundle with the given id + * is listed in the bundles.info file. If the version is non-null, check to ensure the + * version is the expected one. + */ + public boolean isInBundlesInfo(String bundleId, String version) throws IOException { + File bundlesInfo = new File(output, "eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info"); + if (!bundlesInfo.exists()) + return false; + String line; + Exception exception = null; + BufferedReader reader = new BufferedReader(new FileReader(bundlesInfo)); + try { + while ((line = reader.readLine()) != null) { + StringTokenizer tokenizer = new StringTokenizer(line, ","); + if (bundleId.equals(tokenizer.nextToken())) { + if (version == null) + return true; + if (version.equals(tokenizer.nextToken())) + return true; + } + } + } catch (IOException e) { + exception = e; + } finally { + try { + reader.close(); + } catch (IOException ex) { + if (exception == null) + throw ex; + } + } + return false; + } + + /* + * Run the reconciler to discover changes in the drop-ins folder and update the system state. + */ + public void reconcile(String message) { + File root = new File(Activator.getBundleContext().getProperty("java.home")); + root = new File(root, "bin"); + File exe = new File(root, "javaw.exe"); + if (!exe.exists()) + exe = new File(root, "java"); + run(message, "\"" + output.getAbsolutePath() + "/eclipse/eclipse\" --launcher.suppressErrors -nosplash -application org.eclipse.equinox.p2.reconciler.application -vm \"" + exe.getAbsolutePath() + "\""); + } + + /* + * If a bundle with the given id and version exists in the bundles.info file then + * throw an AssertionFailedException. + */ + public void assertDoesNotExistInBundlesInfo(String message, String bundleId, String version) { + try { + assertTrue(message, !isInBundlesInfo(bundleId, version)); + } catch (IOException e) { + fail(message, e); + } + } + + /* + * If a bundle with the given id in the bundles.info file then throw an AssertionFailedException. + */ + public void assertDoesNotExistInBundlesInfo(String message, String bundleId) { + assertDoesNotExistInBundlesInfo(message, bundleId, null); + } + + /* + * If a bundle with the given id and version does not exist in the bundles.info file then + * throw an AssertionFailedException. + */ + public void assertExistsInBundlesInfo(String message, String bundleId, String version) { + try { + assertTrue(message, isInBundlesInfo(bundleId, version)); + } catch (IOException e) { + fail(message, e); + } + } + + /* + * If a bundle with the given id does not exist in the bundles.info file then throw an AssertionFailedException. + */ + public void assertExistsInBundlesInfo(String message, String bundleId) { + assertExistsInBundlesInfo(message, bundleId, null); + } + + /* + * Clean up the temporary data used to run the tests. + * This method is not intended to be called by clients, it will be called + * automatically when the clients use a ReconcilerTestSuite. + */ + public void cleanup() throws Exception { + // rm -rf eclipse sub-dir + for (Iterator iter = toRemove.iterator(); iter.hasNext();) { + File next = (File) iter.next(); + FileUtils.deleteAll(next); + } + output = null; + toRemove.clear(); + } + + /* + * Read and return the configuration object. Will not return null. + */ + public Configuration getConfiguration() { + File configLocation = new File(output, "eclipse/configuration/org.eclipse.update/platform.xml"); + File installLocation = new File(output, "eclipse"); + if (installLocation == null) + fail("Unable to determine install location."); + try { + return Configuration.load(configLocation, installLocation.toURL()); + } catch (ProvisionException e) { + fail("Error while reading configuration from " + configLocation); + } catch (MalformedURLException e) { + fail("Unable to convert install location to URL " + installLocation); + } + assertTrue("Unable to read configuration from " + configLocation, false); + // avoid compiler error + return null; + } + + /* + * Save the given configuration to disk. + */ + public void save(String message, Configuration configuration) { + File configLocation = new File(output, "eclipse/configuration/org.eclipse.update/platform.xml"); + File installLocation = new File(output, "eclipse"); + try { + configuration.save(configLocation, installLocation.toURL()); + } catch (ProvisionException e) { + fail(message, e); + } catch (MalformedURLException e) { + fail(message, e); + } + } + + /* + * Iterate over the sites in the given configuration and remove the one which + * has a url matching the given location. + */ + public boolean removeSite(Configuration configuration, String location) { + IPath path = new Path(location); + List sites = configuration.getSites(); + for (Iterator iter = sites.iterator(); iter.hasNext();) { + Site tempSite = (Site) iter.next(); + String siteURL = tempSite.getUrl(); + if (path.equals(new Path(siteURL))) + return configuration.removeSite(tempSite); + } + return false; + } + + /* + * Create and return a new feature object with the given parameters. + */ + public Feature createFeature(Site site, String id, String version, String url) { + Feature result = new Feature(site); + result.setId(id); + result.setVersion(version); + result.setUrl(url); + return result; + } + + /* + * Create and return a new site object with the given parameters. + */ + public Site createSite(String policy, boolean enabled, boolean updateable, String uri, String[] plugins) { + Site result = new Site(); + result.setPolicy(policy); + result.setEnabled(enabled); + result.setUpdateable(updateable); + result.setUrl(uri); + if (plugins != null) + for (int i = 0; i < plugins.length; i++) + result.addPlugin(plugins[i]); + return result; + } + + /* + * Assert that a feature with the given id exists in the configuration. If + * a version is specified then match the version, otherwise any version will + * do. + */ + public void assertFeatureExists(String message, Configuration configuration, String id, String version) { + List sites = configuration.getSites(); + assertNotNull(message, sites); + boolean found = false; + for (Iterator iter = sites.iterator(); iter.hasNext();) { + Site site = (Site) iter.next(); + Feature[] features = site.getFeatures(); + for (int i = 0; features != null && i < features.length; i++) { + if (id.equals(features[i].getId())) { + if (version == null) + found = true; + else if (version.equals(features[i].getVersion())) + found = true; + } + } + } + assertTrue(message, found); + } + + /* + * Return a boolean value indicating whether or not the IU with the given ID and version + * is installed. We do this by loading the profile registry and seeing if it is there. + */ + public boolean isInstalled(String id, String version) { + File location = new File(output, "eclipse/p2/org.eclipse.equinox.p2.engine/profileRegistry"); + SimpleProfileRegistry registry = new SimpleProfileRegistry(location, new SurrogateProfileHandler(), false); + IProfile[] profiles = registry.getProfiles(); + assertEquals("1.0 Should only be one profile in registry.", 1, profiles.length); + Collector collector = profiles[0].query(new InstallableUnitQuery(id, new Version(version)), new Collector(), null); + return !collector.isEmpty(); + } +}
\ No newline at end of file diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/AllTests.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/AllTests.java new file mode 100644 index 000000000..e44dd90e2 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/AllTests.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.p2.tests.reconciler.dropins; + +import junit.framework.*; + +/** + * To run the reconciler tests, you must perform some manual setup steps: + * 1) Download the platform runtime binary zip (latest build or the one you want to test). + * 2) Set the following system property to the file system path of the binary zip. For example: + * + * -Dorg.eclipse.equinox.p2.reconciler.tests.platform.archive=c:/tmp/eclipse-platform-3.4-win32.zip + */ +public class AllTests extends TestCase { + public static Test suite() { + TestSuite suite = new TestSuite(AllTests.class.getName()); + suite.addTest(BasicTests.suite()); + suite.addTest(ConfigurationTests.suite()); + return suite; + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/BasicTests.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/BasicTests.java new file mode 100644 index 000000000..29b667dae --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/BasicTests.java @@ -0,0 +1,178 @@ +/******************************************************************************* + * Copyright (c) 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.p2.tests.reconciler.dropins; + +import java.io.File; +import junit.framework.Test; +import junit.framework.TestSuite; + +//- add new +//- remove only +//- add higher +//- remove higher +//- add lower (no change) +//- remove lower (no change) +// +//singleton behaviour vs non-singleton behaviour +// +// platform specific fragments +// +//dropins/*/eclipse/[features|plugins]/* +//dropins/*/[features|plugins]/* +//dropins/[features|plugins]/* +//dropins/Foo (Foo is a feature or bundle, in folder or jar shape) +//dropins/some.link +// +//handle both dropins and plugins directory +public class BasicTests extends AbstractReconcilerTest { + + /* + * Constructor for the class. + */ + public BasicTests(String name) { + super(name); + } + + /* + * The list of tests for this class. Order is important since some of them rely + * on the state from the previous test run. + */ + public static Test suite() { + TestSuite suite = new ReconcilerTestSuite(); + suite.addTest(new BasicTests("testNonSingleton")); + suite.addTest(new BasicTests("testSingleton")); + suite.addTest(new BasicTests("testDirectoryBasedPlugin")); + return suite; + } + + /* + * Basic add and remove tests for directory-based bundles. + */ + public void testDirectoryBasedPlugin() { + assertInitialized(); + assertDoesNotExistInBundlesInfo("1.0", "directoryBased"); + File dir = getTestData("1.1", "testData/reconciler/plugins/directoryBased_1.0.0"); + add("1.2", "dropins", dir); + reconcile("1.3"); + assertExistsInBundlesInfo("1.4", "directoryBased", "1.0.0"); + + remove("2.0", "dropins", "directoryBased_1.0.0"); + reconcile("2.1"); + assertDoesNotExistInBundlesInfo("2.2", "directoryBased"); + } + + /* + * Basic add and remove operations for non-singleton bundles. + */ + public void testNonSingleton() { + assertInitialized(); + assertDoesNotExistInBundlesInfo("0.1", "myBundle"); + // copy bundle to dropins and reconcile + File jar = getTestData("2.0", "testData/reconciler/plugins/myBundle_1.0.0.jar"); + add("0.2", "dropins", jar); + reconcile("0.3"); + // bundle should exist + assertExistsInBundlesInfo("0.4", "myBundle"); + + // remove the bundle from the dropins and reconcile + remove("1.0", "dropins", "myBundle_1.0.0.jar"); + reconcile("1.1"); + // bundle should not exist anymore + assertDoesNotExistInBundlesInfo("1.2", "myBundle"); + + // Add 2 versions of the same non-singleton bundle to the dropins folder and + // ensure that both of them exist after reconciliation. + jar = getTestData("2.0", "testData/reconciler/plugins/myBundle_1.0.0.jar"); + add("2.1", "dropins", jar); + jar = getTestData("2.2", "testData/reconciler/plugins/myBundle_2.0.0.jar"); + add("2.3", "dropins", jar); + reconcile("2.4"); + // bundle should exist - both versions since we have non-singleton bundles + assertExistsInBundlesInfo("2.5", "myBundle", "1.0.0"); + assertExistsInBundlesInfo("2.6", "myBundle", "2.0.0"); + + // start with 2 non-singleton versions of the same bundle and remove the lower + // version and reconcile. should have just the higher version left. + remove("3.0", "dropins", "myBundle_1.0.0.jar"); + reconcile("3.1"); + // only the higher version should exist + assertDoesNotExistInBundlesInfo("3.2", "myBundle", "1.0.0"); + assertExistsInBundlesInfo("3.3", "myBundle", "2.0.0"); + + // cleanup + remove("99.0", "dropins", "myBundle_2.0.0.jar"); + reconcile("99.1"); + // TODO re-enable this when we fix bug 248468 + if (false) + assertDoesNotExistInBundlesInfo("99.2", "myBundle", "2.0.0"); + } + + /* + * Perform some add and remove operations with two different versions + * of a singleton bundle. + */ + public void testSingleton() { + assertInitialized(); + // empty state + assertDoesNotExistInBundlesInfo("1.0", "mySingletonBundle"); + + // add first version + File jar = getTestData("2.0", "testData/reconciler/plugins/mySingletonBundle_1.0.0.jar"); + add("2.1", "dropins", jar); + reconcile("2.3"); + + // only lowest version of the bundle exists + assertExistsInBundlesInfo("3.0", "mySingletonBundle", "1.0.0"); + assertDoesNotExistInBundlesInfo("3.1", "mySingletonBundle", "2.0.0"); + + // add higher version + jar = getTestData("4.0", "testData/reconciler/plugins/mySingletonBundle_2.0.0.jar"); + add("4.1", "dropins", jar); + reconcile("4.3"); + + // highest version of the bundle has replaced the lower one + assertDoesNotExistInBundlesInfo("5.1", "mySingletonBundle", "1.0.0"); + assertExistsInBundlesInfo("5.2", "mySingletonBundle", "2.0.0"); + + // re-add the lower version + jar = getTestData("6.0", "testData/reconciler/plugins/mySingletonBundle_1.0.0.jar"); + add("6.1", "dropins", jar); + reconcile("6.3"); + + // nothing changes + assertDoesNotExistInBundlesInfo("7.1", "mySingletonBundle", "1.0.0"); + assertExistsInBundlesInfo("7.2", "mySingletonBundle", "2.0.0"); + + // add back lower version + jar = getTestData("8.0", "testData/reconciler/plugins/mySingletonBundle_1.0.0.jar"); + add("8.1", "dropins", jar); + reconcile("8.3"); + + // no change + assertDoesNotExistInBundlesInfo("9.1", "mySingletonBundle", "1.0.0"); + assertExistsInBundlesInfo("9.2", "mySingletonBundle", "2.0.0"); + + // remove higher version + remove("10.1", "dropins", "mySingletonBundle_2.0.0.jar"); + reconcile("10.2"); + + // lower should be there + assertExistsInBundlesInfo("11.0", "mySingletonBundle", "1.0.0"); + assertDoesNotExistInBundlesInfo("11.1", "mySingletonBundle", "2.0.0"); + + // cleanup + remove("99.0", "dropins", "mySingletonBundle_1.0.0.jar"); + remove("99.1", "dropins", "mySingletonBundle_2.0.0.jar"); + reconcile("99.2"); + assertDoesNotExistInBundlesInfo("99.3", "mySingletonBundle", "1.0.0"); + assertDoesNotExistInBundlesInfo("99.4", "mySingletonBundle", "2.0.0"); + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/ConfigurationTests.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/ConfigurationTests.java new file mode 100644 index 000000000..131926a28 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/ConfigurationTests.java @@ -0,0 +1,271 @@ +/******************************************************************************* + * Copyright (c) 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.p2.tests.reconciler.dropins; + +import java.io.File; +import junit.framework.Test; +import junit.framework.TestSuite; +import org.eclipse.equinox.internal.p2.update.*; + +/* + * Tests related to the platform configuration before and after reconciliation. + * + * Tests to add and regression tests to add: + * - ensure there is a platform:base: entry + * - 222505 - IUs in the dropins only rely on each other and not on things already in the install + * - ... + */ +public class ConfigurationTests extends AbstractReconcilerTest { + + /* + * Constructor for the class. + */ + public ConfigurationTests(String name) { + super(name); + } + + /* + * The list of tests for this class. Order is important since some of them rely + * on the state from the previous test run. + */ + public static Test suite() { + TestSuite suite = new ReconcilerTestSuite(); + // TODO these fail because of bug 249641 + // suite.addTest(new ConfigurationTests("testDiscoverOne")); + suite.addTest(new ConfigurationTests("test_247095")); + suite.addTest(new ConfigurationTests("test_247095b")); + suite.addTest(new ConfigurationTests("test_249607")); + suite.addTest(new ConfigurationTests("test_249898")); + return suite; + } + + public void testDiscoverOne() { + // copy feature and bundle to dropins and reconcile + assertInitialized(); + File featureFile = getTestData("2.0", "testData/reconciler/features/myFeature_1.0.0"); + add("2.2", "dropins/features", featureFile); + File bundleFile = getTestData("2.3", "testData/reconciler/plugins/myBundle_1.0.0.jar"); + add("2.4", "dropins/plugins", bundleFile); + assertDoesNotExistInBundlesInfo("2.5", "myBundle"); + assertFalse("2.6", isInstalled("myBundle", "1.0.0")); + reconcile("2.7"); + + // make sure the feature is listed in a site in the configuration + Configuration config = getConfiguration(); + assertFeatureExists("3.0", config, "myFeature", "1.0.0"); + + // cleanup + remove("99.0", "dropins/plugins", bundleFile.getName()); + remove("99.1", "dropins/features", featureFile.getName()); + reconcile("99.2"); + config = getConfiguration(); + assertFalse("99.4", !isInstalled("myFeature.feature", "1.0.0")); + assertDoesNotExistInBundlesInfo("99.5", "myBundle"); + assertFalse("99.6", !isInstalled("myBundle", "1.0.0")); + } + + /* + * We have a user-include site which lists some plug-ins and has a feature as + * a sub-element of the site. When the feature and its plug-ins are removed + * from the site we need to ensure the plug-ins are removed from the install. + */ + public void test_247095() { + assertInitialized(); + Configuration configuration = getConfiguration(); + File temp = getTempFolder(); + toRemove.add(temp); + String siteLocation = null; + siteLocation = new File(temp, "eclipse").toURI().toString(); + + // copy the data to the temp folder + File source = getTestData("1.0", "testData/reconciler/247095"); + copy("1.1", source, temp); + + /* this is the entry to add to the site.xml file + <site enabled="true" policy="USER-INCLUDE" updateable="false" + url="file:C:/share/1/" list="plugins/hello_1.0.0.jar" > + <feature id="hello_feature" version="1.0.0" /> + </site> + */ + Site site = createSite(Site.POLICY_USER_INCLUDE, true, false, siteLocation, new String[] {"plugins/bbb_1.0.0.jar,plugins/ccc_1.0.0.jar"}); + Feature feature = createFeature(site, "bbb.feature", "1.0.0", "features/bbb.feature_1.0.0/"); + site.addFeature(feature); + configuration.add(site); + save("5.0", configuration); + reconcile("6.0"); + assertExistsInBundlesInfo("7.0", "bbb", "1.0.0"); + assertTrue("7.1", isInstalled("bbb", "1.0.0")); + assertExistsInBundlesInfo("7.2", "ccc", "1.0.0"); + assertTrue("7.3", isInstalled("ccc", "1.0.0")); + configuration = getConfiguration(); + assertFeatureExists("8.0", configuration, "bbb.feature", "1.0.0"); + + // remove the feature and its bundle from the platform.xml but leave the second bundle + configuration = getConfiguration(); + assertTrue("9.0", removeSite(configuration, siteLocation)); + site = createSite(Site.POLICY_USER_INCLUDE, true, false, siteLocation, new String[] {"plugins/ccc_1.0.0.jar"}); + configuration.add(site); + save("9.1", configuration); + reconcile("10.0"); + assertDoesNotExistInBundlesInfo("10.1", "bbb", "1.0.0"); + assertFalse("10.2", isInstalled("bbb", "1.0.0")); + assertExistsInBundlesInfo("10.3", "ccc", "1.0.0"); + assertTrue("10.4", isInstalled("ccc", "1.0.0")); + + // cleanup + configuration = getConfiguration(); + removeSite(configuration, siteLocation); + save("99.2", configuration); + reconcile("99.3"); + assertDoesNotExistInBundlesInfo("99.4", "ccc", "1.0.0"); + assertFalse("99.5", isInstalled("ccc", "1.0.0")); + } + + /* + * Same but delete the files from disk. (other test cases doesn't delete the files... simulates + * the use of a shared bundle pool) + */ + public void test_247095b() { + assertInitialized(); + Configuration configuration = getConfiguration(); + File temp = getTempFolder(); + toRemove.add(temp); + String siteLocation = null; + siteLocation = new File(temp, "eclipse").toURI().toString(); + + // copy the data to the temp folder + File source = getTestData("1.0", "testData/reconciler/247095"); + copy("1.1", source, temp); + + /* this is the entry to add to the site.xml file + <site enabled="true" policy="USER-INCLUDE" updateable="false" + url="file:C:/share/1/" list="plugins/hello_1.0.0.jar" > + <feature id="hello_feature" version="1.0.0" /> + </site> + */ + Site site = createSite(Site.POLICY_USER_INCLUDE, true, false, siteLocation, new String[] {"plugins/bbb_1.0.0.jar,plugins/ccc_1.0.0.jar"}); + Feature feature = createFeature(site, "bbb.feature", "1.0.0", "features/bbb.feature_1.0.0/"); + site.addFeature(feature); + configuration.add(site); + save("5.0", configuration); + reconcile("6.0"); + assertExistsInBundlesInfo("7.0", "bbb", "1.0.0"); + assertTrue("7.1", isInstalled("bbb", "1.0.0")); + assertExistsInBundlesInfo("7.2", "ccc", "1.0.0"); + assertTrue("7.3", isInstalled("ccc", "1.0.0")); + configuration = getConfiguration(); + assertFeatureExists("8.0", configuration, "bbb.feature", "1.0.0"); + + // remove the feature and its bundle from the platform.xml but leave the second bundle + configuration = getConfiguration(); + assertTrue("9.0", removeSite(configuration, siteLocation)); + site = createSite(Site.POLICY_USER_INCLUDE, true, false, siteLocation, new String[] {"plugins/ccc_1.0.0.jar"}); + configuration.add(site); + save("9.1", configuration); + File parent = new File(temp, "eclipse"); + assertTrue("9.2", delete(new File(parent, "plugins/bbb_1.0.0.jar"))); + assertTrue("9.3", delete(new File(parent, "features/bbb.feature_1.0.0"))); + reconcile("10.0"); + assertDoesNotExistInBundlesInfo("10.1", "bbb", "1.0.0"); + assertFalse("10.2", isInstalled("bbb", "1.0.0")); + assertExistsInBundlesInfo("10.3", "ccc", "1.0.0"); + assertTrue("10.4", isInstalled("ccc", "1.0.0")); + + // cleanup + configuration = getConfiguration(); + removeSite(configuration, siteLocation); + save("99.2", configuration); + reconcile("99.3"); + assertDoesNotExistInBundlesInfo("99.4", "ccc", "1.0.0"); + assertFalse("99.5", isInstalled("ccc", "1.0.0")); + } + + /* + * There was a problem if we had a user-exclude site policy and a list of + * features, we were always adding the features to the excludes list and + * therefore they were never installed. + */ + public void test_249607() { + assertInitialized(); + Configuration configuration = getConfiguration(); + File temp = getTempFolder(); + toRemove.add(temp); + String siteLocation = null; + siteLocation = new File(temp, "eclipse").toURI().toString(); + + // copy the data to the temp folder + File source = getTestData("1.0", "testData/reconciler/247095"); + copy("1.1", source, temp); + + Site site = createSite(Site.POLICY_USER_EXCLUDE, true, false, siteLocation, new String[] {"plugins/ccc_1.0.0.jar"}); + Feature feature = createFeature(site, "bbb.feature", "1.0.0", "features/bbb.feature_1.0.0/"); + site.addFeature(feature); + configuration.add(site); + save("2.0", configuration); + reconcile("2.1"); + assertExistsInBundlesInfo("2.2", "bbb", "1.0.0"); + assertTrue("2.3", isInstalled("bbb", "1.0.0")); + assertDoesNotExistInBundlesInfo("2.4", "ccc"); + assertFalse("2.4", isInstalled("ccc", "1.0.0")); + configuration = getConfiguration(); + assertFeatureExists("3.0", configuration, "bbb.feature", "1.0.0"); + assertTrue("3.1", isInstalled("bbb.feature.feature.group", "1.0.0")); + + // cleanup + configuration = getConfiguration(); + removeSite(configuration, siteLocation); + save("99.2", configuration); + reconcile("99.3"); + assertDoesNotExistInBundlesInfo("99.4", "bbb", "1.0.0"); + assertFalse("99.5", isInstalled("bbb", "1.0.0")); + assertDoesNotExistInBundlesInfo("99.6", "ccc", "1.0.0"); + assertFalse("99.7", isInstalled("ccc", "1.0.0")); + } + + /* + * Add a site to the platform.xml, reconcile, ensure its contents are installed, remove the site, + * reconcile, ensure the contents are uninstalled. + */ + public void test_249898() { + assertInitialized(); + Configuration configuration = getConfiguration(); + File temp = getTempFolder(); + toRemove.add(temp); + String siteLocation = new File(temp, "eclipse").toURI().toString(); + + // copy the data to the temp folder + File source = getTestData("1.0", "testData/reconciler/247095"); + copy("1.1", source, temp); + + Site site = createSite(Site.POLICY_USER_INCLUDE, true, false, siteLocation, new String[] {"plugins/bbb_1.0.0.jar,plugins/ccc_1.0.0.jar"}); + Feature feature = createFeature(site, "bbb.feature", "1.0.0", "features/bbb.feature_1.0.0/"); + site.addFeature(feature); + configuration.add(site); + save("5.0", configuration); + reconcile("6.0"); + assertExistsInBundlesInfo("7.0", "bbb", "1.0.0"); + assertTrue("7.1", isInstalled("bbb", "1.0.0")); + assertExistsInBundlesInfo("7.2", "ccc", "1.0.0"); + assertTrue("7.3", isInstalled("ccc", "1.0.0")); + configuration = getConfiguration(); + assertFeatureExists("8.0", configuration, "bbb.feature", "1.0.0"); + + // remove the site from the platform.xml + configuration = getConfiguration(); + assertTrue("9.0", removeSite(configuration, siteLocation)); + save("9.1", configuration); + reconcile("10.0"); + assertDoesNotExistInBundlesInfo("10.1", "bbb", "1.0.0"); + assertFalse("10.2", isInstalled("bbb", "1.0.0")); + assertDoesNotExistInBundlesInfo("10.3", "ccc", "1.0.0"); + assertFalse("10.4", isInstalled("ccc", "1.0.0")); + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/ReconcilerTestSuite.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/ReconcilerTestSuite.java new file mode 100644 index 000000000..17682ea69 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/ReconcilerTestSuite.java @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.equinox.p2.tests.reconciler.dropins; + +import java.util.Enumeration; +import java.util.Vector; +import junit.framework.Test; +import junit.framework.TestSuite; + +public class ReconcilerTestSuite extends TestSuite { + + private Test INITIALIZE = new AbstractReconcilerTest("initialize"); + private Test CLEANUP = new AbstractReconcilerTest("cleanup"); + + /* (non-Javadoc) + * @see junit.framework.TestSuite#tests() + */ + public Enumeration tests() { + Vector result = new Vector(); + result.add(INITIALIZE); + for (Enumeration e = super.tests(); e.hasMoreElements();) + result.add(e.nextElement()); + result.add(CLEANUP); + return result.elements(); + } + + /* (non-Javadoc) + * @see junit.framework.TestSuite#testCount() + */ + public int testCount() { + return super.testCount() + 2; + } + + /* (non-Javadoc) + * @see junit.framework.TestSuite#testAt(int) + */ + public Test testAt(int index) { + if (index == 0) + return INITIALIZE; + if (index == testCount() - 1) + return CLEANUP; + return super.testAt(index - 1); + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/.eclipseextension b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/.eclipseextension new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/.eclipseextension diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/features/bbb.feature_1.0.0/feature.xml b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/features/bbb.feature_1.0.0/feature.xml new file mode 100644 index 000000000..d4e47cbe0 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/features/bbb.feature_1.0.0/feature.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<feature + id="bbb.feature" + label="Feature Feature" + version="1.0.0"> + + <description url="http://www.example.com/description"> + [Enter Feature Description here.] + </description> + + <copyright url="http://www.example.com/copyright"> + [Enter Copyright Description here.] + </copyright> + + <license url="http://www.example.com/license"> + [Enter License Description here.] + </license> + + <plugin + id="bbb" + download-size="0" + install-size="0" + version="1.0.0" + unpack="false"/> + +</feature> diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/plugins/bbb_1.0.0.jar b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/plugins/bbb_1.0.0.jar Binary files differnew file mode 100644 index 000000000..97cfbc503 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/plugins/bbb_1.0.0.jar diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/plugins/ccc_1.0.0.jar b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/plugins/ccc_1.0.0.jar Binary files differnew file mode 100644 index 000000000..328d9ad65 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/247095/eclipse/plugins/ccc_1.0.0.jar diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeaturePatch_1.0.0/feature.xml b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeaturePatch_1.0.0/feature.xml new file mode 100644 index 000000000..afb647df9 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeaturePatch_1.0.0/feature.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<feature + id="myFeaturePatch" + label="MyFeaturePatch Feature" + version="1.0.0"> + + <description url="http://www.example.com/description"> + [Enter Feature Description here.] + </description> + + <copyright url="http://www.example.com/copyright"> + [Enter Copyright Description here.] + </copyright> + + <license url="http://www.example.com/license"> + [Enter License Description here.] + </license> + + <requires> + <import feature="myFeature" version="1.0.0" patch="true"/> + </requires> + + <plugin + id="mySingletonBundle" + download-size="0" + install-size="0" + version="1.0.0" + unpack="false"/> + +</feature> diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeaturePatch_2.0.0/feature.xml b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeaturePatch_2.0.0/feature.xml new file mode 100644 index 000000000..0e7227e35 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeaturePatch_2.0.0/feature.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<feature + id="myFeaturePatch" + label="MyFeaturePatch Feature" + version="2.0.0"> + + <description url="http://www.example.com/description"> + [Enter Feature Description here.] + </description> + + <copyright url="http://www.example.com/copyright"> + [Enter Copyright Description here.] + </copyright> + + <license url="http://www.example.com/license"> + [Enter License Description here.] + </license> + + <requires> + <import feature="myFeature" version="1.0.0" patch="true"/> + </requires> + + <plugin + id="myBundle" + download-size="0" + install-size="0" + version="2.0.0" + unpack="false"/> + +</feature> diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeature_1.0.0/feature.xml b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeature_1.0.0/feature.xml new file mode 100644 index 000000000..e51123811 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeature_1.0.0/feature.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<feature + id="myFeature" + label="MyFeature Feature" + version="1.0.0"> + + <description url="http://www.example.com/description"> + [Enter Feature Description here.] + </description> + + <copyright url="http://www.example.com/copyright"> + [Enter Copyright Description here.] + </copyright> + + <license url="http://www.example.com/license"> + [Enter License Description here.] + </license> + + <plugin + id="myBundle" + download-size="0" + install-size="0" + version="1.0.0" + unpack="false"/> + +</feature> diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeature_2.0.0/feature.xml b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeature_2.0.0/feature.xml new file mode 100644 index 000000000..f9b6fa0c8 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/features/myFeature_2.0.0/feature.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<feature + id="myFeature" + label="MyFeature Feature" + version="2.0.0"> + + <description url="http://www.example.com/description"> + [Enter Feature Description here.] + </description> + + <copyright url="http://www.example.com/copyright"> + [Enter Copyright Description here.] + </copyright> + + <license url="http://www.example.com/license"> + [Enter License Description here.] + </license> + + <plugin + id="myBundle" + download-size="0" + install-size="0" + version="2.0.0" + unpack="false"/> + +</feature> diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/directoryBased_1.0.0/directoryBased.jar b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/directoryBased_1.0.0/directoryBased.jar Binary files differnew file mode 100644 index 000000000..5f5e8021b --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/directoryBased_1.0.0/directoryBased.jar diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/directoryBased_1.0.0/plugin.xml b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/directoryBased_1.0.0/plugin.xml new file mode 100644 index 000000000..8139c6a1e --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/directoryBased_1.0.0/plugin.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<plugin + id="directoryBased" + name="directoryBased" + version="1.0.0"> + + <runtime> + <library name="directoryBased.jar"/> + </runtime> + +</plugin> diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/myBundle_1.0.0.jar b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/myBundle_1.0.0.jar Binary files differnew file mode 100644 index 000000000..011368be8 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/myBundle_1.0.0.jar diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/myBundle_2.0.0.jar b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/myBundle_2.0.0.jar Binary files differnew file mode 100644 index 000000000..b7c01a542 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/myBundle_2.0.0.jar diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/mySingletonBundle_1.0.0.jar b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/mySingletonBundle_1.0.0.jar Binary files differnew file mode 100644 index 000000000..a2eee0aa6 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/mySingletonBundle_1.0.0.jar diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/mySingletonBundle_2.0.0.jar b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/mySingletonBundle_2.0.0.jar Binary files differnew file mode 100644 index 000000000..8cd275fee --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/reconciler/plugins/mySingletonBundle_2.0.0.jar |