blob: ce8f45f6dc2bfc1fa430e46da0d93c1716d9f29f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 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.ui;
import org.eclipse.equinox.p2.core.ProvisionException;
import java.io.File;
import java.net.URI;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
import org.eclipse.equinox.internal.p2.ui.model.ProfileElement;
import org.eclipse.equinox.internal.provisional.p2.director.ProfileChangeRequest;
import org.eclipse.equinox.internal.provisional.p2.metadata.*;
import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory.InstallableUnitDescription;
import org.eclipse.equinox.p2.engine.*;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.operations.ProfileModificationJob;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
import org.eclipse.equinox.p2.repository.IRepositoryManager;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepositoryManager;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
import org.eclipse.equinox.p2.tests.TestActivator;
import org.eclipse.equinox.p2.ui.Policy;
import org.eclipse.equinox.p2.ui.ProvisioningUI;
/**
* Abstract class to set up the colocated UI test repo
*/
public abstract class AbstractProvisioningUITest extends AbstractProvisioningTest {
protected static final String TEST_REPO_PATH = "testRepos/updateSite/";
protected static final String TESTPROFILE = "TestProfile";
protected static final String TOPLEVELIU = "TopLevelIU";
protected static final String TOPLEVELIU2 = "TopLevelIU2";
protected static final String NESTEDIU = "NestedIU";
protected static final String LOCKEDIU = "LockedIU";
protected static final String UNINSTALLEDIU = "UninstalledIU";
protected static final String CATEGORYIU = "CategoryIU";
protected IMetadataRepositoryManager metaManager;
protected IArtifactRepositoryManager artifactManager;
protected URI testRepoLocation;
protected IProfile profile;
protected ProfileElement profileElement;
protected IInstallableUnit top1;
protected IInstallableUnit top2;
protected IInstallableUnit nested;
protected IInstallableUnit locked;
protected IInstallableUnit upgrade;
protected IInstallableUnit uninstalled;
protected IInstallableUnit category;
private ProvisioningUI ui;
protected void setUp() throws Exception {
super.setUp();
ui = ProvisioningUI.getDefaultUI();
ui = new ProvisioningUI(ui.getSession(), TESTPROFILE, ui.getPolicy());
ui.getOperationRunner().suppressRestart(true);
// to squelch repo error reporting
ui.getPolicy().setRepositoriesVisible(false);
profile = createProfile(TESTPROFILE);
profileElement = new ProfileElement(null, TESTPROFILE);
install((top1 = createIU(TOPLEVELIU, Version.create("1.0.0"))), true, false);
install((top2 = createIU(TOPLEVELIU2)), true, false);
install((nested = createIU(NESTEDIU)), false, false);
install((locked = createIU(LOCKEDIU)), true, true);
uninstalled = createIU(UNINSTALLEDIU);
IUpdateDescriptor update = MetadataFactory.createUpdateDescriptor(TOPLEVELIU, new VersionRange("[1.0.0, 1.0.0]"), 0, "update description");
upgrade = createIU(TOPLEVELIU, Version.createOSGi(2, 0, 0), null, NO_REQUIRES, NO_PROVIDES, NO_PROPERTIES, null, NO_TP_DATA, false, update, NO_REQUIRES);
category = createNamedIU(CATEGORYIU, CATEGORYIU, Version.create("1.0.0"), true);
createTestMetdataRepository(new IInstallableUnit[] {top1, top2, uninstalled, upgrade});
metaManager = (IMetadataRepositoryManager) ServiceHelper.getService(TestActivator.context, IMetadataRepositoryManager.SERVICE_NAME);
artifactManager = (IArtifactRepositoryManager) ServiceHelper.getService(TestActivator.context, IArtifactRepositoryManager.SERVICE_NAME);
File site = new File(TestActivator.getTestDataFolder().toString(), TEST_REPO_PATH);
testRepoLocation = site.toURI();
metaManager.addRepository(testRepoLocation);
artifactManager.addRepository(testRepoLocation);
}
protected void tearDown() throws Exception {
super.tearDown();
metaManager.removeRepository(testRepoLocation);
artifactManager.removeRepository(testRepoLocation);
}
protected boolean managerContains(IRepositoryManager manager, URI location) {
URI[] locations = manager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
for (int i = 0; i < locations.length; i++) {
if (locations[i].equals(location))
return true;
}
return false;
}
protected ProvisioningSession getSession() {
return ui.getSession();
}
protected ProvisioningUI getProvisioningUI() {
return ui;
}
protected Policy getPolicy() {
return ui.getPolicy();
}
protected IStatus install(IInstallableUnit iu, boolean root, boolean lock) throws ProvisionException {
ProfileChangeRequest req = new ProfileChangeRequest(profile);
req.addInstallableUnits(new IInstallableUnit[] {iu});
if (root) {
req.setInstallableUnitProfileProperty(iu, IProfile.PROP_PROFILE_ROOT_IU, Boolean.toString(true));
}
if (lock) {
req.setInstallableUnitProfileProperty(iu, IProfile.PROP_PROFILE_LOCKED_IU, new Integer(IProfile.LOCK_UNINSTALL | IProfile.LOCK_UPDATE).toString());
}
// Use an empty provisioning context to prevent repo access
IProvisioningPlan plan = getSession().getPlanner().getProvisioningPlan(req, new ProvisioningContext(new URI[] {}), getMonitor());
if (plan.getStatus().getSeverity() == IStatus.ERROR || plan.getStatus().getSeverity() == IStatus.CANCEL)
return plan.getStatus();
return getSession().performProvisioningPlan(plan, new DefaultPhaseSet(), new ProvisioningContext(), getMonitor());
}
protected IInstallableUnit createNamedIU(String id, String name, Version version, boolean isCategory) {
InstallableUnitDescription iu = new MetadataFactory.InstallableUnitDescription();
iu.setId(id);
iu.setVersion(version);
iu.setProperty(IInstallableUnit.PROP_NAME, name);
if (isCategory)
iu.setProperty(InstallableUnitDescription.PROP_TYPE_CATEGORY, Boolean.toString(true));
return MetadataFactory.createInstallableUnit(iu);
}
protected ProfileModificationJob getLongTestOperation() {
return new ProfileModificationJob("Test Operation", getSession(), TESTPROFILE, null, null) {
public IStatus runModal(IProgressMonitor monitor) {
while (true) {
// spin unless cancelled
if (monitor.isCanceled())
return Status.CANCEL_STATUS;
}
}
};
}
}