blob: 7e4fb1a7aea7d5efc99f8f1d85e26fec4fdc164a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 Code 9 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:
* Code 9 - initial API and implementation
* IBM - ongoing development
******************************************************************************/
package org.eclipse.equinox.p2.tests.publisher.actions;
import static org.easymock.EasyMock.*;
import java.io.File;
import java.util.*;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
import org.eclipse.equinox.internal.p2.publisher.eclipse.ExecutablesDescriptor;
import org.eclipse.equinox.p2.metadata.*;
import org.eclipse.equinox.p2.publisher.*;
import org.eclipse.equinox.p2.publisher.eclipse.EquinoxExecutableAction;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
import org.eclipse.equinox.p2.tests.TestActivator;
import org.eclipse.equinox.p2.tests.publisher.TestArtifactRepository;
@SuppressWarnings({"restriction", "unchecked"})
public class EquinoxExecutableActionTest extends ActionTest {
private static final File MAC_EXEC = new File(TestActivator.getTestDataFolder(), "EquinoxExecutableActionTest/macosx/"); //$NON-NLS-1$
private static final File LINUX_EXEC = new File(TestActivator.getTestDataFolder(), "EquinoxExecutableActionTest/linux/"); //$NON-NLS-1$
private static final File WIN_EXEC = new File(TestActivator.getTestDataFolder(), "EquinoxExecutableActionTest/win/"); //$NON-NLS-1$
private final String EXECUTABLE_NAME = "eclipse"; //$NON-NLS-1$
private String macConfig = "carbon.macosx.ppc"; //$NON-NLS-1$
private String macConfigCocoa = "cocoa.macosx.x86"; //$NON-NLS-1$
private String winConfig = "win32.win32.x86"; //$NON-NLS-1$
private String linuxConfig = "linux.gtk.x86"; //$NON-NLS-1$
private ExecutablesDescriptor executablesDescriptor;
private IArtifactRepository artifactRepository;
private Version version = Version.create("1.2.3"); //$NON-NLS-1$
public void setUp() throws Exception {
setupPublisherInfo();
setupPublisherResult();
}
private void setupArtifactRepository() {
artifactRepository = new TestArtifactRepository(getAgent());
}
public void testMacCarbon() throws Exception {
testExecutableAction("mac", "macosx", macConfig, MAC_EXEC); //$NON-NLS-1$//$NON-NLS-2$
}
public void testMacCocoa() throws Exception {
testExecutableAction("macCocoa", "macosx", macConfigCocoa, MAC_EXEC); //$NON-NLS-1$//$NON-NLS-2$
}
public void testWin() throws Exception {
testExecutableAction("win", "win32", winConfig, WIN_EXEC); //$NON-NLS-1$//$NON-NLS-2$
}
public void testLinux() throws Exception {
testExecutableAction("linux", "linux", linuxConfig, LINUX_EXEC); //$NON-NLS-1$//$NON-NLS-2$
}
private void testExecutableAction(String idBase, String osArg, String config, File exec) {
executablesDescriptor = ExecutablesDescriptor.createDescriptor(osArg, EXECUTABLE_NAME, exec);
testAction = new EquinoxExecutableAction(executablesDescriptor, config, idBase, version, flavorArg);
testAction.perform(publisherInfo, publisherResult, new NullProgressMonitor());
verifyResults(idBase, config);
debug("Completed EquinoxExecutableActionTest " + idBase + " test."); //$NON-NLS-1$ //$NON-NLS-2$
}
@SuppressWarnings("hiding")
private void verifyResults(String idBase, String configSpec) {
ArrayList iuList = new ArrayList(publisherResult.getIUs(null, IPublisherResult.ROOT));
verifyExecIU(iuList, idBase, configSpec);
verifyEclipseIU(iuList, idBase, configSpec);
verifyCU(iuList, idBase, configSpec);
assertTrue(iuList.size() == 3);
}
@SuppressWarnings("hiding")
private void verifyCU(ArrayList iuList, String idBase, String configSpec) {
String[] config = AbstractPublisherAction.parseConfigSpec(configSpec);
String ws = config[0];
String os = config[1];
String arch = config[2];
for (int i = 0; i < iuList.size(); i++) {
IInstallableUnit possibleEclipse = (IInstallableUnit) iuList.get(i);
if (possibleEclipse.getId().equals(flavorArg + idBase + ".executable." + configSpec)) {//$NON-NLS-1$
IInstallableUnitFragment fragment = (IInstallableUnitFragment) iuList.get(i);
Collection<IProvidedCapability> providedCapability = fragment.getProvidedCapabilities();
verifyProvidedCapability(providedCapability, IInstallableUnit.NAMESPACE_IU_ID, flavorArg + idBase + ".executable." + configSpec, version); //$NON-NLS-1$
assertTrue(providedCapability.size() == 1);
Collection<IRequirement> requiredCapability = fragment.getRequirements();
verifyRequiredCapability(requiredCapability, IInstallableUnit.NAMESPACE_IU_ID, idBase + ".executable." + configSpec, new VersionRange(version, true, version, true)); //$NON-NLS-1$
assertTrue(requiredCapability.size() == 1);
assertTrue(fragment.getFilter().equals(InstallableUnit.parseFilter("(& (osgi.ws=" + ws + ")(osgi.os=" + os + ")(osgi.arch=" + arch + "))"))); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
assertTrue(fragment.getProperty("org.eclipse.equinox.p2.type.fragment").equals("true")); //$NON-NLS-1$ //$NON-NLS-2$
return;//pass
}
}
fail();
}
@SuppressWarnings("hiding")
private void verifyEclipseIU(ArrayList iuList, String idBase, String configSpec) {
for (int i = 0; i < iuList.size(); i++) {
IInstallableUnit possibleEclipse = (IInstallableUnit) iuList.get(i);
if (possibleEclipse.getId().equals((idBase + ".executable." + configSpec + ".eclipse"))) { //$NON-NLS-1$//$NON-NLS-2$
assertTrue(possibleEclipse.getVersion().equals(version));
Collection<IProvidedCapability> providedCapability = possibleEclipse.getProvidedCapabilities();
verifyProvidedCapability(providedCapability, IInstallableUnit.NAMESPACE_IU_ID, idBase + ".executable." + configSpec + ".eclipse", version); //$NON-NLS-1$ //$NON-NLS-2$
assertTrue(providedCapability.size() == 1);
Collection<IRequirement> req = possibleEclipse.getRequirements();
assertTrue(req.size() == 0);
return;//pass
}
}
fail();
}
@SuppressWarnings("hiding")
private void verifyExecIU(ArrayList iuList, String idBase, String configSpec) {
String[] config = AbstractPublisherAction.parseConfigSpec(configSpec);
String ws = config[0];
String os = config[1];
String arch = config[2];
for (int i = 0; i < iuList.size(); i++) {
IInstallableUnit possibleExec = (IInstallableUnit) iuList.get(i);
if (possibleExec.getId().equals(idBase + ".executable." + configSpec)) { //$NON-NLS-1$
//keep checking
assertTrue(possibleExec.getFilter().equals(InstallableUnit.parseFilter("(& (osgi.ws=" + ws + ")(osgi.os=" + os + ")(osgi.arch=" + arch + "))"))); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
IArtifactKey eKey = possibleExec.getArtifacts().iterator().next();
assertTrue(eKey.getClassifier().equals("binary")); //$NON-NLS-1$
assertTrue(eKey.getId().equals(idBase + ".executable." + configSpec)); //$NON-NLS-1$
assertTrue(eKey.getVersion().equals(version));
Collection<IProvidedCapability> providedCapabilities = possibleExec.getProvidedCapabilities();
verifyProvidedCapability(providedCapabilities, IInstallableUnit.NAMESPACE_IU_ID, idBase + ".executable." + configSpec, version); //$NON-NLS-1$
verifyProvidedCapability(providedCapabilities, flavorArg + idBase, idBase + ".executable", version); //$NON-NLS-1$
assertTrue(providedCapabilities.size() == 2);
Collection<IRequirement> requiredCapability = possibleExec.getRequirements();
verifyRequiredCapability(requiredCapability, IInstallableUnit.NAMESPACE_IU_ID, "org.eclipse.equinox.launcher." + (idBase.equals("mac") || idBase.equals("macCocoa") ? configSpec.substring(0, configSpec.lastIndexOf(".")) : configSpec), VersionRange.emptyRange); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertTrue(requiredCapability.size() == 1);
return;//pass
}
}
fail();
}
protected void insertPublisherInfoBehavior() {
setupArtifactRepository();
expect(publisherInfo.getArtifactRepository()).andReturn(artifactRepository).anyTimes();
expect(publisherInfo.getArtifactOptions()).andReturn(IPublisherInfo.A_PUBLISH).anyTimes();
expect(publisherInfo.getAdvice((String) anyObject(), anyBoolean(), (String) anyObject(), (Version) anyObject(), (Class) anyObject())).andReturn(Collections.emptyList());
}
}