| /******************************************************************************* |
| * 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 junit.framework.Test; |
| import junit.framework.TestSuite; |
| import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; |
| |
| //- 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.setName(BasicTests.class.getName()); |
| suite.addTest(new BasicTests("testNonSingleton")); |
| suite.addTest(new BasicTests("testSingleton")); |
| suite.addTest(new BasicTests("testDirectoryBasedPlugin")); |
| suite.addTest(new BasicTests("testSimpleRepoWithSiteXMLPlaceHolder")); |
| suite.addTest(new BasicTests("testSimpleRepo")); |
| |
| // suite.addTest(new BasicTests("test_251167")); |
| // suite.addTest(new BasicTests("test_p2Repo")); |
| suite.addTest(new BasicTests("testDisabledBundleInLink")); |
| |
| 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"); |
| 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"); |
| } |
| |
| /* |
| * Tests adding a simplerepo to the dropins folder. Note we need a dummy site.mxl for now |
| * We likely still need this tests for backwards compatability |
| */ |
| public void testSimpleRepoWithSiteXMLPlaceHolder() { |
| assertInitialized(); |
| assertDoesNotExistInBundlesInfo("0.1", "myBundle"); |
| |
| // copy bundles and repo files to dropins and reconcile |
| File jar = getTestData("2.0", "testData/reconciler/plugins/myBundle_1.0.0.jar"); |
| add("1.0", "dropins/simplerepo/plugins", jar); |
| jar = getTestData("2.2", "testData/reconciler/plugins/myBundle_2.0.0.jar"); |
| add("1.1", "dropins/simplerepo/plugins", jar); |
| |
| File artifactRepo = getTestData("2.0", "testData/reconciler/simplerepo/artifacts.xml"); |
| add("1.1", "dropins/simplerepo", artifactRepo); |
| File metadataRepo = getTestData("2.0", "testData/reconciler/simplerepo/content.xml"); |
| add("1.1", "dropins/simplerepo", metadataRepo); |
| File dummySiteXML = getTestData("2.0", "testData/reconciler/simplerepo/site.xml"); |
| add("1.1", "dropins/simplerepo", dummySiteXML); |
| |
| reconcile("2.0"); |
| |
| // bundle should exist - both versions since we have non-singleton bundles |
| assertDoesNotExistInBundlesInfo("2.1", "myBundle", "1.0.0"); |
| assertExistsInBundlesInfo("2.2", "myBundle", "2.0.0"); |
| |
| // cleanup |
| remove("99.0", "dropins", "simplerepo"); |
| reconcile("99.1"); |
| assertDoesNotExistInBundlesInfo("99.2", "myBundle"); |
| } |
| |
| /* |
| * Tests adding a simplerepo to the dropins folder. Note we need a dummy site.mxl for now |
| * We likely still need this tests for backwards compatability |
| */ |
| public void testSimpleRepo() { |
| assertInitialized(); |
| assertDoesNotExistInBundlesInfo("0.1", "myBundle"); |
| |
| // copy bundles and repo files to dropins and reconcile |
| File jar = getTestData("2.0", "testData/reconciler/plugins/myBundle_1.0.0.jar"); |
| add("1.0", "dropins/simplerepo/plugins", jar); |
| jar = getTestData("2.2", "testData/reconciler/plugins/myBundle_2.0.0.jar"); |
| add("1.1", "dropins/simplerepo/plugins", jar); |
| |
| File artifactRepo = getTestData("2.0", "testData/reconciler/simplerepo/artifacts.xml"); |
| add("1.1", "dropins/simplerepo", artifactRepo); |
| File metadataRepo = getTestData("2.0", "testData/reconciler/simplerepo/content.xml"); |
| add("1.1", "dropins/simplerepo", metadataRepo); |
| |
| reconcile("2.0"); |
| |
| // bundle should exist - both versions since we have non-singleton bundles |
| assertDoesNotExistInBundlesInfo("2.1", "myBundle", "1.0.0"); |
| assertExistsInBundlesInfo("2.2", "myBundle", "2.0.0"); |
| |
| // cleanup |
| remove("99.0", "dropins", "simplerepo"); |
| reconcile("99.1"); |
| assertDoesNotExistInBundlesInfo("99.2", "myBundle"); |
| } |
| |
| /* |
| * Add 2 bundles to the dropins and reconcile. A has an optional dependency on B. |
| * Remove B and re-reconcile. The problem was that B was no longer installed or in |
| * the bundles.info but it was still in the profile. |
| */ |
| public void test_251167() { |
| assertInitialized(); |
| |
| // empty state |
| assertDoesNotExistInBundlesInfo("1.0", "A"); |
| assertDoesNotExistInBundlesInfo("1.1", "B"); |
| |
| // setup the test data |
| File jar = getTestData("2.0", "testData/reconciler/251167/A_1.0.0.jar"); |
| add("2.1", "dropins", jar); |
| jar = getTestData("2.2", "testData/reconciler/251167/B_1.0.0.jar"); |
| add("2.3", "dropins", jar); |
| reconcile("2.4"); |
| |
| assertExistsInBundlesInfo("3.0", "A"); |
| assertExistsInBundlesInfo("3.1", "B"); |
| assertTrue("3.2", isInstalled("A", "1.0.0")); |
| assertTrue("3.3", isInstalled("B", "1.0.0")); |
| |
| // remove B |
| remove("4.0", "dropins", "B_1.0.0.jar"); |
| reconcile("4.1"); |
| |
| assertExistsInBundlesInfo("5.0", "A"); |
| assertDoesNotExistInBundlesInfo("5.1", "B"); |
| assertTrue("5.2", isInstalled("A", "1.0.0")); |
| assertFalse("5.3", isInstalled("B", "1.0.0")); |
| } |
| |
| /* |
| * - add content.jar |
| * - add artifacts.jar |
| * - add indexs + plugins/features/binary dir (bug 252752) |
| */ |
| public void test_p2Repo() { |
| assertInitialized(); |
| assertDoesNotExistInBundlesInfo("0.1", "zzz"); |
| assertFalse("0.2", isInstalled("zFeature", "1.0.0")); |
| |
| File source = getTestData("1.0", "testData/reconciler/basicRepo.jar"); |
| add("1.1", "dropins", source); |
| |
| reconcile("2.0"); |
| |
| 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")); |
| } |
| |
| /* |
| * See bug 265121. |
| */ |
| public void testDisabledBundleInLink() { |
| assertInitialized(); |
| File link = getTestData("1.0", "testData/reconciler/link"); |
| File temp = getTempFolder(); |
| // add this to the "toRemove" set in case we fail, we still want it to be removed by the cleanup |
| toRemove.add(temp); |
| copy("1.1", link, temp); |
| String linkFilename = getUniqueString(); |
| createLinkFile("1.2", linkFilename, temp.getAbsolutePath()); |
| |
| reconcile("2.0"); |
| |
| assertDoesNotExistInBundlesInfo("3.0", "bbb"); |
| assertFalse("3.1", isInstalled("bbb", "1.0.0")); |
| assertExistsInBundlesInfo("3.3", "ccc"); |
| assertTrue("3.4", isInstalled("ccc", "1.0.0")); |
| |
| removeLinkFile("4.0", linkFilename); |
| reconcile("4.1"); |
| assertDoesNotExistInBundlesInfo("5.0", "bbb"); |
| assertFalse("5.1", isInstalled("bbb", "1.0.0")); |
| assertDoesNotExistInBundlesInfo("5.3", "ccc"); |
| assertFalse("5.4", isInstalled("ccc", "1.0.0")); |
| } |
| } |