/******************************************************************************* * Copyright (c) 2008, 2009 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 java.util.Iterator; import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.equinox.internal.p2.update.*; import org.eclipse.equinox.p2.metadata.IInstallableUnit; /* * 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(); suite.setName(ConfigurationTests.class.getName()); 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")); suite.addTest(new ConfigurationTests("testSiteEnabled")); suite.addTest(new ConfigurationTests("test_232094a")); suite.addTest(new ConfigurationTests("test_232094b")); // suite.addTest(new ConfigurationTests("test_p2Site")); 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"); assertTrue("3.1", isInstalled("myFeature.feature.group", "1.0.0")); assertTrue("3.2", isInstalled("myBundle", "1.0.0")); assertExistsInBundlesInfo("3.3", "myBundle"); // 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.group", "1.0.0")); assertDoesNotExistInBundlesInfo("99.5", "myBundle"); assertFalse("99.6", isInstalled("myBundle", "1.0.0")); } /* * Test discovering a site in a platform.xml file and installing the bundles from it. * Then change the site to be disabled and then re-reconcile. */ public void testSiteEnabled() { assertInitialized(); File temp = getTempFolder(); toRemove.add(temp); Configuration configuration = getConfiguration(); String siteLocation = new File(temp, "eclipse").toURI().toString(); File source = getTestData("2.0", "testData/reconciler/ext.jar"); copy("2.1", source, temp); /* this is the entry to add to the site.xml file <site enabled="true" policy="USER-EXCLUDE" updateable="false" url="file:C:/share/1/"> <feature id="bbb.feature" version="1.0.0" /> </site> */ assertDoesNotExistInBundlesInfo("3.01", "bbb"); assertDoesNotExistInBundlesInfo("3.02", "ccc"); assertFalse("3.11", isInstalled("bbb", "1.0.0")); assertFalse("3.12", isInstalled("ccc", "1.0.0")); Site site = createSite(Site.POLICY_USER_EXCLUDE, true, false, siteLocation, null); Feature feature = createFeature(site, "bbb.feature", "1.0.0", "features/bbb.feature_1.0.0/"); site.addFeature(feature); configuration.add(site); save("3.2", configuration); reconcile("3.3"); assertExistsInBundlesInfo("3.41", "bbb"); assertExistsInBundlesInfo("3.42", "ccc"); assertTrue("3.51", isInstalled("bbb", "1.0.0")); assertTrue("3.52", isInstalled("ccc", "1.0.0")); // make sure the feature is listed in a site in the configuration configuration = getConfiguration(); assertFeatureExists("3.6", configuration, "bbb.feature", "1.0.0"); // change the configuration so the site is disabled assertTrue("4.0", removeSite(configuration, siteLocation)); site = createSite(Site.POLICY_USER_EXCLUDE, false, false, siteLocation, null); feature = createFeature(site, "bbb.feature", "1.0.0", "features/bbb.feature_1.0.0/"); site.addFeature(feature); configuration.add(site); save("4.1", configuration); reconcile("4.2"); // verify assertDoesNotExistInBundlesInfo("5.01", "bbb"); assertDoesNotExistInBundlesInfo("5.02", "ccc"); assertFalse("5.11", isInstalled("bbb", "1.0.0")); assertFalse("5.12", isInstalled("ccc", "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")); } /* * Test extension locations that have both JAR'd bundles and directory-based bundles. */ public void test_232094a() { assertInitialized(); internal_test_232094(getTestData("1.0", "testData/reconciler/ext.dir")); } public void test_232094b() { assertInitialized(); internal_test_232094(getTestData("1.0", "testData/reconciler/ext.jar")); } /* * Test the case where we have a new site in the platform.xml file which was added * by the user putting a .link file in the links/ folder. Then they delete the link file * and the features and plug-ins should be uninstalled. */ private void internal_test_232094(File source) { File temp = getTempFolder(); toRemove.add(temp); // copy the data to an extension location copy("1.1", source, temp); // create the file in the links/ folder createLinkFile("2.0", "myLink", temp.getAbsolutePath()); // reconcile reconcile("3.0"); // ensure everything was added ok assertExistsInBundlesInfo("4.0", "bbb"); assertTrue("4.1", isInstalled("bbb", "1.0.0")); assertExistsInBundlesInfo("4.2", "ccc"); assertTrue("4.3", isInstalled("ccc", "1.0.0")); assertTrue("4.4", isInstalled("bbb.feature.feature.group", "1.0.0")); assertFeatureExists("4.5", getConfiguration(), "bbb.feature", "1.0.0"); // delete the link file from the links/ folder removeLinkFile("5.0", "myLink"); // reconcile reconcile("6.0"); // ensure things were uninstalled assertDoesNotExistInBundlesInfo("7.0", "bbb"); assertFalse("7.1", isInstalled("bbb", "1.0.0")); assertDoesNotExistInBundlesInfo("7.2", "ccc"); assertFalse("7.3", isInstalled("ccc", "1.0.0")); assertFalse("7.4", isInstalled("bbb.feature.feature.group", "1.0.0")); boolean found = false; for (Iterator iter = getConfiguration().getSites().iterator(); iter.hasNext();) { Site site = (Site) iter.next(); String link = site.getLinkFile(); if (link != null && link.contains("myLink")) found = true; } assertFalse("7.5", found); } /* * Add a new site to the platform.xml file which points to a location that contains * a p2 repository. (content.jar and artifacts.jar + bundles) */ public void test_p2Site() { assertInitialized(); // initial reconciliation to create platform.xml reconcile("0.1"); File temp = getTempFolder(); toRemove.add(temp); File source = getTestData("1.0", "testData/reconciler/basicRepo"); copy("1.1", source, temp); String siteLocation = temp.toURI().toString(); Configuration configuration = getConfiguration(); Site site = createSite(Site.POLICY_USER_EXCLUDE, true, false, siteLocation, null); Feature feature = createFeature(site, "zFeature", "1.0.0", "features/zFeature_1.0.0/"); site.addFeature(feature); configuration.add(site); save("2.0", configuration); reconcile("2.1"); assertExistsInBundlesInfo("3.0", "zzz"); assertTrue("3.1", isInstalled("zzz", "1.0.0")); assertTrue("3.2", isInstalled("zFeature.feature.group", "1.0.0")); IInstallableUnit unit = getRemoteIU("zzz", "1.0.0"); assertEquals("3.3", "foo", unit.getProperty("test")); // cleanup configuration = getConfiguration(); assertTrue("99.0", removeSite(configuration, siteLocation)); save("99.1", configuration); reconcile("99.2"); assertDoesNotExistInBundlesInfo("99.3", "zzz", "1.0.0"); assertFalse("99.4", isInstalled("zzz", "1.0.0")); assertFalse("99.5", isInstalled("zFeature.feature.group", "1.0.0")); } }