diff options
author | Pascal Rapicault | 2009-02-27 22:58:20 +0000 |
---|---|---|
committer | Pascal Rapicault | 2009-02-27 22:58:20 +0000 |
commit | ea5a3f9fc6a086a5e1fb4616236dfe077ea3c6b6 (patch) | |
tree | a7f65214a74ded6c22cfb940616b104be7ac0c44 /bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox | |
parent | d0f5c1ea9d6181d38d61bd95fdec55cf1cec1306 (diff) | |
download | rt.equinox.p2-ea5a3f9fc6a086a5e1fb4616236dfe077ea3c6b6.tar.gz rt.equinox.p2-ea5a3f9fc6a086a5e1fb4616236dfe077ea3c6b6.tar.xz rt.equinox.p2-ea5a3f9fc6a086a5e1fb4616236dfe077ea3c6b6.zip |
Bug 200380 - [planner] Improve detection of incompatible solutionpost_explanation_work_mergedsa
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox')
18 files changed, 532 insertions, 22 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllExplanation.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllExplanation.java new file mode 100644 index 000000000..54cb11cc8 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllExplanation.java @@ -0,0 +1,22 @@ +package org.eclipse.equinox.p2.tests.planner; + +import junit.framework.*; + +public class AllExplanation extends TestCase { + + public static Test suite() { + TestSuite suite = new TestSuite(AllTests.class.getName()); + suite.addTestSuite(ExplanationDeepConflict.class); + suite.addTestSuite(ExplanationForOptionalDependencies.class); + suite.addTestSuite(ExplanationForPartialInstallation.class); + suite.addTestSuite(ExplanationSeveralConflictingRoots.class); + suite.addTestSuite(MissingDependency.class); + suite.addTestSuite(MissingNonGreedyRequirement.class); + suite.addTestSuite(MissingNonGreedyRequirement2.class); + suite.addTestSuite(MultipleSingleton.class); + suite.addTestSuite(PatchTest10.class); + suite.addTestSuite(PatchTest12.class); + return suite; + } + +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllTests.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllTests.java index 8fd39befc..b9286aa20 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllTests.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllTests.java @@ -34,6 +34,10 @@ public class AllTests extends TestCase { suite.addTestSuite(Bug262580.class); suite.addTestSuite(DependencyOnSelf.class); suite.addTestSuite(DropinsScenario.class); + suite.addTestSuite(ExplanationDeepConflict.class); + suite.addTestSuite(ExplanationForOptionalDependencies.class); + suite.addTestSuite(ExplanationForPartialInstallation.class); + suite.addTestSuite(ExplanationSeveralConflictingRoots.class); suite.addTestSuite(GreedyRequirement.class); suite.addTestSuite(InclusionRuleTest.class); suite.addTestSuite(InclusionRuleTest2.class); diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationDeepConflict.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationDeepConflict.java new file mode 100644 index 000000000..6343536db --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationDeepConflict.java @@ -0,0 +1,54 @@ +package org.eclipse.equinox.p2.tests.planner; + +import org.eclipse.equinox.internal.provisional.p2.core.Version; +import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; +import org.eclipse.equinox.internal.provisional.p2.director.*; +import org.eclipse.equinox.internal.provisional.p2.engine.*; +import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; +import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; + +public class ExplanationDeepConflict extends AbstractProvisioningTest { + private IProfile profile; + private IPlanner planner; + private IEngine engine; + private IInstallableUnit sdk; + + @Override + protected void setUp() throws Exception { + super.setUp(); + sdk = createIU("SDK", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "SDKPart", new VersionRange("[1.0.0, 1.0.0]"), null)); + IInstallableUnit sdkPart = createIU("SDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "InnerSDKPart", new VersionRange("[1.0.0, 1.0.0]"), null)); + IInstallableUnit innerSdkPart = createIU("InnerSDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "InnerInnerSDKPart", new VersionRange("[1.0.0, 1.0.0]"), null)); + IInstallableUnit innerInnerSDKPart = createIU("InnerInnerSDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), true); + + createTestMetdataRepository(new IInstallableUnit[] {sdk, sdkPart, innerSdkPart, innerInnerSDKPart}); + + profile = createProfile("TestProfile." + getName()); + planner = createPlanner(); + engine = createEngine(); + + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {sdk}); + engine.perform(profile, new DefaultPhaseSet(), planner.getProvisioningPlan(pcr, null, null).getOperands(), null, null); + assertProfileContains("1.0", profile, new IInstallableUnit[] {sdk, sdkPart, innerSdkPart, innerInnerSDKPart}); + } + + public void testDeepSingletonConflict() { + //CDT will have a singleton conflict with SDK + IInstallableUnit cdt = createIU("CDT", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "CDTPart", new VersionRange("[1.0.0, 1.0.0]"), null)); + IInstallableUnit cdtPart = createIU("CDTPart", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "InnerInnerSDKPart", new VersionRange("[2.0.0, 2.0.0]"), null)); + IInstallableUnit innerInnerSDKPart2 = createIU("InnerInnerSDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("2.0.0")), true); + + createTestMetdataRepository(new IInstallableUnit[] {cdt, cdtPart, innerInnerSDKPart2}); + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {cdt}); + ProvisioningPlan plan = planner.getProvisioningPlan(pcr, null, null); + System.out.println(plan.getRequestStatus().getExplanations()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(cdt)); + //Here we verify that we only return the roots we asked the installation of. The SDK is installable since it is already installed + assertFalse(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(sdk)); + assertTrue(plan.getRequestStatus().getConflictsWithAnyRoots().contains(sdk)); + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithAnyRoots().contains(sdk)); + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithInstalledRoots().contains(sdk)); + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationForOptionalDependencies.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationForOptionalDependencies.java new file mode 100644 index 000000000..fa589e4de --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationForOptionalDependencies.java @@ -0,0 +1,57 @@ +package org.eclipse.equinox.p2.tests.planner; + +import org.eclipse.equinox.internal.provisional.p2.core.Version; +import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; +import org.eclipse.equinox.internal.provisional.p2.director.*; +import org.eclipse.equinox.internal.provisional.p2.engine.*; +import org.eclipse.equinox.internal.provisional.p2.metadata.*; +import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; + +public class ExplanationForOptionalDependencies extends AbstractProvisioningTest { + private IProfile profile; + private IPlanner planner; + private IEngine engine; + private IInstallableUnit sdk; + + @Override + protected void setUp() throws Exception { + super.setUp(); + sdk = createIU("SDK", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "SDKPart", new VersionRange("[1.0.0, 1.0.0]"), null)); + IInstallableUnit sdkPart = createIU("SDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), true); + IInstallableUnit sdkPart2 = createIU("SDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("2.0.0")), true); + + createTestMetdataRepository(new IInstallableUnit[] {sdk, sdkPart, sdkPart2}); + + profile = createProfile("TestProfile." + getName()); + planner = createPlanner(); + engine = createEngine(); + + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {sdk}); + engine.perform(profile, new DefaultPhaseSet(), planner.getProvisioningPlan(pcr, null, null).getOperands(), null, null); + + } + + public void testNoProblemWithMissingOptionalDependency() { + //CDT will be missing a requirement but it is optional so everything should be good + //EMF will be not be good because it is missing a requirement + IRequiredCapability missingOptionalDependency = MetadataFactory.createRequiredCapability(IInstallableUnit.NAMESPACE_IU_ID, "MissingSomething", new VersionRange("[1.0.0, 1.0.0]"), null, true, false); + IInstallableUnit cdt = createIU("CDT", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), new IRequiredCapability[] {missingOptionalDependency}); + + IRequiredCapability emfMissing = MetadataFactory.createRequiredCapability(IInstallableUnit.NAMESPACE_IU_ID, "EMFPart", new VersionRange("[1.0.0, 1.0.0]"), null, false, false); + IInstallableUnit emf = createIU("EMF", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), new IRequiredCapability[] {emfMissing}, NO_PROPERTIES, true); + + createTestMetdataRepository(new IInstallableUnit[] {cdt, emf}); + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {cdt, emf}); + ProvisioningPlan plan = planner.getProvisioningPlan(pcr, null, null); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(emf)); + assertFalse(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(cdt)); + assertFalse(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(sdk)); + + // assertTrue(plan.getRequestStatus(cdt).getSeverity() != IStatus.ERROR); + // + // assertTrue(plan.getRequestStatus(emf).getSeverity() == IStatus.ERROR); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithInstalledRoots()); + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationForPartialInstallation.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationForPartialInstallation.java new file mode 100644 index 000000000..a54d81942 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationForPartialInstallation.java @@ -0,0 +1,86 @@ +package org.eclipse.equinox.p2.tests.planner; + +import org.eclipse.equinox.internal.provisional.p2.core.Version; +import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; +import org.eclipse.equinox.internal.provisional.p2.director.*; +import org.eclipse.equinox.internal.provisional.p2.engine.*; +import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit; +import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; + +public class ExplanationForPartialInstallation extends AbstractProvisioningTest { + private IProfile profile; + private IPlanner planner; + private IEngine engine; + private IInstallableUnit sdk; + + @Override + protected void setUp() throws Exception { + super.setUp(); + sdk = createIU("SDK", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "SDKPart", new VersionRange("[1.0.0, 1.0.0]"), null)); + IInstallableUnit sdkPart = createIU("SDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), true); + IInstallableUnit sdkPart2 = createIU("SDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("2.0.0")), true); + + createTestMetdataRepository(new IInstallableUnit[] {sdk, sdkPart, sdkPart2}); + + profile = createProfile("TestProfile." + getName()); + planner = createPlanner(); + engine = createEngine(); + + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {sdk}); + engine.perform(profile, new DefaultPhaseSet(), planner.getProvisioningPlan(pcr, null, null).getOperands(), null, null); + + } + + public void testPartialProblemSingleton() { + //CDT will have a singleton conflict with SDK + //EMF will be good + IInstallableUnit cdt = createIU("CDT", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "SDKPart", new VersionRange("[2.0.0, 2.0.0]"), null)); + + IInstallableUnit emf = createIU("EMF", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), true); + + createTestMetdataRepository(new IInstallableUnit[] {cdt, emf}); + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {cdt, emf}); + ProvisioningPlan plan = planner.getProvisioningPlan(pcr, null, null); + System.out.println(plan.getRequestStatus().getExplanations()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(cdt)); + assertFalse(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(emf)); + assertFalse(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(sdk)); + + // assertTrue(plan.getRequestStatus(cdt).getSeverity() == IStatus.ERROR); + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithAnyRoots().contains(sdk)); + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithInstalledRoots().contains(sdk)); + // + // assertTrue(plan.getRequestStatus(emf).getSeverity() != IStatus.ERROR); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithAnyRoots().size()); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithInstalledRoots().size()); + // + // assertNull(plan.getRequestStatus(sdk)); + } + + public void testPartialProblemRequirement() { + //CDT will be missing a requirement + //EMF will be good + IInstallableUnit cdt = createIU("CDT", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "MissingPart", new VersionRange("[2.0.0, 2.0.0]"), null)); + + IInstallableUnit emf = createIU("EMF", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), true); + + createTestMetdataRepository(new IInstallableUnit[] {cdt, emf}); + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {cdt, emf}); + ProvisioningPlan plan = planner.getProvisioningPlan(pcr, null, null); + System.out.println(plan.getRequestStatus().getExplanations()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(cdt)); + assertFalse(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(emf)); + assertFalse(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(sdk)); + + // assertTrue(plan.getRequestStatus(cdt).getSeverity() == IStatus.ERROR); + // assertEquals(0, plan.getRequestStatus(cdt).getConflictsWithAnyRoots().size()); + // assertEquals(0, plan.getRequestStatus(cdt).getConflictsWithInstalledRoots().size()); + // + // assertTrue(plan.getRequestStatus(emf).getSeverity() != IStatus.ERROR); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithAnyRoots().size()); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithInstalledRoots().size()); + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationSeveralConflictingRoots.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationSeveralConflictingRoots.java new file mode 100644 index 000000000..28c05d0d2 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationSeveralConflictingRoots.java @@ -0,0 +1,104 @@ +package org.eclipse.equinox.p2.tests.planner; + +import org.eclipse.equinox.internal.provisional.p2.core.Version; +import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; +import org.eclipse.equinox.internal.provisional.p2.director.*; +import org.eclipse.equinox.internal.provisional.p2.engine.*; +import org.eclipse.equinox.internal.provisional.p2.metadata.*; +import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; + +public class ExplanationSeveralConflictingRoots extends AbstractProvisioningTest { + private IProfile profile; + private IPlanner planner; + private IInstallableUnit sdk; + + @Override + protected void setUp() throws Exception { + super.setUp(); + sdk = createIU("SDK", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "SDKPart", new VersionRange("[1.0.0, 1.0.0]"), null)); + IInstallableUnit sdkPart = createIU("SDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), true); + IInstallableUnit sdkPart2 = createIU("SDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("2.0.0")), true); + + createTestMetdataRepository(new IInstallableUnit[] {sdk, sdkPart, sdkPart2}); + + profile = createProfile("TestProfile." + getName()); + planner = createPlanner(); + IEngine engine = createEngine(); + + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {sdk}); + engine.perform(profile, new DefaultPhaseSet(), planner.getProvisioningPlan(pcr, null, null).getOperands(), null, null); + + } + + public void testConflictingSingletonAndMissingDependency() { + //CDT will have a singleton conflict with SDK + //EMF will be missing a dependency + IInstallableUnit cdt = createIU("CDT", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "SDKPart", new VersionRange("[2.0.0, 2.0.0]"), null)); + + IInstallableUnit emf = createIU("EMF", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "EMFPart", new VersionRange("[1.0.0, 1.0.0]"), null)); + + createTestMetdataRepository(new IInstallableUnit[] {cdt, emf}); + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {cdt, emf}); + ProvisioningPlan plan = planner.getProvisioningPlan(pcr, null, null); + System.out.println(plan.getRequestStatus().getExplanations()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(cdt)); + // assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(emf)); + + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithInstalledRoots().contains(sdk)); + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithAnyRoots().contains(sdk)); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithAnyRoots().size()); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithInstalledRoots().size()); + } + + public void testConflictingSingletonAndMissingDependency2() { + //CDT will have a singleton conflict EMF + //EMF will be missing a dependency and will be in conflict with CDT + IInstallableUnit cdt = createIU("CDT", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "ASingleton", new VersionRange("[2.0.0, 2.0.0]"), null)); + IInstallableUnit aSingleton1 = createIU("ASingleton", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), true); + IInstallableUnit aSingleton2 = createIU("ASingleton", Version.fromOSGiVersion(new org.osgi.framework.Version("2.0.0")), true); + + IRequiredCapability emfOnSingleton = MetadataFactory.createRequiredCapability(IInstallableUnit.NAMESPACE_IU_ID, "ASingleton", new VersionRange("[1.0.0, 1.0.0]"), null, false, false); + IRequiredCapability emfMissing = MetadataFactory.createRequiredCapability(IInstallableUnit.NAMESPACE_IU_ID, "EMFPart", new VersionRange("[1.0.0, 1.0.0]"), null, false, false); + IInstallableUnit emf = createIU("EMF", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), new IRequiredCapability[] {emfOnSingleton, emfMissing}); + + createTestMetdataRepository(new IInstallableUnit[] {aSingleton1, aSingleton2, cdt, emf}); + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {cdt, emf}); + ProvisioningPlan plan = planner.getProvisioningPlan(pcr, null, null); + System.out.println(plan.getRequestStatus().getExplanations()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(cdt)); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(emf)); + + // assertEquals(0, plan.getRequestStatus(cdt).getConflictsWithInstalledRoots().size()); + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithAnyRoots().contains(emf)); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithInstalledRoots().size()); + // assertTrue(plan.getRequestStatus(emf).getConflictsWithAnyRoots().contains(cdt)); + } + + public void testConflictingSingletonAndMissingDependency3() { + //CDT will have a singleton conflict EMF and with the SDK + //EMF will be conflicting with CDT + IInstallableUnit cdt = createIU("CDT", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "SDKPart", new VersionRange("[2.0.0, 2.0.0]"), null)); + IInstallableUnit sdkPart3 = createIU("SDKPart", Version.fromOSGiVersion(new org.osgi.framework.Version("3.0.0")), true); + + IRequiredCapability emfOnSingleton = MetadataFactory.createRequiredCapability(IInstallableUnit.NAMESPACE_IU_ID, "SDKPart", new VersionRange("[1.0.0, 1.0.0]"), null, false, false); + IRequiredCapability emfMissing = MetadataFactory.createRequiredCapability(IInstallableUnit.NAMESPACE_IU_ID, "EMFPart", new VersionRange("[1.0.0, 1.0.0]"), null, false, false); + IInstallableUnit emf = createIU("EMF", Version.fromOSGiVersion(new org.osgi.framework.Version("1.0.0")), new IRequiredCapability[] {emfOnSingleton, emfMissing}); + + createTestMetdataRepository(new IInstallableUnit[] {sdkPart3, cdt, emf}); + ProfileChangeRequest pcr = new ProfileChangeRequest(profile); + pcr.addInstallableUnits(new IInstallableUnit[] {cdt, emf}); + ProvisioningPlan plan = planner.getProvisioningPlan(pcr, null, null); + System.out.println(plan.getRequestStatus().getExplanations()); + // assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(cdt)); + // assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(emf)); + + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithInstalledRoots().contains(sdk)); + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithAnyRoots().contains(sdk)); + // assertTrue(plan.getRequestStatus(cdt).getConflictsWithAnyRoots().contains(emf)); + // assertEquals(0, plan.getRequestStatus(emf).getConflictsWithInstalledRoots().size()); + // assertTrue(plan.getRequestStatus(emf).getConflictsWithAnyRoots().contains(cdt)); + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingDependency.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingDependency.java index abcadad76..7e97ec8bf 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingDependency.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingDependency.java @@ -8,7 +8,9 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; import org.eclipse.equinox.internal.provisional.p2.director.*; @@ -43,4 +45,20 @@ public class MissingDependency extends AbstractProvisioningTest { ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); } + + public void testExplanation() { + ProfileChangeRequest req = new ProfileChangeRequest(profile); + req.addInstallableUnits(new IInstallableUnit[] {a1, b1}); + ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); + assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); + Set explanation = plan.getRequestStatus().getExplanations(); + System.out.println(explanation); + assertEquals(2, explanation.size()); + Set rootConflictingIUs = plan.getRequestStatus().getConflictsWithInstalledRoots(); + System.out.println(rootConflictingIUs); + assertEquals(1, rootConflictingIUs.size()); + assertTrue(rootConflictingIUs.contains(b1)); + assertFalse(rootConflictingIUs.contains(a1)); + assertEquals(Explanation.MISSING_REQUIREMENT, plan.getRequestStatus().getShortExplanation()); + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement.java index f1513ab74..3da66a88d 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement.java @@ -8,7 +8,9 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; import org.eclipse.equinox.internal.provisional.p2.director.*; @@ -47,4 +49,15 @@ public class MissingNonGreedyRequirement extends AbstractProvisioningTest { ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); } + + public void testExplanation() { + ProfileChangeRequest req = new ProfileChangeRequest(profile); + req.addInstallableUnits(new IInstallableUnit[] {a1}); + ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); + assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); + Set explanation = plan.getRequestStatus().getExplanations(); + assertFalse(explanation.isEmpty()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(a1)); + assertEquals(Explanation.MISSING_REQUIREMENT, plan.getRequestStatus().getShortExplanation()); + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement2.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement2.java index c0a32ea92..4c427097f 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement2.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement2.java @@ -8,7 +8,9 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; import org.eclipse.equinox.internal.provisional.p2.director.*; @@ -44,4 +46,16 @@ public class MissingNonGreedyRequirement2 extends AbstractProvisioningTest { ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); } + + public void testExplanation() { + ProfileChangeRequest req = new ProfileChangeRequest(profile); + req.addInstallableUnits(new IInstallableUnit[] {a1}); + ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); + assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); + Set explanation = plan.getRequestStatus().getExplanations(); + assertFalse(explanation.isEmpty()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(a1)); + assertEquals(Explanation.MISSING_REQUIREMENT, plan.getRequestStatus().getShortExplanation()); + + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MultipleSingleton.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MultipleSingleton.java index d8c229bff..6c7ee0b6c 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MultipleSingleton.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MultipleSingleton.java @@ -8,11 +8,12 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; -import org.eclipse.equinox.internal.provisional.p2.director.IPlanner; -import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest; +import org.eclipse.equinox.internal.provisional.p2.director.*; import org.eclipse.equinox.internal.provisional.p2.engine.IProfile; import org.eclipse.equinox.internal.provisional.p2.metadata.*; import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; @@ -75,6 +76,20 @@ public class MultipleSingleton extends AbstractProvisioningTest { assertEquals(IStatus.ERROR, planner.getProvisioningPlan(req, null, null).getStatus().getSeverity()); } + public void testExplanation2() { + ProfileChangeRequest req = new ProfileChangeRequest(profile); + req.addInstallableUnits(new IInstallableUnit[] {y}); + ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); + assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); + Set explanation = plan.getRequestStatus().getExplanations(); + System.out.println(explanation); + assertFalse(explanation.isEmpty()); + assertEquals(Explanation.VIOLATED_SINGLETON_CONSTRAINT, plan.getRequestStatus().getShortExplanation()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(y)); + assertEquals(1, plan.getRequestStatus().getConflictsWithInstalledRoots().size()); + + } + public void test3() { //Test that we can install A3 and A4 together ProfileChangeRequest req = new ProfileChangeRequest(profile); @@ -89,6 +104,19 @@ public class MultipleSingleton extends AbstractProvisioningTest { assertEquals(IStatus.ERROR, planner.getProvisioningPlan(req, null, null).getStatus().getSeverity()); } + public void testExplanation4() { + ProfileChangeRequest req = new ProfileChangeRequest(profile); + req.addInstallableUnits(new IInstallableUnit[] {w}); + ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); + assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); + Set explanation = plan.getRequestStatus().getExplanations(); + System.out.println(explanation); + assertFalse(explanation.isEmpty()); + assertEquals(Explanation.VIOLATED_SINGLETON_CONSTRAINT, plan.getRequestStatus().getShortExplanation()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(w)); + + } + public void test5b() { //Validate the setup ProfileChangeRequest req = new ProfileChangeRequest(profile); @@ -109,4 +137,18 @@ public class MultipleSingleton extends AbstractProvisioningTest { req.addInstallableUnits(new IInstallableUnit[] {u, v}); assertEquals(IStatus.ERROR, planner.getProvisioningPlan(req, null, null).getStatus().getSeverity()); } + + public void testExplanation5() { + ProfileChangeRequest req = new ProfileChangeRequest(profile); + req.addInstallableUnits(new IInstallableUnit[] {u, v}); + ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); + assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); + Set explanation = plan.getRequestStatus().getExplanations(); + assertFalse(explanation.isEmpty()); + assertEquals(Explanation.VIOLATED_SINGLETON_CONSTRAINT, plan.getRequestStatus().getShortExplanation()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(u)); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(v)); + System.out.println(explanation); + + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest10.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest10.java index 9fcfa7dd8..cc749818a 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest10.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest10.java @@ -8,8 +8,7 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; -import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; - +import java.util.Set; import org.eclipse.core.runtime.IStatus; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; @@ -75,4 +74,18 @@ public class PatchTest10 extends AbstractProvisioningTest { ProvisioningPlan plan3 = planner.getProvisioningPlan(req3, null, null); assertEquals(IStatus.ERROR, plan3.getStatus().getSeverity()); } + + public void testExplanation() { + ProfileChangeRequest req3 = new ProfileChangeRequest(profile1); + req3.addInstallableUnits(new IInstallableUnit[] {a1, p1, pp1}); + ProvisioningPlan plan3 = planner.getProvisioningPlan(req3, null, null); + assertEquals(IStatus.ERROR, plan3.getStatus().getSeverity()); + Set problems = plan3.getRequestStatus().getConflictsWithInstalledRoots(); + System.out.println(problems); + System.out.println(plan3.getRequestStatus().getExplanations()); + assertEquals(3, problems.size()); + assertTrue(problems.contains(a1)); + assertTrue(problems.contains(p1)); + assertTrue(problems.contains(pp1)); + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest12.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest12.java index 88b4e2c49..4d1f603f4 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest12.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest12.java @@ -8,9 +8,9 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; -import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; - +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; import org.eclipse.equinox.internal.provisional.p2.director.*; @@ -66,4 +66,14 @@ public class PatchTest12 extends AbstractProvisioningTest { assertTrue(IStatus.ERROR == plan3.getStatus().getSeverity()); } + + public void testExplanation1() { + ProfileChangeRequest req3 = new ProfileChangeRequest(profile1); + req3.addInstallableUnits(new IInstallableUnit[] {a1, p1}); + ProvisioningPlan plan3 = planner.getProvisioningPlan(req3, null, null); + assertTrue(IStatus.ERROR == plan3.getStatus().getSeverity()); + Set conflictRootIUs = plan3.getRequestStatus().getConflictsWithInstalledRoots(); + assertTrue(conflictRootIUs.contains(p1)); + assertEquals(Explanation.MISSING_REQUIREMENT, plan3.getRequestStatus().getShortExplanation()); + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest2.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest2.java index 7d81a4b25..60c396ea9 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest2.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest2.java @@ -8,9 +8,9 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; -import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; - +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; import org.eclipse.equinox.internal.provisional.p2.director.*; @@ -90,4 +90,30 @@ public class PatchTest2 extends AbstractProvisioningTest { assertEquals(IStatus.ERROR, plan5.getStatus().getSeverity()); } + + public void testExplanation3() { + //p2 does not cause a1 to resolve therefore the application fails + ProfileChangeRequest req3 = new ProfileChangeRequest(profile1); + req3.addInstallableUnits(new IInstallableUnit[] {a1, p2}); + ProvisioningPlan plan3 = planner.getProvisioningPlan(req3, null, null); + assertEquals(IStatus.ERROR, plan3.getStatus().getSeverity()); + assertEquals(Explanation.MISSING_REQUIREMENT, plan3.getRequestStatus().getShortExplanation()); + System.out.println(plan3.getRequestStatus().getExplanations()); + Set conflictingRoot = plan3.getRequestStatus().getConflictsWithInstalledRoots(); + assertTrue(conflictingRoot.contains(a1)); + assertEquals(1, conflictingRoot.size()); + } + + public void testExplanation5() { + //p4 does not cause a1 to resolve therefore the application fails + ProfileChangeRequest req5 = new ProfileChangeRequest(profile1); + req5.addInstallableUnits(new IInstallableUnit[] {a1, p4}); + ProvisioningPlan plan5 = planner.getProvisioningPlan(req5, null, null); + assertEquals(IStatus.ERROR, plan5.getStatus().getSeverity()); + assertEquals(Explanation.MISSING_REQUIREMENT, plan5.getRequestStatus().getShortExplanation()); + System.out.println(plan5.getRequestStatus().getExplanations()); + Set conflictingRoot = plan5.getRequestStatus().getConflictsWithInstalledRoots(); + assertTrue(conflictingRoot.contains(a1)); + assertEquals(1, conflictingRoot.size()); + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest6.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest6.java index cb5831b9d..e57222542 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest6.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest6.java @@ -8,9 +8,9 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; -import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; - +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; import org.eclipse.equinox.internal.provisional.p2.director.*; @@ -96,4 +96,16 @@ public class PatchTest6 extends AbstractProvisioningTest { assertInstallOperand(plan5, d1); assertInstallOperand(plan5, c1); } + + public void testExplanation1() { + //Confirm that a1 and c1 can't be installed + ProfileChangeRequest req1 = new ProfileChangeRequest(profile1); + req1.addInstallableUnits(new IInstallableUnit[] {a1, c1}); + ProvisioningPlan plan1 = planner.getProvisioningPlan(req1, null, null); + assertEquals(IStatus.ERROR, plan1.getStatus().getSeverity()); + assertEquals(Explanation.MISSING_REQUIREMENT, plan1.getRequestStatus().getShortExplanation()); + Set conflictingRoots = plan1.getRequestStatus().getConflictsWithInstalledRoots(); + assertEquals(1, conflictingRoots.size()); + assertTrue(conflictingRoots.contains(a1) || conflictingRoots.contains(c1)); + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest9.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest9.java index 47b4a43e3..ae45ae2b6 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest9.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest9.java @@ -8,9 +8,9 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; -import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; - +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; import org.eclipse.equinox.internal.provisional.p2.director.*; @@ -59,6 +59,18 @@ public class PatchTest9 extends AbstractProvisioningTest { assertEquals(IStatus.ERROR, plan1.getStatus().getSeverity()); } + public void testExplanation() { + //The application of the patch does not succeed because there is no C matching the requirement imposed by the patch + ProfileChangeRequest req1 = new ProfileChangeRequest(profile1); + req1.addInstallableUnits(new IInstallableUnit[] {a1, p1}); + ProvisioningPlan plan1 = planner.getProvisioningPlan(req1, null, null); + assertEquals(IStatus.ERROR, plan1.getStatus().getSeverity()); + assertEquals(Explanation.MISSING_REQUIREMENT, plan1.getRequestStatus().getShortExplanation()); + Set conflictingRoots = plan1.getRequestStatus().getConflictsWithInstalledRoots(); + assertEquals(1, conflictingRoots.size()); + assertTrue(conflictingRoots.contains(p1)); + } + public void testPatchApply() { //The application of the patch succeed because the dependency that PP puts on C is optional ProfileChangeRequest req2 = new ProfileChangeRequest(profile1); diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTestUpdate.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTestUpdate.java index f099c2c6f..f570ed7a4 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTestUpdate.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTestUpdate.java @@ -8,9 +8,9 @@ ******************************************************************************/ package org.eclipse.equinox.p2.tests.planner; -import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory; - +import java.util.Set; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; import org.eclipse.equinox.internal.provisional.p2.director.*; @@ -77,4 +77,18 @@ public class PatchTestUpdate extends AbstractProvisioningTest { ProvisioningPlan plan = planner.getProvisioningPlan(req1, null, null); assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); } + + public void testExplanation() { + //The update of the feature is expected to fail because the patches are installed without flexibility (strict mode) + ProfileChangeRequest req1 = new ProfileChangeRequest(profile1); + req1.addInstallableUnits(new IInstallableUnit[] {p2Feature20}); + req1.setInstallableUnitInclusionRules(p2Feature20, PlannerHelper.createStrictInclusionRule(p2Feature20)); + req1.removeInstallableUnits(new IInstallableUnit[] {p2Feature}); + ProvisioningPlan plan = planner.getProvisioningPlan(req1, null, null); + assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); + Set conflictingRoot = plan.getRequestStatus().getConflictsWithInstalledRoots(); + assertEquals(1, conflictingRoot.size()); + assertTrue(conflictingRoot.contains(p2Feature20)); + assertEquals(Explanation.VIOLATED_SINGLETON_CONSTRAINT, plan.getRequestStatus().getShortExplanation()); + } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ProvisioningPlanQueryTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ProvisioningPlanQueryTest.java index b06c477c5..025703c57 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ProvisioningPlanQueryTest.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ProvisioningPlanQueryTest.java @@ -17,22 +17,22 @@ public class ProvisioningPlanQueryTest extends AbstractProvisioningTest { public void testAddition() { Operand[] ops = new Operand[] {new InstallableUnitOperand(null, createIU("A"))}; - Collector c = new ProvisioningPlan(Status.OK_STATUS, ops, null).getAdditions().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()); + Collector c = new ProvisioningPlan(Status.OK_STATUS, ops, null, null).getAdditions().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()); assertEquals(1, c.size()); - assertEquals(0, new ProvisioningPlan(Status.OK_STATUS, ops, null).getRemovals().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()).size()); + assertEquals(0, new ProvisioningPlan(Status.OK_STATUS, ops, null, null).getRemovals().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()).size()); } public void testRemoval() { Operand[] ops = new Operand[] {new InstallableUnitOperand(createIU("A"), null)}; - Collector c = new ProvisioningPlan(Status.OK_STATUS, ops, null).getRemovals().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()); + Collector c = new ProvisioningPlan(Status.OK_STATUS, ops, null, null).getRemovals().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()); assertEquals(1, c.size()); - assertEquals(0, new ProvisioningPlan(Status.OK_STATUS, ops, null).getAdditions().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()).size()); + assertEquals(0, new ProvisioningPlan(Status.OK_STATUS, ops, null, null).getAdditions().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()).size()); } public void testUpdate() { Operand[] ops = new Operand[] {new InstallableUnitOperand(createIU("A"), createIU("B"))}; - Collector c = new ProvisioningPlan(Status.OK_STATUS, ops, null).getRemovals().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()); + Collector c = new ProvisioningPlan(Status.OK_STATUS, ops, null, null).getRemovals().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()); assertEquals(1, c.size()); - assertEquals(1, new ProvisioningPlan(Status.OK_STATUS, ops, null).getAdditions().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()).size()); + assertEquals(1, new ProvisioningPlan(Status.OK_STATUS, ops, null, null).getAdditions().query(InstallableUnitQuery.ANY, new Collector(), new NullProgressMonitor()).size()); } } diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/SimpleSingleton.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/SimpleSingleton.java index 3448ba7f5..6a24664a7 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/SimpleSingleton.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/SimpleSingleton.java @@ -9,10 +9,10 @@ package org.eclipse.equinox.p2.tests.planner; import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.p2.director.Explanation; import org.eclipse.equinox.internal.provisional.p2.core.Version; import org.eclipse.equinox.internal.provisional.p2.core.VersionRange; -import org.eclipse.equinox.internal.provisional.p2.director.IPlanner; -import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest; +import org.eclipse.equinox.internal.provisional.p2.director.*; import org.eclipse.equinox.internal.provisional.p2.engine.IProfile; import org.eclipse.equinox.internal.provisional.p2.metadata.*; import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; @@ -49,4 +49,13 @@ public class SimpleSingleton extends AbstractProvisioningTest { req.addInstallableUnits(new IInstallableUnit[] {y}); assertEquals(IStatus.ERROR, planner.getProvisioningPlan(req, null, null).getStatus().getSeverity()); } + + public void testExplanation() { + ProfileChangeRequest req = new ProfileChangeRequest(profile); + req.addInstallableUnits(new IInstallableUnit[] {y}); + ProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); + assertEquals(IStatus.ERROR, plan.getStatus().getSeverity()); + assertEquals(Explanation.VIOLATED_SINGLETON_CONSTRAINT, plan.getRequestStatus().getShortExplanation()); + assertTrue(plan.getRequestStatus().getConflictsWithInstalledRoots().contains(y)); + } } |