1 /*******************************************************************************
2  *  Copyright (c) 2008, 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 org.eclipse.core.runtime.IStatus;
17 import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
18 import org.eclipse.equinox.p2.engine.*;
19 import org.eclipse.equinox.p2.metadata.*;
20 import org.eclipse.equinox.p2.planner.IPlanner;
21 import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
22 
23 public class PatchTest5 extends AbstractProvisioningTest {
24 	IInstallableUnit a1;
25 	IInstallableUnit f1;
26 	IInstallableUnit top;
27 	IInstallableUnit b1;
28 	IInstallableUnitPatch p1;
29 
30 	IProfile profile1;
31 	IPlanner planner;
32 	IEngine engine;
33 
34 	@Override
setUp()35 	protected void setUp() throws Exception {
36 		super.setUp();
37 		top = createIU("TOP", Version.createOSGi(1, 0, 0), new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "F", new VersionRange("[1.0.0, 1.0.0]"), null, false, false, true)});
38 		f1 = createIU("F", Version.createOSGi(1, 0, 0), new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "A", new VersionRange("[1.0.0, 1.0.0]"), null, false, false, true)});
39 		a1 = createIU("A", Version.create("1.0.0"), new IRequirement[] {MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "B", new VersionRange("[1.0.0, 1.1.0)"), null, false, true)});
40 		b1 = createIU("B", Version.createOSGi(1, 2, 0), true);
41 		IRequirementChange change = MetadataFactory.createRequirementChange(MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "B", VersionRange.emptyRange, null, false, false, false), MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "B", new VersionRange("[1.1.0, 1.3.0)"), null, false, false, true));
42 		IRequirement lifeCycle = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "F", new VersionRange("[1.0.0, 1.0.0]"), null, false, false, true);
43 		IRequirement[][] scope = new IRequirement[][] {{MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, "A", new VersionRange("[1.0.0,1.0.0]"), null, false, false)}};
44 		p1 = createIUPatch("P", Version.create("1.0.0"), true, new IRequirementChange[] {change}, scope, lifeCycle);
45 
46 		createTestMetdataRepository(new IInstallableUnit[] {a1, b1, f1, top, p1});
47 
48 		profile1 = createProfile("TestProfile." + getName());
49 		planner = createPlanner();
50 		engine = createEngine();
51 	}
52 
testInstall()53 	public void testInstall() {
54 		ProfileChangeRequest req1 = new ProfileChangeRequest(profile1);
55 		req1.addInstallableUnits(new IInstallableUnit[] {top});
56 		IProvisioningPlan plan1 = planner.getProvisioningPlan(req1, null, null);
57 		assertEquals(IStatus.ERROR, plan1.getStatus().getSeverity());
58 
59 		ProfileChangeRequest req2 = new ProfileChangeRequest(profile1);
60 		req2.addInstallableUnits(new IInstallableUnit[] {top, p1});
61 		IProvisioningPlan plan2 = planner.getProvisioningPlan(req2, null, null);
62 		assertEquals(IStatus.OK, plan2.getStatus().getSeverity());
63 	}
64 }
65