blob: 5a4df10b7289902901f3e45dc4eea93319265805 [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.extensionlocation;
import org.eclipse.equinox.p2.core.ProvisionException;
import java.io.File;
import java.io.IOException;
import java.net.*;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.equinox.internal.p2.extensionlocation.Constants;
import org.eclipse.equinox.internal.p2.extensionlocation.ExtensionLocationArtifactRepositoryFactory;
import org.eclipse.equinox.p2.repository.IRepositoryManager;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
import org.eclipse.equinox.p2.tests.TestActivator;
public class ExtensionLocationArtifactRepositoryFactoryTest extends AbstractProvisioningTest {
private File tempDirectory;
private ExtensionLocationArtifactRepositoryFactory factory;
public ExtensionLocationArtifactRepositoryFactoryTest(String name) {
super(name);
}
protected void tearDown() throws Exception {
delete(tempDirectory);
super.tearDown();
}
protected void setUp() throws Exception {
super.setUp();
String tempDir = System.getProperty("java.io.tmpdir");
tempDirectory = new File(tempDir, "extensionlocationtest");
delete(tempDirectory);
tempDirectory.mkdirs();
factory = new ExtensionLocationArtifactRepositoryFactory();
}
public static File getFile(String path) throws IOException {
URL fileURL = TestActivator.getContext().getBundle().getEntry(path);
return new File(FileLocator.toFileURL(fileURL).getPath());
}
public void testNonFileURL() {
try {
URI nonFileURL = new URI("http://www.eclipse.org");
factory.load(nonFileURL, 0, getMonitor());
fail("0.1");
} catch (ProvisionException e) {
assertEquals("0.5", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode());
} catch (URISyntaxException e) {
fail("0.99", e);
}
}
public void testNonExistentFile() {
File directory = new File(tempDirectory, "nonexistent");
delete(directory);
try {
factory.load(directory.toURI(), 0, getMonitor());
fail("0.1");
} catch (ProvisionException e) {
assertEquals("0.5", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode());
}
}
public void testNotDirectory() {
File file = new File(tempDirectory, "exists.file");
try {
file.createNewFile();
factory.load(file.toURI(), 0, getMonitor());
fail("0.1");
} catch (ProvisionException e) {
assertEquals("0.5", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode());
} catch (MalformedURLException e) {
fail("0.99", e);
} catch (IOException e) {
fail("0.100", e);
}
}
public void testNoFeatureOrPluginsDirectory() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
try {
factory.load(directory.toURI(), 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
public void testEmptyFeatureAndPluginsDirectory() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
new File(directory, "plugins").mkdir();
new File(directory, "features").mkdir();
try {
factory.load(directory.toURI(), 0, getMonitor());
} catch (ProvisionException e) {
fail("0.1", e);
}
}
public void testEmptyFeaturesDirectory() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
new File(directory, "features").mkdir();
try {
factory.load(directory.toURI(), 0, getMonitor());
} catch (ProvisionException e) {
fail("0.1", e);
}
}
public void testEmptyPluginsDirectory() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
new File(directory, "plugins").mkdir();
try {
factory.load(directory.toURI(), 0, getMonitor());
} catch (ProvisionException e) {
fail("0.1", e);
}
}
public void testEclipseBaseEmptyFeatureAndPluginsDirectory() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File eclipseDirectory = new File(directory, "eclipse");
eclipseDirectory.mkdir();
new File(eclipseDirectory, "plugins").mkdir();
new File(eclipseDirectory, "features").mkdir();
try {
factory.load(directory.toURI(), 0, getMonitor());
} catch (ProvisionException e) {
fail("0.1", e);
}
}
public void testNotEclipseBaseEmptyFeatureAndPluginsDirectory() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File eclipseDirectory = new File(directory, "noteclipse");
eclipseDirectory.mkdir();
new File(eclipseDirectory, "plugins").mkdir();
new File(eclipseDirectory, "features").mkdir();
try {
factory.load(directory.toURI(), 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
public void testNormalFeaturesandPluginsDirectory() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory);
URI location = directory.toURI();
try {
IArtifactRepository repo = factory.load(location, 0, getMonitor());
if (getArtifactKeyCount(repo) != 2)
fail("2.1");
} catch (ProvisionException ex) {
fail("2.0");
}
}
public void testNormalFeaturesDirectory() {
File directory = new File(tempDirectory, "exists/features");
directory.mkdirs();
File features = new File(directory, "features");
features.mkdir();
copy("1.0", getTestData("1.1", "/testData/extensionlocation/features"), features);
URI location = directory.toURI();
try {
IArtifactRepository repo = factory.load(location, 0, getMonitor());
if (getArtifactKeyCount(repo) != 1)
fail("2.1");
} catch (ProvisionException ex) {
fail("2.0");
}
}
public void testNormalPluginsDirectory() {
File directory = new File(tempDirectory, "exists/plugins");
directory.mkdirs();
File plugins = new File(directory, "plugins");
plugins.mkdir();
copy("1.0", getTestData("1.1", "/testData/extensionlocation/plugins"), plugins);
URI location = directory.toURI();
try {
IArtifactRepository repo = factory.load(location, 0, getMonitor());
if (getArtifactKeyCount(repo) != 1)
fail("2.1");
} catch (ProvisionException ex) {
fail("2.0");
}
}
public void testEclipseBaseNormalFeaturesandPluginsDirectory() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File eclipseDirectory = new File(directory, "eclipse");
copy("1.1", getTestData("1.1", "/testData/extensionlocation"), eclipseDirectory);
try {
IArtifactRepository repo = factory.load(directory.toURI(), 0, getMonitor());
if (getArtifactKeyCount(repo) != 2)
fail("1.0");
} catch (ProvisionException e) {
fail("0.5", e);
}
}
public void testEclipseBaseModifiableRepository() {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File eclipseDirectory = new File(directory, "eclipse");
copy("1.1", getTestData("1.1", "/testData/extensionlocation"), eclipseDirectory);
try {
IArtifactRepository repo = factory.load(directory.toURI(), IRepositoryManager.REPOSITORY_HINT_MODIFIABLE, getMonitor());
assertNull("1.0", repo);
} catch (ProvisionException e) {
fail("0.5", e);
}
}
public void testUpdateSiteXMLURL() {
File site = getTestData("0.1", "/testData/updatesite/site");
try {
factory.load(site.toURI(), 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
public void testXXXSiteXXXXMLURL() {
File site = getTestData("0.1", "/testData/updatesite/xxxsitexxx");
try {
factory.load(site.toURI(), 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
public void testArtifactsXMLFeaturesandPluginsDirectory() throws IOException {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File artifactsXML = new File(directory, "artifacts.xml");
artifactsXML.createNewFile();
copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory);
URI location = directory.toURI();
try {
factory.load(location, 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
public void testArtifactsXMLFeaturesandPluginsDirectoryWithExtensionLocation() throws IOException {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File artifactsXML = new File(directory, "artifacts.xml");
artifactsXML.createNewFile();
copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory);
File extensionLocation = new File(tempDirectory.getAbsolutePath() + Constants.EXTENSION_LOCATION);
URI location = extensionLocation.toURI();
try {
factory.load(location, 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
public void testContentXMLFeaturesandPluginsDirectory() throws IOException {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File contentXML = new File(directory, "content.xml");
contentXML.createNewFile();
copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory);
URI location = directory.toURI();
try {
factory.load(location, 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
public void testCompositeArtifactsXMLFeaturesandPluginsDirectory() throws IOException {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File compositeArtifactsXML = new File(directory, "compositeArtifacts.xml");
compositeArtifactsXML.createNewFile();
copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory);
URI location = directory.toURI();
try {
factory.load(location, 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
public void testCompositeContentXMLFeaturesandPluginsDirectory() throws IOException {
File directory = new File(tempDirectory, "exists");
directory.mkdirs();
File compositeContentXML = new File(directory, "compositeContent.xml");
compositeContentXML.createNewFile();
copy("1.0", getTestData("1.1", "/testData/extensionlocation"), directory);
URI location = directory.toURI();
try {
factory.load(location, 0, getMonitor());
} catch (ProvisionException e) {
if (e.getStatus().getCode() == ProvisionException.REPOSITORY_NOT_FOUND)
return;
}
fail("1.0");
}
}