blob: 91bc64d39e0fb19d8988e008d91695627086ca47 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 EclipseSource 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:
* EclipseSource - initial API and implementation
* IBM Corporation - on-going maintenance
******************************************************************************/
package org.eclipse.equinox.p2.tests.publisher.actions;
import java.io.File;
import java.util.Map;
import java.util.Properties;
import org.eclipse.equinox.frameworkadmin.BundleInfo;
import org.eclipse.equinox.internal.p2.publisher.eclipse.ProductFile;
import org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice;
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
import org.eclipse.equinox.p2.tests.TestData;
/**
* Tests the product file advice
*/
public class ProductFileAdviceTest extends AbstractProvisioningTest {
String productFileLocation = null;
ProductFile productFile = null;
ProductFileAdvice productFileAdviceWin32 = null;
String productFileLocation2 = null;
ProductFile productFile2 = null;
ProductFileAdvice productFileAdvice2 = null;
String configFile = "/org.eclipse.equinox.p2.tests/testData/ProductActionTest/productWithConfig/config.ini";
@Override
protected void setUp() throws Exception {
super.setUp();
productFileLocation = TestData.getFile("ProductActionTest/productWithConfig", "sample.product").toString();
productFile = new ProductFile(productFileLocation);
productFileAdviceWin32 = new ProductFileAdvice(productFile, "x86.win32.*");
productFileLocation2 = TestData.getFile("ProductActionTest", "productFileActionTest.product").toString();
productFile2 = new ProductFile(productFileLocation2);
productFileAdvice2 = new ProductFileAdvice(productFile2, "x86.win32.*");
}
/**
* Test method for {@link org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice#getProgramArguments()}.
*/
public void testGetProgramArguments() {
String[] programArgumentsWin32 = productFileAdviceWin32.getProgramArguments();
assertEquals("1.0", 3, programArgumentsWin32.length);
assertEquals("1.1", "programArg", programArgumentsWin32[0]);
assertEquals("1.2", "-name", programArgumentsWin32[1]);
assertEquals("1.3", "My Name", programArgumentsWin32[2]);
String[] programArguments2 = productFileAdvice2.getProgramArguments();
assertEquals("2.0", 2, programArguments2.length);
assertEquals("2.1", "-product", programArguments2[0]);
assertEquals("2.2", "com,ma", programArguments2[1]);
}
/**
* Test method for {@link org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice#getVMArguments()}.
*/
public void testGetVMArguments() {
String[] vmArgumentsWin32 = productFileAdviceWin32.getVMArguments();
assertEquals("1.0", 2, vmArgumentsWin32.length);
assertEquals("1.1", "vmArg", vmArgumentsWin32[0]);
assertEquals("1.2", "-Dfoo=b a r", vmArgumentsWin32[1]);
String[] vmArguments2 = productFileAdvice2.getVMArguments();
assertEquals("2.0", 1, vmArguments2.length);
assertEquals("2.1", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8272", vmArguments2[0]);
}
/**
* Test method for {@link org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice#getBundles()}.
*/
public void testGetBundles() {
BundleInfo[] bundles = productFileAdviceWin32.getBundles();
assertEquals("1.0", 3, bundles.length);
for (int i = 0; i < 3; i++) {
if (bundles[i].getSymbolicName().equals("org.eclipse.equinox.common")) {
assertEquals(2, bundles[i].getStartLevel());
assertEquals(true, bundles[i].isMarkedAsStarted());
} else if (bundles[i].getSymbolicName().equals("org.eclipse.core.runtime")) {
// nothing yet
} else if (bundles[i].getSymbolicName().equals("org.eclipse.swt.win32.win32.x86")) {
assertEquals(-1, bundles[i].getStartLevel());
assertEquals(false, bundles[i].isMarkedAsStarted());
} else
fail("unknown bundle: " + bundles[i].getSymbolicName());
}
bundles = productFileAdvice2.getBundles();
assertEquals("2.0", 1, bundles.length);
for (int i = 0; i < 1; i++) {
if (bundles[i].getSymbolicName().equals("org.eclipse.core.commands")) {
assertTrue("2.1", bundles[i].getStartLevel() == 2);
assertTrue("2.2", bundles[i].isMarkedAsStarted() == false);
} else
fail("unknown bundle: " + bundles[i].getSymbolicName());
}
}
public void testBoundedVersionConfigurations() throws Exception {
String location = TestData.getFile("ProductActionTest", "boundedVersionConfigurations.product").toString();
ProductFile product = new ProductFile(location);
ProductFileAdvice advice = new ProductFileAdvice(product, "x86.win32.*");
BundleInfo[] bundles = advice.getBundles();
assertEquals("1.0", 2, bundles.length);
for (int i = 0; i < 2; i++) {
if (bundles[i].getSymbolicName().equals("org.eclipse.core.commands")) {
assertEquals(2, bundles[i].getStartLevel());
assertEquals(true, bundles[i].isMarkedAsStarted());
} else if (bundles[i].getSymbolicName().equals("org.eclipse.core.runtime")) {
assertTrue("1.1", bundles[i].getStartLevel() == 2);
assertTrue("1.2", bundles[i].isMarkedAsStarted() == true);
} else
fail("unknown bundle: " + bundles[i].getSymbolicName());
}
}
public void testUnboundedVersionConfigurations() throws Exception {
String location = TestData.getFile("ProductActionTest", "unboundedVersionConfigurations.product").toString();
ProductFile product = new ProductFile(location);
ProductFileAdvice advice = new ProductFileAdvice(product, "x86.win32.*");
BundleInfo[] bundles = advice.getBundles();
assertEquals("1.0", 2, bundles.length);
for (int i = 0; i < 2; i++) {
if (bundles[i].getSymbolicName().equals("org.eclipse.core.commands")) {
assertEquals(2, bundles[i].getStartLevel());
assertEquals(true, bundles[i].isMarkedAsStarted());
} else if (bundles[i].getSymbolicName().equals("org.eclipse.core.runtime")) {
assertTrue("1.1", bundles[i].getStartLevel() == 2);
assertTrue("1.2", bundles[i].isMarkedAsStarted() == true);
} else
fail("unknown bundle: " + bundles[i].getSymbolicName());
}
}
/**
* Test method for {@link org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice#getProperties()}.
*/
public void testGetProperties() {
Map<String, String> properties = productFileAdviceWin32.getProperties();
assertEquals("1.0", 7, properties.size());
assertEquals("1.2", "bar", properties.get("foo"));
assertEquals("1.3", "", properties.get("foo1"));
assertEquals("1.4", "true", properties.get("osgi.sharedConfiguration.area.readOnly"));
assertEquals("1.5", "/d/sw/java64/jdk1.6.0_03/bin/java", properties.get("eclipse.vm"));
assertEquals("1.6", "test.product", properties.get("eclipse.product"));
assertEquals("1.7", "test.app", properties.get("eclipse.application"));
assertEquals("1.1", "platform:/base/plugins/org.eclipse.equinox.p2.tests", properties.get("osgi.splashPath"));
properties = productFileAdvice2.getProperties();
assertEquals("2.0", 0, properties.size());
}
/**
* Test method for {@link org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice#getExecutableName()}.
*/
public void testGetExecutableName() {
assertEquals("1.0", "sample", productFileAdviceWin32.getExecutableName());
assertEquals("2.0", null, productFileAdvice2.getExecutableName());
}
/**
* Test method for {@link org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice#getProductFile()}.
*/
public void testGetProductFile() {
assertEquals("1.0", productFile, productFileAdviceWin32.getProductFile());
assertEquals("2.0", productFile2, productFileAdvice2.getProductFile());
}
/**
* Test method for {@link org.eclipse.equinox.p2.publisher.eclipse.ProductFileAdvice#getIcons(java.lang.String)}.
*/
public void testGetIcons() {
String[] icons = productFileAdviceWin32.getIcons();
String absolutePath = new File(productFile.getLocation().getParentFile(), "test/icon.bmp").getAbsolutePath();
assertEquals("1.0", 1, icons.length);
assertEquals("1.1", absolutePath, icons[0]);
icons = productFileAdvice2.getIcons();
absolutePath = new File(productFile2.getLocation().getParentFile(), "icon.bmp").getAbsolutePath();
assertEquals("2.0", 1, icons.length);
assertEquals("2.1", absolutePath, icons[0]);
}
public void testSimpleConfiguratorConfigURL() throws Exception {
File rootFolder = getTestFolder("simpleConfiguratorConfigURL");
File sampleProduct = new File(rootFolder, "sample.product");
copy("Copying sample.product", TestData.getFile("ProductActionTest/productWithConfig", "sample.product"), sampleProduct);
Properties configProperties = new Properties();
configProperties.put("org.eclipse.equinox.simpleconfigurator.configUrl", "file:org.eclipse.equinox.simpleconfigurator/bundles.info");
configProperties.put("osgi.bundles", "org.eclipse.equinox.simpleconfigurator@1:start");
writeProperties(new File(rootFolder, "config.ini"), configProperties);
StringBuilder buffer = new StringBuilder();
buffer.append("org.eclipse.equinox.common,3.5.100.v20090817,plugins/org.eclipse.equinox.common_3.5.100.v20090817.jar,2,true\n");
buffer.append("org.eclipse.equinox.simpleconfigurator,1.0.200.v20090729-1800,plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20090729-1800.jar,1,true\n");
writeBuffer(new File(rootFolder, "org.eclipse.equinox.simpleconfigurator/bundles.info"), buffer);
ProductFile product = new ProductFile(sampleProduct.getCanonicalPath());
ProductFileAdvice advice = new ProductFileAdvice(product, "x86.win32.win32");
BundleInfo[] bundles = advice.getBundles();
for (int i = 0; i < 2; i++) {
if (bundles[i].getSymbolicName().equals("org.eclipse.equinox.common")) {
assertEquals("equinox.common start level", 2, bundles[i].getStartLevel());
assertEquals("equinox.common started", true, bundles[i].isMarkedAsStarted());
}
}
}
public void testConfigNullLauncher() throws Exception {
File root = getTestFolder("configNullLauncher");
File testProduct = new File(root, "test.product");
StringBuilder buffer = new StringBuilder();
buffer.append("<product id=\"test.product\" version=\"1\" useFeatures=\"false\"> \n");
buffer.append(" <configIni use=\"default\"> \n");
buffer.append(" <win32>config.ini</win32> \n");
buffer.append(" </configIni> \n");
buffer.append(" <plugins> \n");
buffer.append(" <plugin id=\"org.eclipse.core.runtime\" version=\"1.0.4\"/> \n");
buffer.append(" <plugin id=\"org.eclipse.equinox.simpleconfigurator\" /> \n");
buffer.append(" </plugins> \n");
buffer.append("</product> \n");
writeBuffer(testProduct, buffer);
Properties configProperties = new Properties();
configProperties.put("osgi.bundles", "org.eclipse.equinox.simpleconfigurator@1:start");
configProperties.put("eclipse.application", "test.application");
configProperties.put("osgi.instance.area.default", "@user.home/workspace");
writeProperties(new File(root, "config.ini"), configProperties);
ProductFile product = new ProductFile(testProduct.getCanonicalPath());
ProductFileAdvice advice = new ProductFileAdvice(product, "x86.win32.win32");
BundleInfo[] bundles = advice.getBundles();
assertEquals("bundlers length", 2, bundles.length);
Map<String, String> adviceProperties = advice.getProperties();
assertEquals("instance.area.default", "@user.home/workspace", adviceProperties.get("osgi.instance.area.default"));
assertEquals("eclipse.application", "test.application", adviceProperties.get("eclipse.application"));
assertEquals("eclipse.product", "test.product", adviceProperties.get("eclipse.product"));
}
}