blob: 92cccec698079d07b4cf09e4e25cd2c6592ad119 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2010 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.p2.tests.installer;
import java.io.File;
import java.io.IOException;
import java.net.*;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.installer.InstallDescriptionParser;
import org.eclipse.equinox.internal.provisional.p2.installer.InstallDescription;
import org.eclipse.equinox.p2.metadata.IVersionedId;
import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
import org.eclipse.equinox.p2.tests.TestData;
/**
* Tests install description parser.
*/
public class InstallDescriptionParserTest extends AbstractProvisioningTest {
protected void assertEquals(String message, InstallDescription expected, InstallDescription actual) {
assertEquals(message, expected.getLauncherName(), actual.getLauncherName());
assertEquals(message, expected.getProductName(), actual.getProductName());
assertEquals(message, expected.getAgentLocation(), actual.getAgentLocation());
assertEquals(message, expected.getArtifactRepositories(), actual.getArtifactRepositories());
assertEquals(message, expected.getBundleLocation(), actual.getBundleLocation());
assertEquals(message, expected.getInstallLocation(), actual.getInstallLocation());
assertEquals(message, expected.getMetadataRepositories(), actual.getMetadataRepositories());
assertEquals(message, expected.getProfileProperties(), actual.getProfileProperties());
assertEquals(message, expected.getRoots(), actual.getRoots());
assertEquals(message, expected.isAutoStart(), actual.isAutoStart());
}
private InstallDescription loadDescription(String filename) {
URL location = null;
try {
location = TestData.getFile("installer", filename).toURL();
} catch (IOException e) {
fail("0.99", e);
}
InstallDescription description = null;
try {
description = InstallDescriptionParser.createDescription(location.toExternalForm(), SubMonitor.convert(getMonitor()));
} catch (Exception e) {
fail("1.99", e);
}
return description;
}
public void testGetArrayFromString() {
String[] elements = InstallDescriptionParser.getArrayFromString(null, ".");
assertEquals("1.0", 0, elements.length);
}
/**
* Tests loading an empty install-description file
*/
public void testLoadEmpty() {
InstallDescription description = loadDescription("empty.properties");
//assert it is the same as a new empty description
assertEquals("1.0", new InstallDescription(), description);
}
/**
* Tests loading an install description file relative to the running instance.
*/
public void testLoadRelativeDescription() throws IOException, URISyntaxException {
boolean existed = true;
String installerInstallArea = System.getProperty("osgi.install.area");
if (installerInstallArea == null)
throw new IllegalStateException("Install area is not specified.");
URI installerDescriptionURI = URIUtil.append(URIUtil.fromString(installerInstallArea), "installer.properties");
File installerDescription = URIUtil.toFile(installerDescriptionURI);
if (!installerDescription.exists()) {
existed = false;
installerDescription.createNewFile();
}
try {
InstallDescription description = InstallDescriptionParser.createDescription(null, SubMonitor.convert(getMonitor()));
//should find empty file at default location
assertEquals("1.0", new InstallDescription(), description);
} catch (Exception e) {
fail("0.99", e);
} finally {
if (!existed)
installerDescription.delete();
}
}
/**
* Tests loading a well-formed description file where all properties are specified.
*/
public void testLoadGoodDescription() {
InstallDescription description = loadDescription("good.properties");
URI[] artifactRepositories = description.getArtifactRepositories();
assertEquals("1.0", 2, artifactRepositories.length);
assertEquals("1.1", "http://update.eclipse.org/eclipse/someUpdateSite/", artifactRepositories[0].toString());
assertEquals("1.1", "http://update.eclipse.org/eclipse/someArtifacts/", artifactRepositories[1].toString());
URI[] metadataRepositories = description.getMetadataRepositories();
assertEquals("1.2", 2, metadataRepositories.length);
assertEquals("1.3", "http://update.eclipse.org/eclipse/someUpdateSite/", metadataRepositories[0].toString());
assertEquals("1.3", "http://update.eclipse.org/eclipse/someMetadata/", metadataRepositories[1].toString());
assertEquals("1.4", "testFlavor", description.getProfileProperties().get("eclipse.p2.flavor"));
assertEquals("1.5", "Test Profile Name", description.getProductName());
assertEquals("1.5", "testLauncherName", description.getLauncherName());
IVersionedId[] roots = description.getRoots();
assertEquals("1.7", 2, roots.length);
assertEquals("1.8", "testRoot", roots[0].getId());
assertEquals("1.9", Version.create("2.0"), roots[0].getVersion());
assertEquals("1.8", "anotherRoot", roots[1].getId());
assertEquals("1.9", Version.create("1.0.1"), roots[1].getVersion());
assertTrue("1.10", !description.isAutoStart());
assertEquals("1.11", new Path("/tmp/agent/"), description.getAgentLocation());
assertEquals("1.12", new Path("/tmp/bundles/"), description.getBundleLocation());
assertEquals("1.13", new Path("/tmp/install/"), description.getInstallLocation());
}
public void testLoadBadDescription() {
InstallDescription description = loadDescription("bad.properties");
//nothing in this description is valid, so it should be the same as an empty description
assertEquals("1.0", new InstallDescription(), description);
}
/**
* Tests loading a missing install description
*/
public void testLoadMissing() {
try {
InstallDescriptionParser.createDescription(new File("/does/not/exist/InstallDescriptionParserTest").toURL().toExternalForm(), SubMonitor.convert(getMonitor()));
fail("1.0");//should have failed
} catch (MalformedURLException e) {
fail("0.99", e);
} catch (URISyntaxException e) {
fail("0.98", e);
} catch (IOException e) {
//expected
} catch (Exception e) {
fail("0.97", e);
}
}
/**
* Tests loading an install description file relative to the running instance.
*/
public void testLoadMissingRelative() {
try {
InstallDescriptionParser.createDescription(null, SubMonitor.convert(getMonitor()));
} catch (RuntimeException expected) {
return;
} catch (Exception e) {
fail("0.9");
}
fail("1.0");//should have failed
}
/**
* Tests loading the install description file for the Eclipse project SDK.
*/
public void testLoadSDKDescription() {
InstallDescription description = loadDescription("sdk-installer.properties");
URI[] artifactRepositories = description.getArtifactRepositories();
assertEquals("1.0", 1, artifactRepositories.length);
assertEquals("1.1", "http://update.eclipse.org/eclipse/testUpdates/", artifactRepositories[0].toString());
URI[] metadataRepositories = description.getMetadataRepositories();
assertEquals("1.2", 1, metadataRepositories.length);
assertEquals("1.3", "http://update.eclipse.org/eclipse/testUpdates/", metadataRepositories[0].toString());
assertEquals("1.4", "tooling", description.getProfileProperties().get("eclipse.p2.flavor"));
assertEquals("1.5", "Eclipse SDK", description.getProductName());
assertEquals("1.5", "eclipse", description.getLauncherName());
IVersionedId[] roots = description.getRoots();
assertEquals("1.7", 1, roots.length);
assertEquals("1.8", "sdk", roots[0].getId());
assertTrue("1.9", description.isAutoStart());
}
}