Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rapicault2009-02-27 22:58:20 +0000
committerPascal Rapicault2009-02-27 22:58:20 +0000
commitea5a3f9fc6a086a5e1fb4616236dfe077ea3c6b6 (patch)
treea7f65214a74ded6c22cfb940616b104be7ac0c44 /bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox
parentd0f5c1ea9d6181d38d61bd95fdec55cf1cec1306 (diff)
downloadrt.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')
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllExplanation.java22
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/AllTests.java4
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationDeepConflict.java54
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationForOptionalDependencies.java57
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationForPartialInstallation.java86
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ExplanationSeveralConflictingRoots.java104
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingDependency.java18
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement.java13
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MissingNonGreedyRequirement2.java14
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/MultipleSingleton.java46
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest10.java17
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest12.java14
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest2.java30
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest6.java16
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTest9.java16
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/PatchTestUpdate.java18
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/ProvisioningPlanQueryTest.java12
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/planner/SimpleSingleton.java13
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));
+ }
}

Back to the top