/******************************************************************************* | |
* Copyright (c) 2010 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 org.eclipse.equinox.internal.p2.director.ProfileChangeRequest; | |
import java.io.File; | |
import java.util.Iterator; | |
import org.eclipse.core.runtime.NullProgressMonitor; | |
import org.eclipse.equinox.p2.core.*; | |
import org.eclipse.equinox.p2.engine.IProfileRegistry; | |
import org.eclipse.equinox.p2.engine.IProvisioningPlan; | |
import org.eclipse.equinox.p2.metadata.IInstallableUnit; | |
import org.eclipse.equinox.p2.metadata.Version; | |
import org.eclipse.equinox.p2.planner.IPlanner; | |
import org.eclipse.equinox.p2.planner.ProfileInclusionRules; | |
import org.eclipse.equinox.p2.query.IQueryResult; | |
import org.eclipse.equinox.p2.query.QueryUtil; | |
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; | |
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager; | |
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; | |
public class Bug302582d extends AbstractProvisioningTest { | |
String profileLoadedId = "bootProfile"; | |
IMetadataRepository repo = null; | |
IProvisioningAgent agent = null; | |
private IProfileRegistry profileRegistry; | |
protected void setUp() throws Exception { | |
super.setUp(); | |
File reporegistry1 = getTestData("test data bug 302582d", "testData/bug302582d/p2"); | |
File tempFolder = new File(getTempFolder(), "p2"); | |
copy("0.2", reporegistry1, tempFolder); | |
IProvisioningAgentProvider provider = getAgentProvider(); | |
agent = provider.createAgent(tempFolder.toURI()); | |
profileRegistry = ((IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME)); | |
assertNotNull(profileRegistry.getProfile(profileLoadedId)); | |
} | |
IInstallableUnit getIU(IMetadataRepository source, String id, String version) { | |
IQueryResult c = repo.query(QueryUtil.createIUQuery(id, Version.create(version)), new NullProgressMonitor()); | |
assertEquals(1, queryResultSize(c)); | |
return (IInstallableUnit) c.iterator().next(); | |
} | |
public void testInstall() { | |
IMetadataRepositoryManager mgr = (IMetadataRepositoryManager) agent.getService(IMetadataRepositoryManager.SERVICE_NAME); | |
try { | |
repo = mgr.loadRepository(getTestData("test data bug bug302582d repo", "testData/bug302582d/repo").toURI(), null); | |
} catch (ProvisionException e) { | |
assertNull(e); //This guarantees that the error does not go unnoticed | |
} | |
IQueryResult<IInstallableUnit> ius = repo.query(QueryUtil.createIUAnyQuery(), null); | |
IPlanner planner = getPlanner(agent); | |
IProvisioningPlan plan = planner.getProvisioningPlan(createRequest(ius), null, new NullProgressMonitor()); | |
IProvisioningPlan expected = planner.getProvisioningPlan(createFilteredRequest(ius), null, new NullProgressMonitor()); | |
assertEquals("Plan comparison", expected.getAdditions().query(QueryUtil.createIUAnyQuery(), null).toArray(IInstallableUnit.class), plan.getAdditions().query(QueryUtil.createIUAnyQuery(), null).toArray(IInstallableUnit.class), false); | |
} | |
private ProfileChangeRequest createFilteredRequest(IQueryResult<IInstallableUnit> ius) { | |
ProfileChangeRequest pcr = new ProfileChangeRequest(profileRegistry.getProfile(profileLoadedId)); | |
Iterator it = ius.iterator(); | |
while (it.hasNext()) { | |
IInstallableUnit iu = (IInstallableUnit) it.next(); | |
if ((iu.getId().equals("com.dcns.rsm.rda") && iu.getVersion().equals(Version.create("5.1.0.v20100112"))) || (iu.getId().equals("com.dcns.rsm.profile.equipment") && iu.getVersion().equals(Version.create("1.2.2.v20100108"))) || (iu.getId().equals("com.dcns.rsm.profile.gemo") && iu.getVersion().equals(Version.create("3.7.2.v20100108"))) || (iu.getId().equals("com.dcns.rsm.profile.system") && iu.getVersion().equals(Version.create("4.2.2.v20100112")))) { | |
pcr.addInstallableUnits(new IInstallableUnit[] {iu}); | |
} | |
} | |
return pcr; | |
} | |
private ProfileChangeRequest createRequest(IQueryResult<IInstallableUnit> ius) { | |
ProfileChangeRequest pcr = new ProfileChangeRequest(profileRegistry.getProfile(profileLoadedId)); | |
pcr.addInstallableUnits(ius.toArray(IInstallableUnit.class)); | |
Iterator it = ius.iterator(); | |
while (it.hasNext()) { | |
IInstallableUnit iu = (IInstallableUnit) it.next(); | |
pcr.setInstallableUnitInclusionRules(iu, ProfileInclusionRules.createOptionalInclusionRule(iu)); | |
} | |
return pcr; | |
} | |
} |