1 /******************************************************************************* 2 * Copyright (c) 2011, 2018 Sonatype, Inc. and others. 3 * 4 * This 5 * program and the accompanying materials are made available under the terms of 6 * the Eclipse Public License 2.0 which accompanies this distribution, and is 7 * available at 8 * https://www.eclipse.org/legal/epl-2.0/ 9 * 10 * SPDX-License-Identifier: EPL-2.0 11 * 12 * Contributors: 13 * Sonatype, Inc. - initial API and implementation 14 ******************************************************************************/ 15 package org.eclipse.equinox.p2.tests.planner; 16 17 import java.util.Arrays; 18 import org.eclipse.core.runtime.IStatus; 19 import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest; 20 import org.eclipse.equinox.p2.engine.IProfile; 21 import org.eclipse.equinox.p2.engine.IProvisioningPlan; 22 import org.eclipse.equinox.p2.engine.ProvisioningContext; 23 import org.eclipse.equinox.p2.metadata.IInstallableUnit; 24 import org.eclipse.equinox.p2.metadata.IRequirement; 25 import org.eclipse.equinox.p2.metadata.Version; 26 import org.eclipse.equinox.p2.metadata.VersionRange; 27 import org.eclipse.equinox.p2.planner.IPlanner; 28 import org.eclipse.equinox.p2.query.QueryUtil; 29 import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; 30 31 public class FindRootsAfterUpdate extends AbstractProvisioningTest { 32 IInstallableUnit a1; 33 IInstallableUnit b1; 34 IInstallableUnit b2; 35 IInstallableUnit b3; 36 IInstallableUnit x1; 37 38 IProfile profile; 39 IPlanner planner; 40 41 @Override setUp()42 protected void setUp() throws Exception { 43 super.setUp(); 44 a1 = createIU("A", Version.create("1.0.0"), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "B", new VersionRange("[1.0.0, 4.0.0)"))); 45 46 b1 = createIU("B", Version.create("1.0.0"), true); 47 48 b2 = createIU("B", Version.create("2.0.0"), true); 49 50 b3 = createIU("B", Version.create("3.0.0"), true); 51 52 x1 = createIU("X", Version.createOSGi(2, 0, 0), createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "B", new VersionRange("[2.0.0, 2.0.0]"))); 53 54 createTestMetdataRepository(new IInstallableUnit[] {a1, b1, b2, b3, x1}); 55 56 profile = createProfile("TestProfile." + getName()); 57 planner = createPlanner(); 58 59 } 60 testInstallB3()61 public void testInstallB3() { 62 ProfileChangeRequest req = new ProfileChangeRequest(profile); 63 ProvisioningContext ctx = new ProvisioningContext(getAgent()); 64 IRequirement[] reqs = createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "B", new VersionRange("[2.0.0, 4.0.0]")); 65 req.addExtraRequirements(Arrays.asList(reqs[0])); 66 IProvisioningPlan plan = planner.getProvisioningPlan(req, ctx, null); 67 assertEquals(IStatus.OK, plan.getStatus().getSeverity()); 68 assertInstallOperand(plan, b3); 69 assertContains(plan.getFutureState().query(QueryUtil.createMatchQuery(reqs[0].getMatches()), null), b3); 70 } 71 testConflictThroughExtraRequirements()72 public void testConflictThroughExtraRequirements() { 73 ProfileChangeRequest req = new ProfileChangeRequest(profile); 74 ProvisioningContext ctx = new ProvisioningContext(getAgent()); 75 IRequirement reqOnB = createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "B", new VersionRange("[3.0.0, 4.0.0]"))[0]; 76 IRequirement reqOnX = createRequiredCapabilities(IInstallableUnit.NAMESPACE_IU_ID, "X", new VersionRange("[2.0.0, 2.0.0]"))[0]; 77 IRequirement[] extraReqs = new IRequirement[] {reqOnB, reqOnX}; 78 req.addExtraRequirements(Arrays.asList(extraReqs)); 79 IProvisioningPlan plan = planner.getProvisioningPlan(req, ctx, null); 80 assertNotOK(plan.getStatus()); 81 } 82 } 83