/******************************************************************************* * 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 java.io.File; import java.io.IOException; import java.net.*; import org.eclipse.equinox.internal.p2.extensionlocation.Constants; import org.eclipse.equinox.internal.p2.extensionlocation.ExtensionLocationMetadataRepositoryFactory; import org.eclipse.equinox.p2.core.ProvisionException; import org.eclipse.equinox.p2.query.QueryUtil; import org.eclipse.equinox.p2.repository.IRepositoryManager; import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; public class ExtensionLocationMetadataRepositoryFactoryTest extends AbstractProvisioningTest { private File tempDirectory; private ExtensionLocationMetadataRepositoryFactory factory; public ExtensionLocationMetadataRepositoryFactoryTest(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 ExtensionLocationMetadataRepositoryFactory(); factory.setAgent(getAgent()); } 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.2", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode()); } catch (URISyntaxException e) { fail("0.3", 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.2", 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.2", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode()); } catch (MalformedURLException e) { fail("0.3", e); } catch (IOException e) { fail("0.4", e); } } public void testNoFeatureOrPluginsDirectory() { File directory = new File(tempDirectory, "exists"); directory.mkdirs(); try { factory.load(directory.toURI(), 0, getMonitor()); fail("0.1"); } catch (ProvisionException e) { assertEquals("0.2", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode()); } } 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"); } } 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"); } } 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"); } } 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"); } } 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()); fail("0.1"); } catch (ProvisionException e) { assertEquals("0.2", ProvisionException.REPOSITORY_NOT_FOUND, e.getStatus().getCode()); } } 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 { IMetadataRepository repo = factory.load(location, 0, getMonitor()); if (queryResultSize(repo.query(QueryUtil.createIUAnyQuery(), null)) != 3) fail("2.99"); } 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 { IMetadataRepository repo = factory.load(location, 0, getMonitor()); if (queryResultSize(repo.query(QueryUtil.createIUAnyQuery(), null)) != 2) fail("3.0"); } 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 { IMetadataRepository repo = factory.load(location, 0, getMonitor()); if (queryResultSize(repo.query(QueryUtil.createIUAnyQuery(), null)) != 1) fail("3.0"); } 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.0", getTestData("1.1", "/testData/extensionlocation"), eclipseDirectory); try { IMetadataRepository repo = factory.load(directory.toURI(), 0, getMonitor()); if (queryResultSize(repo.query(QueryUtil.createIUAnyQuery(), null)) != 3) fail("3.0"); } catch (ProvisionException e) { fail("2.0"); } } public void testEclipseBaseModifiableRepository() { File directory = new File(tempDirectory, "exists"); directory.mkdirs(); File eclipseDirectory = new File(directory, "eclipse"); copy("1.0", getTestData("1.1", "/testData/extensionlocation"), eclipseDirectory); try { IMetadataRepository repo = factory.load(directory.toURI(), IRepositoryManager.REPOSITORY_HINT_MODIFIABLE, getMonitor()); assertNull("3.0", repo); } catch (ProvisionException e) { fail("2.0"); } } 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"); } }