Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoribull2010-02-04 23:58:40 +0000
committeribull2010-02-04 23:58:40 +0000
commit9ca2c2a2a099f684074bbd83ffe0558ff5e56f64 (patch)
treef3103f43b46f6384c43e93c39529c0a610d78740 /bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox
parent2476ddbea1cf40a85520fb9168aa59e2d68b48f2 (diff)
downloadrt.equinox.p2-9ca2c2a2a099f684074bbd83ffe0558ff5e56f64.tar.gz
rt.equinox.p2-9ca2c2a2a099f684074bbd83ffe0558ff5e56f64.tar.xz
rt.equinox.p2-9ca2c2a2a099f684074bbd83ffe0558ff5e56f64.zip
bug 274025: [publisher] p2 metadata generator does not scale
https://bugs.eclipse.org/bugs/show_bug.cgi?id=274025 This adds a batch process to ArtifactRepository which, in the simple artifact repository, will do the save at the end. The publisher is configured to use the batch process now.
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox')
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/AbstractWrappedArtifactRepository.java4
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java1
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/BatchExecuteArtifactRepositoryTest.java523
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java5
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java9
5 files changed, 538 insertions, 4 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
index 0343fb74b..fe5a64c35 100644
--- 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
@@ -139,4 +139,8 @@ public class AbstractWrappedArtifactRepository implements IArtifactRepository {
public IQueryResult<IArtifactKey> query(IQuery<IArtifactKey> query, IProgressMonitor monitor) {
return delegate.query(query, monitor);
}
+
+ public IStatus executeBatch(Runnable runnable) {
+ return delegate.executeBatch(runnable);
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java
index 9449b099f..8c6cb05a2 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/AllTests.java
@@ -23,6 +23,7 @@ public class AllTests extends TestCase {
suite.addTestSuite(ArtifactRepositoryManagerTest.class);
suite.addTestSuite(ArtifactRepositoryMissingSizeData.class);
suite.addTestSuite(ArtifactRepositoryWithReferenceDescriptors.class);
+ suite.addTestSuite(BatchExecuteArtifactRepositoryTest.class);
suite.addTestSuite(Bug252308.class);
suite.addTestSuite(Bug265577.class);
suite.addTestSuite(CompositeArtifactRepositoryTest.class);
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/BatchExecuteArtifactRepositoryTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/BatchExecuteArtifactRepositoryTest.java
new file mode 100644
index 000000000..adf8ba30d
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/BatchExecuteArtifactRepositoryTest.java
@@ -0,0 +1,523 @@
+/*******************************************************************************
+* Copyright (c) 2009 EclipseSource 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:
+* EclipseSource - initial API and implementation
+******************************************************************************/
+package org.eclipse.equinox.p2.tests.artifact.repository;
+
+import java.io.*;
+import java.lang.reflect.Field;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository;
+import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactDescriptor;
+import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository;
+import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
+import org.eclipse.equinox.p2.metadata.Version;
+import org.eclipse.equinox.p2.repository.artifact.*;
+import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
+
+/**
+ * This tests Batch Execution for Artifact Repositories
+ */
+public class BatchExecuteArtifactRepositoryTest extends AbstractProvisioningTest {
+
+ //artifact repository to remove on tear down
+ private File repositoryFile = null;
+ private URI repositoryURI = null;
+
+ private IArtifactDescriptor createDescriptor(String classifier, String id, Version version) {
+ return new SimpleArtifactDescriptor(new ArtifactKey(classifier, id, version));
+ }
+
+ /*
+ * This tests that in the normal case, the batch process runs fine
+ */
+ public void testAdd() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ final SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+ final URI artifactXML = new URI(repositoryFile.toURI().toString() + "/artifacts.xml");
+ IStatus status = repo.executeBatch(new Runnable() {
+ public void run() {
+ repo.addDescriptor(createDescriptor("foo", "foo", Version.emptyVersion));
+ try {
+ assertFalse("1.0", fileContainsString(artifactXML, "foo"));
+ } catch (IOException e) {
+ fail("0.99");
+ }
+ }
+ });
+ assertTrue(status.isOK());
+ assertTrue("1.0", fileContainsString(artifactXML, "foo"));
+ assertEquals("2.0", 1, repo.query(new ArtifactKeyQuery("foo", "foo", null), new NullProgressMonitor()).toSet().size());
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This tests 3 adds
+ */
+ public void testMultiAdd() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ final SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+ final URI artifactXML = new URI(repositoryFile.toURI().toString() + "/artifacts.xml");
+ IStatus status = repo.executeBatch(new Runnable() {
+ public void run() {
+ repo.addDescriptor(createDescriptor("foo", "foo", Version.emptyVersion));
+ repo.addDescriptor(createDescriptor("bar", "bar", Version.emptyVersion));
+ repo.addDescriptor(createDescriptor("baz", "baz", Version.emptyVersion));
+ try {
+ assertFalse("1.0", fileContainsString(artifactXML, "foo"));
+ assertFalse("1.0", fileContainsString(artifactXML, "bar"));
+ assertFalse("1.0", fileContainsString(artifactXML, "baz"));
+ } catch (IOException e) {
+ fail("0.99");
+ }
+ }
+ });
+ assertTrue(status.isOK());
+ assertEquals("1.0", 1, repo.query(new ArtifactKeyQuery("foo", "foo", null), new NullProgressMonitor()).toSet().size());
+ assertEquals("1.1", 1, repo.query(new ArtifactKeyQuery("bar", "bar", null), new NullProgressMonitor()).toSet().size());
+ assertEquals("1.2", 1, repo.query(new ArtifactKeyQuery("baz", "baz", null), new NullProgressMonitor()).toSet().size());
+ assertTrue("2.0", fileContainsString(artifactXML, "foo"));
+ assertTrue("2.1", fileContainsString(artifactXML, "bar"));
+ assertTrue("2.2", fileContainsString(artifactXML, "baz"));
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This tests multiple adds with an exception thrown. Makes sure that the descriptors are added
+ */
+ public void testMultiAddWithException() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ final SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+ final URI artifactXML = new URI(repositoryFile.toURI().toString() + "/artifacts.xml");
+ IStatus status = repo.executeBatch(new Runnable() {
+ public void run() {
+ repo.addDescriptor(createDescriptor("foo", "foo", Version.emptyVersion));
+ repo.addDescriptor(createDescriptor("bar", "bar", Version.emptyVersion));
+ throw new RuntimeException();
+ }
+ });
+ assertFalse(status.isOK());
+ assertEquals("1.0", 1, repo.query(new ArtifactKeyQuery("foo", "foo", null), new NullProgressMonitor()).toSet().size());
+ assertEquals("1.1", 1, repo.query(new ArtifactKeyQuery("bar", "bar", null), new NullProgressMonitor()).toSet().size());
+ assertTrue("2.0", fileContainsString(artifactXML, "foo"));
+ assertTrue("2.1", fileContainsString(artifactXML, "bar"));
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This tests multiple adds with an exception thrown. Makes sure that the descriptors are added
+ */
+ public void testAddAndRemove() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ final SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+ final URI artifactXML = new URI(repositoryFile.toURI().toString() + "/artifacts.xml");
+ IStatus status = repo.executeBatch(new Runnable() {
+ public void run() {
+ IArtifactDescriptor foo = createDescriptor("foo", "foo", Version.emptyVersion);
+ repo.addDescriptor(foo);
+ repo.addDescriptor(createDescriptor("bar", "bar", Version.emptyVersion));
+ repo.removeDescriptor(foo);
+ }
+ });
+ assertTrue(status.isOK());
+ assertEquals("1.0", 1, repo.query(new ArtifactKeyQuery("bar", "bar", null), new NullProgressMonitor()).toSet().size());
+ assertEquals("1.1", 0, repo.query(new ArtifactKeyQuery("foo", "foo", null), new NullProgressMonitor()).toSet().size());
+ assertFalse("2.0", fileContainsString(artifactXML, "foo"));
+ assertTrue("2.1", fileContainsString(artifactXML, "bar"));
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This tests multiple adds with an exception thrown. Makes sure that the descriptors are added
+ */
+ public void testMultiAddAndRemove() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ final SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+ final URI artifactXML = new URI(repositoryFile.toURI().toString() + "/artifacts.xml");
+ IStatus status = repo.executeBatch(new Runnable() {
+ public void run() {
+ repo.addDescriptor(createDescriptor("1", "1", Version.emptyVersion));
+ repo.addDescriptor(createDescriptor("2", "2", Version.emptyVersion));
+ repo.addDescriptor(createDescriptor("3", "3", Version.emptyVersion));
+ IArtifactDescriptor foo = createDescriptor("foo", "foo", Version.emptyVersion);
+ repo.addDescriptor(foo);
+ repo.addDescriptor(createDescriptor("bar", "bar", Version.emptyVersion));
+ repo.removeDescriptor(foo);
+ }
+ });
+ assertTrue(status.isOK());
+ assertEquals("1.0", 4, repo.query(new ArtifactKeyQuery(null, null, null), new NullProgressMonitor()).toSet().size());
+ assertFalse("2.0", fileContainsString(artifactXML, "foo"));
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ boolean fileContainsString(URI location, String string) throws IOException {
+ StringBuffer buffer = new StringBuffer();
+ BufferedReader reader = new BufferedReader(new FileReader(new File(location)));
+ while (reader.ready())
+ buffer.append(reader.readLine());
+ return buffer.toString().contains(string);
+ }
+
+ /*
+ * This tests that in the normal case, the batch process runs fine
+ */
+ public void testBatchProcessingOK() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+ IStatus status = repo.executeBatch(new Runnable() {
+ public void run() {
+ // empty
+ }
+ });
+ assertTrue(status.isOK());
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ class FailingSimpleArtifactRepository extends SimpleArtifactRepository {
+ boolean executeBatch = false;
+
+ /**
+ * @param repositoryName
+ * @param location
+ * @param properties
+ */
+ public FailingSimpleArtifactRepository(String repositoryName, URI location, Map properties) {
+ super(repositoryName, location, properties);
+ }
+
+ public IStatus executeBatch(Runnable runnable) {
+ executeBatch = true;
+ return super.executeBatch(runnable);
+ }
+
+ public void save() {
+ if (executeBatch)
+ throw new RuntimeException("foo");
+ }
+ }
+
+ class FailingCompositeArtifactRepository extends CompositeArtifactRepository {
+ boolean executeBatch = false;
+
+ /**
+ * @param repositoryName
+ * @param location
+ * @param properties
+ */
+ public FailingCompositeArtifactRepository(IArtifactRepositoryManager manager, String repositoryName, URI location, Map properties) {
+ super(manager, location, repositoryName, properties);
+ }
+
+ public IStatus executeBatch(Runnable runnable) {
+ executeBatch = true;
+ return super.executeBatch(runnable);
+ }
+
+ public void save() {
+ if (executeBatch)
+ throw new RuntimeException("foo");
+ }
+ }
+
+ /*
+ * This tests that exceptions are properly propagated for a SimpleArtifactRepository
+ */
+ public void testBatchProcessingExceptionsSimple() {
+ try {
+ SimpleArtifactRepository simpleArtifactRepository = new FailingSimpleArtifactRepository("foo", new URI("http://foo.bar"), null);
+
+ IStatus status = simpleArtifactRepository.executeBatch(new Runnable() {
+ public void run() {
+ throw new RuntimeException("bar");
+ }
+ });
+ assertFalse(status.isOK());
+ assertEquals("foo", status.getException().getMessage());
+ assertEquals(1, status.getChildren().length);
+ assertEquals("bar", status.getChildren()[0].getMessage());
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This tests that exceptions are properly propagated for a SimpleArtifactRepository
+ */
+ public void testBatchProcessingSaveExceptionSimple() {
+ try {
+ SimpleArtifactRepository simpleArtifactRepository = new FailingSimpleArtifactRepository("foo", new URI("http://foo.bar"), null);
+
+ IStatus status = simpleArtifactRepository.executeBatch(new Runnable() {
+ public void run() {
+ // empty
+ }
+ });
+ assertFalse(status.isOK());
+ assertEquals("foo", status.getException().getMessage());
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This tests that exceptions are properly propagated for a CompositeRepository
+ */
+ public void testBatchProcessingExceptionsComposite() {
+ try {
+ FailingCompositeArtifactRepository compositeArtifactRepository = new FailingCompositeArtifactRepository(getArtifactRepositoryManager(), "foo", new URI("http://foo.bar"), null);
+
+ IStatus status = compositeArtifactRepository.executeBatch(new Runnable() {
+ public void run() {
+ throw new RuntimeException("bar");
+ }
+ });
+ assertFalse(status.isOK());
+ assertEquals("foo", status.getException().getMessage());
+ assertEquals(1, status.getChildren().length);
+ assertEquals("bar", status.getChildren()[0].getMessage());
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This tests that exceptions are properly propagated for a CompositeRepository
+ */
+ public void testBatchProcessingSaveExceptionComposite() {
+ try {
+ FailingCompositeArtifactRepository compositeArtifactRepository = new FailingCompositeArtifactRepository(getArtifactRepositoryManager(), "foo", new URI("http://foo.bar"), null);
+
+ IStatus status = compositeArtifactRepository.executeBatch(new Runnable() {
+ public void run() {
+ // empty
+ }
+ });
+ assertFalse(status.isOK());
+ assertEquals("foo", status.getException().getMessage());
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ class TrackSavignSimpleArtifactRepository extends SimpleArtifactRepository {
+ boolean executeBatch = false;
+ public boolean didSave = false;
+
+ /**
+ * @param repositoryName
+ * @param location
+ * @param properties
+ */
+ public TrackSavignSimpleArtifactRepository(String repositoryName, URI location, Map properties) {
+ super(repositoryName, location, properties);
+ }
+
+ public IStatus executeBatch(Runnable runnable) {
+ executeBatch = true;
+ return super.executeBatch(runnable);
+ }
+
+ public void save() {
+ if (executeBatch)
+ didSave = true;
+ }
+ }
+
+ /*
+ * This test ensure that a repository did in fact save the results,
+ * if there was no exception
+ */
+ public void testBatchProcessingTrackSaving() {
+ try {
+ TrackSavignSimpleArtifactRepository simpleArtifactRepository = new TrackSavignSimpleArtifactRepository("foo", new URI("http://foo.bar"), null);
+ simpleArtifactRepository.executeBatch(new Runnable() {
+ public void run() {
+ //do nothing;
+ }
+ });
+ assertTrue(simpleArtifactRepository.didSave);
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This test ensures that a repository did in fact save the results, even
+ * if there was an exception
+ */
+ public void testBatchProcessingTrackSavingException() {
+ try {
+ TrackSavignSimpleArtifactRepository simpleArtifactRepository = new TrackSavignSimpleArtifactRepository("foo", new URI("http://foo.bar"), null);
+ simpleArtifactRepository.executeBatch(new Runnable() {
+ public void run() {
+ throw new RuntimeException();
+ }
+ });
+ assertTrue(simpleArtifactRepository.didSave);
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This test ensures that the simple repository resets the disableSave flag
+ * even if there is an exception
+ */
+ public void testDisableSaveFlagResetSimple() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+ repo.executeBatch(new Runnable() {
+ public void run() {
+ throw new RuntimeException();
+ }
+ });
+ Field field = SimpleArtifactRepository.class.getDeclaredField("disableSave");
+ field.setAccessible(true);
+ boolean disableSave = field.getBoolean(repo);
+ assertFalse("1.0", disableSave);
+
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This test ensure that the simple artifact repository disables the
+ * save flag during the batch process
+ */
+ public void testDisableSaveFlagDuringExecutionSimple() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ final SimpleArtifactRepository repo = (SimpleArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, properties);
+ repo.executeBatch(new Runnable() {
+ public void run() {
+ Field field;
+ try {
+ field = SimpleArtifactRepository.class.getDeclaredField("disableSave");
+ field.setAccessible(true);
+ boolean disableSave = field.getBoolean(repo);
+ assertTrue("1.0", disableSave);
+ } catch (SecurityException e) {
+ fail("1.1" + e.getMessage());
+ } catch (NoSuchFieldException e) {
+ // TODO Auto-generated catch block
+ fail("1.2" + e.getMessage());
+ } catch (IllegalArgumentException e) {
+ fail("1.2" + e.getMessage());
+ } catch (IllegalAccessException e) {
+ fail("1.2" + e.getMessage());
+ }
+ }
+ });
+
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /**
+ * This tests ensure that the composite repository sets the disableSave flag
+ * back, even if there is an exception
+ */
+ public void testDisableSaveFlagResetComposite() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ CompositeArtifactRepository repo = (CompositeArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_COMPOSITE_REPOSITORY, properties);
+ repo.executeBatch(new Runnable() {
+ public void run() {
+ throw new RuntimeException();
+ }
+ });
+ Field field = CompositeArtifactRepository.class.getDeclaredField("disableSave");
+ field.setAccessible(true);
+ boolean disableSave = field.getBoolean(repo);
+ assertFalse("1.0", disableSave);
+
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+ /*
+ * This test makes sure that the composite repository save is disabled during write
+ */
+ public void testDisableSaveFlagDuringExecutionComposite() {
+ try {
+ repositoryFile = getTempFolder();
+ repositoryURI = repositoryFile.toURI();
+ Map properties = new HashMap();
+ final CompositeArtifactRepository repo = (CompositeArtifactRepository) getArtifactRepositoryManager().createRepository(repositoryURI, "My Repo", IArtifactRepositoryManager.TYPE_COMPOSITE_REPOSITORY, properties);
+ repo.executeBatch(new Runnable() {
+ public void run() {
+ Field field;
+ try {
+ field = CompositeArtifactRepository.class.getDeclaredField("disableSave");
+ field.setAccessible(true);
+ boolean disableSave = field.getBoolean(repo);
+ assertTrue("1.0", disableSave);
+ } catch (SecurityException e) {
+ fail("1.1" + e.getMessage());
+ } catch (NoSuchFieldException e) {
+ // TODO Auto-generated catch block
+ fail("1.2" + e.getMessage());
+ } catch (IllegalArgumentException e) {
+ fail("1.2" + e.getMessage());
+ } catch (IllegalAccessException e) {
+ fail("1.2" + e.getMessage());
+ }
+ }
+ });
+
+ } catch (Exception e) {
+ fail("Test failed", e);
+ }
+ }
+
+}
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java
index ad1d357d1..75e0082ef 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/artifact/repository/SimpleArtifactRepositoryTest.java
@@ -12,9 +12,6 @@
*******************************************************************************/
package org.eclipse.equinox.p2.tests.artifact.repository;
-import org.eclipse.equinox.p2.metadata.Version;
-import org.eclipse.equinox.p2.metadata.VersionRange;
-
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
@@ -26,7 +23,7 @@ import org.eclipse.equinox.internal.p2.metadata.ArtifactKey;
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStep;
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.processing.ProcessingStepHandler;
import org.eclipse.equinox.p2.core.ProvisionException;
-import org.eclipse.equinox.p2.metadata.IArtifactKey;
+import org.eclipse.equinox.p2.metadata.*;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.IQueryable;
import org.eclipse.equinox.p2.repository.IRepository;
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java
index aef0693c2..85c4332eb 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/TestArtifactRepository.java
@@ -307,4 +307,13 @@ public class TestArtifactRepository implements IArtifactRepository {
}
};
}
+
+ public IStatus executeBatch(Runnable runnable) {
+ try {
+ runnable.run();
+ } catch (Exception e) {
+ return new Status(IStatus.ERROR, "org.eclipse.equinox.p2.tests.publisher", e.getMessage(), e);
+ }
+ return Status.OK_STATUS;
+ }
} \ No newline at end of file

Back to the top