blob: 4a7c4f76350e03c3515007730f8343b06962db79 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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.ant;
import org.eclipse.equinox.p2.core.ProvisionException;
import java.io.File;
import java.net.URI;
import java.util.Iterator;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.equinox.internal.provisional.p2.metadata.query.InstallableUnitQuery;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.metadata.query.IQueryResult;
import org.eclipse.equinox.p2.repository.artifact.*;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.equinox.p2.tests.AbstractAntProvisioningTest;
public class Repo2RunnableTaskTests extends AbstractAntProvisioningTest {
private URI destination, source;
public void setUp() throws Exception {
source = getTestData("Error loading data", "testData/mirror/mirrorSourceRepo1 with space").toURI();
destination = getTestFolder(getName()).toURI();
super.setUp();
}
public void tearDown() throws Exception {
getArtifactRepositoryManager().removeRepository(source);
getMetadataRepositoryManager().removeRepository(source);
getArtifactRepositoryManager().removeRepository(destination);
getMetadataRepositoryManager().removeRepository(destination);
delete(new File(destination));
super.tearDown();
}
/*
* Test the Repo2RunnableTask functions as expected on a simple repository
*/
public void testRepo2Runnable() {
createRepo2RunnableTaskElement(TYPE_BOTH);
runAntTask();
assertEquals("Number of artifact keys differs", getArtifactKeyCount(source), getArtifactKeyCount(destination));
assertTrue("Unexpected format", expectedFormat(destination));
}
/*
* Test that when an IU is specified that it is used
*/
public void testRepo2RunnableSpecifiedIU() {
IInstallableUnit iu = null;
try {
IMetadataRepository repo = getMetadataRepositoryManager().loadRepository(source, new NullProgressMonitor());
IQueryResult ius = repo.query(new InstallableUnitQuery("helloworldfeature.feature.jar"), new NullProgressMonitor());
assertEquals("Expected number of IUs", 1, queryResultSize(ius));
iu = (IInstallableUnit) ius.iterator().next();
} catch (ProvisionException e) {
fail("Failed to obtain iu", e);
}
AntTaskElement task = createRepo2RunnableTaskElement(TYPE_BOTH);
task.addElement(createIUElement(iu));
runAntTask();
assertEquals("Number of artifact keys differs", iu.getArtifacts().size(), getArtifactKeyCount(destination));
assertTrue("Unexpected format", expectedFormat(destination));
}
public void testRepo2RunnableFailOnError() {
source = getTestData("Error loading data", "testData/mirror/mirrorSourceRepo3").toURI();
URI binary = getTestData("Error loading binary data", "testData/testRepos/binary.repo").toURI();
AntTaskElement mirror = new AntTaskElement("p2.mirror");
AntTaskElement sourceRepo = new AntTaskElement("source");
sourceRepo.addElement(getRepositoryElement(source, TYPE_BOTH));
sourceRepo.addElement(getRepositoryElement(binary, TYPE_BOTH));
mirror.addElement(sourceRepo);
mirror.addElement(getRepositoryElement(destination, TYPE_BOTH));
addTask(mirror);
AntTaskElement delete = new AntTaskElement("delete");
delete.addAttribute("file", getTestFolder(getName()) + "/plugins/helloworld_1.0.0.jar");
addTask(delete);
getArtifactRepositoryManager().removeRepository(binary);
getMetadataRepositoryManager().removeRepository(binary);
getArtifactRepositoryManager().removeRepository(source);
getMetadataRepositoryManager().removeRepository(source);
source = destination;
File destinationFile = new File(getTestFolder(getName()), "repo2");
destination = destinationFile.toURI();
AntTaskElement task = createRepo2RunnableTaskElement(TYPE_BOTH);
task.addAttribute("failOnError", "false");
runAntTask();
assertTrue(new File(destinationFile, "binary/f_root_1.0.0").exists());
}
/*
* Ensure that the output repository is of the expected type
*/
protected boolean expectedFormat(URI location) {
IArtifactRepository repo = null;
try {
repo = getArtifactRepositoryManager().loadRepository(location, new NullProgressMonitor());
} catch (ProvisionException e) {
fail("Failed to load repository", e);
}
IQueryResult keys = repo.query(ArtifactKeyQuery.ALL_KEYS, null);
for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
IArtifactKey key = (IArtifactKey) iterator.next();
IArtifactDescriptor[] descriptors = repo.getArtifactDescriptors(key);
for (int n = 0; n < descriptors.length; n++) {
IArtifactDescriptor desc = descriptors[n];
// Features should be unzipped, others should not be.
boolean isFolder = desc.getProperty("artifact.folder") != null ? Boolean.valueOf(desc.getProperty("artifact.folder")) : false;
if (key.getClassifier().equals(""))
assertTrue(desc + " is not a folder", isFolder);
else
assertFalse(desc + " is a folder", isFolder);
// Artifacts should not be packed
assertTrue("Artifact is still packed", !IArtifactDescriptor.FORMAT_PACKED.equals(desc.getProperty(IArtifactDescriptor.FORMAT)));
}
}
return true;
}
/*
* Create a simple AntTaskElement for the Repo2RunnableTask
*/
protected AntTaskElement createRepo2RunnableTaskElement() {
AntTaskElement task = new AntTaskElement("p2.repo2runnable");
addTask(task);
return task;
}
/*
* Create an AntTaskElement for the Repo2Runnabletask populated with the default source & destination
*/
protected AntTaskElement createRepo2RunnableTaskElement(String type) {
AntTaskElement task = createRepo2RunnableTaskElement();
task.addElement(getRepositoryElement(destination, type));
AntTaskElement sourceElement = new AntTaskElement("source");
sourceElement.addElement(getRepositoryElement(source, type));
task.addElement(sourceElement);
return task;
}
}