diff options
author | Pascal Rapicault | 2009-04-29 19:25:16 +0000 |
---|---|---|
committer | Pascal Rapicault | 2009-04-29 19:25:16 +0000 |
commit | 6c0796ef4acc9cf42114bb30093045230a03151f (patch) | |
tree | 60d68195d0ce7400e638e07c7f4f977215f1476e | |
parent | ba712139afe03ba316cdd1aff7ca2c637006a999 (diff) | |
download | rt.equinox.p2-6c0796ef4acc9cf42114bb30093045230a03151f.tar.gz rt.equinox.p2-6c0796ef4acc9cf42114bb30093045230a03151f.tar.xz rt.equinox.p2-6c0796ef4acc9cf42114bb30093045230a03151f.zip |
Bug 272719 - [repository] root cause of failure is hidden when merging processing steps
3 files changed, 184 insertions, 5 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractWrappedArtifactRepository.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractWrappedArtifactRepository.java new file mode 100644 index 000000000..86225b6f8 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractWrappedArtifactRepository.java @@ -0,0 +1,123 @@ +package org.eclipse.equinox.p2.tests; + +import java.io.OutputStream; +import java.net.URI; +import java.util.Map; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.equinox.internal.provisional.p2.artifact.repository.*; +import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.internal.provisional.p2.metadata.IArtifactKey; + +public class AbstractWrappedArtifactRepository implements IArtifactRepository { + + IArtifactRepository delegate; + + public AbstractWrappedArtifactRepository(IArtifactRepository repo) { + delegate = repo; + } + + public void addDescriptor(IArtifactDescriptor descriptor) { + delegate.addDescriptor(descriptor); + } + + public void addDescriptors(IArtifactDescriptor[] descriptors) { + delegate.addDescriptors(descriptors); + } + + public boolean contains(IArtifactDescriptor descriptor) { + return delegate.contains(descriptor); + } + + public boolean contains(IArtifactKey key) { + return delegate.contains(key); + } + + public IStatus getArtifact(IArtifactDescriptor descriptor, OutputStream destination, IProgressMonitor monitor) { + return delegate.getArtifact(descriptor, destination, monitor); + } + + public IArtifactDescriptor[] getArtifactDescriptors(IArtifactKey key) { + return delegate.getArtifactDescriptors(key); + } + + public IArtifactKey[] getArtifactKeys() { + return delegate.getArtifactKeys(); + } + + public IStatus getArtifacts(IArtifactRequest[] requests, IProgressMonitor monitor) { + return delegate.getArtifacts(requests, monitor); + } + + public OutputStream getOutputStream(IArtifactDescriptor descriptor) throws ProvisionException { + return delegate.getOutputStream(descriptor); + } + + public IStatus getRawArtifact(IArtifactDescriptor descriptor, OutputStream destination, IProgressMonitor monitor) { + return delegate.getRawArtifact(descriptor, destination, monitor); + } + + public void removeAll() { + delegate.removeAll(); + } + + public void removeDescriptor(IArtifactDescriptor descriptor) { + delegate.removeDescriptor(descriptor); + } + + public void removeDescriptor(IArtifactKey key) { + delegate.removeDescriptor(key); + } + + public String getDescription() { + return delegate.getDescription(); + } + + public URI getLocation() { + return delegate.getLocation(); + } + + public String getName() { + return delegate.getName(); + } + + public Map getProperties() { + return delegate.getProperties(); + } + + public String getProvider() { + return delegate.getProvider(); + } + + public String getType() { + return delegate.getType(); + } + + public String getVersion() { + return delegate.getVersion(); + } + + public boolean isModifiable() { + return delegate.isModifiable(); + } + + public void setDescription(String description) { + delegate.setDescription(description); + } + + public void setName(String name) { + delegate.setName(name); + } + + public String setProperty(String key, String value) { + return delegate.setProperty(key, value); + } + + public void setProvider(String provider) { + delegate.setProvider(provider); + } + + public Object getAdapter(Class adapter) { + return delegate.getAdapter(adapter); + } +} diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/MirrorRequestTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/MirrorRequestTest.java index 6ce85ed92..555a9c9b3 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/MirrorRequestTest.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/MirrorRequestTest.java @@ -30,12 +30,14 @@ import org.eclipse.equinox.internal.provisional.p2.repository.IRepository; import org.eclipse.equinox.internal.provisional.spi.p2.artifact.repository.AbstractArtifactRepository; import org.eclipse.equinox.internal.provisional.spi.p2.repository.AbstractRepository; import org.eclipse.equinox.p2.tests.AbstractProvisioningTest; +import org.eclipse.equinox.p2.tests.AbstractWrappedArtifactRepository; import org.w3c.dom.*; public class MirrorRequestTest extends AbstractProvisioningTest { private static final String testDataLocation = "testData/artifactRepo/emptyJarRepo"; File targetLocation; IArtifactRepository targetRepository, sourceRepository; + URI destination, failedOptimized; public void setUp() throws Exception { super.setUp(); @@ -46,16 +48,21 @@ public class MirrorRequestTest extends AbstractProvisioningTest { IArtifactRepositoryManager mgr = getArtifactRepositoryManager(); sourceRepository = mgr.loadRepository((getTestData("EmptyJar repo", testDataLocation).toURI()), null); - + failedOptimized = URIUtil.toJarURI(getTestData("Error loading test data", "testData/mirror/invalidPackedMissingCanonical.zip").toURI(), null); + destination = getTempFolder().toURI(); } protected void tearDown() throws Exception { + getArtifactRepositoryManager().removeRepository(destination); + getArtifactRepositoryManager().removeRepository(failedOptimized); + getArtifactRepositoryManager().removeRepository(targetLocation.toURI()); AbstractProvisioningTest.delete(targetLocation); + delete(new File(destination)); super.tearDown(); } public void testInvalidZipFileInTheSource() { - IArtifactKey key = new ArtifactKey("org.eclipse.update.feature", "HelloWorldFeature", new Version(1, 0, 0)); + IArtifactKey key = new ArtifactKey("org.eclipse.update.feature", "HelloWorldFeature", Version.createOSGi(1, 0, 0)); Properties targetProperties = new Properties(); targetProperties.put("artifact.folder", "true"); MirrorRequest request = new MirrorRequest(key, targetRepository, null, targetProperties); @@ -68,7 +75,7 @@ public class MirrorRequestTest extends AbstractProvisioningTest { } public void testMissingArtifact() { - IArtifactKey key = new ArtifactKey("org.eclipse.update.feature", "Missing", new Version(1, 0, 0)); + IArtifactKey key = new ArtifactKey("org.eclipse.update.feature", "Missing", Version.createOSGi(1, 0, 0)); Properties targetProperties = new Properties(); targetProperties.put("artifact.folder", "true"); MirrorRequest request = new MirrorRequest(key, targetRepository, null, targetProperties); @@ -83,7 +90,7 @@ public class MirrorRequestTest extends AbstractProvisioningTest { public void testFailToCanonical() { RemoteRepo src = new RemoteRepo((SimpleArtifactRepository) sourceRepository); - IArtifactKey key = new ArtifactKey("test.txt", "fail_to_canonical", new Version("1.0.0")); + IArtifactKey key = new ArtifactKey("test.txt", "fail_to_canonical", Version.parseVersion("1.0.0")); MirrorRequest request = new MirrorRequest(key, targetRepository, null, null); request.setSourceRepository(src); request.perform(new NullProgressMonitor()); @@ -98,7 +105,7 @@ public class MirrorRequestTest extends AbstractProvisioningTest { OrderedMirrorSelector selector = new OrderedMirrorSelector(sourceRepository); // call test - IArtifactKey key = new ArtifactKey("test.txt", "HelloWorldText", new Version("1.0.0")); + IArtifactKey key = new ArtifactKey("test.txt", "HelloWorldText", Version.parseVersion("1.0.0")); MirrorRequest request = new MirrorRequest(key, targetRepository, null, null); request.setSourceRepository(sourceRepository); request.perform(new NullProgressMonitor()); @@ -109,6 +116,55 @@ public class MirrorRequestTest extends AbstractProvisioningTest { assertTrue("All mirrors utilized", selector.index == selector.mirrors.length); } + public void testFailedOptimizedMissingCanonical() { + + try { + IArtifactRepository source = new AbstractWrappedArtifactRepository(getArtifactRepositoryManager().loadRepository(failedOptimized, new NullProgressMonitor())) { + public URI getLocation() { + try { + return new URI("http://nowhere"); + } catch (URISyntaxException e) { + fail("Failed to create URI", e); + return null; + } + } + }; + IArtifactRepository target = getArtifactRepositoryManager().createRepository(destination, "Destination", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, null); + + IArtifactKey key = new ArtifactKey("osgi.bundle", "org.eclipse.ve.jfc", Version.parseVersion("1.4.0.HEAD")); + MirrorRequest req = new MirrorRequest(key, target, null, null); + req.setSourceRepository(source); + + req.perform(new NullProgressMonitor()); + IStatus result = req.getResult(); + assertTrue("MirrorRequest should have failed", result.matches(IStatus.ERROR)); + assertEquals("Result should contain two failures", 2, result.getChildren().length); + assertStatusContains("Return status does not contain Signature Verification failure", result, "Invalid content:"); + assertStatusContains("Return status does not contain Missing Artifact status", result, "Artifact not found:"); + } catch (ProvisionException e) { + fail("Failed to load repositories", e); + } + } + + protected static void assertStatusContains(String message, IStatus status, String statusString) { + if (!statusContains(status, statusString)) + fail(message); + } + + private static boolean statusContains(IStatus status, String statusString) { + if (status.getMessage().indexOf(statusString) != -1) + return true; + if (!status.isMultiStatus()) + return false; + + IStatus[] children = status.getChildren(); + for (int i = 0; i < children.length; i++) + if (statusContains(children[i], statusString)) + return true; + + return false; + } + // Repository which misleads about its location protected class RemoteRepo extends AbstractArtifactRepository { SimpleArtifactRepository delegate; diff --git a/bundles/org.eclipse.equinox.p2.tests/testData/mirror/invalidPackedMissingCanonical.zip b/bundles/org.eclipse.equinox.p2.tests/testData/mirror/invalidPackedMissingCanonical.zip Binary files differnew file mode 100644 index 000000000..e2e4f6242 --- /dev/null +++ b/bundles/org.eclipse.equinox.p2.tests/testData/mirror/invalidPackedMissingCanonical.zip |