| /******************************************************************************* |
| * Copyright (c) 2010, 2017 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.equinox.p2.tests.planner; |
| |
| import java.io.File; |
| import java.lang.reflect.Field; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest; |
| import org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry; |
| import org.eclipse.equinox.p2.engine.*; |
| import org.eclipse.equinox.p2.metadata.*; |
| import org.eclipse.equinox.p2.planner.IPlanner; |
| import org.eclipse.equinox.p2.planner.IProfileChangeRequest; |
| import org.eclipse.equinox.p2.query.*; |
| import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; |
| |
| public class Bug306424 extends AbstractProvisioningTest { |
| |
| private File previousStoreValue = null; |
| private IProfile profile; |
| |
| protected String getTestDataPath() { |
| return "testData/bug306424"; |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| SimpleProfileRegistry realProfileRegistry = (SimpleProfileRegistry) getProfileRegistry(); |
| |
| Field profilesMapField = SimpleProfileRegistry.class.getDeclaredField("profiles"); //$NON-NLS-1$ |
| profilesMapField.setAccessible(true); |
| profilesMapField.set(realProfileRegistry, null); |
| |
| Field profileStore = SimpleProfileRegistry.class.getDeclaredField("store"); |
| profileStore.setAccessible(true); |
| profileStore.set(realProfileRegistry, previousStoreValue); |
| super.tearDown(); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| File reporegistry1 = getTestData("loading planner test data", getTestDataPath()); |
| File tempFolder = getTempFolder(); |
| copy("0.2", reporegistry1, tempFolder); |
| IProfileRegistry realProfileRegistry = getProfileRegistry(); |
| //Tweak the running profile registry |
| Field profileStore = SimpleProfileRegistry.class.getDeclaredField("store"); |
| profileStore.setAccessible(true); |
| previousStoreValue = (File) profileStore.get(realProfileRegistry); |
| profileStore.set(realProfileRegistry, new File(tempFolder, "p2/org.eclipse.equinox.p2.engine/profileRegistry")); |
| |
| Field profilesMapField = SimpleProfileRegistry.class.getDeclaredField("profiles"); //$NON-NLS-1$ |
| profilesMapField.setAccessible(true); |
| profilesMapField.set(realProfileRegistry, null); |
| //End of tweaking the profile registry |
| |
| profile = realProfileRegistry.getProfile("PlatformProfile"); |
| assertNotNull(profile); |
| } |
| |
| public void testInstall() { |
| IPlanner planner = createPlanner(); |
| |
| IInstallableUnit b = profile.query(QueryUtil.createIUQuery("b"), new NullProgressMonitor()).iterator().next(); |
| IProfileChangeRequest changeRequest = new ProfileChangeRequest(profile); |
| changeRequest.remove(b); |
| |
| IRequirement negateB = MetadataFactory.createRequirement(IInstallableUnit.NAMESPACE_IU_ID, b.getId(), new VersionRange(b.getVersion(), true, b.getVersion(), true), null, 0, 0, false); |
| Collection<IRequirement> extraReqs = new ArrayList<>(); |
| extraReqs.add(negateB); |
| changeRequest.addExtraRequirements(extraReqs); |
| |
| IProvisioningPlan plan = planner.getProvisioningPlan(changeRequest, null, new NullProgressMonitor()); |
| IQueryable result = plan.getRemovals(); |
| IQueryResult<IInstallableUnit> r = result.query(QueryUtil.ALL_UNITS, getMonitor()); |
| assertFalse("1.0", r.isEmpty()); |
| } |
| } |