/******************************************************************************* * Copyright (c) 2011 Sonatype, Inc. 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: * Sonatype, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.equinox.p2.tests.ui.operations; import java.lang.reflect.Field; import java.net.URI; import java.util.*; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.equinox.internal.p2.engine.SimpleProfileRegistry; import org.eclipse.equinox.p2.core.ProvisionException; import org.eclipse.equinox.p2.engine.IProfileRegistry; import org.eclipse.equinox.p2.metadata.*; import org.eclipse.equinox.p2.operations.*; import org.eclipse.equinox.p2.query.IQueryResult; import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; public class OperationFactoryTest extends AbstractProvisioningTest { @Override protected void setUp() throws Exception { super.setUp(); } public void testCreateInstallOperation() { OperationFactory of = new OperationFactory(); Collection<IVersionedId> versions = new ArrayList<IVersionedId>(); versions.add(new VersionedId("aBundle", "1.0.0")); Collection<URI> coll = new ArrayList<URI>(); coll.add(getTestData("Simple repository", "testData/testRepos/simple.1").toURI()); try { of.createInstallOperation(versions, coll, new NullProgressMonitor()); } catch (ProvisionException e) { fail("Creation of the install operation failed", e); } } public void testCreateInstallOperationWithUnspecifiedVersion() { OperationFactory of = new OperationFactory(); Collection<IVersionedId> versions = new ArrayList<IVersionedId>(); versions.add(new VersionedId("aBundle", (Version) null)); Collection<URI> coll = new ArrayList<URI>(); coll.add(getTestData("Simple repository", "testData/testRepos/simple.1").toURI()); try { of.createInstallOperation(versions, coll, new NullProgressMonitor()); } catch (ProvisionException e) { fail("Creation of the install operation failed", e); } } public void testMissingVersionedIdInInstallOperation() { OperationFactory of = new OperationFactory(); Collection<IVersionedId> versions = new ArrayList<IVersionedId>(); versions.add(new VersionedId("aBundle", "1.0.0")); Exception exceptionMet = null; try { of.createInstallOperation(versions, Collections.<URI> emptyList(), new NullProgressMonitor()); } catch (ProvisionException e) { exceptionMet = e; } assertNotNull("An exception was expected", exceptionMet); } public void testMissingElementToUninstall() { createProfileWithOneIU(getUniqueString()); //While we are at it, test the installedElements OperationFactory of = new OperationFactory(); IQueryResult<IInstallableUnit> installedElements = of.listInstalledElements(true, new NullProgressMonitor()); assertEquals(1, installedElements.toSet().size()); //Now test various removal scenarios testUninstall(new VersionedId("aBundle", (Version) null), false); testUninstall(new VersionedId("aBundle", Version.create("1.0.0")), false); testUninstall(new VersionedId("aBundle", Version.create("2.0.0")), true); testUninstall(new VersionedId("missingBundle", (Version) null), true); testUninstall(installedElements.toSet().iterator().next(), false); testUninstall(createEclipseIU("doesNotExist"), true); } private void createProfileWithOneIU(String profileName) { //create a profile and set it as self try { IProfileRegistry profileRegistry = getProfileRegistry(); profileRegistry.addProfile(profileName); Field selfField = SimpleProfileRegistry.class.getDeclaredField("self"); //$NON-NLS-1$ selfField.setAccessible(true); previousSelfValue = selfField.get(profileRegistry); selfField.set(profileRegistry, profileName); } catch (Exception e) { fail("Error while setting up uninstall test", e); } //install something using the install operation OperationFactory of = new OperationFactory(); Collection<IVersionedId> versions = new ArrayList<IVersionedId>(); versions.add(new VersionedId("aBundle", (Version) null)); Collection<URI> coll = new ArrayList<URI>(); coll.add(getTestData("Simple repository", "testData/testRepos/simple.1").toURI()); try { InstallOperation iop = of.createInstallOperation(versions, coll, new NullProgressMonitor()); IStatus result = iop.resolveModal(new NullProgressMonitor()); if (result.isOK()) { iop.getProvisioningJob(new NullProgressMonitor()).runModal(new NullProgressMonitor()); } } catch (ProvisionException e) { fail("Creation of the install operation failed", e); } } private void testUninstall(IVersionedId vid, boolean shouldFail) { OperationFactory of = new OperationFactory(); Collection<IVersionedId> toRemove = new ArrayList<IVersionedId>(); toRemove.add(vid); Exception expectedException = null; try { of.createUninstallOperation(toRemove, Collections.<URI> emptyList(), new NullProgressMonitor()); } catch (ProvisionException e) { expectedException = e; } if (shouldFail) assertNotNull(expectedException); else assertNull(expectedException); } public void testUpdateOperation() { createProfileWithOneIU(getUniqueString()); OperationFactory of = new OperationFactory(); { Collection<IVersionedId> toUpdate = new ArrayList<IVersionedId>(); toUpdate.add(new VersionedId("doesNotExist", (Version) null)); Collection<URI> repos = new ArrayList<URI>(); repos.add(getTestData("second repository", "testData/testRepos/simple.2").toURI()); Exception expectedException = null; try { of.createUpdateOperation(toUpdate, repos, new NullProgressMonitor()); } catch (ProvisionException e) { expectedException = e; } assertNotNull(expectedException); } { Collection<IVersionedId> toUpdate = new ArrayList<IVersionedId>(); toUpdate.add(new VersionedId("aBundle", Version.parseVersion("1.0.0"))); Collection<URI> repos = new ArrayList<URI>(); repos.add(getTestData("second repository", "testData/testRepos/simple.2").toURI()); try { UpdateOperation op = of.createUpdateOperation(toUpdate, repos, new NullProgressMonitor()); op.resolveModal(new NullProgressMonitor()); assertEquals(1, op.getPossibleUpdates().length); } catch (ProvisionException e) { fail("Exception not expected", e); } } { Collection<URI> repos = new ArrayList<URI>(); repos.add(getTestData("second repository", "testData/testRepos/simple.2").toURI()); try { UpdateOperation op = of.createUpdateOperation(null, repos, new NullProgressMonitor()); op.resolveModal(new NullProgressMonitor()); assertEquals(1, op.getPossibleUpdates().length); } catch (ProvisionException e) { fail("Exception not expected", e); } } } }