1 /******************************************************************************* 2 * Copyright (c) 2011, 2017 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.equinox.p2.tests.planner; 15 16 import java.util.ArrayList; 17 import java.util.HashMap; 18 import org.eclipse.core.runtime.NullProgressMonitor; 19 import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest; 20 import org.eclipse.equinox.p2.engine.*; 21 import org.eclipse.equinox.p2.metadata.*; 22 import org.eclipse.equinox.p2.planner.IPlanner; 23 import org.eclipse.equinox.p2.planner.ProfileInclusionRules; 24 import org.eclipse.equinox.p2.query.IQueryResult; 25 import org.eclipse.equinox.p2.query.QueryUtil; 26 import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; 27 import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; 28 29 public class Bug278668 extends AbstractProvisioningTest { 30 private IProfile profile; 31 private IMetadataRepository repo; 32 33 @Override setUp()34 protected void setUp() throws Exception { 35 super.setUp(); 36 profile = createProfile("test278668"); 37 IEngine engine = createEngine(); 38 IPlanner planner = createPlanner(); 39 ArrayList<IInstallableUnit> target = new ArrayList<>(); 40 target.add(createEclipseIU("com.borland.tg.modelrenaming")); 41 target.add(createEclipseIU("com.borland.tg.xmldesign")); 42 target.add(createEclipseIU("com.tssap.selena.dom")); 43 target.add(createEclipseIU("com.tssap.selena.model.providers.rc")); 44 target.add(createEclipseIU("com.tssap.selena.model.providers.resources")); 45 target.add(createEclipseIUSingleton("com.tssap.selena.model", DEFAULT_VERSION)); 46 target.add(createEclipseIU("com.borland.tg.modelrenaming", Version.create("8.1.2.v20090422-1800"))); 47 target.add(createEclipseIU("com.borland.tg.xmldesign", Version.create("8.2.0.v20090422-1800"))); 48 target.add(createEclipseIU("com.tssap.selena.dom", Version.create("8.2.0.v20090422-1800"))); 49 target.add(createEclipseIU("com.tssap.selena.model.providers.rc", Version.create("8.2.0.v20090422-1800"))); 50 target.add(createEclipseIU("com.tssap.selena.model.providers.resources", Version.create("8.1.2.v20090422-1800"))); 51 target.add(createEclipseIU("com.tssap.selena.model", Version.create("8.1.5.v20090422-1800"))); 52 target.add(createEclipseIUSingleton("com.tssap.selena.dom", Version.create("8.2.0.v20090326-1800"))); 53 createTestMetdataRepository(target.toArray(new IInstallableUnit[target.size()])); 54 55 ArrayList<IRequirement> requirements = new ArrayList<>(); 56 requirements.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "com.borland.tg.modelrenaming", new VersionRange("[1.0.0, 1.0.0]"), null, false, false)); 57 requirements.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "com.borland.tg.xmldesign", new VersionRange("[1.0.0, 1.0.0]"), null, false, false)); 58 requirements.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "com.tssap.selena.dom", new VersionRange("[1.0.0, 1.0.0]"), null, false, false)); 59 requirements.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "com.tssap.selena.model.providers.rc", new VersionRange("[1.0.0, 1.0.0]"), null, false, false)); 60 requirements.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "com.tssap.selena.model.providers.resources", new VersionRange("[1.0.0, 1.0.0]"), null, false, false)); 61 requirements.add(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "com.tssap.selena.model", new VersionRange("[1.0.0, 1.0.0]"), null, false, false)); 62 63 IInstallableUnit group = createIU("com.borland.tg.modeling.feature.group", Version.create("8.2.0.v20081113-0500-_87S7nELRXmpf6G0dO3emm"), null, requirements.toArray(new IRequirement[requirements.size()]), new IProvidedCapability[] {MetadataFactory.createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, "com.borland.tg.modeling", Version.create("8.2.0.v20081113-0500-_87S7nELRXmpf6G0dO3emm"))}, new HashMap<String, String>(), null, null, true); 64 65 ProfileChangeRequest req = new ProfileChangeRequest(profile); 66 req.addInstallableUnits(new IInstallableUnit[] {group}); 67 IProvisioningPlan plan = planner.getProvisioningPlan(req, null, null); 68 assertOK("plan should be OK", plan.getStatus()); 69 70 engine.perform(plan, null); 71 72 repo = getMetadataRepositoryManager().loadRepository(getTestData("test data bug 278668", "testData/bug278668").toURI(), null); 73 } 74 75 @Override tearDown()76 protected void tearDown() throws Exception { 77 getMetadataRepositoryManager().removeRepository(getTestData("test data bug 278668", "testData/bug278668").toURI()); 78 super.tearDown(); 79 } 80 testInstallFeaturePatch()81 public void testInstallFeaturePatch() { 82 IQueryResult<IInstallableUnit> c = repo.query(QueryUtil.createIUQuery("com.borland.tg.modeling.8.2.0.hotfixexp.patch.feature.group"), new NullProgressMonitor()); 83 assertEquals(1, queryResultSize(c)); 84 IQueryResult<IInstallableUnit> c2 = repo.query(QueryUtil.createIUQuery("com.borland.tg.modeling.8.2.0.nl.patch.feature.group"), new NullProgressMonitor()); 85 assertEquals(1, queryResultSize(c2)); 86 87 ProfileChangeRequest request = new ProfileChangeRequest(profile); 88 request.addInstallableUnits(new IInstallableUnit[] {c.iterator().next()}); 89 IPlanner planner = createPlanner(); 90 IProvisioningPlan plan = planner.getProvisioningPlan(request, null, new NullProgressMonitor()); 91 assertOK("Plan OK", plan.getStatus()); 92 93 ProfileChangeRequest request2 = new ProfileChangeRequest(profile); 94 request2.addInstallableUnits(new IInstallableUnit[] {c2.iterator().next()}); 95 IPlanner planner2 = createPlanner(); 96 IProvisioningPlan plan2 = planner2.getProvisioningPlan(request2, null, new NullProgressMonitor()); 97 assertOK("Plan OK", plan2.getStatus()); 98 99 ProfileChangeRequest request3 = new ProfileChangeRequest(profile); 100 request3.addInstallableUnits(new IInstallableUnit[] {c.iterator().next(), c2.iterator().next()}); 101 IPlanner planner3 = createPlanner(); 102 IProvisioningPlan plan3 = planner3.getProvisioningPlan(request3, null, new NullProgressMonitor()); 103 assertNotOK("Plan Not OK", plan3.getStatus()); 104 105 ProfileChangeRequest request4 = new ProfileChangeRequest(profile); 106 request4.addInstallableUnits(new IInstallableUnit[] {c.iterator().next(), c2.iterator().next()}); 107 request4.setInstallableUnitInclusionRules(c.iterator().next(), ProfileInclusionRules.createOptionalInclusionRule(c.iterator().next())); 108 request4.setInstallableUnitInclusionRules(c2.iterator().next(), ProfileInclusionRules.createOptionalInclusionRule(c2.iterator().next())); 109 IPlanner planner4 = createPlanner(); 110 IProvisioningPlan plan4 = planner4.getProvisioningPlan(request4, null, new NullProgressMonitor()); 111 assertOK("Plan OK", plan4.getStatus()); 112 } 113 } 114