| /******************************************************************************* |
| * Copyright (c) 2010, 2017 IBM Corporation and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.equinox.p2.tests.planner; |
| |
| import java.io.File; |
| import java.lang.reflect.Field; |
| 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.IInstallableUnit; |
| import org.eclipse.equinox.p2.planner.IPlanner; |
| import org.eclipse.equinox.p2.query.*; |
| import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; |
| |
| public class Bug309530 extends AbstractProvisioningTest { |
| |
| private File previousStoreValue = null; |
| private IProfile profile; |
| |
| protected String getTestDataPath() { |
| return "testData/bug309530"; |
| } |
| |
| @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(); |
| |
| ProfileChangeRequest changeRequest = new ProfileChangeRequest(profile); |
| |
| String[] ids = new String[] {"hi", "b"}; |
| for (String id : ids) { |
| IInstallableUnit iu = profile.query(QueryUtil.createIUQuery(id), new NullProgressMonitor()).iterator().next(); |
| changeRequest.remove(iu); |
| } |
| |
| int origsize = changeRequest.getInstallableUnitProfilePropertiesToAdd().size(); |
| |
| for (int i = 0; i < 5; i++) { |
| IProvisioningPlan plan = planner.getProvisioningPlan(changeRequest, null, new NullProgressMonitor()); |
| IQueryable<IInstallableUnit> result = plan.getRemovals(); |
| IQueryResult<IInstallableUnit> r = result.query(QueryUtil.ALL_UNITS, getMonitor()); |
| assertFalse("1.0." + i, r.isEmpty()); |
| assertEquals("1.1." + i, origsize, changeRequest.getInstallableUnitProfilePropertiesToAdd().size()); |
| } |
| } |
| } |